From 33547702f365439b2316579e8b6e06ca1ec1530d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 21 Jun 2022 20:12:58 -0600 Subject: [PATCH 001/186] readlink(2) does NUL-terminate the buffer, do it manually. Fixes a bug where the current working directory could include garbage in intercept mode using ptrace(2). --- src/exec_ptrace.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index dc00dd8af2..db70ec8551 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -595,11 +595,10 @@ getcwd_by_pid(pid_t pid, char *buf, size_t bufsize) len = snprintf(path, sizeof(path), "/proc/%d/cwd", (int)pid); if (len < sizeof(path)) { - len = readlink(path, buf, bufsize); + len = readlink(path, buf, bufsize - 1); if (len != (size_t)-1) { - /* Check for truncation. */ - if (len >= bufsize) - buf[bufsize - 1] = '\0'; + /* readlink(2) does not add the NUL for us. */ + buf[len] = '\0'; debug_return_bool(true); } } From e9c2695268ef54ff2ef40956122ee57ed1853535 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 21 Jun 2022 09:54:41 -0600 Subject: [PATCH 002/186] intercept_write: remove unused CD_USE_PTRACE code. It is not possible to end up in intercept_write when CD_USE_PTRACE is set. --- src/exec_intercept.c | 57 ++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index 6560d93cfb..9d630ea00e 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -872,38 +872,33 @@ intercept_write(int fd, struct intercept_closure *closure) closure->len = 0; closure->off = 0; - if (ISSET(closure->details->flags, CD_USE_PTRACE)) { - /* Ready for the next policy check from the tracer. */ - closure->state = RECV_POLICY_CHECK; - } else { - switch (closure->state) { - case RECV_HELLO_INITIAL: - /* Re-use event for the listener. */ - close(fd); - rc = sudo_ev_set(&closure->ev, closure->listen_sock, - SUDO_EV_READ|SUDO_EV_PERSIST, intercept_accept_cb, closure); - if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { - sudo_warn("%s", U_("unable to add event to queue")); - goto done; - } - closure->listen_sock = -1; - closure->state = RECV_CONNECTION; - accept_closure = closure; - break; - case POLICY_ACCEPT: - /* Re-use event to read InterceptHello from sudo_intercept.so ctor. */ - rc = sudo_ev_set(&closure->ev, fd, SUDO_EV_READ|SUDO_EV_PERSIST, - intercept_cb, closure); - if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { - sudo_warn("%s", U_("unable to add event to queue")); - goto done; - } - closure->state = RECV_HELLO; - break; - default: - /* Done with this connection. */ - intercept_connection_close(closure); + switch (closure->state) { + case RECV_HELLO_INITIAL: + /* Re-use event for the listener. */ + close(fd); + rc = sudo_ev_set(&closure->ev, closure->listen_sock, + SUDO_EV_READ|SUDO_EV_PERSIST, intercept_accept_cb, closure); + if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { + sudo_warn("%s", U_("unable to add event to queue")); + goto done; + } + closure->listen_sock = -1; + closure->state = RECV_CONNECTION; + accept_closure = closure; + break; + case POLICY_ACCEPT: + /* Re-use event to read InterceptHello from sudo_intercept.so ctor. */ + rc = sudo_ev_set(&closure->ev, fd, SUDO_EV_READ|SUDO_EV_PERSIST, + intercept_cb, closure); + if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { + sudo_warn("%s", U_("unable to add event to queue")); + goto done; } + closure->state = RECV_HELLO; + break; + default: + /* Done with this connection. */ + intercept_connection_close(closure); } ret = true; From f432209304e88a75e540f3a65b46890cfd795d08 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 27 Jun 2022 07:20:37 -0600 Subject: [PATCH 003/186] Include inttypes.h if stdint.h is not present. Bug #1035 --- src/exec_ptrace.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index db70ec8551..887846f3c2 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -29,8 +29,12 @@ #include #include #include +#if defined(HAVE_STDINT_H) +# include +#elif defined(HAVE_INTTYPES_H) +# include +#endif #include -#include #include #include #include From f5ac1317c429ad9289d348c36600106f97cee411 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 27 Jun 2022 12:48:03 -0600 Subject: [PATCH 004/186] Make sudo pass -Wmissing-prototypes --- configure | 2 +- configure.ac | 2 +- include/sudo_iolog.h | 2 +- include/sudo_util.h | 2 + lib/iolog/host_port.c | 1 + lib/iolog/regress/fuzz/fuzz_iolog_json.c | 2 + lib/iolog/regress/fuzz/fuzz_iolog_legacy.c | 2 + lib/iolog/regress/fuzz/fuzz_iolog_timing.c | 2 + .../regress/iolog_json/check_iolog_json.c | 2 +- .../regress/iolog_timing/check_iolog_timing.c | 4 +- lib/util/regress/fuzz/fuzz_sudo_conf.c | 2 + lib/util/regress/glob/globtest.c | 3 +- lib/util/regress/mktemp/mktemp_test.c | 6 +- lib/util/strtoid.c | 3 - logsrvd/logsrvd.c | 2 +- logsrvd/logsrvd_relay.c | 2 +- logsrvd/regress/fuzz/fuzz_logsrvd_conf.c | 2 + logsrvd/sendlog.c | 2 +- plugins/python/pyhelpers.c | 9 +- plugins/python/python_plugin_approval.c | 5 +- .../python/python_plugin_approval_multi.inc | 8 +- plugins/python/python_plugin_audit.c | 11 +-- plugins/python/python_plugin_audit_multi.inc | 8 +- plugins/python/python_plugin_common.c | 6 +- plugins/python/python_plugin_group.c | 6 +- plugins/python/python_plugin_io.c | 23 ++--- plugins/python/python_plugin_io_multi.inc | 20 ++--- plugins/python/python_plugin_policy.c | 6 +- .../python/regress/check_python_examples.c | 90 +++++++++---------- plugins/python/sudo_python_module.c | 6 +- plugins/sudoers/audit.c | 2 +- plugins/sudoers/getdate.c | 2 + plugins/sudoers/getdate.y | 2 + plugins/sudoers/gram.c | 6 +- plugins/sudoers/gram.y | 6 +- plugins/sudoers/iolog.c | 2 +- plugins/sudoers/log_client.c | 2 +- plugins/sudoers/regress/fuzz/fuzz_policy.c | 8 +- plugins/sudoers/regress/fuzz/fuzz_stubs.c | 2 + plugins/sudoers/regress/fuzz/fuzz_sudoers.c | 1 + .../sudoers/regress/fuzz/fuzz_sudoers_ldif.c | 1 + .../regress/iolog_plugin/check_iolog_plugin.c | 4 +- plugins/sudoers/stubs.c | 1 + plugins/sudoers/timestamp.c | 2 +- plugins/sudoers/timestr.c | 4 +- plugins/sudoers/tsgetgrpw.h | 3 + plugins/sudoers/unesc_str.c | 4 + src/copy_file.c | 1 + src/exec_ptrace.c | 7 -- src/load_plugins.c | 4 +- src/net_ifs.c | 6 +- src/sudo.h | 2 +- src/sudo_intercept.c | 27 ++++-- src/sudo_intercept_common.c | 7 +- src/sudo_noexec.c | 28 +++--- 55 files changed, 202 insertions(+), 173 deletions(-) diff --git a/configure b/configure index 2363bb1480..cbb883e623 100755 --- a/configure +++ b/configure @@ -32298,7 +32298,7 @@ printf "%s\n" "#define os_init $OS_INIT" >>confdefs.h if test -n "$GCC"; then if test X"$enable_warnings" = X"yes" -o X"$with_devel" = X"yes"; then - CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas" + CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas -Wmissing-prototypes" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wshadow" >&5 printf %s "checking whether C compiler accepts -Wshadow... " >&6; } if test ${ax_cv_check_cflags___Wshadow+y} diff --git a/configure.ac b/configure.ac index 9f845eddda..3bd5437ac8 100644 --- a/configure.ac +++ b/configure.ac @@ -4995,7 +4995,7 @@ if test -n "$GCC"; then dnl dnl Default warnings for development use. dnl - CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas" + CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas -Wmissing-prototypes" AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"]) dnl dnl The fallthrough attribute is supported by gcc 7.0 and clang 10. diff --git a/include/sudo_iolog.h b/include/sudo_iolog.h index 027285ecfd..83d48dbd95 100644 --- a/include/sudo_iolog.h +++ b/include/sudo_iolog.h @@ -146,7 +146,7 @@ bool iolog_swapids(bool restore); bool iolog_mkdirs(char *path); /* iolog_filter.c */ -void *iolog_pwfilt_alloc(); +void *iolog_pwfilt_alloc(void); bool iolog_pwfilt_add(void *handle, const char *pattern); void iolog_pwfilt_free(void *handle); bool iolog_pwfilt_remove(void *handle, const char *pattern); diff --git a/include/sudo_util.h b/include/sudo_util.h index ece8c2ed5e..403a7fe49d 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -299,6 +299,8 @@ sudo_dso_public int sudo_strtobool_v1(const char *str); /* strtonum.c */ /* Not versioned for historical reasons. */ sudo_dso_public long long sudo_strtonum(const char *, long long, long long, const char **); +/* Not currently exported. */ +long long sudo_strtonumx(const char *str, long long minval, long long maxval, char **endp, const char **errstrp); /* strtoid.c */ sudo_dso_public id_t sudo_strtoid_v1(const char *str, const char *sep, char **endp, const char **errstr); diff --git a/lib/iolog/host_port.c b/lib/iolog/host_port.c index b16c65867a..ad1a98b278 100644 --- a/lib/iolog/host_port.c +++ b/lib/iolog/host_port.c @@ -30,6 +30,7 @@ #include "sudo_debug.h" #include "sudo_gettext.h" #include "sudo_util.h" +#include "sudo_iolog.h" /* * Parse a string in the form host[:port] where host can also be diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_json.c b/lib/iolog/regress/fuzz/fuzz_iolog_json.c index 1ea3536a76..ec1e428b04 100644 --- a/lib/iolog/regress/fuzz/fuzz_iolog_json.c +++ b/lib/iolog/regress/fuzz/fuzz_iolog_json.c @@ -36,6 +36,8 @@ #include "iolog_json.h" +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + static FILE * open_data(const uint8_t *data, size_t size) { diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_legacy.c b/lib/iolog/regress/fuzz/fuzz_iolog_legacy.c index d2ced37bdb..a52bf56af2 100644 --- a/lib/iolog/regress/fuzz/fuzz_iolog_legacy.c +++ b/lib/iolog/regress/fuzz/fuzz_iolog_legacy.c @@ -34,6 +34,8 @@ #include "sudo_plugin.h" #include "sudo_util.h" +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + static FILE * open_data(const uint8_t *data, size_t size) { diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_timing.c b/lib/iolog/regress/fuzz/fuzz_iolog_timing.c index 785f3839f1..cf894973a6 100644 --- a/lib/iolog/regress/fuzz/fuzz_iolog_timing.c +++ b/lib/iolog/regress/fuzz/fuzz_iolog_timing.c @@ -41,6 +41,8 @@ #include "sudo_plugin.h" #include "sudo_util.h" +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + static int fuzz_conversation(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply replies[], struct sudo_conv_callback *callback) diff --git a/lib/iolog/regress/iolog_json/check_iolog_json.c b/lib/iolog/regress/iolog_json/check_iolog_json.c index df6841135e..cb41f0df82 100644 --- a/lib/iolog/regress/iolog_json/check_iolog_json.c +++ b/lib/iolog/regress/iolog_json/check_iolog_json.c @@ -34,7 +34,7 @@ sudo_dso_public int main(int argc, char *argv[]); -bool +static bool json_print_object(struct json_container *json, struct json_object *object) { struct json_item *item; diff --git a/lib/iolog/regress/iolog_timing/check_iolog_timing.c b/lib/iolog/regress/iolog_timing/check_iolog_timing.c index e0db4167e5..915b604737 100644 --- a/lib/iolog/regress/iolog_timing/check_iolog_timing.c +++ b/lib/iolog/regress/iolog_timing/check_iolog_timing.c @@ -49,7 +49,7 @@ static struct parse_delay_test { /* * Test iolog_parse_delay() */ -void +static void test_parse_delay(int *ntests, int *nerrors) { unsigned int i; @@ -106,7 +106,7 @@ static struct adjust_delay_test { /* * Test iolog_adjust_delay() */ -void +static void test_adjust_delay(int *ntests, int *nerrors) { unsigned int i; diff --git a/lib/util/regress/fuzz/fuzz_sudo_conf.c b/lib/util/regress/fuzz/fuzz_sudo_conf.c index 127f7459de..bfa62f8e2d 100644 --- a/lib/util/regress/fuzz/fuzz_sudo_conf.c +++ b/lib/util/regress/fuzz/fuzz_sudo_conf.c @@ -33,6 +33,8 @@ #include "sudo_plugin.h" #include "sudo_util.h" +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + static int fuzz_conversation(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply replies[], struct sudo_conv_callback *callback) diff --git a/lib/util/regress/glob/globtest.c b/lib/util/regress/glob/globtest.c index ec8cef5795..0148861839 100644 --- a/lib/util/regress/glob/globtest.c +++ b/lib/util/regress/glob/globtest.c @@ -183,7 +183,8 @@ main(int argc, char **argv) return errors; } -int test_glob(struct gl_entry *entry) +static int +test_glob(struct gl_entry *entry) { glob_t gl; char **ap; diff --git a/lib/util/regress/mktemp/mktemp_test.c b/lib/util/regress/mktemp/mktemp_test.c index 002f7b050f..134f89e1ce 100644 --- a/lib/util/regress/mktemp/mktemp_test.c +++ b/lib/util/regress/mktemp/mktemp_test.c @@ -50,7 +50,7 @@ sudo_dso_public int main(int argc, char *argv[]); * reasonable expansion of the template and matches the fd. Returns true * if all the X's were replaced with non-X's */ -int +static int check(int fd, char const *kind, char const *path, char const *prefix, size_t plen, char const *suffix, size_t slen, int tlen) { @@ -86,7 +86,7 @@ check(int fd, char const *kind, char const *path, char const *prefix, return 1; } -void +static void try_mkdtemp(char *p, char const *prefix, int len) { size_t plen = strlen(prefix); @@ -105,7 +105,7 @@ try_mkdtemp(char *p, char const *prefix, int len) sudo_fatalx("mkdtemp: exceeded MAX_TRIES"); } -void +static void try_mkstemps(char *p, char const *prefix, int len, char const *suffix) { size_t plen = strlen(prefix); diff --git a/lib/util/strtoid.c b/lib/util/strtoid.c index 8da857b6b4..fe5b44d0a6 100644 --- a/lib/util/strtoid.c +++ b/lib/util/strtoid.c @@ -39,9 +39,6 @@ #include "sudo_gettext.h" #include "sudo_util.h" -/* strtoid.c (not exported) */ -long long sudo_strtonumx(const char *str, long long minval, long long maxval, char **ep, const char **errstrp); - /* * Make sure that the ID ends with a valid separator char. */ diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index 4bf739ff50..c3c9d2da36 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -311,7 +311,7 @@ get_free_buf(size_t len, struct connection_closure *closure) debug_return_ptr(buf); } -bool +static bool fmt_server_message(struct connection_closure *closure, ServerMessage *msg) { struct connection_buffer *buf = NULL; diff --git a/logsrvd/logsrvd_relay.c b/logsrvd/logsrvd_relay.c index 6937ed82ce..6e20b3cbcd 100644 --- a/logsrvd/logsrvd_relay.c +++ b/logsrvd/logsrvd_relay.c @@ -295,7 +295,7 @@ connect_relay_tls(struct connection_closure *closure) * Returns 0 on success, -1 on error, setting errno. * If there is no next relay, errno is set to ENOENT. */ -int +static int connect_relay_next(struct connection_closure *closure) { struct relay_closure *relay_closure = closure->relay_closure; diff --git a/logsrvd/regress/fuzz/fuzz_logsrvd_conf.c b/logsrvd/regress/fuzz/fuzz_logsrvd_conf.c index d90fa53c1d..1964d443b1 100644 --- a/logsrvd/regress/fuzz/fuzz_logsrvd_conf.c +++ b/logsrvd/regress/fuzz/fuzz_logsrvd_conf.c @@ -44,6 +44,8 @@ #include "logsrvd.h" +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + /* * Stub version that always succeeds for small inputs and fails for large. * We want to fuzz our parser, not libc's regular expression code. diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 50d7f59c16..9b61cb812e 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -232,7 +232,7 @@ connect_server(struct peer_info *server, const char *port) /* * Get a buffer from the free list if possible, else allocate a new one. */ -struct connection_buffer * +static struct connection_buffer * get_free_buf(size_t len, struct client_closure *closure) { struct connection_buffer *buf; diff --git a/plugins/python/pyhelpers.c b/plugins/python/pyhelpers.c index 2670752d80..882b31a6ba 100644 --- a/plugins/python/pyhelpers.c +++ b/plugins/python/pyhelpers.c @@ -67,13 +67,6 @@ struct PythonContext py_ctx = { }; -int -py_is_sudo_log_available(void) -{ - debug_decl(py_is_sudo_log_available, PYTHON_DEBUG_INTERNAL); - debug_return_int(py_ctx.sudo_log != &_sudo_printf_default); -} - char * py_join_str_list(PyObject *py_str_list, const char *separator) { @@ -104,7 +97,7 @@ py_join_str_list(PyObject *py_str_list, const char *separator) debug_return_str(result); } -char * +static char * py_create_traceback_string(PyObject *py_traceback) { debug_decl(py_create_traceback_string, PYTHON_DEBUG_INTERNAL); diff --git a/plugins/python/python_plugin_approval.c b/plugins/python/python_plugin_approval.c index 31c479f19b..b9c746ed43 100644 --- a/plugins/python/python_plugin_approval.c +++ b/plugins/python/python_plugin_approval.c @@ -38,6 +38,7 @@ struct ApprovalPluginContext // This also verifies compile time that the name matches the sudo plugin API. #define CALLBACK_PYNAME(func_name) ((void)CALLBACK_PLUGINFUNC(func_name), #func_name) +sudo_dso_public struct approval_plugin *python_approval_clone(void); static int python_plugin_approval_open(struct ApprovalPluginContext *approval_ctx, @@ -133,7 +134,7 @@ python_plugin_approval_check(struct ApprovalPluginContext *approval_ctx, debug_return_int(rc); } -int +static int python_plugin_approval_show_version(struct ApprovalPluginContext *approval_ctx, int verbose) { debug_decl(python_plugin_approval_show_version, PYTHON_DEBUG_CALLBACKS); @@ -175,7 +176,7 @@ static struct approval_plugin *extra_approval_plugins[] = { &python_approval7 }; -sudo_dso_public struct approval_plugin * +struct approval_plugin * python_approval_clone(void) { static size_t counter = 0; diff --git a/plugins/python/python_plugin_approval_multi.inc b/plugins/python/python_plugin_approval_multi.inc index 941c14d324..d5b15ffe6a 100644 --- a/plugins/python/python_plugin_approval_multi.inc +++ b/plugins/python/python_plugin_approval_multi.inc @@ -11,7 +11,7 @@ extern struct approval_plugin APPROVAL_SYMBOL_NAME(python_approval); static struct ApprovalPluginContext PLUGIN_CTX = { { NULL }, &APPROVAL_SYMBOL_NAME(python_approval) }; -int +static int CALLBACK_CFUNC(open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], int submit_optind, @@ -23,13 +23,13 @@ CALLBACK_CFUNC(open)(unsigned int version, sudo_conv_t conversation, submit_envp, plugin_options, errstr); } -void +static void CALLBACK_CFUNC(close)(void) { python_plugin_approval_close(&PLUGIN_CTX); } -int +static int CALLBACK_CFUNC(check)(char * const command_info[], char * const run_argv[], char * const run_envp[], const char **errstr) { @@ -37,7 +37,7 @@ CALLBACK_CFUNC(check)(char * const command_info[], char * const run_argv[], run_envp, errstr); } -int +static int CALLBACK_CFUNC(show_version)(int verbose) { return python_plugin_approval_show_version(&PLUGIN_CTX, verbose); diff --git a/plugins/python/python_plugin_audit.c b/plugins/python/python_plugin_audit.c index ac4093482a..e2036ed6eb 100644 --- a/plugins/python/python_plugin_audit.c +++ b/plugins/python/python_plugin_audit.c @@ -44,6 +44,7 @@ struct AuditPluginContext (void **)&CALLBACK_PLUGINFUNC(function_name)); \ } while(0) +sudo_dso_public struct audit_plugin *python_audit_clone(void); static int _call_plugin_open(struct AuditPluginContext *audit_ctx, int submit_optind, char * const submit_argv[]) @@ -126,7 +127,7 @@ python_plugin_audit_close(struct AuditPluginContext *audit_ctx, int status_type, debug_return; } -int +static int python_plugin_audit_accept(struct AuditPluginContext *audit_ctx, const char *plugin_name, unsigned int plugin_type, char * const command_info[], char * const run_argv[], @@ -164,7 +165,7 @@ python_plugin_audit_accept(struct AuditPluginContext *audit_ctx, debug_return_int(rc); } -int +static int python_plugin_audit_reject(struct AuditPluginContext *audit_ctx, const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], const char **errstr) @@ -194,7 +195,7 @@ python_plugin_audit_reject(struct AuditPluginContext *audit_ctx, debug_return_int(rc); } -int +static int python_plugin_audit_error(struct AuditPluginContext *audit_ctx, const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], const char **errstr) @@ -221,7 +222,7 @@ python_plugin_audit_error(struct AuditPluginContext *audit_ctx, debug_return_int(rc); } -int +static int python_plugin_audit_show_version(struct AuditPluginContext *audit_ctx, int verbose) { debug_decl(python_plugin_audit_show_version, PYTHON_DEBUG_CALLBACKS); @@ -263,7 +264,7 @@ static struct audit_plugin *extra_audit_plugins[] = { &python_audit7 }; -sudo_dso_public struct audit_plugin * +struct audit_plugin * python_audit_clone(void) { static size_t counter = 0; diff --git a/plugins/python/python_plugin_audit_multi.inc b/plugins/python/python_plugin_audit_multi.inc index 3dc8c17684..015b4d1450 100644 --- a/plugins/python/python_plugin_audit_multi.inc +++ b/plugins/python/python_plugin_audit_multi.inc @@ -29,7 +29,7 @@ CALLBACK_CFUNC(close)(int status_type, int status) python_plugin_audit_close(&PLUGIN_CTX, status_type, status); } -int +static int CALLBACK_CFUNC(accept)(const char *plugin_name, unsigned int plugin_type, char * const command_info[], char * const run_argv[], char * const run_envp[], const char **errstr) @@ -38,7 +38,7 @@ CALLBACK_CFUNC(accept)(const char *plugin_name, unsigned int plugin_type, command_info, run_argv, run_envp, errstr); } -int +static int CALLBACK_CFUNC(reject)(const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], const char **errstr) { @@ -46,7 +46,7 @@ CALLBACK_CFUNC(reject)(const char *plugin_name, unsigned int plugin_type, audit_msg, command_info, errstr); } -int +static int CALLBACK_CFUNC(error)(const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], const char **errstr) { @@ -54,7 +54,7 @@ CALLBACK_CFUNC(error)(const char *plugin_name, unsigned int plugin_type, audit_msg, command_info, errstr); } -int +static int CALLBACK_CFUNC(show_version)(int verbose) { return python_plugin_audit_show_version(&PLUGIN_CTX, verbose); diff --git a/plugins/python/python_plugin_common.c b/plugins/python/python_plugin_common.c index c337dd7300..d643f73062 100644 --- a/plugins/python/python_plugin_common.c +++ b/plugins/python/python_plugin_common.c @@ -42,7 +42,7 @@ static size_t python_inittab_copy_len = 0; # define Py_FinalizeEx() (Py_Finalize(), 0) #endif -const char * +static const char * _lookup_value(char * const keyvalues[], const char *key) { debug_decl(_lookup_value, PYTHON_DEBUG_INTERNAL); @@ -190,7 +190,7 @@ _restore_inittab(void) debug_return; } -void +static void python_plugin_handle_plugin_error_exception(PyObject **py_result, struct PluginContext *plugin_ctx) { debug_decl(python_plugin_handle_plugin_error_exception, PYTHON_DEBUG_INTERNAL); @@ -396,7 +396,7 @@ _python_plugin_register_plugin_in_py_ctx(void) debug_return_int(SUDO_RC_OK); } -int +static int _python_plugin_set_path(struct PluginContext *plugin_ctx, const char *path) { if (path == NULL) { diff --git a/plugins/python/python_plugin_group.c b/plugins/python/python_plugin_group.c index d0ea3c113d..b1514c7e58 100644 --- a/plugins/python/python_plugin_group.c +++ b/plugins/python/python_plugin_group.c @@ -36,7 +36,7 @@ extern struct sudoers_group_plugin group_plugin; #define CALLBACK_PYNAME(func_name) ((void)CALLBACK_PLUGINFUNC(func_name), #func_name) -int +static int python_plugin_group_init(int version, sudo_printf_t sudo_printf, char *const plugin_options[]) { debug_decl(python_plugin_group_init, PYTHON_DEBUG_CALLBACKS); @@ -79,7 +79,7 @@ python_plugin_group_init(int version, sudo_printf_t sudo_printf, char *const plu debug_return_int(rc); } -void +static void python_plugin_group_cleanup(void) { debug_decl(python_plugin_group_cleanup, PYTHON_DEBUG_CALLBACKS); @@ -87,7 +87,7 @@ python_plugin_group_cleanup(void) python_plugin_deinit(&plugin_ctx); } -int +static int python_plugin_group_query(const char *user, const char *group, const struct passwd *pwd) { debug_decl(python_plugin_group_query, PYTHON_DEBUG_CALLBACKS); diff --git a/plugins/python/python_plugin_io.c b/plugins/python/python_plugin_io.c index b124808465..46289c3610 100644 --- a/plugins/python/python_plugin_io.c +++ b/plugins/python/python_plugin_io.c @@ -44,6 +44,7 @@ struct IOPluginContext (void **)&CALLBACK_PLUGINFUNC(function_name)); \ } while(0) +sudo_dso_public struct io_plugin *python_io_clone(void); static int _call_plugin_open(struct IOPluginContext *io_ctx, int argc, char * const argv[], char * const command_info[]) @@ -75,7 +76,7 @@ _call_plugin_open(struct IOPluginContext *io_ctx, int argc, char * const argv[], debug_return_int(rc); } -int +static int python_plugin_io_open(struct IOPluginContext *io_ctx, unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], @@ -125,7 +126,7 @@ python_plugin_io_open(struct IOPluginContext *io_ctx, debug_return_int(rc); } -void +static void python_plugin_io_close(struct IOPluginContext *io_ctx, int exit_status, int error) { debug_decl(python_plugin_io_close, PYTHON_DEBUG_CALLBACKS); @@ -134,7 +135,7 @@ python_plugin_io_close(struct IOPluginContext *io_ctx, int exit_status, int erro debug_return; } -int +static int python_plugin_io_show_version(struct IOPluginContext *io_ctx, int verbose) { debug_decl(python_plugin_io_show_version, PYTHON_DEBUG_CALLBACKS); @@ -145,7 +146,7 @@ python_plugin_io_show_version(struct IOPluginContext *io_ctx, int verbose) verbose, PY_IO_PLUGIN_VERSION, "io")); } -int +static int python_plugin_io_log_ttyin(struct IOPluginContext *io_ctx, const char *buf, unsigned int len, const char **errstr) { debug_decl(python_plugin_io_log_ttyin, PYTHON_DEBUG_CALLBACKS); @@ -157,7 +158,7 @@ python_plugin_io_log_ttyin(struct IOPluginContext *io_ctx, const char *buf, unsi debug_return_int(rc); } -int +static int python_plugin_io_log_ttyout(struct IOPluginContext *io_ctx, const char *buf, unsigned int len, const char **errstr) { debug_decl(python_plugin_io_log_ttyout, PYTHON_DEBUG_CALLBACKS); @@ -169,7 +170,7 @@ python_plugin_io_log_ttyout(struct IOPluginContext *io_ctx, const char *buf, uns debug_return_int(rc); } -int +static int python_plugin_io_log_stdin(struct IOPluginContext *io_ctx, const char *buf, unsigned int len, const char **errstr) { debug_decl(python_plugin_io_log_stdin, PYTHON_DEBUG_CALLBACKS); @@ -181,7 +182,7 @@ python_plugin_io_log_stdin(struct IOPluginContext *io_ctx, const char *buf, unsi debug_return_int(rc); } -int +static int python_plugin_io_log_stdout(struct IOPluginContext *io_ctx, const char *buf, unsigned int len, const char **errstr) { debug_decl(python_plugin_io_log_stdout, PYTHON_DEBUG_CALLBACKS); @@ -193,7 +194,7 @@ python_plugin_io_log_stdout(struct IOPluginContext *io_ctx, const char *buf, uns debug_return_int(rc); } -int +static int python_plugin_io_log_stderr(struct IOPluginContext *io_ctx, const char *buf, unsigned int len, const char **errstr) { debug_decl(python_plugin_io_log_stderr, PYTHON_DEBUG_CALLBACKS); @@ -205,7 +206,7 @@ python_plugin_io_log_stderr(struct IOPluginContext *io_ctx, const char *buf, uns debug_return_int(rc); } -int +static int python_plugin_io_change_winsize(struct IOPluginContext *io_ctx, unsigned int line, unsigned int cols, const char **errstr) { debug_decl(python_plugin_io_change_winsize, PYTHON_DEBUG_CALLBACKS); @@ -217,7 +218,7 @@ python_plugin_io_change_winsize(struct IOPluginContext *io_ctx, unsigned int lin debug_return_int(rc); } -int +static int python_plugin_io_log_suspend(struct IOPluginContext *io_ctx, int signo, const char **errstr) { debug_decl(python_plugin_io_log_suspend, PYTHON_DEBUG_CALLBACKS); @@ -258,7 +259,7 @@ static struct io_plugin *extra_io_plugins[] = { &python_io7 }; -sudo_dso_public struct io_plugin * +struct io_plugin * python_io_clone(void) { static size_t counter = 0; diff --git a/plugins/python/python_plugin_io_multi.inc b/plugins/python/python_plugin_io_multi.inc index 2ccdb5e684..d5d58d2d2c 100644 --- a/plugins/python/python_plugin_io_multi.inc +++ b/plugins/python/python_plugin_io_multi.inc @@ -10,7 +10,7 @@ extern struct io_plugin IO_SYMBOL_NAME(python_io); static struct IOPluginContext PLUGIN_CTX = { { NULL }, &IO_SYMBOL_NAME(python_io) }; -int +static int CALLBACK_CFUNC(open)( unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], @@ -22,55 +22,55 @@ CALLBACK_CFUNC(open)( sudo_printf, settings, user_info, command_info, argc, argv, user_env, plugin_options, errstr); } -void +static void CALLBACK_CFUNC(close)(int exit_status, int error) { python_plugin_io_close(&PLUGIN_CTX, exit_status, error); } -int +static int CALLBACK_CFUNC(show_version)(int verbose) { return python_plugin_io_show_version(&PLUGIN_CTX, verbose); } -int +static int CALLBACK_CFUNC(log_ttyin)(const char *buf, unsigned int len, const char **errstr) { return python_plugin_io_log_ttyin(&PLUGIN_CTX, buf, len, errstr); } -int +static int CALLBACK_CFUNC(log_ttyout)(const char *buf, unsigned int len, const char **errstr) { return python_plugin_io_log_ttyout(&PLUGIN_CTX, buf, len, errstr); } -int +static int CALLBACK_CFUNC(log_stdin)(const char *buf, unsigned int len, const char **errstr) { return python_plugin_io_log_stdin(&PLUGIN_CTX, buf, len, errstr); } -int +static int CALLBACK_CFUNC(log_stdout)(const char *buf, unsigned int len, const char **errstr) { return python_plugin_io_log_stdout(&PLUGIN_CTX, buf, len, errstr); } -int +static int CALLBACK_CFUNC(log_stderr)(const char *buf, unsigned int len, const char **errstr) { return python_plugin_io_log_stderr(&PLUGIN_CTX, buf, len, errstr); } -int +static int CALLBACK_CFUNC(change_winsize)(unsigned int line, unsigned int cols, const char **errstr) { return python_plugin_io_change_winsize(&PLUGIN_CTX, line, cols, errstr); } -int +static int CALLBACK_CFUNC(log_suspend)(int signo, const char **errstr) { return python_plugin_io_log_suspend(&PLUGIN_CTX, signo, errstr); diff --git a/plugins/python/python_plugin_policy.c b/plugins/python/python_plugin_policy.c index ded793aa50..776c9e0a48 100644 --- a/plugins/python/python_plugin_policy.c +++ b/plugins/python/python_plugin_policy.c @@ -203,7 +203,7 @@ python_plugin_policy_version(int verbose) verbose, PY_POLICY_PLUGIN_VERSION, "policy")); } -int +static int python_plugin_policy_validate(const char **errstr) { debug_decl(python_plugin_policy_validate, PYTHON_DEBUG_CALLBACKS); @@ -213,7 +213,7 @@ python_plugin_policy_validate(const char **errstr) debug_return_int(rc); } -void +static void python_plugin_policy_invalidate(int unlinkit) { debug_decl(python_plugin_policy_invalidate, PYTHON_DEBUG_CALLBACKS); @@ -223,7 +223,7 @@ python_plugin_policy_invalidate(int unlinkit) debug_return; } -int +static int python_plugin_policy_init_session(struct passwd *pwd, char **user_env[], const char **errstr) { debug_decl(python_plugin_policy_init_session, PYTHON_DEBUG_CALLBACKS); diff --git a/plugins/python/regress/check_python_examples.c b/plugins/python/regress/check_python_examples.c index 10eefac6c7..dfee438c5e 100644 --- a/plugins/python/regress/check_python_examples.c +++ b/plugins/python/regress/check_python_examples.c @@ -49,7 +49,7 @@ static bool verbose; static int _init_symbols(void); static int _unlink_symbols(void); -void +static void create_plugin_options(const char *module_name, const char *class_name, const char *extra_option) { char opt_module_path[PATH_MAX + 256]; @@ -65,7 +65,7 @@ create_plugin_options(const char *module_name, const char *class_name, const cha opt_classname, extra_option, NULL); } -void +static void create_io_plugin_options(const char *log_path) { char opt_logpath[PATH_MAX + 16]; @@ -73,19 +73,19 @@ create_io_plugin_options(const char *log_path) create_plugin_options("example_io_plugin", "SudoIOPlugin", opt_logpath); } -void +static void create_debugging_plugin_options(void) { create_plugin_options("example_debugging", "DebugDemoPlugin", NULL); } -void +static void create_audit_plugin_options(const char *extra_argument) { create_plugin_options("example_audit_plugin", "SudoAuditPlugin", extra_argument); } -void +static void create_conversation_plugin_options(void) { char opt_logpath[PATH_MAX + 16]; @@ -93,13 +93,13 @@ create_conversation_plugin_options(void) create_plugin_options("example_conversation", "ReasonLoggerIOPlugin", opt_logpath); } -void +static void create_policy_plugin_options(void) { create_plugin_options("example_policy_plugin", "SudoPolicyPlugin", NULL); } -int +static int init(void) { // always start each test from clean state @@ -134,7 +134,7 @@ init(void) return true; } -int +static int cleanup(int success) { if (!success) { @@ -160,7 +160,7 @@ cleanup(int success) return true; } -int +static int check_example_io_plugin_version_display(int is_verbose) { const char *errstr = NULL; @@ -188,7 +188,7 @@ check_example_io_plugin_version_display(int is_verbose) return true; } -int +static int check_example_io_plugin_command_log(void) { const char *errstr = NULL; @@ -233,7 +233,7 @@ check_example_io_plugin_command_log(void) typedef struct io_plugin * (io_clone_func)(void); -int +static int check_example_io_plugin_command_log_multiple(void) { const char *errstr = NULL; @@ -330,7 +330,7 @@ check_example_io_plugin_command_log_multiple(void) return true; } -int +static int check_example_io_plugin_failed_to_start_command(void) { const char *errstr = NULL; @@ -358,7 +358,7 @@ check_example_io_plugin_failed_to_start_command(void) return true; } -int +static int check_example_io_plugin_fails_with_python_backtrace(void) { const char *errstr = NULL; @@ -377,7 +377,7 @@ check_example_io_plugin_fails_with_python_backtrace(void) return true; } -int +static int check_io_plugin_reports_error(void) { const char *errstr = NULL; @@ -445,7 +445,7 @@ check_io_plugin_reports_error(void) return true; } -int +static int check_example_group_plugin(void) { create_plugin_options("example_group_plugin", "SudoGroupPlugin", NULL); @@ -463,7 +463,7 @@ check_example_group_plugin(void) return true; } -const char * +static const char * create_debug_config(const char *debug_spec) { char *result = NULL; @@ -493,7 +493,7 @@ create_debug_config(const char *debug_spec) return result; } -int +static int check_example_group_plugin_is_able_to_debug(void) { const char *config_path = create_debug_config("py_calls@diag"); @@ -516,7 +516,7 @@ check_example_group_plugin_is_able_to_debug(void) return true; } -int +static int check_plugin_unload(void) { // You can call this test to avoid having a lot of subinterpreters @@ -528,7 +528,7 @@ check_plugin_unload(void) return true; } -int +static int check_example_debugging(const char *debug_spec) { const char *errstr = NULL; @@ -559,7 +559,7 @@ check_example_debugging(const char *debug_spec) return true; } -int +static int check_loading_fails(const char *name) { const char *errstr = NULL; @@ -576,7 +576,7 @@ check_loading_fails(const char *name) return true; } -int +static int check_loading_fails_with_missing_path(void) { str_array_free(&data.plugin_options); @@ -584,7 +584,7 @@ check_loading_fails_with_missing_path(void) return check_loading_fails("missing_path"); } -int +static int check_loading_succeeds_with_missing_classname(void) { str_array_free(&data.plugin_options); @@ -605,7 +605,7 @@ check_loading_succeeds_with_missing_classname(void) return true; } -int +static int check_loading_fails_with_missing_classname(void) { str_array_free(&data.plugin_options); @@ -613,14 +613,14 @@ check_loading_fails_with_missing_classname(void) return check_loading_fails("missing_classname"); } -int +static int check_loading_fails_with_wrong_classname(void) { create_plugin_options("example_debugging", "MispelledPluginName", NULL); return check_loading_fails("wrong_classname"); } -int +static int check_loading_fails_with_wrong_path(void) { str_array_free(&data.plugin_options); @@ -628,7 +628,7 @@ check_loading_fails_with_wrong_path(void) return check_loading_fails("wrong_path"); } -int +static int check_loading_fails_plugin_is_not_owned_by_root(void) { sudo_conf_clear_paths(); @@ -638,7 +638,7 @@ check_loading_fails_plugin_is_not_owned_by_root(void) return check_loading_fails("not_owned_by_root"); } -int +static int check_example_conversation_plugin_reason_log(int simulate_suspend, const char *description) { const char *errstr = NULL; @@ -667,7 +667,7 @@ check_example_conversation_plugin_reason_log(int simulate_suspend, const char *d return true; } -int +static int check_example_conversation_plugin_user_interrupts(void) { const char *errstr = NULL; @@ -692,7 +692,7 @@ check_example_conversation_plugin_user_interrupts(void) return true; } -int +static int check_example_policy_plugin_version_display(int is_verbose) { const char *errstr = NULL; @@ -721,7 +721,7 @@ check_example_policy_plugin_version_display(int is_verbose) return true; } -int +static int check_example_policy_plugin_accepted_execution(void) { const char *errstr = NULL; @@ -773,7 +773,7 @@ check_example_policy_plugin_accepted_execution(void) return true; } -int +static int check_example_policy_plugin_failed_execution(void) { const char *errstr = NULL; @@ -811,7 +811,7 @@ check_example_policy_plugin_failed_execution(void) return true; } -int +static int check_example_policy_plugin_denied_execution(void) { const char *errstr = NULL; @@ -846,7 +846,7 @@ check_example_policy_plugin_denied_execution(void) return true; } -int +static int check_example_policy_plugin_list(void) { const char *errstr = NULL; @@ -904,7 +904,7 @@ check_example_policy_plugin_list(void) return true; } -int +static int check_example_policy_plugin_validate_invalidate(void) { const char *errstr = NULL; @@ -935,7 +935,7 @@ check_example_policy_plugin_validate_invalidate(void) return true; } -int +static int check_policy_plugin_callbacks_are_optional(void) { const char *errstr = NULL; @@ -961,7 +961,7 @@ check_policy_plugin_callbacks_are_optional(void) return true; } -int +static int check_policy_plugin_reports_error(void) { const char *errstr = NULL; @@ -1024,7 +1024,7 @@ check_policy_plugin_reports_error(void) return true; } -int +static int check_io_plugin_callbacks_are_optional(void) { const char *errstr = NULL; @@ -1051,7 +1051,7 @@ check_io_plugin_callbacks_are_optional(void) return true; } -int +static int check_python_plugins_do_not_affect_each_other(void) { const char *errstr = NULL; @@ -1078,7 +1078,7 @@ check_python_plugins_do_not_affect_each_other(void) return true; } -int +static int check_example_audit_plugin_receives_accept(void) { create_audit_plugin_options(""); @@ -1117,7 +1117,7 @@ check_example_audit_plugin_receives_accept(void) return true; } -int +static int check_example_audit_plugin_receives_reject(void) { create_audit_plugin_options(NULL); @@ -1147,7 +1147,7 @@ check_example_audit_plugin_receives_reject(void) return true; } -int +static int check_example_audit_plugin_receives_error(void) { create_audit_plugin_options(""); @@ -1179,7 +1179,7 @@ check_example_audit_plugin_receives_error(void) typedef struct audit_plugin * (audit_clone_func)(void); -int +static int check_example_audit_plugin_workflow_multiple(void) { // verify multiple python audit plugins are available @@ -1247,7 +1247,7 @@ check_example_audit_plugin_workflow_multiple(void) return true; } -int +static int check_example_audit_plugin_version_display(void) { create_audit_plugin_options(NULL); @@ -1275,7 +1275,7 @@ check_example_audit_plugin_version_display(void) return true; } -int +static int check_audit_plugin_callbacks_are_optional(void) { const char *errstr = NULL; @@ -1300,7 +1300,7 @@ check_audit_plugin_callbacks_are_optional(void) return true; } -int +static int check_audit_plugin_reports_error(void) { const char *errstr = NULL; diff --git a/plugins/python/sudo_python_module.c b/plugins/python/sudo_python_module.c index 897d471fc1..90cef98fae 100644 --- a/plugins/python/sudo_python_module.c +++ b/plugins/python/sudo_python_module.c @@ -293,13 +293,13 @@ _call_conversation_callback(PyObject *py_callback, int signo) debug_return_int(rc); } -int +static int python_sudo_conversation_suspend_cb(int signo, struct py_conv_callback_closure *closure) { return _call_conversation_callback(closure->py_on_suspend, signo); } -int +static int python_sudo_conversation_resume_cb(int signo, struct py_conv_callback_closure *closure) { return _call_conversation_callback(closure->py_on_resume, signo); @@ -467,7 +467,7 @@ sudo_module_create_class(const char *class_name, PyMethodDef *class_methods, } CPYCHECKER_STEALS_REFERENCE_TO_ARG(3) -void +static void sudo_module_register_enum(PyObject *py_module, const char *enum_name, PyObject *py_constants_dict) { // pseudo code: diff --git a/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index 0dfb99f729..def7a3bff8 100644 --- a/plugins/sudoers/audit.c +++ b/plugins/sudoers/audit.c @@ -432,7 +432,7 @@ sudoers_audit_error(const char *plugin_name, unsigned int plugin_type, debug_return_int(ret); } -void +static void sudoers_audit_close(int status_type, int status) { log_server_exit(status_type, status); diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index 405ea888bf..5ff0a5d163 100644 --- a/plugins/sudoers/getdate.c +++ b/plugins/sudoers/getdate.c @@ -854,6 +854,8 @@ difftm(struct tm *a, struct tm *b) + (a->tm_sec - b->tm_sec)); } +time_t get_date(char *p); + time_t get_date(char *p) { diff --git a/plugins/sudoers/getdate.y b/plugins/sudoers/getdate.y index 0ce8b7a0f2..12efbda1f3 100644 --- a/plugins/sudoers/getdate.y +++ b/plugins/sudoers/getdate.y @@ -826,6 +826,8 @@ difftm(struct tm *a, struct tm *b) + (a->tm_sec - b->tm_sec)); } +time_t get_date(char *p); + time_t get_date(char *p) { diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 2157d072cf..e78a36c361 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -4092,10 +4092,10 @@ parser_leak_remove(enum parser_leak_types type, void *v) #endif /* NO_LEAKS */ } -void +#ifdef NO_LEAKS +static void parser_leak_free(void) { -#ifdef NO_LEAKS struct parser_leak_entry *entry; void *next; debug_decl(parser_leak_run, SUDOERS_DEBUG_PARSER); @@ -4177,8 +4177,8 @@ parser_leak_free(void) } debug_return; -#endif /* NO_LEAKS */ } +#endif /* NO_LEAKS */ void parser_leak_init(void) diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index edb931322e..602c64b952 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -1914,10 +1914,10 @@ found: #endif /* NO_LEAKS */ } -void +#ifdef NO_LEAKS +static void parser_leak_free(void) { -#ifdef NO_LEAKS struct parser_leak_entry *entry; void *next; debug_decl(parser_leak_run, SUDOERS_DEBUG_PARSER); @@ -1999,8 +1999,8 @@ parser_leak_free(void) } debug_return; -#endif /* NO_LEAKS */ } +#endif /* NO_LEAKS */ void parser_leak_init(void) diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index aae5713ff0..3a403bf347 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -288,7 +288,7 @@ set_passprompt_regex(const char *cstr) * Pull out I/O log related data from user_info and command_info arrays. * Returns true if I/O logging is enabled, false if not and -1 on error. */ -int +static int iolog_deserialize_info(struct log_details *details, char * const user_info[], char * const command_info[], char * const argv[], char * const user_env[]) { diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index f1f1c016f2..959132f8fa 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -755,7 +755,7 @@ fmt_client_message(struct client_closure *closure, ClientMessage *msg) * Appends the wire format message to the closure's write queue. * Returns true on success, false on failure. */ -bool +static bool fmt_client_hello(struct client_closure *closure) { ClientMessage client_msg = CLIENT_MESSAGE__INIT; diff --git a/plugins/sudoers/regress/fuzz/fuzz_policy.c b/plugins/sudoers/regress/fuzz/fuzz_policy.c index 9b0c8ea3e5..85d05cc24d 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_policy.c +++ b/plugins/sudoers/regress/fuzz/fuzz_policy.c @@ -39,7 +39,9 @@ #endif #include "sudoers.h" +#include "sudo_iolog.h" #include "interfaces.h" +#include "check.h" extern char **environ; extern sudo_dso_public struct policy_plugin sudoers_policy; @@ -49,6 +51,8 @@ char *audit_msg; static int pass; +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + static FILE * open_data(const uint8_t *data, size_t size) { @@ -161,7 +165,7 @@ fuzz_printf(int msg_type, const char *fmt, ...) return 0; } -int +static int fuzz_hook_stub(struct sudo_hook *hook) { return 0; @@ -820,7 +824,7 @@ expand_iolog_path(const char *inpath, char *path, size_t pathlen, /* STUB */ bool -iolog_nextid(char *iolog_dir, char sessid[7]) +iolog_nextid(const char *iolog_dir, char sessid[7]) { strlcpy(sessid, "000001", 7); return true; diff --git a/plugins/sudoers/regress/fuzz/fuzz_stubs.c b/plugins/sudoers/regress/fuzz/fuzz_stubs.c index f2147c578a..27b26c0958 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_stubs.c +++ b/plugins/sudoers/regress/fuzz/fuzz_stubs.c @@ -41,6 +41,8 @@ #include "sudoers.h" #include "interfaces.h" +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + struct interface_list * get_interfaces(void) { diff --git a/plugins/sudoers/regress/fuzz/fuzz_sudoers.c b/plugins/sudoers/regress/fuzz/fuzz_sudoers.c index 8a7caeaae0..90de61e866 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_sudoers.c +++ b/plugins/sudoers/regress/fuzz/fuzz_sudoers.c @@ -43,6 +43,7 @@ static int fuzz_conversation(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply replies[], struct sudo_conv_callback *callback); static int fuzz_printf(int msg_type, const char *fmt, ...); +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); /* Required to link with parser. */ struct sudo_user sudo_user; diff --git a/plugins/sudoers/regress/fuzz/fuzz_sudoers_ldif.c b/plugins/sudoers/regress/fuzz/fuzz_sudoers_ldif.c index e1f47399bb..75a6d7dd75 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_sudoers_ldif.c +++ b/plugins/sudoers/regress/fuzz/fuzz_sudoers_ldif.c @@ -29,6 +29,7 @@ #include "sudoers.h" static int fuzz_printf(int msg_type, const char *fmt, ...); +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); /* Required to link with parser. */ struct sudo_user sudo_user; diff --git a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c index 6f2ca732a6..a03ff50a16 100644 --- a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c +++ b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c @@ -155,7 +155,7 @@ validate_iolog_info(const char *log_dir, bool legacy) return true; } -bool +static bool validate_timing(FILE *fp, int recno, int type, unsigned int p1, unsigned int p2) { struct timing_closure timing; @@ -206,7 +206,7 @@ validate_timing(FILE *fp, int recno, int type, unsigned int p1, unsigned int p2) /* * Test sudoers I/O log plugin endpoints. */ -void +static void test_endpoints(int *ntests, int *nerrors, const char *iolog_dir, char *envp[]) { int rc, cmnd_argc = 1; diff --git a/plugins/sudoers/stubs.c b/plugins/sudoers/stubs.c index fcb0889d8a..9aae59d411 100644 --- a/plugins/sudoers/stubs.c +++ b/plugins/sudoers/stubs.c @@ -35,6 +35,7 @@ #include #include "sudoers.h" +#include "cvtsudoers.h" #include "interfaces.h" /* STUB */ diff --git a/plugins/sudoers/timestamp.c b/plugins/sudoers/timestamp.c index 0de792b61d..9d0d3c0145 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -591,7 +591,7 @@ ts_read(struct ts_cookie *cookie, struct timestamp_entry *entry) /* * Write a TS_LOCKEXCL record at the beginning of the time stamp file. */ -bool +static bool timestamp_lock_write(struct ts_cookie *cookie) { struct timestamp_entry entry; diff --git a/plugins/sudoers/timestr.c b/plugins/sudoers/timestr.c index 8eb223afcf..d208215fba 100644 --- a/plugins/sudoers/timestr.c +++ b/plugins/sudoers/timestr.c @@ -26,9 +26,7 @@ #include -#include "sudo_compat.h" -#include "sudo_debug.h" -#include "parse.h" +#include "sudoers.h" /* * Return a static buffer with the current date + time. diff --git a/plugins/sudoers/tsgetgrpw.h b/plugins/sudoers/tsgetgrpw.h index a893cbac3f..62aa751c34 100644 --- a/plugins/sudoers/tsgetgrpw.h +++ b/plugins/sudoers/tsgetgrpw.h @@ -40,3 +40,6 @@ void testsudoers_endpwent(void); struct passwd *testsudoers_getpwent(void); struct passwd *testsudoers_getpwnam(const char *); struct passwd *testsudoers_getpwuid(uid_t); + +int testsudoers_getgrouplist2_v1(const char *name, GETGROUPS_T basegid, + GETGROUPS_T **groupsp, int *ngroupsp); diff --git a/plugins/sudoers/unesc_str.c b/plugins/sudoers/unesc_str.c index 763e1ceac9..2b5e24271f 100644 --- a/plugins/sudoers/unesc_str.c +++ b/plugins/sudoers/unesc_str.c @@ -21,8 +21,12 @@ * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com */ +#include + #include +#include "sudoers.h" + /* * Remove backslash escape chars. */ diff --git a/src/copy_file.c b/src/copy_file.c index e173c43cfe..6713338281 100644 --- a/src/copy_file.c +++ b/src/copy_file.c @@ -30,6 +30,7 @@ #include #include "sudo.h" +#include "sudo_edit.h" /* * Extend the given fd to the specified size in bytes. diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 887846f3c2..dd2849d3f0 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -1318,13 +1318,6 @@ exec_ptrace_subcmds_supported(void) return seccomp_trap_supported == true; } #else -/* STUB */ -bool -have_seccomp_action(const char *action) -{ - return false; -} - /* STUB */ bool exec_ptrace_stopped(pid_t pid, int status, void *intercept) diff --git a/src/load_plugins.c b/src/load_plugins.c index dd0ad3ef53..33535217a3 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -205,7 +205,7 @@ plugin_exists(struct plugin_container_list *plugins, const char *symbol_name) typedef struct generic_plugin * (plugin_clone_func)(void); -struct generic_plugin * +static struct generic_plugin * sudo_plugin_try_to_clone(void *so_handle, const char *symbol_name) { debug_decl(sudo_plugin_try_to_clone, SUDO_DEBUG_PLUGIN); @@ -436,7 +436,7 @@ sudo_init_event_alloc(void) * Load the specified symbol from the sudoers plugin. * Used to provide a default plugin when none are specified in sudo.conf. */ -bool +static bool sudo_load_sudoers_plugin(const char *symbol_name, bool optional) { struct plugin_info *info; diff --git a/src/net_ifs.c b/src/net_ifs.c index 76c272b40f..afb9bba621 100644 --- a/src/net_ifs.c +++ b/src/net_ifs.c @@ -67,11 +67,7 @@ struct rtentry; #define DEFAULT_TEXT_DOMAIN "sudo" -#include "sudo_compat.h" -#include "sudo_conf.h" -#include "sudo_debug.h" -#include "sudo_fatal.h" -#include "sudo_gettext.h" +#include "sudo.h" /* Minix apparently lacks IFF_LOOPBACK */ #ifndef IFF_LOOPBACK diff --git a/src/sudo.h b/src/sudo.h index aa018ccd60..756c8db3ab 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -335,7 +335,7 @@ void parse_preserved_fds(struct preserved_fd_list *pfds, const char *fdstr); int tcsetpgrp_nobg(int fd, pid_t pgrp_id); /* limits.c */ -void disable_coredump(); +void disable_coredump(void); void restore_limits(void); void restore_nproc(void); void set_policy_rlimits(void); diff --git a/src/sudo_intercept.c b/src/sudo_intercept.c index 943739400c..8ba1fccca9 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -408,39 +408,50 @@ sudo_shl_get_next(const char *symbol, short type) } # endif /* HAVE_SHL_LOAD */ -sudo_dso_public int +sudo_dso_public int system(const char *cmnd); +sudo_dso_public int execve(const char *cmnd, char * const argv[], char * const envp[]); +sudo_dso_public int execv(const char *cmnd, char * const argv[]); +#ifdef HAVE_EXECVPE +sudo_dso_public int execvpe(const char *cmnd, char * const argv[], char * const envp[]); +#endif +sudo_dso_public int execvp(const char *cmnd, char * const argv[]); +sudo_dso_public int execl(const char *name, const char *arg, ...); +sudo_dso_public int execle(const char *name, const char *arg, ...); +sudo_dso_public int execlp(const char *name, const char *arg, ...); + +int system(const char *cmnd) { return system_wrapper(cmnd); } -sudo_dso_public int +int execve(const char *cmnd, char * const argv[], char * const envp[]) { return exec_wrapper(cmnd, argv, envp, false); } -sudo_dso_public int +int execv(const char *cmnd, char * const argv[]) { return execve(cmnd, argv, environ); } #ifdef HAVE_EXECVPE -sudo_dso_public int +int execvpe(const char *cmnd, char * const argv[], char * const envp[]) { return exec_wrapper(cmnd, argv, envp, true); } #endif -sudo_dso_public int +int execvp(const char *cmnd, char * const argv[]) { return exec_wrapper(cmnd, argv, environ, true); } -sudo_dso_public int +int execl(const char *name, const char *arg, ...) { va_list ap; @@ -452,7 +463,7 @@ execl(const char *name, const char *arg, ...) return -1; } -sudo_dso_public int +int execle(const char *name, const char *arg, ...) { va_list ap; @@ -464,7 +475,7 @@ execle(const char *name, const char *arg, ...) return -1; } -sudo_dso_public int +int execlp(const char *name, const char *arg, ...) { va_list ap; diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index e6431882bc..9c9e2346fa 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -127,7 +127,7 @@ send_client_hello(int sock) /* * Receive InterceptResponse from sudo over fd. */ -InterceptResponse * +static InterceptResponse * recv_intercept_response(int fd) { InterceptResponse *res = NULL; @@ -358,7 +358,7 @@ intercept_connect(void) int sock = -1; int on = 1; struct sockaddr_in sin; - debug_decl(command_allowed, SUDO_DEBUG_EXEC); + debug_decl(intercept_connect, SUDO_DEBUG_EXEC); if (intercept_port == 0) { sudo_warnx(U_("intercept port not set")); @@ -390,6 +390,9 @@ intercept_connect(void) debug_return_int(sock); } +/* Called from sudo_intercept.c */ +bool command_allowed(const char *cmnd, char * const argv[], char * const envp[], char **ncmndp, char ***nargvp, char ***nenvpp); + bool command_allowed(const char *cmnd, char * const argv[], char * const envp[], char **ncmndp, char ***nargvp, char ***nenvpp) diff --git a/src/sudo_noexec.c b/src/sudo_noexec.c index fd81172268..71a36d6fe5 100644 --- a/src/sudo_noexec.c +++ b/src/sudo_noexec.c @@ -88,32 +88,32 @@ typedef struct interpose_s { } #define EXEC_REPL1(fn, t1) \ -sudo_dso_public int \ -FN_NAME(fn)(t1 a1) \ +sudo_dso_public int FN_NAME(fn)(t1 a1); \ +int FN_NAME(fn)(t1 a1) \ EXEC_REPL_BODY \ INTERPOSE(fn) #define EXEC_REPL2(fn, t1, t2) \ -sudo_dso_public int \ -FN_NAME(fn)(t1 a1, t2 a2) \ +sudo_dso_public int FN_NAME(fn)(t1 a1, t2 a2); \ +int FN_NAME(fn)(t1 a1, t2 a2) \ EXEC_REPL_BODY \ INTERPOSE(fn) #define EXEC_REPL3(fn, t1, t2, t3) \ -sudo_dso_public int \ -FN_NAME(fn)(t1 a1, t2 a2, t3 a3) \ +sudo_dso_public int FN_NAME(fn)(t1 a1, t2 a2, t3 a3); \ +int FN_NAME(fn)(t1 a1, t2 a2, t3 a3) \ EXEC_REPL_BODY \ INTERPOSE(fn) #define EXEC_REPL6(fn, t1, t2, t3, t4, t5, t6) \ -sudo_dso_public int \ -FN_NAME(fn)(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) \ +sudo_dso_public int FN_NAME(fn)(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6); \ +int FN_NAME(fn)(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) \ EXEC_REPL_BODY \ INTERPOSE(fn) #define EXEC_REPL_VA(fn, t1, t2) \ -sudo_dso_public int \ -FN_NAME(fn)(t1 a1, t2 a2, ...) \ +sudo_dso_public int FN_NAME(fn)(t1 a1, t2 a2, ...); \ +int FN_NAME(fn)(t1 a1, t2 a2, ...) \ EXEC_REPL_BODY \ INTERPOSE(fn) @@ -159,8 +159,8 @@ EXEC_REPL6(posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t */ EXEC_REPL1(system, const char *) -sudo_dso_public FILE * -FN_NAME(popen)(const char *c, const char *t) +sudo_dso_public FILE *FN_NAME(popen)(const char *c, const char *t); +FILE *FN_NAME(popen)(const char *c, const char *t) { errno = EACCES; return NULL; @@ -174,8 +174,8 @@ INTERPOSE(popen) */ typedef int (*sudo_fn_wordexp_t)(const char *, wordexp_t *, int); -sudo_dso_public int -FN_NAME(wordexp)(const char *words, wordexp_t *we, int flags) +sudo_dso_public int FN_NAME(wordexp)(const char *words, wordexp_t *we, int flags); +int FN_NAME(wordexp)(const char *words, wordexp_t *we, int flags) { #if defined(HAVE___INTERPOSE) return wordexp(words, we, flags | WRDE_NOCMD); From 89666e7c37ebb17d9df6dfc176c6844d1540dfc0 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 27 Jun 2022 13:02:13 -0600 Subject: [PATCH 005/186] Define _LFS64_LARGEFILE, _LARGEFILE64_SOURCE if 64-bit or _LARGE_FILES set. autoconf does not define _LARGEFILE64_SOURCE by default but zlib expects it (its own configure script will define it). Fixes a missing prototype for crc32_combine_gen64() on AIX and HP-UX. --- lib/zlib/zconf.h.in | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/zlib/zconf.h.in b/lib/zlib/zconf.h.in index 0b6bd53600..95cb5b818c 100644 --- a/lib/zlib/zconf.h.in +++ b/lib/zlib/zconf.h.in @@ -18,6 +18,19 @@ #undef _LARGE_FILES #undef const +/* + * Configure does not define _LARGEFILE64_SOURCE by default. + * We need to manually define it on AIX and native 64-bit platforms. + */ +#if defined (_LARGE_FILES) || defined (__LP64__) +# ifndef _LFS64_LARGEFILE +# define _LFS64_LARGEFILE 1 +# endif +# ifndef _LARGEFILE64_SOURCE +# define _LARGEFILE64_SOURCE 1 +# endif +#endif + /* We build sudo and its libs with -fvisibility=hidden where supported. */ #ifdef HAVE_DSO_VISIBILITY # if defined(__GNUC__) From 0efd61620298f07c027b46624c91b0a020002856 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 27 Jun 2022 14:01:29 -0600 Subject: [PATCH 006/186] Fix missing prototype warning. --- src/preload.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/preload.c b/src/preload.c index 250ee7efb6..40348dc383 100644 --- a/src/preload.c +++ b/src/preload.c @@ -34,9 +34,9 @@ # endif #endif -#include "sudo_plugin.h" -#include "sudo_compat.h" +#include "sudo.h" #include "sudo_dso.h" +#include "sudo_plugin.h" #ifdef STATIC_SUDOERS_PLUGIN From b3a8cad3461157bffa337ce30d720087d6040f06 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 28 Jun 2022 15:43:27 -0600 Subject: [PATCH 007/186] A typo prevented -Wno-deprecated-declarations from being used on macOS. --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index cbb883e623..22fd7815dc 100755 --- a/configure +++ b/configure @@ -32384,7 +32384,7 @@ printf "%s\n" "$sudo_cv_var_fallthrough_attribute" >&6; } if test X"$enable_werror" = X"yes"; then CFLAGS="${CFLAGS} -Werror" fi - case "$host" in + case "$host_os" in # Avoid unwanted warnings on macOS darwin*) CFLAGS="${CFLAGS} -Wno-deprecated-declarations";; esac diff --git a/configure.ac b/configure.ac index 3bd5437ac8..f903498e05 100644 --- a/configure.ac +++ b/configure.ac @@ -5032,7 +5032,7 @@ if test -n "$GCC"; then if test X"$enable_werror" = X"yes"; then CFLAGS="${CFLAGS} -Werror" fi - case "$host" in + case "$host_os" in # Avoid unwanted warnings on macOS darwin*) CFLAGS="${CFLAGS} -Wno-deprecated-declarations";; esac From 13672f28df17d152d890b551ea659778d31b9273 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 28 Jun 2022 16:33:15 -0600 Subject: [PATCH 008/186] Make sudo pass -Wwrite-strings --- configure | 2 +- configure.ac | 2 +- include/sudo_iolog.h | 2 +- lib/eventlog/eventlog.c | 4 +- lib/eventlog/logwrap.c | 2 +- lib/iolog/host_port.c | 4 +- lib/iolog/regress/host_port/host_port_test.c | 4 +- .../regress/iolog_mkpath/check_iolog_mkpath.c | 4 +- lib/util/aix.c | 10 +- lib/util/getgrouplist.c | 2 +- lib/util/getopt_long.c | 4 +- lib/util/lbuf.c | 4 +- lib/util/logfac.c | 2 +- lib/util/logpri.c | 2 +- lib/util/regress/progname/progname_test.c | 2 +- lib/util/snprintf.c | 6 +- lib/util/sudo_conf.c | 6 +- lib/util/sudo_debug.c | 8 +- logsrvd/logsrvd_conf.c | 4 +- logsrvd/logsrvd_local.c | 4 +- logsrvd/logsrvd_relay.c | 2 +- logsrvd/sendlog.c | 102 ++- plugins/audit_json/audit_json.c | 8 +- plugins/python/python_convmessage.c | 4 +- plugins/python/python_plugin_common.c | 2 +- .../python/regress/check_python_examples.c | 10 +- plugins/python/sudo_python_module.c | 8 +- plugins/sudoers/auth/bsdauth.c | 8 +- plugins/sudoers/auth/pam.c | 2 +- plugins/sudoers/auth/sudo_auth.h | 2 +- plugins/sudoers/cvtsudoers.c | 2 +- plugins/sudoers/cvtsudoers_csv.c | 2 +- plugins/sudoers/cvtsudoers_json.c | 2 +- plugins/sudoers/cvtsudoers_ldif.c | 2 +- plugins/sudoers/cvtsudoers_pwutil.c | 6 +- plugins/sudoers/defaults.c | 2 +- plugins/sudoers/defaults.h | 6 +- plugins/sudoers/editor.c | 9 +- plugins/sudoers/env.c | 4 +- plugins/sudoers/exptilde.c | 2 +- plugins/sudoers/getdate.c | 2 +- plugins/sudoers/getdate.y | 2 +- plugins/sudoers/gram.c | 594 +++++++++--------- plugins/sudoers/gram.h | 3 +- plugins/sudoers/gram.y | 16 +- plugins/sudoers/group_plugin.c | 2 +- plugins/sudoers/insults.h | 2 +- plugins/sudoers/iolog.c | 2 +- plugins/sudoers/ldap.c | 4 +- plugins/sudoers/ldap_conf.c | 3 +- plugins/sudoers/log_client.c | 128 ++-- plugins/sudoers/logging.c | 2 +- plugins/sudoers/parse.c | 4 +- plugins/sudoers/policy.c | 4 +- plugins/sudoers/pwutil.c | 2 +- plugins/sudoers/regress/editor/check_editor.c | 20 +- .../sudoers/regress/exptilde/check_exptilde.c | 6 +- plugins/sudoers/regress/fuzz/fuzz_policy.c | 4 +- plugins/sudoers/regress/fuzz/fuzz_sudoers.c | 26 +- .../regress/iolog_plugin/check_iolog_plugin.c | 9 +- .../sudoers/regress/parser/check_gentime.c | 4 +- .../serialize_list/check_serialize_list.c | 6 +- .../sudoers/regress/unescape/check_unesc.c | 6 +- plugins/sudoers/sudoers.c | 6 +- plugins/sudoers/sudoers.h | 8 +- plugins/sudoers/sudoers_hooks.c | 2 +- plugins/sudoers/sudoreplay.c | 2 +- plugins/sudoers/testsudoers.c | 4 +- plugins/sudoers/visudo.c | 22 +- src/edit_open.c | 9 +- src/exec_common.c | 6 +- src/parse_args.c | 6 +- src/regress/noexec/check_noexec.c | 2 +- src/selinux.c | 7 +- src/sudo.c | 18 +- src/sudo_edit.c | 18 +- src/sudo_intercept.c | 8 +- 77 files changed, 591 insertions(+), 641 deletions(-) diff --git a/configure b/configure index 22fd7815dc..cd658a2ae8 100755 --- a/configure +++ b/configure @@ -32298,7 +32298,7 @@ printf "%s\n" "#define os_init $OS_INIT" >>confdefs.h if test -n "$GCC"; then if test X"$enable_warnings" = X"yes" -o X"$with_devel" = X"yes"; then - CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas -Wmissing-prototypes" + CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas -Wmissing-prototypes -Wwrite-strings" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wshadow" >&5 printf %s "checking whether C compiler accepts -Wshadow... " >&6; } if test ${ax_cv_check_cflags___Wshadow+y} diff --git a/configure.ac b/configure.ac index f903498e05..676166bf52 100644 --- a/configure.ac +++ b/configure.ac @@ -4995,7 +4995,7 @@ if test -n "$GCC"; then dnl dnl Default warnings for development use. dnl - CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas -Wmissing-prototypes" + CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith -Wno-unknown-pragmas -Wmissing-prototypes -Wwrite-strings" AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"]) dnl dnl The fallthrough attribute is supported by gcc 7.0 and clang 10. diff --git a/include/sudo_iolog.h b/include/sudo_iolog.h index 83d48dbd95..90aa2099be 100644 --- a/include/sudo_iolog.h +++ b/include/sudo_iolog.h @@ -95,7 +95,7 @@ struct iolog_path_escape { }; /* host_port.c */ -bool iolog_parse_host_port(char *str, char **hostp, char **portp, bool *tlsp, char *defport, char *defport_tls); +bool iolog_parse_host_port(char *str, char **hostp, char **portp, bool *tlsp, const char *defport, const char *defport_tls); /* iolog_path.c */ bool expand_iolog_path(const char *inpath, char *path, size_t pathlen, const struct iolog_path_escape *escapes, void *closure); diff --git a/lib/eventlog/eventlog.c b/lib/eventlog/eventlog.c index 223ab8a696..15134913c8 100644 --- a/lib/eventlog/eventlog.c +++ b/lib/eventlog/eventlog.c @@ -356,7 +356,7 @@ exec_mailer(int pipein) char *last, *mflags, *p, *argv[MAX_MAILFLAGS + 1]; const char *mpath = evl_conf->mailerpath; int i; - char * const root_envp[] = { + const char * const root_envp[] = { "HOME=/", "PATH=/usr/bin:/bin:/usr/sbin:/sbin", "LOGNAME=root", @@ -409,7 +409,7 @@ exec_mailer(int pipein) } sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys); if (evl_conf->mailuid == ROOT_UID) - execve(mpath, argv, root_envp); + execve(mpath, argv, (char **)root_envp); else execv(mpath, argv); syslog(LOG_ERR, _("unable to execute %s: %m"), mpath); // -V618 diff --git a/lib/eventlog/logwrap.c b/lib/eventlog/logwrap.c index 615598230b..2e69948048 100644 --- a/lib/eventlog/logwrap.c +++ b/lib/eventlog/logwrap.c @@ -35,7 +35,7 @@ size_t eventlog_writeln(FILE *fp, char *line, size_t linelen, size_t maxlen) { - char *indent = ""; + const char *indent = ""; char *beg = line; char *end; int len; diff --git a/lib/iolog/host_port.c b/lib/iolog/host_port.c index ad1a98b278..2b13f574b0 100644 --- a/lib/iolog/host_port.c +++ b/lib/iolog/host_port.c @@ -39,7 +39,7 @@ */ bool iolog_parse_host_port(char *str, char **hostp, char **portp, bool *tlsp, - char *defport, char *defport_tls) + const char *defport, const char *defport_tls) { char *flags, *port, *host = str; bool ret = false; @@ -88,7 +88,7 @@ iolog_parse_host_port(char *str, char **hostp, char **portp, bool *tlsp, } if (port == NULL) - port = tls ? defport_tls : defport; + port = tls ? (char *)defport_tls : (char *)defport; else if (*port == '\0') goto done; diff --git a/lib/iolog/regress/host_port/host_port_test.c b/lib/iolog/regress/host_port/host_port_test.c index 065e216e73..9b504e1fe6 100644 --- a/lib/iolog/regress/host_port/host_port_test.c +++ b/lib/iolog/regress/host_port/host_port_test.c @@ -45,8 +45,8 @@ struct host_port_test { const char *host; /* parsed host */ const char *port; /* parsed port */ bool tls; /* parsed TLS flag */ - char *defport; /* default port */ - char *defport_tls; /* default port */ + const char *defport; /* default port */ + const char *defport_tls; /* default port */ bool ret; /* return value */ }; diff --git a/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c b/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c index 5d05f82395..f0ece1a09e 100644 --- a/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c +++ b/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c @@ -66,7 +66,7 @@ int main(int argc, char *argv[]) { char testdir[] = "mkpath.XXXXXX"; - char *rmargs[] = { "rm", "-rf", NULL, NULL }; + const char *rmargs[] = { "rm", "-rf", NULL, NULL }; int ch, status, ntests = 0, errors = 0; initprogname(argc > 0 ? argv[0] : "check_iolog_mkpath"); @@ -97,7 +97,7 @@ main(int argc, char *argv[]) } /* Clean up (avoid running via shell) */ - execvp("rm", rmargs); + execvp("rm", (char **)rmargs); wait(&status); return errors; diff --git a/lib/util/aix.c b/lib/util/aix.c index 4956373157..8a1c7505a5 100644 --- a/lib/util/aix.c +++ b/lib/util/aix.c @@ -52,8 +52,8 @@ struct aix_limit { int resource; - char *soft; - char *hard; + const char *soft; + const char *hard; int factor; }; @@ -68,11 +68,11 @@ static struct aix_limit aix_limits[] = { }; static int -aix_getlimit(char *user, char *lim, int *valp) +aix_getlimit(const char *user, const char *lim, int *valp) { debug_decl(aix_getlimit, SUDO_DEBUG_UTIL); - if (getuserattr(user, lim, valp, SEC_INT) != 0) + if (getuserattr((char *)user, (char *)lim, valp, SEC_INT) != 0) debug_return_int(-1); debug_return_int(0); } @@ -169,7 +169,7 @@ aix_getauthregistry_v1(char *user, char *saved_registry) sudo_warn("%s", U_("unable to open userdb")); goto done; } - ret = getuserattr(user, S_REGISTRY, ®istry, SEC_CHAR); + ret = getuserattr(user, (char *)S_REGISTRY, ®istry, SEC_CHAR); if (ret == 0) { /* sizeof(authdb_t) is guaranteed to be 16 */ if (strlcpy(saved_registry, registry, 16) >= 16) { diff --git a/lib/util/getgrouplist.c b/lib/util/getgrouplist.c index 125d494602..b6170c6ced 100644 --- a/lib/util/getgrouplist.c +++ b/lib/util/getgrouplist.c @@ -238,7 +238,7 @@ str2grp(const char *instr, int inlen, void *ent, char *buf, int buflen) /* Check for YP inclusion/exclusion entries. */ if (*cp == '+' || *cp == '-') { /* Only the name is required for YP inclusion/exclusion entries. */ - grp->gr_passwd = ""; + grp->gr_passwd = (char *)""; grp->gr_gid = 0; grp->gr_mem = NULL; yp = 1; diff --git a/lib/util/getopt_long.c b/lib/util/getopt_long.c index 3a48f0ebbb..15b04eef9c 100644 --- a/lib/util/getopt_long.c +++ b/lib/util/getopt_long.c @@ -96,7 +96,7 @@ int optreset; /* reset getopt */ #define BADARG ((*options == ':') ? (int)':' : (int)'?') #define INORDER (int)1 -#define EMSG "" +#define EMSG (char *)"" #ifdef GNU_COMPATIBLE #define NO_PREFIX (-1) @@ -202,7 +202,7 @@ parse_long_options(char * const *nargv, const char *options, { char *current_argv, *has_equal; #ifdef GNU_COMPATIBLE - char *current_dash; + const char *current_dash; #endif size_t current_argv_len; int i, match, exact_match, second_partial_match; diff --git a/lib/util/lbuf.c b/lib/util/lbuf.c index f17ae0ca56..735598cc32 100644 --- a/lib/util/lbuf.c +++ b/lib/util/lbuf.c @@ -96,7 +96,7 @@ sudo_lbuf_append_quoted_v1(struct sudo_lbuf *lbuf, const char *set, const char * { int len, saved_len = lbuf->len; bool ret = false; - char *cp, *s; + const char *cp, *s; va_list ap; debug_decl(sudo_lbuf_append_quoted, SUDO_DEBUG_UTIL); @@ -155,7 +155,7 @@ sudo_lbuf_append_v1(struct sudo_lbuf *lbuf, const char *fmt, ...) int len, saved_len = lbuf->len; bool ret = false; va_list ap; - char *s; + const char *s; debug_decl(sudo_lbuf_append, SUDO_DEBUG_UTIL); if (sudo_lbuf_error(lbuf)) diff --git a/lib/util/logfac.c b/lib/util/logfac.c index 97a80d9651..5a97ac3b17 100644 --- a/lib/util/logfac.c +++ b/lib/util/logfac.c @@ -39,7 +39,7 @@ * For converting between syslog numbers and strings. */ struct strmap { - char *name; + const char *name; int num; }; diff --git a/lib/util/logpri.c b/lib/util/logpri.c index 34d0602958..a6503bd762 100644 --- a/lib/util/logpri.c +++ b/lib/util/logpri.c @@ -39,7 +39,7 @@ * For converting between syslog numbers and strings. */ struct strmap { - char *name; + const char *name; int num; }; diff --git a/lib/util/regress/progname/progname_test.c b/lib/util/regress/progname/progname_test.c index 1c7cb13d95..7a0fa5eee6 100644 --- a/lib/util/regress/progname/progname_test.c +++ b/lib/util/regress/progname/progname_test.c @@ -35,7 +35,7 @@ sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) { - char *progbase = "progname_test"; + const char *progbase = "progname_test"; int ch; if (argc > 0) diff --git a/lib/util/snprintf.c b/lib/util/snprintf.c index 76278630c7..f51742275a 100644 --- a/lib/util/snprintf.c +++ b/lib/util/snprintf.c @@ -848,7 +848,7 @@ reswitch: switch (ch) { convbuf = NULL; } if ((wcp = GETARG(wchar_t *)) == NULL) { - cp = "(null)"; + cp = (char *)"(null)"; } else { convbuf = __wcsconv(wcp, prec); if (convbuf == NULL) @@ -858,7 +858,7 @@ reswitch: switch (ch) { } else #endif /* PRINTF_WIDE_CHAR */ if ((cp = GETARG(char *)) == NULL) - cp = "(null)"; + cp = (char *)"(null)"; if (prec >= 0) { /* * can't use strlen; can only look for the @@ -945,7 +945,7 @@ number: if ((dprec = prec) >= 0) break; default: - cp = "bug in vfprintf: bad base"; + cp = (char *)"bug in xxxprintf: bad base"; size = strlen(cp); goto skipsize; } diff --git a/lib/util/sudo_conf.c b/lib/util/sudo_conf.c index 29518d4d97..5357df1d33 100644 --- a/lib/util/sudo_conf.c +++ b/lib/util/sudo_conf.c @@ -68,7 +68,7 @@ struct sudo_conf_path_table { const char *pname; unsigned int pnamelen; bool dynamic; - char *pval; + const char *pval; }; struct sudo_conf_settings { @@ -221,7 +221,7 @@ parse_path(const char *entry, const char *conf_file, unsigned int lineno) } } if (cur->dynamic) - free(cur->pval); + free((char *)cur->pval); cur->pval = pval; cur->dynamic = true; sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %s:%u: Path %s %s", @@ -769,7 +769,7 @@ sudo_conf_clear_paths_v1(void) for (cur = sudo_conf_data.path_table; cur->pname != NULL; cur++) { if (cur->dynamic) - free(cur->pval); + free((char *)cur->pval); cur->pval = NULL; cur->dynamic = false; } diff --git a/lib/util/sudo_debug.c b/lib/util/sudo_debug.c index 3fe9675a35..d78536a0cb 100644 --- a/lib/util/sudo_debug.c +++ b/lib/util/sudo_debug.c @@ -652,7 +652,7 @@ sudo_debug_write2_v1(int fd, const char *func, const char *file, int lineno, /* Append error string if errno is specified. */ if (errnum) { if (len > 0) { - iov[iovcnt].iov_base = ": "; + iov[iovcnt].iov_base = (char *)": "; iov[iovcnt].iov_len = 2; iovcnt++; } @@ -663,7 +663,7 @@ sudo_debug_write2_v1(int fd, const char *func, const char *file, int lineno, /* If function, file and lineno are specified, append them. */ if (func != NULL && file != NULL && lineno != 0) { - iov[iovcnt].iov_base = " @ "; + iov[iovcnt].iov_base = (char *)" @ "; iov[iovcnt].iov_len = 3; iovcnt++; @@ -671,7 +671,7 @@ sudo_debug_write2_v1(int fd, const char *func, const char *file, int lineno, iov[iovcnt].iov_len = strlen(func); iovcnt++; - iov[iovcnt].iov_base = "() "; + iov[iovcnt].iov_base = (char *)"() "; iov[iovcnt].iov_len = 3; iovcnt++; @@ -686,7 +686,7 @@ sudo_debug_write2_v1(int fd, const char *func, const char *file, int lineno, } /* Append newline. */ - iov[iovcnt].iov_base = "\n"; + iov[iovcnt].iov_base = (char *)"\n"; iov[iovcnt].iov_len = 1; iovcnt++; diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index 322cdf34dc..74ce416b81 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -88,13 +88,13 @@ struct logsrvd_config; typedef bool (*logsrvd_conf_cb_t)(struct logsrvd_config *, const char *, size_t); struct logsrvd_config_entry { - char *conf_str; + const char *conf_str; logsrvd_conf_cb_t setter; size_t offset; }; struct logsrvd_config_section { - char *name; + const char *name; struct logsrvd_config_entry *entries; }; diff --git a/logsrvd/logsrvd_local.c b/logsrvd/logsrvd_local.c index 5119d2ef98..9fb03ba7bd 100644 --- a/logsrvd/logsrvd_local.c +++ b/logsrvd/logsrvd_local.c @@ -329,11 +329,11 @@ store_exit_info_json(int dfd, struct eventlog *evlog) } /* Append the exit data and close the object. */ - iov[0].iov_base = ","; + iov[0].iov_base = (char *)","; iov[0].iov_len = 1; iov[1].iov_base = sudo_json_get_buf(&json); iov[1].iov_len = sudo_json_get_len(&json); - iov[2].iov_base = "\n}\n"; + iov[2].iov_base = (char *)"\n}\n"; iov[2].iov_len = 3; if (writev(fd, iov, 3) == -1) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, diff --git a/logsrvd/logsrvd_relay.c b/logsrvd/logsrvd_relay.c index 6e20b3cbcd..13bf82c437 100644 --- a/logsrvd/logsrvd_relay.c +++ b/logsrvd/logsrvd_relay.c @@ -234,7 +234,7 @@ fmt_client_hello(struct connection_closure *closure) debug_decl(fmt_client_hello, SUDO_DEBUG_UTIL); sudo_debug_printf(SUDO_DEBUG_INFO, "%s: sending ClientHello", __func__); - hello_msg.client_id = "Sudo Logsrvd " PACKAGE_VERSION; + hello_msg.client_id = (char *)"Sudo Logsrvd " PACKAGE_VERSION; client_msg.u.hello_msg = &hello_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_HELLO_MSG; diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 9b61cb812e..0865a97702 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -355,7 +355,7 @@ fmt_client_hello(struct client_closure *closure) debug_decl(fmt_client_hello, SUDO_DEBUG_UTIL); sudo_debug_printf(SUDO_DEBUG_INFO, "%s: sending ClientHello", __func__); - hello_msg.client_id = "Sudo Sendlog " PACKAGE_VERSION; + hello_msg.client_id = (char *)"Sudo Sendlog " PACKAGE_VERSION; /* Schedule ClientMessage */ client_msg.u.hello_msg = &hello_msg; @@ -549,82 +549,52 @@ fmt_info_messages(const struct eventlog *evlog, char *hostname, info_message__init(info_msgs[n]); } +#define fill_str(_n, _v) do { \ + info_msgs[n]->key = (char *)(_n); \ + info_msgs[n]->u.strval = (_v); \ + info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; \ + n++; \ +} while (0) + +#define fill_strlist(_n, _v) do { \ + info_msgs[n]->key = (char *)(_n); \ + info_msgs[n]->u.strlistval = (_v); \ + info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; \ + n++; \ +} while (0) + +#define fill_num(_n, _v) do { \ + info_msgs[n]->key = (char *)(_n); \ + info_msgs[n]->u.numval = (_v); \ + info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; \ + n++; \ +} while (0) + /* Fill in info_msgs */ n = 0; - info_msgs[n]->key = "command"; - info_msgs[n]->u.strval = evlog->command; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - - info_msgs[n]->key = "columns"; - info_msgs[n]->u.numval = evlog->columns; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; - - info_msgs[n]->key = "lines"; - info_msgs[n]->u.numval = evlog->lines; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; - - info_msgs[n]->key = "runargv"; - info_msgs[n]->u.strlistval = runargv; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; + fill_num("columns", evlog->columns); + fill_str("command", evlog->command); + fill_num("lines", evlog->lines); + fill_strlist("runargv", runargv); runargv = NULL; - n++; - if (runenv != NULL) { - info_msgs[n]->key = "runenv"; - info_msgs[n]->u.strlistval = runenv; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; + fill_strlist("runenv", runenv); runenv = NULL; - n++; } - if (evlog->rungid != (gid_t)-1) { - info_msgs[n]->key = "rungid"; - info_msgs[n]->u.numval = evlog->rungid; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; + fill_num("rungid", evlog->rungid); } - if (evlog->rungroup != NULL) { - info_msgs[n]->key = "rungroup"; - info_msgs[n]->u.strval = evlog->rungroup; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; + fill_str("rungroup", evlog->rungroup); } - if (evlog->runuid != (uid_t)-1) { - info_msgs[n]->key = "runuid"; - info_msgs[n]->u.numval = evlog->runuid; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; - } - - info_msgs[n]->key = "runuser"; - info_msgs[n]->u.strval = evlog->runuser; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - - info_msgs[n]->key = "submitcwd"; - info_msgs[n]->u.strval = evlog->cwd; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - - info_msgs[n]->key = "submithost"; - info_msgs[n]->u.strval = hostname; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - - info_msgs[n]->key = "submituser"; - info_msgs[n]->u.strval = evlog->submituser; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - - info_msgs[n]->key = "ttyname"; - info_msgs[n]->u.strval = evlog->ttyname; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; + fill_num("runuid", evlog->runuid); + } + fill_str("runuser", evlog->runuser); + fill_str("submitcwd", evlog->cwd); + fill_str("submithost", hostname); + fill_str("submituser", evlog->submituser); + fill_str("ttyname", evlog->ttyname); /* Update n_info_msgs. */ *n_info_msgs = n; diff --git a/plugins/audit_json/audit_json.c b/plugins/audit_json/audit_json.c index c6c1f73f86..96ada081c8 100644 --- a/plugins/audit_json/audit_json.c +++ b/plugins/audit_json/audit_json.c @@ -68,7 +68,7 @@ static struct audit_state { } state = { -1 }; /* Filter out entries in settings[] that are not really options. */ -char * const settings_filter[] = { +const char * const settings_filter[] = { "debug_flags", "max_groups", "network_addrs", @@ -282,9 +282,9 @@ add_array(struct json_container *json, const char *name, char * const * array) } static bool -filter_key_value(const char *kv, char * const * filter) +filter_key_value(const char *kv, const char * const * filter) { - char * const *cur; + const char * const *cur; const char *cp; size_t namelen; @@ -300,7 +300,7 @@ filter_key_value(const char *kv, char * const * filter) static bool add_key_value_object(struct json_container *json, const char *name, - char * const * array, char * const * filter) + char * const * array, const char * const * filter) { char * const *cur; const char *cp; diff --git a/plugins/python/python_convmessage.c b/plugins/python/python_convmessage.c index 14283dcd70..7b2aa6d0e8 100644 --- a/plugins/python/python_convmessage.c +++ b/plugins/python/python_convmessage.c @@ -36,8 +36,8 @@ _sudo_ConvMessage__Init(PyObject *py_self, PyObject *py_args, PyObject *py_kwarg struct sudo_conv_message conv_message = { 0, 0, NULL }; - static char *keywords[] = { "self", "msg_type", "msg", "timeout", NULL }; - if (!PyArg_ParseTupleAndKeywords(py_args ? py_args : py_empty, py_kwargs, "Ois|i:sudo.ConvMessage", keywords, + static const char *keywords[] = { "self", "msg_type", "msg", "timeout", NULL }; + if (!PyArg_ParseTupleAndKeywords(py_args ? py_args : py_empty, py_kwargs, "Ois|i:sudo.ConvMessage", (char **)keywords, &py_self, &(conv_message.msg_type), &(conv_message.msg), &(conv_message.timeout))) goto cleanup; diff --git a/plugins/python/python_plugin_common.c b/plugins/python/python_plugin_common.c index d643f73062..a583a5e58b 100644 --- a/plugins/python/python_plugin_common.c +++ b/plugins/python/python_plugin_common.c @@ -101,7 +101,7 @@ _import_module(const char *path) if (strlcpy(path_copy, path, sizeof(path_copy)) >= sizeof(path_copy)) debug_return_ptr(NULL); - char *module_dir = path_copy; + const char *module_dir = path_copy; char *module_name = strrchr(path_copy, '/'); if (module_name == NULL) { module_name = path_copy; diff --git a/plugins/python/regress/check_python_examples.c b/plugins/python/regress/check_python_examples.c index dfee438c5e..565d0deb66 100644 --- a/plugins/python/regress/check_python_examples.c +++ b/plugins/python/regress/check_python_examples.c @@ -106,11 +106,11 @@ init(void) memset(&data, 0, sizeof(data)); memset(&example_pwd, 0, sizeof(example_pwd)); - example_pwd.pw_name = "pw_name"; - example_pwd.pw_passwd = "pw_passwd"; - example_pwd.pw_gecos = "pw_gecos"; - example_pwd.pw_shell ="pw_shell"; - example_pwd.pw_dir = "pw_dir"; + example_pwd.pw_name = (char *)"pw_name"; + example_pwd.pw_passwd = (char *)"pw_passwd"; + example_pwd.pw_gecos = (char *)"pw_gecos"; + example_pwd.pw_shell = (char *)"pw_shell"; + example_pwd.pw_dir = (char *)"pw_dir"; example_pwd.pw_uid = (uid_t)1001; example_pwd.pw_gid = (gid_t)101; diff --git a/plugins/python/sudo_python_module.c b/plugins/python/sudo_python_module.c index 90cef98fae..ee94101c96 100644 --- a/plugins/python/sudo_python_module.c +++ b/plugins/python/sudo_python_module.c @@ -79,8 +79,8 @@ _parse_log_function_args(PyObject *py_args, PyObject *py_kwargs, char **args_joi if (py_empty == NULL) goto cleanup; - static char *keywords[] = { "sep", "end", NULL }; - if (py_kwargs != NULL && !PyArg_ParseTupleAndKeywords(py_empty, py_kwargs, "|zz:sudo.log", keywords, &sep, end)) + static const char *keywords[] = { "sep", "end", NULL }; + if (py_kwargs != NULL && !PyArg_ParseTupleAndKeywords(py_empty, py_kwargs, "|zz:sudo.log", (char **)keywords, &sep, end)) goto cleanup; if (sep == NULL) @@ -330,8 +330,8 @@ python_sudo_conversation(PyObject *Py_UNUSED(self), PyObject *py_args, PyObject if (py_empty == NULL) goto cleanup; - static char *keywords[] = { "on_suspend", "on_resume", NULL }; - if (py_kwargs != NULL && !PyArg_ParseTupleAndKeywords(py_empty, py_kwargs, "|OO:sudo.conv", keywords, + static const char *keywords[] = { "on_suspend", "on_resume", NULL }; + if (py_kwargs != NULL && !PyArg_ParseTupleAndKeywords(py_empty, py_kwargs, "|OO:sudo.conv", (char **)keywords, &callback_closure.py_on_suspend, &callback_closure.py_on_resume)) goto cleanup; diff --git a/plugins/sudoers/auth/bsdauth.c b/plugins/sudoers/auth/bsdauth.c index 356efd7131..c34785a3b7 100644 --- a/plugins/sudoers/auth/bsdauth.c +++ b/plugins/sudoers/auth/bsdauth.c @@ -68,7 +68,7 @@ bsdauth_init(struct passwd *pw, sudo_auth *auth) if (pw->pw_class && *pw->pw_class) state.lc = login_getclass(pw->pw_class); else - state.lc = login_getclass(pw->pw_uid ? LOGIN_DEFCLASS : LOGIN_DEFROOTCLASS); + state.lc = login_getclass(pw->pw_uid ? (char *)LOGIN_DEFCLASS : (char *)LOGIN_DEFROOTCLASS); if (state.lc == NULL) { log_warning(0, N_("unable to get login class for user %s"), pw->pw_name); @@ -82,7 +82,7 @@ bsdauth_init(struct passwd *pw, sudo_auth *auth) } /* XXX - maybe check the auth style earlier? */ - login_style = login_getstyle(state.lc, login_style, "auth-sudo"); + login_style = login_getstyle(state.lc, login_style, (char *)"auth-sudo"); if (login_style == NULL) { log_warningx(0, N_("invalid authentication type")); auth_close(state.as); @@ -170,7 +170,7 @@ bsdauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_con if (!pass) debug_return_int(AUTH_INTR); - if ((s = auth_getvalue(as, "errormsg")) != NULL) + if ((s = auth_getvalue(as, (char *)"errormsg")) != NULL) log_warningx(0, "%s", s); debug_return_int(AUTH_FAILURE); } @@ -181,7 +181,7 @@ bsdauth_approval(struct passwd *pw, sudo_auth *auth, bool exempt) struct bsdauth_state *state = auth->data; debug_decl(bsdauth_approval, SUDOERS_DEBUG_AUTH); - if (auth_approval(state->as, state->lc, pw->pw_name, "auth-sudo") == 0) { + if (auth_approval(state->as, state->lc, pw->pw_name, (char *)"auth-sudo") == 0) { if (auth_getstate(state->as) & AUTH_EXPIRED) log_warningx(0, "%s", N_("your account has expired")); else diff --git a/plugins/sudoers/auth/pam.c b/plugins/sudoers/auth/pam.c index eef26bb8a9..4f6e89c85d 100644 --- a/plugins/sudoers/auth/pam.c +++ b/plugins/sudoers/auth/pam.c @@ -90,7 +90,7 @@ static int converse(int, PAM_CONST struct pam_message **, struct pam_response **, void *); static struct sudo_conv_callback *conv_callback; static struct pam_conv pam_conv = { converse, &conv_callback }; -static char *def_prompt = PASSPROMPT; +static const char *def_prompt = PASSPROMPT; static bool getpass_error; static bool noninteractive; static pam_handle_t *pamh; diff --git a/plugins/sudoers/auth/sudo_auth.h b/plugins/sudoers/auth/sudo_auth.h index d8780c4968..de41e6fdcf 100644 --- a/plugins/sudoers/auth/sudo_auth.h +++ b/plugins/sudoers/auth/sudo_auth.h @@ -29,7 +29,7 @@ typedef struct sudo_auth { int flags; /* various flags, see below */ int status; /* status from verify routine */ - char *name; /* name of the method as a string */ + const char *name; /* name of the method as a string */ void *data; /* method-specific data pointer */ int (*init)(struct passwd *pw, struct sudo_auth *auth); int (*setup)(struct passwd *pw, char **prompt, struct sudo_auth *auth); diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index 847c5c7503..c07159d482 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -787,7 +787,7 @@ userlist_matches_filter(struct sudoers_parse_tree *parse_tree, * can do its thing. */ memset(&pw, 0, sizeof(pw)); - pw.pw_name = "_nobody"; + pw.pw_name = (char *)"_nobody"; pw.pw_uid = (uid_t)-1; pw.pw_gid = (gid_t)-1; diff --git a/plugins/sudoers/cvtsudoers_csv.c b/plugins/sudoers/cvtsudoers_csv.c index 63512c5dc7..8d8e397150 100644 --- a/plugins/sudoers/cvtsudoers_csv.c +++ b/plugins/sudoers/cvtsudoers_csv.c @@ -167,7 +167,7 @@ format_cmnd(struct sudo_command *c, bool negated) int len; debug_decl(format_cmnd, SUDOERS_DEBUG_UTIL); - cmnd = c->cmnd ? c->cmnd : "ALL"; + cmnd = c->cmnd ? c->cmnd : (char *)"ALL"; bufsiz = negated + strlen(cmnd) + 1; if (c->args != NULL) bufsiz += 1 + strlen(c->args); diff --git a/plugins/sudoers/cvtsudoers_json.c b/plugins/sudoers/cvtsudoers_json.c index a89ef82b31..be5d55443f 100644 --- a/plugins/sudoers/cvtsudoers_json.c +++ b/plugins/sudoers/cvtsudoers_json.c @@ -77,7 +77,7 @@ print_command_json(struct json_container *jsonc, const char *name, bool negated) } } value.type = JSON_STRING; - value.u.string = cmnd ? cmnd : "ALL"; + value.u.string = cmnd ? cmnd : (char *)"ALL"; if (!negated && TAILQ_EMPTY(&c->digests)) { /* Print as { "command": "command and args" } */ diff --git a/plugins/sudoers/cvtsudoers_ldif.c b/plugins/sudoers/cvtsudoers_ldif.c index 91acfcd860..b3ddf2cb24 100644 --- a/plugins/sudoers/cvtsudoers_ldif.c +++ b/plugins/sudoers/cvtsudoers_ldif.c @@ -219,7 +219,7 @@ format_cmnd(struct sudo_command *c, bool negated) int len; debug_decl(format_cmnd, SUDOERS_DEBUG_UTIL); - cmnd = c->cmnd ? c->cmnd : "ALL"; + cmnd = c->cmnd ? c->cmnd : (char *)"ALL"; bufsiz = negated + strlen(cmnd) + 1; if (c->args != NULL) bufsiz += 1 + strlen(c->args); diff --git a/plugins/sudoers/cvtsudoers_pwutil.c b/plugins/sudoers/cvtsudoers_pwutil.c index a7b163e914..6b30d03ac8 100644 --- a/plugins/sudoers/cvtsudoers_pwutil.c +++ b/plugins/sudoers/cvtsudoers_pwutil.c @@ -126,11 +126,11 @@ cvtsudoers_make_pwitem(uid_t uid, const char *name) /* Fake up a passwd struct. */ memset(&pw, 0, sizeof(pw)); pw.pw_name = name ? s->str : uidstr; - pw.pw_passwd = "*"; + pw.pw_passwd = (char *)"*"; pw.pw_uid = uid; pw.pw_gid = (gid_t)-1; - pw.pw_shell = _PATH_BSHELL; - pw.pw_dir = "/"; + pw.pw_shell = (char *)_PATH_BSHELL; + pw.pw_dir = (char *)"/"; /* Allocate in one big chunk for easy freeing. */ total = sizeof(*pwitem); diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index ec6b64fe9b..9b8c6a76b2 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -89,7 +89,7 @@ dump_defaults(void) struct sudo_defs_types *cur; struct list_member *item; struct def_values *def; - char *desc; + const char *desc; debug_decl(dump_defaults, SUDOERS_DEBUG_DEFAULTS); for (cur = sudo_defs_table; cur->name; cur++) { diff --git a/plugins/sudoers/defaults.h b/plugins/sudoers/defaults.h index 7e9d44fb68..cfbb662699 100644 --- a/plugins/sudoers/defaults.h +++ b/plugins/sudoers/defaults.h @@ -43,7 +43,7 @@ enum list_ops { /* Mapping of tuple string value to enum def_tuple. */ struct def_values { - char *sval; /* string value */ + const char *sval; /* string value */ enum def_tuple nval;/* numeric value */ }; @@ -62,9 +62,9 @@ union sudo_defs_val { * Structure describing compile-time and run-time options. */ struct sudo_defs_types { - char *name; + const char *name; int type; - char *desc; + const char *desc; struct def_values *values; bool (*callback)(const char *file, int line, int column, const union sudo_defs_val *, int op); union sudo_defs_val sd_un; diff --git a/plugins/sudoers/editor.c b/plugins/sudoers/editor.c index db55fc7199..7a6164f695 100644 --- a/plugins/sudoers/editor.c +++ b/plugins/sudoers/editor.c @@ -126,7 +126,7 @@ copy_arg(const char *src, size_t len) * as well as the argument vector. */ static char * -resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, +resolve_editor(const char *ed, size_t edlen, int nfiles, char * const *files, int *argc_out, char ***argv_out, char * const *allowlist) { char **nargv = NULL, *editor = NULL, *editor_path = NULL; @@ -177,7 +177,7 @@ resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, goto oom; } if (nfiles != 0) { - nargv[nargc++] = "--"; + nargv[nargc++] = (char *)"--"; while (nfiles--) nargv[nargc++] = *files++; } @@ -211,10 +211,11 @@ resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, * as well as the argument vector. */ char * -find_editor(int nfiles, char **files, int *argc_out, char ***argv_out, +find_editor(int nfiles, char * const *files, int *argc_out, char ***argv_out, char * const *allowlist, const char **env_editor) { - char *ev[3], *editor_path = NULL; + char *editor_path = NULL; + const char *ev[3]; unsigned int i; debug_decl(find_editor, SUDOERS_DEBUG_UTIL); diff --git a/plugins/sudoers/env.c b/plugins/sudoers/env.c index 82dc618323..99b6743003 100644 --- a/plugins/sudoers/env.c +++ b/plugins/sudoers/env.c @@ -818,13 +818,13 @@ env_update_didvar(const char *ep, unsigned int *didvar) } #define CHECK_PUTENV(a, b, c) do { \ - if (sudo_putenv((a), (b), (c)) == -1) { \ + if (sudo_putenv((char *)(a), (b), (c)) == -1) { \ goto bad; \ } \ } while (0) #define CHECK_SETENV2(a, b, c, d) do { \ - if (sudo_setenv2((a), (b), (c), (d)) == -1) { \ + if (sudo_setenv2((char *)(a), (b), (c), (d)) == -1) { \ goto bad; \ } \ } while (0) diff --git a/plugins/sudoers/exptilde.c b/plugins/sudoers/exptilde.c index 00ab0ac5c8..b6e8a602bd 100644 --- a/plugins/sudoers/exptilde.c +++ b/plugins/sudoers/exptilde.c @@ -74,7 +74,7 @@ expand_tilde(char **path, const char *user) *slash = '\0'; opath = slash + 1; } else { - opath = ""; + opath = (char *)""; } } pw = sudo_getpwnam(user); diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index 5ff0a5d163..1a7c11dbbd 100644 --- a/plugins/sudoers/getdate.c +++ b/plugins/sudoers/getdate.c @@ -58,7 +58,7 @@ ** An entry in the lexical lookup table. */ typedef struct _TABLE { - char *name; + const char *name; int type; time_t value; } TABLE; diff --git a/plugins/sudoers/getdate.y b/plugins/sudoers/getdate.y index 12efbda1f3..8511d709bc 100644 --- a/plugins/sudoers/getdate.y +++ b/plugins/sudoers/getdate.y @@ -41,7 +41,7 @@ ** An entry in the lexical lookup table. */ typedef struct _TABLE { - char *name; + const char *name; int type; time_t value; } TABLE; diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index e78a36c361..c7f7693e5a 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -341,9 +341,10 @@ union YYSTYPE struct command_options options; struct cmndtag tag; char *string; + const char *cstring; int tok; -#line 341 "gram.c" +#line 342 "gram.c" }; typedef union YYSTYPE YYSTYPE; @@ -874,22 +875,22 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 200, 200, 203, 206, 207, 210, 213, 216, 225, - 234, 240, 243, 246, 249, 252, 256, 260, 264, 268, - 274, 277, 283, 286, 292, 293, 300, 309, 318, 328, - 338, 350, 351, 356, 362, 379, 383, 389, 398, 406, - 415, 424, 435, 436, 498, 568, 577, 586, 595, 606, - 607, 614, 617, 631, 635, 641, 657, 673, 678, 682, - 687, 692, 697, 702, 706, 711, 714, 719, 735, 746, - 758, 769, 787, 788, 789, 790, 791, 792, 793, 794, - 795, 796, 797, 800, 806, 809, 814, 819, 828, 837, - 849, 856, 863, 870, 877, 886, 889, 892, 895, 898, - 901, 904, 907, 910, 913, 916, 919, 922, 925, 928, - 931, 934, 939, 953, 962, 985, 986, 989, 989, 1001, - 1004, 1005, 1012, 1013, 1016, 1016, 1028, 1031, 1032, 1039, - 1040, 1043, 1043, 1055, 1058, 1059, 1062, 1062, 1074, 1077, - 1078, 1085, 1089, 1095, 1104, 1112, 1121, 1130, 1141, 1142, - 1149, 1153, 1159, 1168, 1176 + 0, 201, 201, 204, 207, 208, 211, 214, 217, 226, + 235, 241, 244, 247, 250, 253, 257, 261, 265, 269, + 275, 278, 284, 287, 293, 294, 301, 310, 319, 329, + 339, 351, 352, 357, 363, 380, 384, 390, 399, 407, + 416, 425, 436, 437, 499, 569, 578, 587, 596, 607, + 608, 615, 618, 632, 636, 642, 658, 674, 679, 683, + 688, 693, 698, 703, 707, 712, 715, 720, 736, 747, + 759, 770, 788, 789, 790, 791, 792, 793, 794, 795, + 796, 797, 798, 801, 807, 810, 815, 820, 829, 838, + 850, 857, 864, 871, 878, 887, 890, 893, 896, 899, + 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, + 932, 935, 940, 954, 963, 986, 987, 990, 990, 1002, + 1005, 1006, 1013, 1014, 1017, 1017, 1029, 1032, 1033, 1040, + 1041, 1044, 1044, 1056, 1059, 1060, 1063, 1063, 1075, 1078, + 1079, 1086, 1090, 1096, 1105, 1113, 1122, 1131, 1142, 1143, + 1150, 1154, 1160, 1169, 1177 }; #endif @@ -1647,31 +1648,31 @@ yyparse (void) switch (yyn) { case 2: /* file: %empty */ -#line 200 "gram.y" +#line 201 "gram.y" { ; /* empty file */ } -#line 1649 "gram.c" +#line 1650 "gram.c" break; case 6: /* entry: '\n' */ -#line 210 "gram.y" +#line 211 "gram.y" { ; /* blank line */ } -#line 1657 "gram.c" +#line 1658 "gram.c" break; case 7: /* entry: error '\n' */ -#line 213 "gram.y" +#line 214 "gram.y" { yyerrok; } -#line 1665 "gram.c" +#line 1666 "gram.c" break; case 8: /* entry: include */ -#line 216 "gram.y" +#line 217 "gram.y" { if (!push_include((yyvsp[0].string), false)) { parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); @@ -1681,11 +1682,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); free((yyvsp[0].string)); } -#line 1679 "gram.c" +#line 1680 "gram.c" break; case 9: /* entry: includedir */ -#line 225 "gram.y" +#line 226 "gram.y" { if (!push_include((yyvsp[0].string), true)) { parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); @@ -1695,143 +1696,143 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); free((yyvsp[0].string)); } -#line 1693 "gram.c" +#line 1694 "gram.c" break; case 10: /* entry: userlist privileges '\n' */ -#line 234 "gram.y" +#line 235 "gram.y" { if (!add_userspec((yyvsp[-2].member), (yyvsp[-1].privilege))) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -#line 1704 "gram.c" +#line 1705 "gram.c" break; case 11: /* entry: USERALIAS useraliases '\n' */ -#line 240 "gram.y" +#line 241 "gram.y" { ; } -#line 1712 "gram.c" +#line 1713 "gram.c" break; case 12: /* entry: HOSTALIAS hostaliases '\n' */ -#line 243 "gram.y" +#line 244 "gram.y" { ; } -#line 1720 "gram.c" +#line 1721 "gram.c" break; case 13: /* entry: CMNDALIAS cmndaliases '\n' */ -#line 246 "gram.y" +#line 247 "gram.y" { ; } -#line 1728 "gram.c" +#line 1729 "gram.c" break; case 14: /* entry: RUNASALIAS runasaliases '\n' */ -#line 249 "gram.y" +#line 250 "gram.y" { ; } -#line 1736 "gram.c" +#line 1737 "gram.c" break; case 15: /* entry: DEFAULTS defaults_list '\n' */ -#line 252 "gram.y" +#line 253 "gram.y" { if (!add_defaults(DEFAULTS, NULL, (yyvsp[-1].defaults))) YYERROR; } -#line 1745 "gram.c" +#line 1746 "gram.c" break; case 16: /* entry: DEFAULTS_USER userlist defaults_list '\n' */ -#line 256 "gram.y" +#line 257 "gram.y" { if (!add_defaults(DEFAULTS_USER, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1754 "gram.c" +#line 1755 "gram.c" break; case 17: /* entry: DEFAULTS_RUNAS userlist defaults_list '\n' */ -#line 260 "gram.y" +#line 261 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1763 "gram.c" +#line 1764 "gram.c" break; case 18: /* entry: DEFAULTS_HOST hostlist defaults_list '\n' */ -#line 264 "gram.y" +#line 265 "gram.y" { if (!add_defaults(DEFAULTS_HOST, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1772 "gram.c" +#line 1773 "gram.c" break; case 19: /* entry: DEFAULTS_CMND cmndlist defaults_list '\n' */ -#line 268 "gram.y" +#line 269 "gram.y" { if (!add_defaults(DEFAULTS_CMND, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -#line 1781 "gram.c" +#line 1782 "gram.c" break; case 20: /* include: INCLUDE WORD '\n' */ -#line 274 "gram.y" +#line 275 "gram.y" { (yyval.string) = (yyvsp[-1].string); } -#line 1789 "gram.c" +#line 1790 "gram.c" break; case 21: /* include: INCLUDE WORD error '\n' */ -#line 277 "gram.y" +#line 278 "gram.y" { yyerrok; (yyval.string) = (yyvsp[-2].string); } -#line 1798 "gram.c" +#line 1799 "gram.c" break; case 22: /* includedir: INCLUDEDIR WORD '\n' */ -#line 283 "gram.y" +#line 284 "gram.y" { (yyval.string) = (yyvsp[-1].string); } -#line 1806 "gram.c" +#line 1807 "gram.c" break; case 23: /* includedir: INCLUDEDIR WORD error '\n' */ -#line 286 "gram.y" +#line 287 "gram.y" { yyerrok; (yyval.string) = (yyvsp[-2].string); } -#line 1815 "gram.c" +#line 1816 "gram.c" break; case 25: /* defaults_list: defaults_list ',' defaults_entry */ -#line 293 "gram.y" +#line 294 "gram.y" { parser_leak_remove(LEAK_DEFAULTS, (yyvsp[0].defaults)); HLTQ_CONCAT((yyvsp[-2].defaults), (yyvsp[0].defaults), entries); (yyval.defaults) = (yyvsp[-2].defaults); } -#line 1825 "gram.c" +#line 1826 "gram.c" break; case 26: /* defaults_entry: DEFVAR */ -#line 300 "gram.y" +#line 301 "gram.y" { (yyval.defaults) = new_default((yyvsp[0].string), NULL, true); if ((yyval.defaults) == NULL) { @@ -1841,11 +1842,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DEFAULTS, (yyval.defaults)); } -#line 1839 "gram.c" +#line 1840 "gram.c" break; case 27: /* defaults_entry: '!' DEFVAR */ -#line 309 "gram.y" +#line 310 "gram.y" { (yyval.defaults) = new_default((yyvsp[0].string), NULL, false); if ((yyval.defaults) == NULL) { @@ -1855,11 +1856,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DEFAULTS, (yyval.defaults)); } -#line 1853 "gram.c" +#line 1854 "gram.c" break; case 28: /* defaults_entry: DEFVAR '=' WORD */ -#line 318 "gram.y" +#line 319 "gram.y" { (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), true); if ((yyval.defaults) == NULL) { @@ -1870,11 +1871,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DEFAULTS, (yyval.defaults)); } -#line 1868 "gram.c" +#line 1869 "gram.c" break; case 29: /* defaults_entry: DEFVAR '+' WORD */ -#line 328 "gram.y" +#line 329 "gram.y" { (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), '+'); if ((yyval.defaults) == NULL) { @@ -1885,11 +1886,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DEFAULTS, (yyval.defaults)); } -#line 1883 "gram.c" +#line 1884 "gram.c" break; case 30: /* defaults_entry: DEFVAR '-' WORD */ -#line 338 "gram.y" +#line 339 "gram.y" { (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), '-'); if ((yyval.defaults) == NULL) { @@ -1900,30 +1901,30 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DEFAULTS, (yyval.defaults)); } -#line 1898 "gram.c" +#line 1899 "gram.c" break; case 32: /* privileges: privileges ':' privilege */ -#line 351 "gram.y" +#line 352 "gram.y" { parser_leak_remove(LEAK_PRIVILEGE, (yyvsp[0].privilege)); HLTQ_CONCAT((yyvsp[-2].privilege), (yyvsp[0].privilege), entries); (yyval.privilege) = (yyvsp[-2].privilege); } -#line 1908 "gram.c" +#line 1909 "gram.c" break; case 33: /* privileges: privileges ':' error */ -#line 356 "gram.y" +#line 357 "gram.y" { yyerrok; (yyval.privilege) = (yyvsp[-2].privilege); } -#line 1917 "gram.c" +#line 1918 "gram.c" break; case 34: /* privilege: hostlist '=' cmndspeclist */ -#line 362 "gram.y" +#line 363 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1939,29 +1940,29 @@ yyparse (void) HLTQ_INIT(p, entries); (yyval.privilege) = p; } -#line 1937 "gram.c" +#line 1938 "gram.c" break; case 35: /* ophost: host */ -#line 379 "gram.y" +#line 380 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 1946 "gram.c" +#line 1947 "gram.c" break; case 36: /* ophost: '!' host */ -#line 383 "gram.y" +#line 384 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 1955 "gram.c" +#line 1956 "gram.c" break; case 37: /* host: ALIAS */ -#line 389 "gram.y" +#line 390 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -1971,11 +1972,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 1969 "gram.c" +#line 1970 "gram.c" break; case 38: /* host: ALL */ -#line 398 "gram.y" +#line 399 "gram.y" { (yyval.member) = new_member(NULL, ALL); if ((yyval.member) == NULL) { @@ -1984,11 +1985,11 @@ yyparse (void) } parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 1982 "gram.c" +#line 1983 "gram.c" break; case 39: /* host: NETGROUP */ -#line 406 "gram.y" +#line 407 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), NETGROUP); if ((yyval.member) == NULL) { @@ -1998,11 +1999,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 1996 "gram.c" +#line 1997 "gram.c" break; case 40: /* host: NTWKADDR */ -#line 415 "gram.y" +#line 416 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), NTWKADDR); if ((yyval.member) == NULL) { @@ -2012,11 +2013,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 2010 "gram.c" +#line 2011 "gram.c" break; case 41: /* host: WORD */ -#line 424 "gram.y" +#line 425 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), WORD); if ((yyval.member) == NULL) { @@ -2026,11 +2027,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 2024 "gram.c" +#line 2025 "gram.c" break; case 43: /* cmndspeclist: cmndspeclist ',' cmndspec */ -#line 436 "gram.y" +#line 437 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST((yyvsp[-2].cmndspec), cmndspec, entries); @@ -2091,11 +2092,11 @@ yyparse (void) } (yyval.cmndspec) = (yyvsp[-2].cmndspec); } -#line 2089 "gram.c" +#line 2090 "gram.c" break; case 44: /* cmndspec: runasspec options cmndtag digcmnd */ -#line 498 "gram.y" +#line 499 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -2164,11 +2165,11 @@ yyparse (void) cs->tags.setenv = IMPLIED; (yyval.cmndspec) = cs; } -#line 2162 "gram.c" +#line 2163 "gram.c" break; case 45: /* digestspec: SHA224_TOK ':' DIGEST */ -#line 568 "gram.y" +#line 569 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA224, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2178,11 +2179,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DIGEST, (yyval.digest)); } -#line 2176 "gram.c" +#line 2177 "gram.c" break; case 46: /* digestspec: SHA256_TOK ':' DIGEST */ -#line 577 "gram.y" +#line 578 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA256, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2192,11 +2193,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DIGEST, (yyval.digest)); } -#line 2190 "gram.c" +#line 2191 "gram.c" break; case 47: /* digestspec: SHA384_TOK ':' DIGEST */ -#line 586 "gram.y" +#line 587 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA384, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2206,11 +2207,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DIGEST, (yyval.digest)); } -#line 2204 "gram.c" +#line 2205 "gram.c" break; case 48: /* digestspec: SHA512_TOK ':' DIGEST */ -#line 595 "gram.y" +#line 596 "gram.y" { (yyval.digest) = new_digest(SUDO_DIGEST_SHA512, (yyvsp[0].string)); if ((yyval.digest) == NULL) { @@ -2220,29 +2221,29 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_DIGEST, (yyval.digest)); } -#line 2218 "gram.c" +#line 2219 "gram.c" break; case 50: /* digestlist: digestlist ',' digestspec */ -#line 607 "gram.y" +#line 608 "gram.y" { parser_leak_remove(LEAK_DIGEST, (yyvsp[0].digest)); HLTQ_CONCAT((yyvsp[-2].digest), (yyvsp[0].digest), entries); (yyval.digest) = (yyvsp[-2].digest); } -#line 2228 "gram.c" +#line 2229 "gram.c" break; case 51: /* digcmnd: opcmnd */ -#line 614 "gram.y" +#line 615 "gram.y" { (yyval.member) = (yyvsp[0].member); } -#line 2236 "gram.c" +#line 2237 "gram.c" break; case 52: /* digcmnd: digestlist opcmnd */ -#line 617 "gram.y" +#line 618 "gram.y" { struct sudo_command *c = (struct sudo_command *) (yyvsp[0].member)->name; @@ -2255,29 +2256,29 @@ yyparse (void) HLTQ_TO_TAILQ(&c->digests, (yyvsp[-1].digest), entries); (yyval.member) = (yyvsp[0].member); } -#line 2253 "gram.c" +#line 2254 "gram.c" break; case 53: /* opcmnd: cmnd */ -#line 631 "gram.y" +#line 632 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 2262 "gram.c" +#line 2263 "gram.c" break; case 54: /* opcmnd: '!' cmnd */ -#line 635 "gram.y" +#line 636 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 2271 "gram.c" +#line 2272 "gram.c" break; case 55: /* chdirspec: CWD '=' WORD */ -#line 641 "gram.y" +#line 642 "gram.y" { if ((yyvsp[0].string)[0] != '/' && (yyvsp[0].string)[0] != '~') { if (strcmp((yyvsp[0].string), "*") != 0) { @@ -2292,11 +2293,11 @@ yyparse (void) } (yyval.string) = (yyvsp[0].string); } -#line 2290 "gram.c" +#line 2291 "gram.c" break; case 56: /* chrootspec: CHROOT '=' WORD */ -#line 657 "gram.y" +#line 658 "gram.y" { if ((yyvsp[0].string)[0] != '/' && (yyvsp[0].string)[0] != '~') { if (strcmp((yyvsp[0].string), "*") != 0) { @@ -2311,91 +2312,91 @@ yyparse (void) } (yyval.string) = (yyvsp[0].string); } -#line 2309 "gram.c" +#line 2310 "gram.c" break; case 57: /* timeoutspec: CMND_TIMEOUT '=' WORD */ -#line 673 "gram.y" +#line 674 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2317 "gram.c" +#line 2318 "gram.c" break; case 58: /* notbeforespec: NOTBEFORE '=' WORD */ -#line 678 "gram.y" +#line 679 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2325 "gram.c" +#line 2326 "gram.c" break; case 59: /* notafterspec: NOTAFTER '=' WORD */ -#line 682 "gram.y" +#line 683 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2333 "gram.c" +#line 2334 "gram.c" break; case 60: /* rolespec: ROLE '=' WORD */ -#line 687 "gram.y" +#line 688 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2341 "gram.c" +#line 2342 "gram.c" break; case 61: /* typespec: TYPE '=' WORD */ -#line 692 "gram.y" +#line 693 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2349 "gram.c" +#line 2350 "gram.c" break; case 62: /* apparmor_profilespec: APPARMOR_PROFILE '=' WORD */ -#line 697 "gram.y" +#line 698 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2357 "gram.c" +#line 2358 "gram.c" break; case 63: /* privsspec: PRIVS '=' WORD */ -#line 702 "gram.y" +#line 703 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2365 "gram.c" +#line 2366 "gram.c" break; case 64: /* limitprivsspec: LIMITPRIVS '=' WORD */ -#line 706 "gram.y" +#line 707 "gram.y" { (yyval.string) = (yyvsp[0].string); } -#line 2373 "gram.c" +#line 2374 "gram.c" break; case 65: /* runasspec: %empty */ -#line 711 "gram.y" +#line 712 "gram.y" { (yyval.runas) = NULL; } -#line 2381 "gram.c" +#line 2382 "gram.c" break; case 66: /* runasspec: '(' runaslist ')' */ -#line 714 "gram.y" +#line 715 "gram.y" { (yyval.runas) = (yyvsp[-1].runas); } -#line 2389 "gram.c" +#line 2390 "gram.c" break; case 67: /* runaslist: %empty */ -#line 719 "gram.y" +#line 720 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) != NULL) { @@ -2412,11 +2413,11 @@ yyparse (void) } parser_leak_add(LEAK_RUNAS, (yyval.runas)); } -#line 2410 "gram.c" +#line 2411 "gram.c" break; case 68: /* runaslist: userlist */ -#line 735 "gram.y" +#line 736 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) == NULL) { @@ -2428,11 +2429,11 @@ yyparse (void) (yyval.runas)->runasusers = (yyvsp[0].member); /* $$->runasgroups = NULL; */ } -#line 2426 "gram.c" +#line 2427 "gram.c" break; case 69: /* runaslist: userlist ':' grouplist */ -#line 746 "gram.y" +#line 747 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) == NULL) { @@ -2445,11 +2446,11 @@ yyparse (void) (yyval.runas)->runasusers = (yyvsp[-2].member); (yyval.runas)->runasgroups = (yyvsp[0].member); } -#line 2443 "gram.c" +#line 2444 "gram.c" break; case 70: /* runaslist: ':' grouplist */ -#line 758 "gram.y" +#line 759 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) == NULL) { @@ -2461,11 +2462,11 @@ yyparse (void) /* $$->runasusers = NULL; */ (yyval.runas)->runasgroups = (yyvsp[0].member); } -#line 2459 "gram.c" +#line 2460 "gram.c" break; case 71: /* runaslist: ':' */ -#line 769 "gram.y" +#line 770 "gram.y" { (yyval.runas) = calloc(1, sizeof(struct runascontainer)); if ((yyval.runas) != NULL) { @@ -2482,114 +2483,114 @@ yyparse (void) } parser_leak_add(LEAK_RUNAS, (yyval.runas)); } -#line 2480 "gram.c" +#line 2481 "gram.c" break; case 72: /* reserved_word: ALL */ -#line 787 "gram.y" - { (yyval.string) = "ALL"; } -#line 2486 "gram.c" +#line 788 "gram.y" + { (yyval.cstring) = "ALL"; } +#line 2487 "gram.c" break; case 73: /* reserved_word: CHROOT */ -#line 788 "gram.y" - { (yyval.string) = "CHROOT"; } -#line 2492 "gram.c" +#line 789 "gram.y" + { (yyval.cstring) = "CHROOT"; } +#line 2493 "gram.c" break; case 74: /* reserved_word: CWD */ -#line 789 "gram.y" - { (yyval.string) = "CWD"; } -#line 2498 "gram.c" +#line 790 "gram.y" + { (yyval.cstring) = "CWD"; } +#line 2499 "gram.c" break; case 75: /* reserved_word: CMND_TIMEOUT */ -#line 790 "gram.y" - { (yyval.string) = "CMND_TIMEOUT"; } -#line 2504 "gram.c" +#line 791 "gram.y" + { (yyval.cstring) = "CMND_TIMEOUT"; } +#line 2505 "gram.c" break; case 76: /* reserved_word: NOTBEFORE */ -#line 791 "gram.y" - { (yyval.string) = "NOTBEFORE"; } -#line 2510 "gram.c" +#line 792 "gram.y" + { (yyval.cstring) = "NOTBEFORE"; } +#line 2511 "gram.c" break; case 77: /* reserved_word: NOTAFTER */ -#line 792 "gram.y" - { (yyval.string) = "NOTAFTER"; } -#line 2516 "gram.c" +#line 793 "gram.y" + { (yyval.cstring) = "NOTAFTER"; } +#line 2517 "gram.c" break; case 78: /* reserved_word: ROLE */ -#line 793 "gram.y" - { (yyval.string) = "ROLE"; } -#line 2522 "gram.c" +#line 794 "gram.y" + { (yyval.cstring) = "ROLE"; } +#line 2523 "gram.c" break; case 79: /* reserved_word: TYPE */ -#line 794 "gram.y" - { (yyval.string) = "TYPE"; } -#line 2528 "gram.c" +#line 795 "gram.y" + { (yyval.cstring) = "TYPE"; } +#line 2529 "gram.c" break; case 80: /* reserved_word: PRIVS */ -#line 795 "gram.y" - { (yyval.string) = "PRIVS"; } -#line 2534 "gram.c" +#line 796 "gram.y" + { (yyval.cstring) = "PRIVS"; } +#line 2535 "gram.c" break; case 81: /* reserved_word: LIMITPRIVS */ -#line 796 "gram.y" - { (yyval.string) = "LIMITPRIVS"; } -#line 2540 "gram.c" +#line 797 "gram.y" + { (yyval.cstring) = "LIMITPRIVS"; } +#line 2541 "gram.c" break; case 82: /* reserved_word: APPARMOR_PROFILE */ -#line 797 "gram.y" - { (yyval.string) = "APPARMOR_PROFILE"; } -#line 2546 "gram.c" +#line 798 "gram.y" + { (yyval.cstring) = "APPARMOR_PROFILE"; } +#line 2547 "gram.c" break; case 83: /* reserved_alias: reserved_word */ -#line 800 "gram.y" +#line 801 "gram.y" { - sudoerserrorf(U_("syntax error, reserved word %s used as an alias name"), (yyvsp[0].string)); + sudoerserrorf(U_("syntax error, reserved word %s used as an alias name"), (yyvsp[0].cstring)); YYERROR; } -#line 2555 "gram.c" +#line 2556 "gram.c" break; case 84: /* options: %empty */ -#line 806 "gram.y" +#line 807 "gram.y" { init_options(&(yyval.options)); } -#line 2563 "gram.c" +#line 2564 "gram.c" break; case 85: /* options: options chdirspec */ -#line 809 "gram.y" +#line 810 "gram.y" { parser_leak_remove(LEAK_PTR, (yyval.options).runcwd); free((yyval.options).runcwd); (yyval.options).runcwd = (yyvsp[0].string); } -#line 2573 "gram.c" +#line 2574 "gram.c" break; case 86: /* options: options chrootspec */ -#line 814 "gram.y" +#line 815 "gram.y" { parser_leak_remove(LEAK_PTR, (yyval.options).runchroot); free((yyval.options).runchroot); (yyval.options).runchroot = (yyvsp[0].string); } -#line 2583 "gram.c" +#line 2584 "gram.c" break; case 87: /* options: options notbeforespec */ -#line 819 "gram.y" +#line 820 "gram.y" { (yyval.options).notbefore = parse_gentime((yyvsp[0].string)); parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); @@ -2599,11 +2600,11 @@ yyparse (void) YYERROR; } } -#line 2597 "gram.c" +#line 2598 "gram.c" break; case 88: /* options: options notafterspec */ -#line 828 "gram.y" +#line 829 "gram.y" { (yyval.options).notafter = parse_gentime((yyvsp[0].string)); parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); @@ -2613,11 +2614,11 @@ yyparse (void) YYERROR; } } -#line 2611 "gram.c" +#line 2612 "gram.c" break; case 89: /* options: options timeoutspec */ -#line 837 "gram.y" +#line 838 "gram.y" { (yyval.options).timeout = parse_timeout((yyvsp[0].string)); parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); @@ -2630,11 +2631,11 @@ yyparse (void) YYERROR; } } -#line 2628 "gram.c" +#line 2629 "gram.c" break; case 90: /* options: options rolespec */ -#line 849 "gram.y" +#line 850 "gram.y" { #ifdef HAVE_SELINUX parser_leak_remove(LEAK_PTR, (yyval.options).role); @@ -2642,11 +2643,11 @@ yyparse (void) (yyval.options).role = (yyvsp[0].string); #endif } -#line 2640 "gram.c" +#line 2641 "gram.c" break; case 91: /* options: options typespec */ -#line 856 "gram.y" +#line 857 "gram.y" { #ifdef HAVE_SELINUX parser_leak_remove(LEAK_PTR, (yyval.options).type); @@ -2654,11 +2655,11 @@ yyparse (void) (yyval.options).type = (yyvsp[0].string); #endif } -#line 2652 "gram.c" +#line 2653 "gram.c" break; case 92: /* options: options apparmor_profilespec */ -#line 863 "gram.y" +#line 864 "gram.y" { #ifdef HAVE_APPARMOR parser_leak_remove(LEAK_PTR, (yyval.options).apparmor_profile); @@ -2666,11 +2667,11 @@ yyparse (void) (yyval.options).apparmor_profile = (yyvsp[0].string); #endif } -#line 2664 "gram.c" +#line 2665 "gram.c" break; case 93: /* options: options privsspec */ -#line 870 "gram.y" +#line 871 "gram.y" { #ifdef HAVE_PRIV_SET parser_leak_remove(LEAK_PTR, (yyval.options).privs); @@ -2678,11 +2679,11 @@ yyparse (void) (yyval.options).privs = (yyvsp[0].string); #endif } -#line 2676 "gram.c" +#line 2677 "gram.c" break; case 94: /* options: options limitprivsspec */ -#line 877 "gram.y" +#line 878 "gram.y" { #ifdef HAVE_PRIV_SET parser_leak_remove(LEAK_PTR, (yyval.options).limitprivs); @@ -2690,147 +2691,147 @@ yyparse (void) (yyval.options).limitprivs = (yyvsp[0].string); #endif } -#line 2688 "gram.c" +#line 2689 "gram.c" break; case 95: /* cmndtag: %empty */ -#line 886 "gram.y" +#line 887 "gram.y" { TAGS_INIT(&(yyval.tag)); } -#line 2696 "gram.c" +#line 2697 "gram.c" break; case 96: /* cmndtag: cmndtag NOPASSWD */ -#line 889 "gram.y" +#line 890 "gram.y" { (yyval.tag).nopasswd = true; } -#line 2704 "gram.c" +#line 2705 "gram.c" break; case 97: /* cmndtag: cmndtag PASSWD */ -#line 892 "gram.y" +#line 893 "gram.y" { (yyval.tag).nopasswd = false; } -#line 2712 "gram.c" +#line 2713 "gram.c" break; case 98: /* cmndtag: cmndtag NOEXEC */ -#line 895 "gram.y" +#line 896 "gram.y" { (yyval.tag).noexec = true; } -#line 2720 "gram.c" +#line 2721 "gram.c" break; case 99: /* cmndtag: cmndtag EXEC */ -#line 898 "gram.y" +#line 899 "gram.y" { (yyval.tag).noexec = false; } -#line 2728 "gram.c" +#line 2729 "gram.c" break; case 100: /* cmndtag: cmndtag INTERCEPT */ -#line 901 "gram.y" +#line 902 "gram.y" { (yyval.tag).intercept = true; } -#line 2736 "gram.c" +#line 2737 "gram.c" break; case 101: /* cmndtag: cmndtag NOINTERCEPT */ -#line 904 "gram.y" +#line 905 "gram.y" { (yyval.tag).intercept = false; } -#line 2744 "gram.c" +#line 2745 "gram.c" break; case 102: /* cmndtag: cmndtag SETENV */ -#line 907 "gram.y" +#line 908 "gram.y" { (yyval.tag).setenv = true; } -#line 2752 "gram.c" +#line 2753 "gram.c" break; case 103: /* cmndtag: cmndtag NOSETENV */ -#line 910 "gram.y" +#line 911 "gram.y" { (yyval.tag).setenv = false; } -#line 2760 "gram.c" +#line 2761 "gram.c" break; case 104: /* cmndtag: cmndtag LOG_INPUT */ -#line 913 "gram.y" +#line 914 "gram.y" { (yyval.tag).log_input = true; } -#line 2768 "gram.c" +#line 2769 "gram.c" break; case 105: /* cmndtag: cmndtag NOLOG_INPUT */ -#line 916 "gram.y" +#line 917 "gram.y" { (yyval.tag).log_input = false; } -#line 2776 "gram.c" +#line 2777 "gram.c" break; case 106: /* cmndtag: cmndtag LOG_OUTPUT */ -#line 919 "gram.y" +#line 920 "gram.y" { (yyval.tag).log_output = true; } -#line 2784 "gram.c" +#line 2785 "gram.c" break; case 107: /* cmndtag: cmndtag NOLOG_OUTPUT */ -#line 922 "gram.y" +#line 923 "gram.y" { (yyval.tag).log_output = false; } -#line 2792 "gram.c" +#line 2793 "gram.c" break; case 108: /* cmndtag: cmndtag FOLLOWLNK */ -#line 925 "gram.y" +#line 926 "gram.y" { (yyval.tag).follow = true; } -#line 2800 "gram.c" +#line 2801 "gram.c" break; case 109: /* cmndtag: cmndtag NOFOLLOWLNK */ -#line 928 "gram.y" +#line 929 "gram.y" { (yyval.tag).follow = false; } -#line 2808 "gram.c" +#line 2809 "gram.c" break; case 110: /* cmndtag: cmndtag MAIL */ -#line 931 "gram.y" +#line 932 "gram.y" { (yyval.tag).send_mail = true; } -#line 2816 "gram.c" +#line 2817 "gram.c" break; case 111: /* cmndtag: cmndtag NOMAIL */ -#line 934 "gram.y" +#line 935 "gram.y" { (yyval.tag).send_mail = false; } -#line 2824 "gram.c" +#line 2825 "gram.c" break; case 112: /* cmnd: ALL */ -#line 939 "gram.y" +#line 940 "gram.y" { struct sudo_command *c; @@ -2845,11 +2846,11 @@ yyparse (void) } parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 2843 "gram.c" +#line 2844 "gram.c" break; case 113: /* cmnd: ALIAS */ -#line 953 "gram.y" +#line 954 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -2859,11 +2860,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 2857 "gram.c" +#line 2858 "gram.c" break; case 114: /* cmnd: COMMAND */ -#line 962 "gram.y" +#line 963 "gram.y" { struct sudo_command *c; @@ -2885,20 +2886,20 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].command).args); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 2883 "gram.c" +#line 2884 "gram.c" break; case 117: /* $@1: %empty */ -#line 989 "gram.y" +#line 990 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2892 "gram.c" +#line 2893 "gram.c" break; case 118: /* hostalias: ALIAS $@1 '=' hostlist */ -#line 992 "gram.y" +#line 993 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), HOSTALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2908,30 +2909,30 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[-3].string)); parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); } -#line 2906 "gram.c" +#line 2907 "gram.c" break; case 121: /* hostlist: hostlist ',' ophost */ -#line 1005 "gram.y" +#line 1006 "gram.y" { parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 2916 "gram.c" +#line 2917 "gram.c" break; case 124: /* $@2: %empty */ -#line 1016 "gram.y" +#line 1017 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2925 "gram.c" +#line 2926 "gram.c" break; case 125: /* cmndalias: ALIAS $@2 '=' cmndlist */ -#line 1019 "gram.y" +#line 1020 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), CMNDALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2941,30 +2942,30 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[-3].string)); parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); } -#line 2939 "gram.c" +#line 2940 "gram.c" break; case 128: /* cmndlist: cmndlist ',' digcmnd */ -#line 1032 "gram.y" +#line 1033 "gram.y" { parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 2949 "gram.c" +#line 2950 "gram.c" break; case 131: /* $@3: %empty */ -#line 1043 "gram.y" +#line 1044 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2958 "gram.c" +#line 2959 "gram.c" break; case 132: /* runasalias: ALIAS $@3 '=' userlist */ -#line 1046 "gram.y" +#line 1047 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), RUNASALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2974,20 +2975,20 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[-3].string)); parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); } -#line 2972 "gram.c" +#line 2973 "gram.c" break; case 136: /* $@4: %empty */ -#line 1062 "gram.y" +#line 1063 "gram.y" { alias_line = this_lineno; alias_column = sudolinebuf.toke_start + 1; } -#line 2981 "gram.c" +#line 2982 "gram.c" break; case 137: /* useralias: ALIAS $@4 '=' userlist */ -#line 1065 "gram.y" +#line 1066 "gram.y" { if (!alias_add(&parsed_policy, (yyvsp[-3].string), USERALIAS, sudoers, alias_line, alias_column, (yyvsp[0].member))) { @@ -2997,39 +2998,39 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[-3].string)); parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); } -#line 2995 "gram.c" +#line 2996 "gram.c" break; case 140: /* userlist: userlist ',' opuser */ -#line 1078 "gram.y" +#line 1079 "gram.y" { parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 3005 "gram.c" +#line 3006 "gram.c" break; case 141: /* opuser: user */ -#line 1085 "gram.y" +#line 1086 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 3014 "gram.c" +#line 3015 "gram.c" break; case 142: /* opuser: '!' user */ -#line 1089 "gram.y" +#line 1090 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 3023 "gram.c" +#line 3024 "gram.c" break; case 143: /* user: ALIAS */ -#line 1095 "gram.y" +#line 1096 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -3039,11 +3040,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3037 "gram.c" +#line 3038 "gram.c" break; case 144: /* user: ALL */ -#line 1104 "gram.y" +#line 1105 "gram.y" { (yyval.member) = new_member(NULL, ALL); if ((yyval.member) == NULL) { @@ -3052,11 +3053,11 @@ yyparse (void) } parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3050 "gram.c" +#line 3051 "gram.c" break; case 145: /* user: NETGROUP */ -#line 1112 "gram.y" +#line 1113 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), NETGROUP); if ((yyval.member) == NULL) { @@ -3066,11 +3067,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3064 "gram.c" +#line 3065 "gram.c" break; case 146: /* user: USERGROUP */ -#line 1121 "gram.y" +#line 1122 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), USERGROUP); if ((yyval.member) == NULL) { @@ -3080,11 +3081,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3078 "gram.c" +#line 3079 "gram.c" break; case 147: /* user: WORD */ -#line 1130 "gram.y" +#line 1131 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), WORD); if ((yyval.member) == NULL) { @@ -3094,39 +3095,39 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3092 "gram.c" +#line 3093 "gram.c" break; case 149: /* grouplist: grouplist ',' opgroup */ -#line 1142 "gram.y" +#line 1143 "gram.y" { parser_leak_remove(LEAK_MEMBER, (yyvsp[0].member)); HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); (yyval.member) = (yyvsp[-2].member); } -#line 3102 "gram.c" +#line 3103 "gram.c" break; case 150: /* opgroup: group */ -#line 1149 "gram.y" +#line 1150 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = false; } -#line 3111 "gram.c" +#line 3112 "gram.c" break; case 151: /* opgroup: '!' group */ -#line 1153 "gram.y" +#line 1154 "gram.y" { (yyval.member) = (yyvsp[0].member); (yyval.member)->negated = true; } -#line 3120 "gram.c" +#line 3121 "gram.c" break; case 152: /* group: ALIAS */ -#line 1159 "gram.y" +#line 1160 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), ALIAS); if ((yyval.member) == NULL) { @@ -3136,11 +3137,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3134 "gram.c" +#line 3135 "gram.c" break; case 153: /* group: ALL */ -#line 1168 "gram.y" +#line 1169 "gram.y" { (yyval.member) = new_member(NULL, ALL); if ((yyval.member) == NULL) { @@ -3149,11 +3150,11 @@ yyparse (void) } parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3147 "gram.c" +#line 3148 "gram.c" break; case 154: /* group: WORD */ -#line 1176 "gram.y" +#line 1177 "gram.y" { (yyval.member) = new_member((yyvsp[0].string), WORD); if ((yyval.member) == NULL) { @@ -3163,11 +3164,11 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[0].string)); parser_leak_add(LEAK_MEMBER, (yyval.member)); } -#line 3161 "gram.c" +#line 3162 "gram.c" break; -#line 3165 "gram.c" +#line 3166 "gram.c" default: break; } @@ -3360,7 +3361,7 @@ yyparse (void) return yyresult; } -#line 1186 "gram.y" +#line 1187 "gram.y" /* Like yyerror() but takes a printf-style format string. */ void @@ -3379,7 +3380,8 @@ sudoerserrorf(const char *fmt, ...) LEXTRACE("<*> "); #ifndef TRACELEXER if (trace_print == NULL || trace_print == sudoers_trace_print) { - char *s, *tofree = NULL; + char *tofree = NULL; + const char *s; int oldlocale; /* Warnings are displayed in the user's locale. */ @@ -3390,10 +3392,12 @@ sudoerserrorf(const char *fmt, ...) /* Optimize common case, a single string. */ s = _(va_arg(ap, char *)); } else { - if (vasprintf(&s, _(fmt), ap) != -1) - tofree = s; - else + if (vasprintf(&tofree, _(fmt), ap) != -1) { + s = tofree; + } else { s = _("syntax error"); + tofree = NULL; + } } sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d:%d: %s\n"), sudoers, this_lineno, (int)sudolinebuf.toke_start + 1, s); diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index 5ed1beaa0b..0319ce1644 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -185,9 +185,10 @@ union YYSTYPE struct command_options options; struct cmndtag tag; char *string; + const char *cstring; int tok; -#line 191 "y.tab.h" +#line 192 "y.tab.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 602c64b952..0e5cf780de 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -95,6 +95,7 @@ static void alias_error(const char *name, int errnum); struct command_options options; struct cmndtag tag; char *string; + const char *cstring; int tok; } @@ -193,7 +194,7 @@ static void alias_error(const char *name, int errnum); %type includedir %type digestspec %type digestlist -%type reserved_word +%type reserved_word %% @@ -794,7 +795,7 @@ reserved_word : ALL { $$ = "ALL"; } | TYPE { $$ = "TYPE"; } | PRIVS { $$ = "PRIVS"; } | LIMITPRIVS { $$ = "LIMITPRIVS"; } - | APPARMOR_PROFILE { $$ = "APPARMOR_PROFILE"; } + | APPARMOR_PROFILE { $$ = "APPARMOR_PROFILE"; } ; reserved_alias : reserved_word { @@ -1201,7 +1202,8 @@ sudoerserrorf(const char *fmt, ...) LEXTRACE("<*> "); #ifndef TRACELEXER if (trace_print == NULL || trace_print == sudoers_trace_print) { - char *s, *tofree = NULL; + char *tofree = NULL; + const char *s; int oldlocale; /* Warnings are displayed in the user's locale. */ @@ -1212,10 +1214,12 @@ sudoerserrorf(const char *fmt, ...) /* Optimize common case, a single string. */ s = _(va_arg(ap, char *)); } else { - if (vasprintf(&s, _(fmt), ap) != -1) - tofree = s; - else + if (vasprintf(&tofree, _(fmt), ap) != -1) { + s = tofree; + } else { s = _("syntax error"); + tofree = NULL; + } } sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d:%d: %s\n"), sudoers, this_lineno, (int)sudolinebuf.toke_start + 1, s); diff --git a/plugins/sudoers/group_plugin.c b/plugins/sudoers/group_plugin.c index e11cfb1f19..97f3a4fc2a 100644 --- a/plugins/sudoers/group_plugin.c +++ b/plugins/sudoers/group_plugin.c @@ -46,7 +46,7 @@ const char *path_plugin_dir = _PATH_SUDO_PLUGIN_DIR; * the value from the plugin's init function. */ int -group_plugin_load(char *plugin_info) +group_plugin_load(const char *plugin_info) { struct stat sb; char *args, path[PATH_MAX]; diff --git a/plugins/sudoers/insults.h b/plugins/sudoers/insults.h index d7d8074de2..752d7e6e40 100644 --- a/plugins/sudoers/insults.h +++ b/plugins/sudoers/insults.h @@ -28,7 +28,7 @@ * Use one or more set of insults as determined by configure */ -char *insults[] = { +const char *insults[] = { # ifdef HAL_INSULTS # include "ins_2001.h" diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index 3a403bf347..fc1bc7d116 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -259,7 +259,7 @@ static void * set_passprompt_regex(const char *cstr) { void *handle; - char *cp, *last, *str; + char *cp, *str, *last = NULL; debug_decl(set_passprompt_regex, SUDOERS_DEBUG_UTIL); handle = iolog_pwfilt_alloc(); diff --git a/plugins/sudoers/ldap.c b/plugins/sudoers/ldap.c index 4f01922650..6f81883d67 100644 --- a/plugins/sudoers/ldap.c +++ b/plugins/sudoers/ldap.c @@ -297,7 +297,7 @@ sudo_ldap_init(LDAP **ldp, const char *host, int port) * on error. */ static struct berval ** -sudo_ldap_get_values_len(LDAP *ld, LDAPMessage *entry, char *attr, int *rc) +sudo_ldap_get_values_len(LDAP *ld, LDAPMessage *entry, const char *attr, int *rc) { struct berval **bval; @@ -1613,7 +1613,7 @@ sudo_ldap_bind_s(LDAP *ld) { struct berval bv; - bv.bv_val = ldap_conf.bindpw ? ldap_conf.bindpw : ""; + bv.bv_val = ldap_conf.bindpw ? ldap_conf.bindpw : (char *)""; bv.bv_len = strlen(bv.bv_val); ret = ldap_sasl_bind_s(ld, ldap_conf.binddn, LDAP_SASL_SIMPLE, &bv, diff --git a/plugins/sudoers/ldap_conf.c b/plugins/sudoers/ldap_conf.c index 38d54a3a33..7e4a2e3ad8 100644 --- a/plugins/sudoers/ldap_conf.c +++ b/plugins/sudoers/ldap_conf.c @@ -242,7 +242,8 @@ sudo_ldap_parse_uri(const struct ldap_config_str_list *uri_list) hostbuf[0] = '\0'; STAILQ_FOREACH(entry, uri_list, entries) { - char *cp, *host, *last, *port, *uri; + char *cp, *last, *uri; + const char *host, *port; buf = strdup(entry->val); if (buf == NULL) { diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index 959132f8fa..fc494f35c6 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -766,7 +766,7 @@ fmt_client_hello(struct client_closure *closure) sudo_debug_printf(SUDO_DEBUG_INFO, "%s: sending ClientHello", __func__); /* Client name + version */ - hello_msg.client_id = "sudoers " PACKAGE_VERSION; + hello_msg.client_id = (char *)"sudoers " PACKAGE_VERSION; /* Schedule ClientMessage */ client_msg.u.hello_msg = &hello_msg; @@ -840,6 +840,27 @@ fmt_info_messages(struct client_closure *closure, struct eventlog *evlog, info_message__init(info_msgs[n]); } +#define fill_str(_n, _v) do { \ + info_msgs[n]->key = (char *)(_n); \ + info_msgs[n]->u.strval = (_v); \ + info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; \ + n++; \ +} while (0) + +#define fill_strlist(_n, _v) do { \ + info_msgs[n]->key = (char *)(_n); \ + info_msgs[n]->u.strlistval = (_v); \ + info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; \ + n++; \ +} while (0) + +#define fill_num(_n, _v) do { \ + info_msgs[n]->key = (char *)(_n); \ + info_msgs[n]->u.numval = (_v); \ + info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; \ + n++; \ +} while (0) + /* Fill in info_msgs */ n = 0; @@ -847,106 +868,43 @@ fmt_info_messages(struct client_closure *closure, struct eventlog *evlog, /* TODO: clientpid */ /* TODO: clientppid */ /* TODO: clientsid */ - - info_msgs[n]->key = "columns"; - info_msgs[n]->u.numval = evlog->columns; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; - - info_msgs[n]->key = "command"; - info_msgs[n]->u.strval = evlog->command; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - - info_msgs[n]->key = "lines"; - info_msgs[n]->u.numval = evlog->lines; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; - + fill_num("columns", evlog->columns); + fill_str("command", evlog->command); + fill_num("lines", evlog->lines); if (runargv != NULL) { - info_msgs[n]->key = "runargv"; - info_msgs[n]->u.strlistval = runargv; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; - n++; + fill_strlist("runargv", runargv); + runargv = NULL; + } + if (evlog->runchroot != NULL) { + fill_str("runchroot", evlog->runchroot); + } + if (evlog->runcwd != NULL) { + fill_str("runcwd", evlog->runcwd); } - if (runenv != NULL) { - info_msgs[n]->key = "runenv"; - info_msgs[n]->u.strlistval = runenv; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; - n++; + fill_strlist("runenv", runenv); + runenv = NULL; } - if (evlog->rungroup != NULL) { - info_msgs[n]->key = "rungid"; - info_msgs[n]->u.numval = evlog->rungid; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; - - info_msgs[n]->key = "rungroup"; - info_msgs[n]->u.strval = evlog->rungroup; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; + fill_num("rungid", evlog->rungid); + fill_str("rungroup", evlog->rungroup); } - /* TODO - rungids */ /* TODO - rungroups */ - - info_msgs[n]->key = "runuid"; - info_msgs[n]->u.numval = evlog->runuid; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; - n++; - - info_msgs[n]->key = "runuser"; - info_msgs[n]->u.strval = evlog->runuser; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - + fill_num("runuid", evlog->runuid); + fill_str("runuser", evlog->runuser); if (evlog->cwd != NULL) { - info_msgs[n]->key = "submitcwd"; - info_msgs[n]->u.strval = evlog->cwd; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - } - - if (evlog->runcwd != NULL) { - info_msgs[n]->key = "runcwd"; - info_msgs[n]->u.strval = evlog->runcwd; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; + fill_str("submitcwd", evlog->cwd); } - - if (evlog->runchroot != NULL) { - info_msgs[n]->key = "runchroot"; - info_msgs[n]->u.strval = evlog->runchroot; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - } - /* TODO - submitenv */ /* TODO - submitgid */ /* TODO - submitgids */ /* TODO - submitgroup */ /* TODO - submitgroups */ - - info_msgs[n]->key = "submithost"; - info_msgs[n]->u.strval = evlog->submithost; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - + fill_str("submithost", evlog->submithost); /* TODO - submituid */ - - info_msgs[n]->key = "submituser"; - info_msgs[n]->u.strval = evlog->submituser; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - - if (evlog->ttyname != NULL) { - info_msgs[n]->key = "ttyname"; - info_msgs[n]->u.strval = evlog->ttyname; - info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; - n++; - } + fill_str("submituser", evlog->submituser); + fill_str("ttyname", evlog->ttyname); /* Free unused structs. */ while (info_msgs_size > n) diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 286c6aee8e..3f9aa7f327 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -986,11 +986,11 @@ sudoers_to_eventlog(struct eventlog *evlog, char * const argv[], static FILE * sudoers_log_open(int type, const char *log_file) { + const char *omode; bool uid_changed; FILE *fp = NULL; mode_t oldmask; int fd, flags; - char *omode; debug_decl(sudoers_log_open, SUDOERS_DEBUG_LOGGING); switch (type) { diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index a56f86c81b..5cb31cedb0 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -719,7 +719,7 @@ display_defaults(struct sudoers_parse_tree *parse_tree, struct passwd *pw, struct sudo_lbuf *lbuf) { struct defaults *d; - char *prefix; + const char *prefix; int nfound = 0; debug_decl(display_defaults, SUDOERS_DEBUG_PARSER); @@ -762,7 +762,7 @@ display_bound_defaults_by_type(struct sudoers_parse_tree *parse_tree, struct defaults *d; struct defaults_binding *binding = NULL; struct member *m; - char *dsep; + const char *dsep; int atype, nfound = 0; debug_decl(display_bound_defaults_by_type, SUDOERS_DEBUG_PARSER); diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 7638944541..2fcb8dd123 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -1171,7 +1171,7 @@ sudoers_policy_check(int argc, char * const argv[], char *env_add[], static int sudoers_policy_validate(const char **errstr) { - char *argv[] = { "validate", NULL }; + char *argv[] = { (char *)"validate", NULL }; const int argc = 1; int ret; debug_decl(sudoers_policy_validate, SUDOERS_DEBUG_PLUGIN); @@ -1213,7 +1213,7 @@ static int sudoers_policy_list(int argc, char * const argv[], int verbose, const char *list_user, const char **errstr) { - char *list_argv[] = { "list", NULL }; + char *list_argv[] = { (char *)"list", NULL }; int ret; debug_decl(sudoers_policy_list, SUDOERS_DEBUG_PLUGIN); diff --git a/plugins/sudoers/pwutil.c b/plugins/sudoers/pwutil.c index ca5e146b4a..88c7a41921 100644 --- a/plugins/sudoers/pwutil.c +++ b/plugins/sudoers/pwutil.c @@ -686,7 +686,7 @@ sudo_mkgrent(const char *group, gid_t gid, ...) } gr = &gritem->gr; gr->gr_gid = gid; - gr->gr_passwd = "*"; + gr->gr_passwd = (char *)"*"; cp = (char *)(gritem + 1); gr->gr_mem = (char **)cp; cp += sizeof(char *) * nmem; diff --git a/plugins/sudoers/regress/editor/check_editor.c b/plugins/sudoers/regress/editor/check_editor.c index 97585d66e7..084d1628a5 100644 --- a/plugins/sudoers/regress/editor/check_editor.c +++ b/plugins/sudoers/regress/editor/check_editor.c @@ -29,12 +29,12 @@ /* Note hard-coded array lengths. */ struct test_data { - char *editor_var; + const char *editor_var; int nfiles; - char *files[4]; - char *editor_path; + const char *files[4]; + const char *editor_path; int edit_argc; - char *edit_argv[10]; + const char *edit_argv[10]; } test_data[] = { { /* Bug #942 */ @@ -99,13 +99,13 @@ main(int argc, char *argv[]) int i, edit_argc = 0; /* clear existing editor environment vars */ - putenv("VISUAL="); - putenv("EDITOR="); - putenv("SUDO_EDITOR="); + putenv((char *)"VISUAL="); + putenv((char *)"EDITOR="); + putenv((char *)"SUDO_EDITOR="); - putenv(data->editor_var); - editor_path = find_editor(data->nfiles, data->files, &edit_argc, - &edit_argv, NULL, &env_editor); + putenv((char *)data->editor_var); + editor_path = find_editor(data->nfiles, (char **)data->files, + &edit_argc, &edit_argv, NULL, &env_editor); ntests++; if (strcmp(editor_path, data->editor_path) != 0) { sudo_warnx("test %d: editor_path: expected \"%s\", got \"%s\"", diff --git a/plugins/sudoers/regress/exptilde/check_exptilde.c b/plugins/sudoers/regress/exptilde/check_exptilde.c index 093fb640c2..93f9b4b658 100644 --- a/plugins/sudoers/regress/exptilde/check_exptilde.c +++ b/plugins/sudoers/regress/exptilde/check_exptilde.c @@ -34,9 +34,9 @@ struct sudo_user sudo_user; struct test_data { - char *input; - char *output; - char *user; + const char *input; + const char *output; + const char *user; bool result; } test_data[] = { { "foo/bar", NULL, NULL, false }, diff --git a/plugins/sudoers/regress/fuzz/fuzz_policy.c b/plugins/sudoers/regress/fuzz/fuzz_policy.c index 85d05cc24d..e908f3bf8a 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_policy.c +++ b/plugins/sudoers/regress/fuzz/fuzz_policy.c @@ -384,8 +384,8 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) line = NULL; /* Exercise code paths that use KRB5CCNAME and SUDO_PROMPT. */ - putenv("KRB5CCNAME=/tmp/krb5cc_123456"); - putenv("SUDO_PROMPT=[sudo] password for %p: "); + putenv((char *)"KRB5CCNAME=/tmp/krb5cc_123456"); + putenv((char *)"SUDO_PROMPT=[sudo] password for %p: "); sudoers_policy.register_hooks(SUDO_API_VERSION, fuzz_hook_stub); diff --git a/plugins/sudoers/regress/fuzz/fuzz_sudoers.c b/plugins/sudoers/regress/fuzz/fuzz_sudoers.c index 90de61e866..b69f6a04b8 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_sudoers.c +++ b/plugins/sudoers/regress/fuzz/fuzz_sudoers.c @@ -162,9 +162,9 @@ open_data(const uint8_t *data, size_t size) } static struct user_data { - char *user; - char *runuser; - char *rungroup; + const char *user; + const char *runuser; + const char *rungroup; } user_data[] = { { "root", NULL, NULL }, { "millert", "operator", NULL }, @@ -183,7 +183,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) struct interface_list *interfaces; struct passwd *pw; struct group *gr; - char *gids[10]; + const char *gids[10]; FILE *fp; /* Don't waste time fuzzing tiny inputs. */ @@ -237,7 +237,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) gids[1] = "20"; gids[2] = "5"; gids[3] = NULL; - if (sudo_set_gidlist(pw, gids, ENTRY_TYPE_FRONTEND) == -1) + if (sudo_set_gidlist(pw, (char **)gids, ENTRY_TYPE_FRONTEND) == -1) goto done; sudo_pw_delref(pw); @@ -246,7 +246,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) goto done; gids[0] = "5"; gids[1] = NULL; - if (sudo_set_gidlist(pw, gids, ENTRY_TYPE_FRONTEND) == -1) + if (sudo_set_gidlist(pw, (char **)gids, ENTRY_TYPE_FRONTEND) == -1) goto done; sudo_pw_delref(pw); @@ -258,17 +258,17 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) gids[2] = "5"; gids[3] = "100"; gids[4] = NULL; - if (sudo_set_gidlist(pw, gids, ENTRY_TYPE_FRONTEND) == -1) + if (sudo_set_gidlist(pw, (char **)gids, ENTRY_TYPE_FRONTEND) == -1) goto done; sudo_pw_delref(pw); /* The minimum needed to perform matching (user_cmnd must be dynamic). */ - user_host = user_shost = user_runhost = user_srunhost = "localhost"; + user_host = user_shost = user_runhost = user_srunhost = (char *)"localhost"; user_cmnd = strdup("/usr/bin/id"); if (user_cmnd == NULL) goto done; - user_args = "-u"; - user_base = "id"; + user_args = (char *)"-u"; + user_base = (char *)"id"; /* Add a fake network interfaces. */ interfaces = get_interfaces(); @@ -301,7 +301,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) int cmnd_status; /* Invoking user. */ - user_name = ud->user; + user_name = (char *)ud->user; if (sudo_user.pw != NULL) sudo_pw_delref(sudo_user.pw); sudo_user.pw = sudo_getpwnam(user_name); @@ -314,7 +314,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) if (runas_pw != NULL) sudo_pw_delref(runas_pw); if (ud->runuser != NULL) { - sudo_user.runas_user = ud->runuser; + sudo_user.runas_user = (char *)ud->runuser; SET(sudo_user.flags, RUNAS_USER_SPECIFIED); runas_pw = sudo_getpwnam(sudo_user.runas_user); } else { @@ -331,7 +331,7 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) if (runas_gr != NULL) sudo_gr_delref(runas_gr); if (ud->rungroup != NULL) { - sudo_user.runas_group = ud->rungroup; + sudo_user.runas_group = (char *)ud->rungroup; SET(sudo_user.flags, RUNAS_GROUP_SPECIFIED); runas_gr = sudo_getgrnam(sudo_user.runas_group); if (runas_gr == NULL) { diff --git a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c index a03ff50a16..e4cc14166f 100644 --- a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c +++ b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c @@ -214,11 +214,11 @@ test_endpoints(int *ntests, int *nerrors, const char *iolog_dir, char *envp[]) char buf[1024], iolog_path[PATH_MAX]; char runas_gid[64], runas_uid[64]; FILE *fp; - char *cmnd_argv[] = { + const char *cmnd_argv[] = { "/usr/bin/id", NULL }; - char *user_info[] = { + const char *user_info[] = { "cols=80", "lines=24", "cwd=/", @@ -227,7 +227,7 @@ test_endpoints(int *ntests, int *nerrors, const char *iolog_dir, char *envp[]) "user=nobody", NULL }; - char *command_info[] = { + const char *command_info[] = { "command=/usr/bin/id", iolog_path, "iolog_stdin=true", @@ -257,7 +257,8 @@ test_endpoints(int *ntests, int *nerrors, const char *iolog_dir, char *envp[]) /* Test open endpoint. */ rc = sudoers_io.open(SUDO_API_VERSION, NULL, sudo_printf_int, settings, - user_info, command_info, cmnd_argc, cmnd_argv, envp, NULL, &errstr); + (char **)user_info, (char **)command_info, cmnd_argc, + (char **)cmnd_argv, envp, NULL, &errstr); (*ntests)++; if (rc != 1) { sudo_warnx("I/O log open endpoint failed"); diff --git a/plugins/sudoers/regress/parser/check_gentime.c b/plugins/sudoers/regress/parser/check_gentime.c index 2aed93dcbd..a203bc67cf 100644 --- a/plugins/sudoers/regress/parser/check_gentime.c +++ b/plugins/sudoers/regress/parser/check_gentime.c @@ -33,7 +33,7 @@ sudo_dso_public int main(int argc, char *argv[]); const struct gentime_test { - char *gentime; + const char *gentime; time_t unixtime; } tests[] = { { "199412161032ZZ", -1 }, @@ -65,7 +65,7 @@ main(int argc, char *argv[]) initprogname(argc > 0 ? argv[0] : "check_gentime"); /* Do local time tests in Eastern Standard Time. */ - putenv("TZ=EST5EST5"); + putenv((char *)"TZ=EST5EST5"); tzset(); for (i = 0; i < ntests; i++) { diff --git a/plugins/sudoers/regress/serialize_list/check_serialize_list.c b/plugins/sudoers/regress/serialize_list/check_serialize_list.c index 7abf4761ee..c27e0a1903 100644 --- a/plugins/sudoers/regress/serialize_list/check_serialize_list.c +++ b/plugins/sudoers/regress/serialize_list/check_serialize_list.c @@ -38,9 +38,9 @@ test_serialize_list(int *ntests_out, int *errors_out) struct list_member lm1, lm2, lm3; char *result; - lm1.value = "a value with spaces"; - lm2.value = "this,and,that"; - lm3.value = ","; + lm1.value = (char *)"a value with spaces"; + lm2.value = (char *)"this,and,that"; + lm3.value = (char *)","; SLIST_INSERT_HEAD(&members, &lm3, entries); SLIST_INSERT_HEAD(&members, &lm2, entries); SLIST_INSERT_HEAD(&members, &lm1, entries); diff --git a/plugins/sudoers/regress/unescape/check_unesc.c b/plugins/sudoers/regress/unescape/check_unesc.c index 6b97f55887..ebbe30734c 100644 --- a/plugins/sudoers/regress/unescape/check_unesc.c +++ b/plugins/sudoers/regress/unescape/check_unesc.c @@ -27,8 +27,8 @@ #include "sudoers.h" struct test_data { - char *input; - char *result; + const char *input; + const char *result; size_t result_len; size_t bufsize; }; @@ -139,7 +139,7 @@ test_strvec_join(char sep, int *ntests_out, int *errors_out) /* Simulate: sudoedit -s '\' `perl -e 'print "A" x 65536'` */ memset(buf, 'A', sizeof(buf)); buf[sizeof(buf) - 1] = '\0'; - argv[0] = "\\"; + argv[0] = (char *)"\\"; argv[1] = buf; argv[2] = NULL; diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 71e8ba2562..66e429299b 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -749,7 +749,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], strcmp(NewArgv[1], "-c") == 0) { /* We allocated extra space for the --login above. */ memmove(&NewArgv[2], &NewArgv[1], sizeof(char *) * NewArgc); - NewArgv[1] = "--login"; + NewArgv[1] = (char *)"--login"; NewArgc++; } @@ -1188,8 +1188,8 @@ set_loginclass(struct passwd *pw) } else { login_class = pw->pw_class; if (!login_class || !*login_class) - login_class = - (pw->pw_uid == 0) ? LOGIN_DEFROOTCLASS : LOGIN_DEFCLASS; + login_class = (char *) + ((pw->pw_uid == 0) ? LOGIN_DEFROOTCLASS : LOGIN_DEFCLASS); } /* Make sure specified login class is valid. */ diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index a6718ccaca..80226b43ec 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -417,7 +417,7 @@ bool matches_env_pattern(const char *pattern, const char *var, bool *full_match) FILE *open_sudoers(const char *, bool, bool *); int set_cmnd_path(const char *runchroot); int sudoers_init(void *info, sudoers_logger_t logger, char * const envp[]); -int sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], bool verbose, void *closure); +int sudoers_policy_main(int argc, char *const argv[], int pwflag, char *env_add[], bool verbose, void *closure); void sudoers_cleanup(void); void sudo_user_free(void); extern struct sudo_user sudo_user; @@ -442,7 +442,7 @@ extern const char *path_ldap_conf; extern const char *path_ldap_secret; /* group_plugin.c */ -int group_plugin_load(char *plugin_info); +int group_plugin_load(const char *plugin_info); void group_plugin_unload(void); int group_plugin_query(const char *user, const char *group, const struct passwd *pwd); @@ -450,8 +450,8 @@ bool cb_group_plugin(const char *file, int line, int column, const union sudo_de extern const char *path_plugin_dir; /* editor.c */ -char *find_editor(int nfiles, char **files, int *argc_out, char ***argv_out, - char * const *allowlist, const char **env_editor); +char *find_editor(int nfiles, char * const *files, int *argc_out, + char ***argv_out, char * const *allowlist, const char **env_editor); /* exptilde.c */ bool expand_tilde(char **path, const char *user); diff --git a/plugins/sudoers/sudoers_hooks.c b/plugins/sudoers/sudoers_hooks.c index d0610e0e19..738f93b38a 100644 --- a/plugins/sudoers/sudoers_hooks.c +++ b/plugins/sudoers/sudoers_hooks.c @@ -101,7 +101,7 @@ sudoers_hook_getenv(const char *name, char **value, void *closure) goto done; } if (strcmp(name, "LC_ALL") == 0 || strcmp(name, "LC_MESSAGES") == 0) { - *value = def_sudoers_locale; + *value = (char *)def_sudoers_locale; goto done; } } diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index 5b8ebe501a..d8e28774d5 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -1129,7 +1129,7 @@ write_output(int fd, int what, void *v) if ((nl == iov[0].iov_base && iobuf->lastc != '\r') || (nl != iov[0].iov_base && nl[-1] != '\r')) { iov[0].iov_len = len; - iov[1].iov_base = "\r\n"; + iov[1].iov_base = (char *)"\r\n"; iov[1].iov_len = 2; iovcnt = 2; nbytes = iov[0].iov_len + iov[1].iov_len; diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index d83bdb0c73..809b6b59c6 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -202,8 +202,8 @@ main(int argc, char *argv[]) if (argc < 2) { if (!dflag) usage(); - user_name = argc ? *argv++ : "root"; - user_cmnd = user_base = "true"; + user_name = argc ? *argv++ : (char *)"root"; + user_cmnd = user_base = (char *)"true"; argc = 0; } else { user_name = *argv++; diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 679d39da8d..5d1cc48e88 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -93,7 +93,7 @@ static bool install_sudoers(struct sudoersfile *, bool, bool); static bool visudo_track_error(const char *file, int line, int column, const char *fmt, va_list args); static int print_unused(struct sudoers_parse_tree *, struct alias *, void *); static bool reparse_sudoers(char *, int, char **, bool, bool); -static int run_command(char *, char **); +static int run_command(const char *, char *const *); static void parse_sudoers_options(void); static void setup_signals(void); static void help(void) __attribute__((__noreturn__)); @@ -255,7 +255,7 @@ main(int argc, char *argv[]) } /* Mock up a fake sudo_user struct. */ - user_cmnd = user_base = ""; + user_cmnd = user_base = (char *)""; if (geteuid() == 0) { const char *user = getenv("SUDO_USER"); if (user != NULL && *user != '\0') @@ -361,7 +361,7 @@ get_editor(int *editor_argc, char ***editor_argv) { char *editor_path = NULL, **allowlist = NULL; const char *env_editor; - static char *files[] = { "+1", "sudoers" }; + static const char *files[] = { "+1", "sudoers" }; unsigned int allowlist_len = 0; debug_decl(get_editor, SUDOERS_DEBUG_UTIL); @@ -389,8 +389,8 @@ get_editor(int *editor_argc, char ***editor_argv) allowlist[allowlist_len] = NULL; } - editor_path = find_editor(2, files, editor_argc, editor_argv, allowlist, - &env_editor); + editor_path = find_editor(2, (char **)files, editor_argc, editor_argv, + allowlist, &env_editor); if (editor_path == NULL) { if (def_env_editor && env_editor != NULL) { /* We are honoring $EDITOR so this is a fatal error. */ @@ -413,7 +413,7 @@ get_editor(int *editor_argc, char ***editor_argv) * If an entry starts with '*' the tail end of the string is matched. * No other wild cards are supported. */ -static char *lineno_editors[] = { +static const char *lineno_editors[] = { "ex", "nex", "vi", @@ -440,7 +440,7 @@ static bool editor_supports_plus(const char *editor) { const char *cp, *editor_base; - char **av; + const char **av; debug_decl(editor_supports_plus, SUDOERS_DEBUG_UTIL); editor_base = sudo_basename(editor); @@ -532,7 +532,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, int editor_argc, (void)snprintf(linestr, sizeof(linestr), "+%d", lineno); editor_argv[ac++] = linestr; // -V507 } - editor_argv[ac++] = "--"; + editor_argv[ac++] = (char *)"--"; editor_argv[ac++] = sp->tpath; editor_argv[ac++] = NULL; @@ -885,7 +885,7 @@ setup_signals(void) } static int -run_command(char *path, char **argv) +run_command(const char *path, char *const *argv) { int status; pid_t pid, rv; @@ -1204,11 +1204,11 @@ quit(int signo) #define emsg " exiting due to signal: " iov[0].iov_base = (char *)getprogname(); iov[0].iov_len = strlen(iov[0].iov_base); - iov[1].iov_base = emsg; + iov[1].iov_base = (char *)emsg; iov[1].iov_len = sizeof(emsg) - 1; iov[2].iov_base = strsignal(signo); iov[2].iov_len = strlen(iov[2].iov_base); - iov[3].iov_base = "\n"; + iov[3].iov_base = (char *)"\n"; iov[3].iov_len = 1; ignore_result(writev(STDERR_FILENO, iov, 4)); _exit(signo); diff --git a/src/edit_open.c b/src/edit_open.c index cd04184062..091eed838e 100644 --- a/src/edit_open.c +++ b/src/edit_open.c @@ -493,6 +493,7 @@ sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, struct stat sb; bool ret = false; char *slash; + char pathbuf[2]; int dfd; debug_decl(sudo_edit_parent_valid, SUDO_DEBUG_EDIT); @@ -500,9 +501,13 @@ sudo_edit_parent_valid(char *path, int sflags, struct sudo_cred *user_cred, slash = strrchr(path, '/'); if (slash == NULL) { /* cwd */ - path = "."; + pathbuf[0] = '.'; + pathbuf[1] = '\0'; + path = pathbuf; } else if (slash == path) { - path = "/"; + pathbuf[0] = '/'; + pathbuf[1] = '\0'; + path = pathbuf; slash = NULL; } else { *slash = '\0'; diff --git a/src/exec_common.c b/src/exec_common.c index c5fc8cb77c..c5d704fe8a 100644 --- a/src/exec_common.c +++ b/src/exec_common.c @@ -119,16 +119,16 @@ sudo_execve(int fd, const char *path, char *const argv[], char *envp[], execve(path, argv, envp); if (fd == -1 && errno == ENOEXEC) { int argc; - char **nargv; + const char **nargv; for (argc = 0; argv[argc] != NULL; argc++) continue; nargv = reallocarray(NULL, argc + 2, sizeof(char *)); if (nargv != NULL) { nargv[0] = "sh"; - nargv[1] = (char *)path; + nargv[1] = path; memcpy(nargv + 2, argv + 1, argc * sizeof(char *)); - execve(_PATH_SUDO_BSHELL, nargv, envp); + execve(_PATH_SUDO_BSHELL, (char **)nargv, envp); free(nargv); } } diff --git a/src/parse_args.c b/src/parse_args.c index 7a8da92091..ae8af5dd23 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -638,7 +638,7 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, av[0] = (char *)user_details.shell; /* plugin may override shell */ if (cmnd != NULL) { - av[1] = "-c"; + av[1] = (char *)"-c"; av[2] = cmnd; } av[ac] = NULL; @@ -662,7 +662,7 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, exit(EXIT_FAILURE); /* Must have the command in argv[0]. */ - av[0] = "sudoedit"; + av[0] = (char *)"sudoedit"; for (ac = 0; argv[ac] != NULL; ac++) { av[ac + 1] = argv[ac]; } @@ -702,7 +702,7 @@ static void display_usage(int (*output)(const char *)) { struct sudo_lbuf lbuf; - char *uvec[6]; + const char *uvec[6]; int i, ulen; /* diff --git a/src/regress/noexec/check_noexec.c b/src/regress/noexec/check_noexec.c index 9e24bc0ec6..79848b43af 100644 --- a/src/regress/noexec/check_noexec.c +++ b/src/regress/noexec/check_noexec.c @@ -210,7 +210,7 @@ main(int argc, char *argv[], char *envp[]) /* Disable execution for post-exec and re-exec ourself. */ if (strcmp(argv[optind], "rexec") != 0) { const char *noexec = argv[optind]; - argv[optind] = "rexec"; + argv[optind] = (char *)"rexec"; execve(argv[0], argv, disable_execute(envp, noexec)); sudo_fatalx_nodebug("execve"); } diff --git a/src/selinux.c b/src/selinux.c index 2326326efd..8c78e045e0 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -445,6 +445,7 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], char **nargv; const char *sesh; int argc, nargc, serrno; + bool login_shell = false; debug_decl(selinux_execve, SUDO_DEBUG_SELINUX); sesh = sudo_conf_sesh_path(); @@ -474,11 +475,13 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return; } + if (*argv[0] == '-') + login_shell = true; if (ISSET(flags, CD_NOEXEC)) { - nargv[0] = *argv[0] == '-' ? "-sesh-noexec" : "sesh-noexec"; + nargv[0] = (char *)(login_shell ? "-sesh-noexec" : "sesh-noexec"); CLR(flags, CD_NOEXEC); } else { - nargv[0] = *argv[0] == '-' ? "-sesh" : "sesh"; + nargv[0] = (char *)(login_shell ? "-sesh" : "sesh"); } nargc = 1; if (fd != -1 && asprintf(&nargv[nargc++], "--execfd=%d", fd) == -1) { diff --git a/src/sudo.c b/src/sudo.c index 4f0f8fa35a..5bf4ad9c0a 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1246,7 +1246,7 @@ policy_list(int argc, char * const argv[], int verbose, const char *user) { const char *errstr = NULL; /* TODO: add list_user */ - char * const command_info[] = { + const char * const command_info[] = { "command=list", NULL }; @@ -1264,17 +1264,17 @@ policy_list(int argc, char * const argv[], int verbose, const char *user) switch (ok) { case 1: audit_accept(policy_plugin.name, SUDO_POLICY_PLUGIN, - command_info, argv, submit_envp); + (char **)command_info, argv, submit_envp); break; case 0: audit_reject(policy_plugin.name, SUDO_POLICY_PLUGIN, errstr ? errstr : _("command rejected by policy"), - command_info); + (char **)command_info); break; default: audit_error(policy_plugin.name, SUDO_POLICY_PLUGIN, errstr ? errstr : _("policy plugin error"), - command_info); + (char **)command_info); break; } @@ -1290,7 +1290,7 @@ static void policy_validate(char * const argv[]) { const char *errstr = NULL; - char * const command_info[] = { + const char * const command_info[] = { "command=validate", NULL }; @@ -1307,18 +1307,18 @@ policy_validate(char * const argv[]) switch (ok) { case 1: - audit_accept(policy_plugin.name, SUDO_POLICY_PLUGIN, command_info, - argv, submit_envp); + audit_accept(policy_plugin.name, SUDO_POLICY_PLUGIN, + (char **)command_info, argv, submit_envp); break; case 0: audit_reject(policy_plugin.name, SUDO_POLICY_PLUGIN, errstr ? errstr : _("command rejected by policy"), - command_info); + (char **)command_info); break; default: audit_error(policy_plugin.name, SUDO_POLICY_PLUGIN, errstr ? errstr : _("policy plugin error"), - command_info); + (char **)command_info); break; } diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 2720ae7f29..7d48d7776b 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -414,7 +414,8 @@ static int selinux_edit_create_tfiles(struct command_details *command_details, struct tempfile *tf, char *files[], int nfiles) { - char **sesh_args, **sesh_ap, *user_str = NULL; + const char **sesh_args, **sesh_ap; + char *user_str = NULL; int i, error, sesh_nargs, ret = -1; struct stat sb; debug_decl(selinux_edit_create_tfiles, SUDO_DEBUG_EDIT); @@ -471,9 +472,9 @@ selinux_edit_create_tfiles(struct command_details *command_details, *sesh_ap = NULL; /* Run sesh -e [-h] 0 ... */ - 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); + error = selinux_run_helper(command_details->cred.uid, + command_details->cred.gid, command_details->cred.ngroups, + command_details->cred.groups, (char **)sesh_args, command_details->envp); switch (error) { case SESH_SUCCESS: break; @@ -520,7 +521,8 @@ static int selinux_edit_copy_tfiles(struct command_details *command_details, struct tempfile *tf, int nfiles, struct timespec *times) { - char **sesh_args, **sesh_ap, *user_str = NULL; + const char **sesh_args, **sesh_ap; + char *user_str = NULL; int i, error, sesh_nargs, ret = 1; int tfd = -1; struct timespec ts; @@ -590,9 +592,9 @@ selinux_edit_copy_tfiles(struct command_details *command_details, if ((!check_dir && sesh_ap - sesh_args > 3) || (check_dir && sesh_ap - sesh_args > 5)) { /* Run sesh -e 1 ... */ - 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); + error = selinux_run_helper(command_details->cred.uid, + command_details->cred.gid, command_details->cred.ngroups, + command_details->cred.groups, (char **)sesh_args, command_details->envp); switch (error) { case SESH_SUCCESS: ret = 0; diff --git a/src/sudo_intercept.c b/src/sudo_intercept.c index 8ba1fccca9..97c6128929 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -166,7 +166,7 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], /* Fall back to exec via shell for execvp and friends. */ if (errno == ENOEXEC && is_execvp) { int argc; - char **shargv; + const char **shargv; for (argc = 0; argv[argc] != NULL; argc++) continue; @@ -176,7 +176,7 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], shargv[0] = "sh"; shargv[1] = ncmnd; memcpy(shargv + 2, nargv + 1, argc * sizeof(char *)); - ((sudo_fn_execve_t)fn)(_PATH_SUDO_BSHELL, shargv, nenvp); + ((sudo_fn_execve_t)fn)(_PATH_SUDO_BSHELL, (char **)shargv, nenvp); free(shargv); } } else { @@ -225,7 +225,7 @@ execl_wrapper(int type, const char *name, const char *arg, va_list ap) static int system_wrapper(const char *cmnd) { - char * const argv[] = { "sh", "-c", (char *)cmnd, NULL }; + const char * const argv[] = { "sh", "-c", cmnd, NULL }; const char shell[] = _PATH_SUDO_BSHELL; struct sigaction saveint, savequit, sa; sigset_t mask, omask; @@ -253,7 +253,7 @@ system_wrapper(const char *cmnd) case 0: /* child */ if (sigprocmask(SIG_SETMASK, &omask, NULL) != -1) - exec_wrapper(shell, argv, environ, false); + exec_wrapper(shell, (char **)argv, environ, false); _exit(127); default: /* parent */ From 38278640ca76c9f88668ad7066df858d31dddf3f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 28 Jun 2022 16:42:25 -0600 Subject: [PATCH 009/186] Update group_plugin_load() stub to match its prototype. --- plugins/sudoers/group_plugin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sudoers/group_plugin.c b/plugins/sudoers/group_plugin.c index 97f3a4fc2a..65bdbeb859 100644 --- a/plugins/sudoers/group_plugin.c +++ b/plugins/sudoers/group_plugin.c @@ -193,7 +193,7 @@ group_plugin_query(const char *user, const char *group, */ int -group_plugin_load(char *plugin_info) +group_plugin_load(const char *plugin_info) { debug_decl(group_plugin_load, SUDOERS_DEBUG_UTIL); debug_return_int(false); From e5834bd405906ba8ebde4f9ba99db6eb8b40a44d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 08:47:16 -0600 Subject: [PATCH 010/186] Use #include not #include "config.h" for consistency. Otherwise, some compilers may do the wrong thing in a build dir if there is a config.h file in the source dir too. --- lib/iolog/host_port.c | 2 +- lib/iolog/hostcheck.c | 2 +- lib/util/roundup.c | 2 +- logsrvd/iolog_writer.c | 2 +- logsrvd/logsrv_util.c | 2 +- logsrvd/logsrvd.c | 2 +- logsrvd/logsrvd.h | 2 +- logsrvd/logsrvd_conf.c | 2 +- logsrvd/logsrvd_journal.c | 2 +- logsrvd/logsrvd_local.c | 2 +- logsrvd/logsrvd_queue.c | 2 +- logsrvd/logsrvd_relay.c | 2 +- logsrvd/sendlog.c | 2 +- logsrvd/sendlog.h | 2 +- logsrvd/tls_client.c | 2 +- logsrvd/tls_common.h | 2 +- logsrvd/tls_init.c | 2 +- plugins/python/pyhelpers.h | 2 +- plugins/python/regress/iohelpers.h | 2 +- plugins/sudoers/log_client.c | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/iolog/host_port.c b/lib/iolog/host_port.c index 2b13f574b0..01e5bd0b0b 100644 --- a/lib/iolog/host_port.c +++ b/lib/iolog/host_port.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #ifdef HAVE_STDBOOL_H # include diff --git a/lib/iolog/hostcheck.c b/lib/iolog/hostcheck.c index fc664cf719..95c14d0591 100644 --- a/lib/iolog/hostcheck.c +++ b/lib/iolog/hostcheck.c @@ -19,7 +19,7 @@ * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com */ -#include "config.h" +#include #if defined(HAVE_OPENSSL) # if defined(HAVE_WOLFSSL) diff --git a/lib/util/roundup.c b/lib/util/roundup.c index 38f15711ad..27ef83a8b7 100644 --- a/lib/util/roundup.c +++ b/lib/util/roundup.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include "sudo_compat.h" #include "sudo_debug.h" diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 945cf54df8..411d350115 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/logsrv_util.c b/logsrvd/logsrv_util.c index 49c02bed6d..a72847d7ee 100644 --- a/logsrvd/logsrv_util.c +++ b/logsrvd/logsrv_util.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index c3c9d2da36..55e8c8df52 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/logsrvd.h b/logsrvd/logsrvd.h index 2565e999a7..4d371f31f8 100644 --- a/logsrvd/logsrvd.h +++ b/logsrvd/logsrvd.h @@ -24,7 +24,7 @@ # error protobuf-c version 1.30 or higher required #endif -#include "config.h" +#include #if defined(HAVE_OPENSSL) # if defined(HAVE_WOLFSSL) diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index 74ce416b81..1ac762b253 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/logsrvd_journal.c b/logsrvd/logsrvd_journal.c index 664f1ae9aa..43b9ae3ebb 100644 --- a/logsrvd/logsrvd_journal.c +++ b/logsrvd/logsrvd_journal.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/logsrvd_local.c b/logsrvd/logsrvd_local.c index 9fb03ba7bd..a99f29f5ea 100644 --- a/logsrvd/logsrvd_local.c +++ b/logsrvd/logsrvd_local.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/logsrvd_queue.c b/logsrvd/logsrvd_queue.c index ba013d5a23..6db40fe644 100644 --- a/logsrvd/logsrvd_queue.c +++ b/logsrvd/logsrvd_queue.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/logsrvd_relay.c b/logsrvd/logsrvd_relay.c index 13bf82c437..7f82a01309 100644 --- a/logsrvd/logsrvd_relay.c +++ b/logsrvd/logsrvd_relay.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 0865a97702..625719a14e 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #include diff --git a/logsrvd/sendlog.h b/logsrvd/sendlog.h index 49d6f6273b..74014efd90 100644 --- a/logsrvd/sendlog.h +++ b/logsrvd/sendlog.h @@ -24,7 +24,7 @@ # error protobuf-c version 1.30 or higher required #endif -#include "config.h" +#include #if defined(HAVE_OPENSSL) # if defined(HAVE_WOLFSSL) diff --git a/logsrvd/tls_client.c b/logsrvd/tls_client.c index 9be07fd2a5..ab72218628 100644 --- a/logsrvd/tls_client.c +++ b/logsrvd/tls_client.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #include #ifdef HAVE_STDBOOL_H diff --git a/logsrvd/tls_common.h b/logsrvd/tls_common.h index 2524037b93..505801c3ea 100644 --- a/logsrvd/tls_common.h +++ b/logsrvd/tls_common.h @@ -19,7 +19,7 @@ #ifndef SUDO_TLS_COMMON_H #define SUDO_TLS_COMMON_H -#include "config.h" +#include #if defined(HAVE_OPENSSL) # if defined(HAVE_WOLFSSL) diff --git a/logsrvd/tls_init.c b/logsrvd/tls_init.c index 6a24fcc83c..d88135a96c 100644 --- a/logsrvd/tls_init.c +++ b/logsrvd/tls_init.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #ifdef HAVE_STDBOOL_H # include diff --git a/plugins/python/pyhelpers.h b/plugins/python/pyhelpers.h index 524b14e3bb..5448e1d485 100644 --- a/plugins/python/pyhelpers.h +++ b/plugins/python/pyhelpers.h @@ -22,7 +22,7 @@ #define PY_SSIZE_T_CLEAN #include -#include "config.h" +#include #include "sudo_compat.h" #include "sudo_plugin.h" diff --git a/plugins/python/regress/iohelpers.h b/plugins/python/regress/iohelpers.h index b2383af76b..1ebd8e3a71 100644 --- a/plugins/python/regress/iohelpers.h +++ b/plugins/python/regress/iohelpers.h @@ -19,7 +19,7 @@ #ifndef PYTHON_IO_HELPERS #define PYTHON_IO_HELPERS -#include "config.h" +#include #include "sudo_compat.h" #include diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index fc494f35c6..8fb6372cb1 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -16,7 +16,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +#include #ifdef SUDOERS_LOG_CLIENT From 3e21c8da5cacb4a261d20301927c6ac52361d1e7 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 09:45:04 -0600 Subject: [PATCH 011/186] Add missing PVS Studio Open Source comments. Also avoid checking protobuf-c source and protobuf-c generated files. --- lib/eventlog/Makefile.in | 8 +++----- lib/fuzzstub/Makefile.in | 8 +++----- lib/iolog/Makefile.in | 8 +++----- lib/iolog/host_port.c | 5 +++++ lib/logsrv/Makefile.in | 9 +++------ lib/protobuf-c/Makefile.in | 9 +++------ lib/util/Makefile.in | 8 +++----- lib/util/getentropy.c | 5 +++++ lib/util/roundup.c | 5 +++++ logsrvd/iolog_writer.c | 5 +++++ logsrvd/logsrv_util.c | 5 +++++ logsrvd/logsrvd.c | 5 +++++ logsrvd/logsrvd_conf.c | 5 +++++ logsrvd/logsrvd_journal.c | 5 +++++ logsrvd/logsrvd_local.c | 5 +++++ logsrvd/logsrvd_queue.c | 5 +++++ logsrvd/logsrvd_relay.c | 5 +++++ logsrvd/sendlog.c | 5 +++++ logsrvd/tls_client.c | 5 +++++ logsrvd/tls_init.c | 5 +++++ plugins/sudoers/log_client.c | 5 +++++ src/Makefile.in | 2 +- src/apparmor.c | 5 +++++ 23 files changed, 99 insertions(+), 33 deletions(-) diff --git a/lib/eventlog/Makefile.in b/lib/eventlog/Makefile.in index 68fdcfc9ec..84f8a5441f 100644 --- a/lib/eventlog/Makefile.in +++ b/lib/eventlog/Makefile.in @@ -93,11 +93,6 @@ CHECK_WRAP_OBJS = check_wrap.lo logwrap.lo all: libsudo_eventlog.la -pvs-log-files: $(POBJS) - -pvs-studio: $(POBJS) - plog-converter $(PVS_LOG_OPTS) $(POBJS) - depend: $(scriptdir)/mkdep.pl --srcdir=$(abs_top_srcdir) \ --builddir=$(abs_top_builddir) lib/eventlog/Makefile.in @@ -147,6 +142,9 @@ cppcheck: pvs-log-files: $(POBJS) +pvs-studio: $(POBJS) + plog-converter $(PVS_LOG_OPTS) $(POBJS) + fuzz: check-fuzzer: diff --git a/lib/fuzzstub/Makefile.in b/lib/fuzzstub/Makefile.in index 76baf2eb5d..8c472b5cda 100644 --- a/lib/fuzzstub/Makefile.in +++ b/lib/fuzzstub/Makefile.in @@ -88,11 +88,6 @@ POBJS = $(IOBJS:.i=.plog) all: libsudo_fuzzstub.la -pvs-log-files: $(POBJS) - -pvs-studio: $(POBJS) - plog-converter $(PVS_LOG_OPTS) $(POBJS) - depend: $(scriptdir)/mkdep.pl --srcdir=$(abs_top_srcdir) \ --builddir=$(abs_top_builddir) lib/fuzzstub/Makefile.in @@ -139,6 +134,9 @@ cppcheck: pvs-log-files: $(POBJS) +pvs-studio: $(POBJS) + plog-converter $(PVS_LOG_OPTS) $(POBJS) + fuzz: check-fuzzer: diff --git a/lib/iolog/Makefile.in b/lib/iolog/Makefile.in index 780a9c2206..7ee93027bc 100644 --- a/lib/iolog/Makefile.in +++ b/lib/iolog/Makefile.in @@ -140,11 +140,6 @@ FUZZ_IOLOG_TIMING_CORPUS = $(srcdir)/regress/corpus/seed/timing/timing.* all: libsudo_iolog.la -pvs-log-files: $(POBJS) - -pvs-studio: $(POBJS) - plog-converter $(PVS_LOG_OPTS) $(POBJS) - depend: $(scriptdir)/mkdep.pl --srcdir=$(abs_top_srcdir) \ --builddir=$(abs_top_builddir) lib/iolog/Makefile.in @@ -305,6 +300,9 @@ cppcheck: pvs-log-files: $(POBJS) +pvs-studio: $(POBJS) + plog-converter $(PVS_LOG_OPTS) $(POBJS) + fuzz: run-fuzz_iolog_json run-fuzz_iolog_legacy run-fuzz_iolog_timing check-fuzzer: $(FUZZ_PROGS) diff --git a/lib/iolog/host_port.c b/lib/iolog/host_port.c index 01e5bd0b0b..0622f4c44c 100644 --- a/lib/iolog/host_port.c +++ b/lib/iolog/host_port.c @@ -16,6 +16,11 @@ * 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 #ifdef HAVE_STDBOOL_H diff --git a/lib/logsrv/Makefile.in b/lib/logsrv/Makefile.in index 119ebf05a7..063680d688 100644 --- a/lib/logsrv/Makefile.in +++ b/lib/logsrv/Makefile.in @@ -86,11 +86,6 @@ GENERATED = log_server.pb-c.h log_server.pb-c.c all: liblogsrv.la -pvs-log-files: $(POBJS) - -pvs-studio: $(POBJS) - plog-converter $(PVS_LOG_OPTS) $(POBJS) - depend: $(scriptdir)/mkdep.pl --srcdir=$(abs_top_srcdir) \ --builddir=$(abs_top_builddir) lib/logsrv/Makefile.in @@ -149,7 +144,9 @@ splint: cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c -pvs-log-files: $(POBJS) +pvs-log-files: + +pvs-studio: fuzz: diff --git a/lib/protobuf-c/Makefile.in b/lib/protobuf-c/Makefile.in index 89846b4e4f..0eb22d3939 100644 --- a/lib/protobuf-c/Makefile.in +++ b/lib/protobuf-c/Makefile.in @@ -81,11 +81,6 @@ POBJS = $(IOBJS:.i=.plog) all: libprotobuf-c.la -pvs-log-files: $(POBJS) - -pvs-studio: $(POBJS) - plog-converter $(PVS_LOG_OPTS) $(POBJS) - depend: $(scriptdir)/mkdep.pl --srcdir=$(abs_top_srcdir) \ --builddir=$(abs_top_builddir) lib/protobuf-c/Makefile.in @@ -144,7 +139,9 @@ splint: cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c -pvs-log-files: $(POBJS) +pvs-log-files: + +pvs-studio: fuzz: diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 856ee1e27c..452f2f07b9 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -197,11 +197,6 @@ FUZZ_SUDO_CONF_CORPUS = $(srcdir)/regress/corpus/seed/sudo_conf/sudo.conf.* all: libsudo_util.la -pvs-log-files: $(POBJS) - -pvs-studio: $(POBJS) - plog-converter $(PVS_LOG_OPTS) $(POBJS) - depend: siglist.c signame.c $(scriptdir)/mkdep.pl --srcdir=$(abs_top_srcdir) \ --builddir=$(abs_top_builddir) lib/util/Makefile.in @@ -395,6 +390,9 @@ cppcheck: pvs-log-files: $(POBJS) +pvs-studio: $(POBJS) + plog-converter $(PVS_LOG_OPTS) $(POBJS) + fuzz: run-fuzz_sudo_conf check-fuzzer: $(FUZZ_PROGS) diff --git a/lib/util/getentropy.c b/lib/util/getentropy.c index 056c122177..dc5c91c023 100644 --- a/lib/util/getentropy.c +++ b/lib/util/getentropy.c @@ -20,6 +20,11 @@ * http://man.openbsd.org/getentropy.2 */ +/* + * 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 #ifndef HAVE_GETENTROPY diff --git a/lib/util/roundup.c b/lib/util/roundup.c index 27ef83a8b7..0e7e8fdcd3 100644 --- a/lib/util/roundup.c +++ b/lib/util/roundup.c @@ -16,6 +16,11 @@ * 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 "sudo_compat.h" diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 411d350115..6fc57f9695 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/logsrv_util.c b/logsrvd/logsrv_util.c index a72847d7ee..b5493ef646 100644 --- a/logsrvd/logsrv_util.c +++ b/logsrvd/logsrv_util.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index 55e8c8df52..8911e2e632 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index 1ac762b253..eea453c6d0 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/logsrvd_journal.c b/logsrvd/logsrvd_journal.c index 43b9ae3ebb..c9e804fe54 100644 --- a/logsrvd/logsrvd_journal.c +++ b/logsrvd/logsrvd_journal.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/logsrvd_local.c b/logsrvd/logsrvd_local.c index a99f29f5ea..2cbd5c82d1 100644 --- a/logsrvd/logsrvd_local.c +++ b/logsrvd/logsrvd_local.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/logsrvd_queue.c b/logsrvd/logsrvd_queue.c index 6db40fe644..5d55383543 100644 --- a/logsrvd/logsrvd_queue.c +++ b/logsrvd/logsrvd_queue.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/logsrvd_relay.c b/logsrvd/logsrvd_relay.c index 7f82a01309..dc192888cb 100644 --- a/logsrvd/logsrvd_relay.c +++ b/logsrvd/logsrvd_relay.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 625719a14e..0d1e37098c 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/tls_client.c b/logsrvd/tls_client.c index ab72218628..405176a6e1 100644 --- a/logsrvd/tls_client.c +++ b/logsrvd/tls_client.c @@ -16,6 +16,11 @@ * 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 diff --git a/logsrvd/tls_init.c b/logsrvd/tls_init.c index d88135a96c..65cc8daa23 100644 --- a/logsrvd/tls_init.c +++ b/logsrvd/tls_init.c @@ -16,6 +16,11 @@ * 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 #ifdef HAVE_STDBOOL_H diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index 8fb6372cb1..7a1fcc0057 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -16,6 +16,11 @@ * 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 #ifdef SUDOERS_LOG_CLIENT diff --git a/src/Makefile.in b/src/Makefile.in index 74eea89b49..ba9804b144 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -146,7 +146,7 @@ OBJS = conversation.o copy_file.o edit_open.o env_hooks.o exec.o exec_common.o \ net_ifs.o parse_args.o preserve_fds.o signal.o sudo.o sudo_edit.o \ suspend_nopty.o tcsetpgrp_nobg.o tgetpass.o ttyname.o utmp.o @SUDO_OBJS@ -IOBJS = $(OBJS:.o=.i) sesh.i +IOBJS = $(OBJS:.o=.i) sesh.i sudo_intercept.i sudo_intercept_common.i POBJS = $(IOBJS:.i=.plog) diff --git a/src/apparmor.c b/src/apparmor.c index 5f36f30640..b7bd1a28a1 100644 --- a/src/apparmor.c +++ b/src/apparmor.c @@ -16,6 +16,11 @@ * 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 #ifdef HAVE_APPARMOR From 54ed54d94ef4144caafb7ebf91a3237c655dc85d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 10:00:03 -0600 Subject: [PATCH 012/186] Use "unable to allocate memory" warning on malloc failure. This is consistent with the rest of the sudo source code. --- logsrvd/logsrvd_conf.c | 48 ++++++++++++++++++++++-------------------- logsrvd/sendlog.c | 2 +- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index eea453c6d0..940b92addf 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -354,7 +354,7 @@ cb_iolog_dir(struct logsrvd_config *config, const char *path, size_t offset) free(config->iolog.iolog_dir); if ((config->iolog.iolog_dir = strdup(path)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -367,7 +367,7 @@ cb_iolog_file(struct logsrvd_config *config, const char *path, size_t offset) free(config->iolog.iolog_file); if ((config->iolog.iolog_file = strdup(path)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -508,7 +508,7 @@ append_address(struct server_address_list *addresses, const char *str, debug_decl(append_address, SUDO_DEBUG_UTIL); if ((copy = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } @@ -531,11 +531,11 @@ append_address(struct server_address_list *addresses, const char *str, /* Only make a single copy of the string + host for all addresses. */ if ((sa_str = sudo_rcstr_dup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto done; } if (host != NULL && (sa_host = sudo_rcstr_dup(host)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto done; } @@ -553,7 +553,7 @@ append_address(struct server_address_list *addresses, const char *str, struct server_address *addr; if ((addr = malloc(sizeof(*addr))) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto done; } addr->sa_str = sudo_rcstr_addref(sa_str); @@ -623,7 +623,7 @@ cb_server_pid_file(struct logsrvd_config *config, const char *str, size_t offset debug_return_bool(false); } if ((copy = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } } @@ -646,7 +646,8 @@ cb_server_log(struct logsrvd_config *config, const char *str, size_t offset) if (*str == '/') { log_type = SERVER_LOG_FILE; if ((copy = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); debug_return_bool(false); } } else if (strcmp(str, "stderr") == 0) { @@ -674,7 +675,7 @@ cb_tls_key(struct logsrvd_config *config, const char *path, size_t offset) free(*p); if ((*p = strdup(path)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -688,7 +689,7 @@ cb_tls_cacert(struct logsrvd_config *config, const char *path, size_t offset) free(*p); if ((*p = strdup(path)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -702,7 +703,7 @@ cb_tls_cert(struct logsrvd_config *config, const char *path, size_t offset) free(*p); if ((*p = strdup(path)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -716,7 +717,7 @@ cb_tls_dhparams(struct logsrvd_config *config, const char *path, size_t offset) free(*p); if ((*p = strdup(path)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -730,7 +731,7 @@ cb_tls_ciphers12(struct logsrvd_config *config, const char *str, size_t offset) free(*p); if ((*p = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -744,7 +745,7 @@ cb_tls_ciphers13(struct logsrvd_config *config, const char *str, size_t offset) free(*p); if ((*p = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } debug_return_bool(true); @@ -825,7 +826,7 @@ cb_relay_dir(struct logsrvd_config *config, const char *str, size_t offset) debug_decl(cb_relay_dir, SUDO_DEBUG_UTIL); if ((copy = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } @@ -1033,7 +1034,7 @@ cb_logfile_path(struct logsrvd_config *config, const char *str, size_t offset) debug_return_bool(false); } if ((copy = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } @@ -1050,7 +1051,7 @@ cb_logfile_time_format(struct logsrvd_config *config, const char *str, size_t of debug_decl(cb_logfile_time_format, SUDO_DEBUG_UTIL); if ((copy = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } @@ -1592,7 +1593,7 @@ logsrvd_conf_alloc(void) debug_decl(logsrvd_conf_alloc, SUDO_DEBUG_UTIL); if ((config = calloc(1, sizeof(*config))) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_ptr(NULL); } @@ -1618,7 +1619,7 @@ logsrvd_conf_alloc(void) config->server.log_type = SERVER_LOG_SYSLOG; config->server.pid_file = strdup(_PATH_SUDO_LOGSRVD_PID); if (config->server.pid_file == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } @@ -1630,20 +1631,20 @@ logsrvd_conf_alloc(void) if (access(DEFAULT_CA_CERT_PATH, R_OK) == 0) { config->server.tls_cacert_path = strdup(DEFAULT_CA_CERT_PATH); if (config->server.tls_cacert_path == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } } if (access(DEFAULT_SERVER_CERT_PATH, R_OK) == 0) { config->server.tls_cert_path = strdup(DEFAULT_SERVER_CERT_PATH); if (config->server.tls_cert_path == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } } config->server.tls_key_path = strdup(DEFAULT_SERVER_KEY_PATH); if (config->server.tls_key_path == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } config->server.tls_verify = true; @@ -1739,7 +1740,8 @@ logsrvd_conf_apply(struct logsrvd_config *config) config->server.tls_cert_path = strdup(DEFAULT_SERVER_CERT_PATH); if (config->server.tls_cert_path == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); debug_return_bool(false); } } diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 0d1e37098c..595c4244fe 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -288,7 +288,7 @@ read_io_buf(struct client_closure *closure) free(closure->buf); closure->bufsize = sudo_pow2_roundup(timing->u.nbytes); if ((closure->buf = malloc(closure->bufsize)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); timing->u.nbytes = 0; debug_return_bool(false); } From b6151781ce4684c4a977f6195afe9864eb57e86f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 10:08:55 -0600 Subject: [PATCH 013/186] Quiet some harmless PVS Studio warnings. --- logsrvd/logsrv_util.c | 4 ++-- logsrvd/logsrvd.c | 10 +++++----- logsrvd/logsrvd_conf.c | 5 ++--- logsrvd/logsrvd_queue.c | 2 +- logsrvd/sendlog.c | 2 +- logsrvd/tls_client.c | 2 +- plugins/sudoers/log_client.c | 2 +- src/sudo_intercept_common.c | 2 +- 8 files changed, 14 insertions(+), 15 deletions(-) diff --git a/logsrvd/logsrv_util.c b/logsrvd/logsrv_util.c index b5493ef646..f70604d528 100644 --- a/logsrvd/logsrv_util.c +++ b/logsrvd/logsrv_util.c @@ -69,14 +69,14 @@ expand_buf(struct connection_buffer *buf, unsigned int needed) sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } - if (buf->len - buf->off > 0) + if (buf->len != buf->off) memcpy(newdata, buf->data + buf->off, buf->len - buf->off); free(buf->data); buf->data = newdata; buf->size = needed; } else { /* Just reset existing buffer. */ - if (buf->len - buf->off > 0) { + if (buf->len != buf->off) { memmove(buf->data, buf->data + buf->off, buf->len - buf->off); } diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index 8911e2e632..bd8191babe 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -268,7 +268,7 @@ connection_close(struct connection_closure *closure) /* Connect to the first relay available asynchronously. */ if (!connect_relay(new_closure)) { - sudo_warnx(U_("unable to connect to relay")); + sudo_warnx("%s", U_("unable to connect to relay")); connection_closure_free(new_closure); } } @@ -1548,12 +1548,12 @@ register_listener(struct server_address *addr, struct sudo_event_base *evbase) /* TODO: make non-fatal */ if ((l = malloc(sizeof(*l))) == NULL) - sudo_fatal(NULL); + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); l->sock = sock; l->tls = addr->tls; l->ev = sudo_ev_alloc(sock, SUDO_EV_READ|SUDO_EV_PERSIST, listener_cb, l); if (l->ev == NULL) - sudo_fatal(NULL); + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(evbase, l->ev, NULL, false) == -1) sudo_fatal("%s", U_("unable to add event to queue")); TAILQ_INSERT_TAIL(&listeners, l, entries); @@ -1737,7 +1737,7 @@ register_signal(int signo, struct sudo_event_base *base) ev = sudo_ev_alloc(signo, SUDO_EV_SIGNAL, signal_cb, base); if (ev == NULL) - sudo_fatal(NULL); + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(base, ev, NULL, false) == -1) sudo_fatal("%s", U_("unable to add event to queue")); @@ -1953,7 +1953,7 @@ main(int argc, char *argv[]) exit(EXIT_FAILURE); if ((evbase = sudo_ev_base_alloc()) == NULL) - sudo_fatal(NULL); + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* Initialize listeners. */ if (!server_setup(evbase)) diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index 940b92addf..39bfa873b1 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -1029,7 +1029,6 @@ cb_logfile_path(struct logsrvd_config *config, const char *str, size_t offset) debug_decl(cb_logfile_path, SUDO_DEBUG_UTIL); if (*str != '/') { - debug_return_bool(false); sudo_warnx(U_("%s: not a fully qualified path"), str); debug_return_bool(false); } @@ -1761,7 +1760,7 @@ logsrvd_conf_apply(struct logsrvd_config *config) config->server.tls_ciphers_v12, config->server.tls_ciphers_v13, config->server.tls_verify); if (config->server.ssl_ctx == NULL) { - sudo_warnx(U_("unable to initialize server TLS context")); + sudo_warnx("%s", U_("unable to initialize server TLS context")); debug_return_bool(false); } break; @@ -1781,7 +1780,7 @@ logsrvd_conf_apply(struct logsrvd_config *config) TLS_RELAY_STR(config, tls_ciphers_v13), TLS_RELAY_INT(config, tls_verify)); if (config->relay.ssl_ctx == NULL) { - sudo_warnx(U_("unable to initialize relay TLS context")); + sudo_warnx("%s", U_("unable to initialize relay TLS context")); debug_return_bool(false); } break; diff --git a/logsrvd/logsrvd_queue.c b/logsrvd/logsrvd_queue.c index 5d55383543..f164e82565 100644 --- a/logsrvd/logsrvd_queue.c +++ b/logsrvd/logsrvd_queue.c @@ -132,7 +132,7 @@ outgoing_queue_cb(int unused, int what, void *v) success = connect_relay(closure); if (!success) { - sudo_warnx(U_("unable to connect to relay")); + sudo_warnx("%s", U_("unable to connect to relay")); connection_close(closure); } break; diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 595c4244fe..98d5ecc100 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -1798,7 +1798,7 @@ main(int argc, char *argv[]) goto bad; if ((evbase = sudo_ev_base_alloc()) == NULL) - sudo_fatal(NULL); + sudo_fatal(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (testrun) printf("connecting clients...\n"); diff --git a/logsrvd/tls_client.c b/logsrvd/tls_client.c index 405176a6e1..dde6a6009c 100644 --- a/logsrvd/tls_client.c +++ b/logsrvd/tls_client.c @@ -235,7 +235,7 @@ tls_client_setup(int sock, const char *ca_bundle_file, const char *cert_file, ssl_ctx = init_tls_context(ca_bundle_file, cert_file, key_file, dhparam_file, ciphers_v12, ciphers_v13, verify_server); if (ssl_ctx == NULL) { - sudo_warnx(U_("unable to initialize TLS context")); + sudo_warnx("%s", U_("unable to initialize TLS context")); debug_return_bool(false); } diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index 7a1fcc0057..818218a3d6 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -1532,7 +1532,7 @@ handle_log_id(char *id, struct client_closure *closure) sudo_debug_printf(SUDO_DEBUG_INFO, "%s: remote log ID: %s", __func__, id); if (closure->iolog_id != NULL) { if ((closure->iolog_id = strdup(id)) == NULL) - sudo_fatal(NULL); + sudo_fatal(U_("%s: %s"), __func__, U_("unable to allocate memory")); } debug_return_bool(true); } diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index 9c9e2346fa..a9ac766119 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -361,7 +361,7 @@ intercept_connect(void) debug_decl(intercept_connect, SUDO_DEBUG_EXEC); if (intercept_port == 0) { - sudo_warnx(U_("intercept port not set")); + sudo_warnx("%s", U_("intercept port not set")); goto done; } From a14bef6a41a7b1851e03a39afe13c3f91678da69 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 10:17:35 -0600 Subject: [PATCH 014/186] Do not check files generated by protbuf-c with PVS-Studio --- scripts/mkdep.pl | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index 380439384d..4056119e79 100755 --- a/scripts/mkdep.pl +++ b/scripts/mkdep.pl @@ -216,17 +216,24 @@ sub mkdep { if ($ext ne "o" || !exists($objs{"$base.lo"})) { $imp = $implicit{"i"}; if (exists $implicit{"i"} && exists $implicit{"plog"}) { - $imp = $implicit{"i"}; - $deps =~ s/\.l?o/.i/; - $new_makefile .= $deps; - $new_makefile .= "\t$imp\n"; - - $imp = $implicit{"plog"}; - $imp =~ s/ifile=\$<; *//; - $imp =~ s/\$\$\{ifile\%i\}c/$src/; - $obj =~ /(.*)\.[a-z]+$/; - $new_makefile .= "${1}.plog: ${1}.i\n"; - $new_makefile .= "\t$imp\n"; + if ($src =~ /\.pb-c.c$/) { + # Do not check protobuf-c generated files + $obj =~ /(.*)\.[a-z]+$/; + $new_makefile .= "${1}.plog: ${src}\n"; + $new_makefile .= "\ttouch \$@\n"; + } else { + $imp = $implicit{"i"}; + $deps =~ s/\.l?o/.i/; + $new_makefile .= $deps; + $new_makefile .= "\t$imp\n"; + + $imp = $implicit{"plog"}; + $imp =~ s/ifile=\$<; *//; + $imp =~ s/\$\$\{ifile\%i\}c/$src/; + $obj =~ /(.*)\.[a-z]+$/; + $new_makefile .= "${1}.plog: ${1}.i\n"; + $new_makefile .= "\t$imp\n"; + } } } } From 5f534979ef31ac584f4d93d6044cd1935ecfc502 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 10:18:56 -0600 Subject: [PATCH 015/186] Regenerate dependencies --- lib/iolog/Makefile.in | 10 ++-- lib/logsrv/Makefile.in | 7 +-- lib/protobuf-c/Makefile.in | 8 ++-- plugins/sudoers/Makefile.in | 92 ++++++++++++++++++++++++++----------- src/Makefile.in | 49 ++++++++++++-------- 5 files changed, 106 insertions(+), 60 deletions(-) diff --git a/lib/iolog/Makefile.in b/lib/iolog/Makefile.in index 7ee93027bc..19ca7f3d49 100644 --- a/lib/iolog/Makefile.in +++ b/lib/iolog/Makefile.in @@ -496,13 +496,15 @@ fuzz_iolog_timing.plog: fuzz_iolog_timing.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/fuzz/fuzz_iolog_timing.c --i-file $< --output-file $@ host_port.lo: $(srcdir)/host_port.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(top_builddir)/config.h + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/host_port.c host_port.i: $(srcdir)/host_port.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(top_builddir)/config.h + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< host_port.plog: host_port.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/host_port.c --i-file $< --output-file $@ diff --git a/lib/logsrv/Makefile.in b/lib/logsrv/Makefile.in index 063680d688..f81698fa97 100644 --- a/lib/logsrv/Makefile.in +++ b/lib/logsrv/Makefile.in @@ -182,8 +182,5 @@ cleandir: realclean log_server.pb-c.lo: $(srcdir)/log_server.pb-c.c $(incdir)/log_server.pb-c.h \ $(incdir)/protobuf-c/protobuf-c.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/log_server.pb-c.c -log_server.pb-c.i: $(srcdir)/log_server.pb-c.c $(incdir)/log_server.pb-c.h \ - $(incdir)/protobuf-c/protobuf-c.h - $(CC) -E -o $@ $(CPPFLAGS) $< -log_server.pb-c.plog: log_server.pb-c.i - rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/log_server.pb-c.c --i-file $< --output-file $@ +log_server.pb-c.plog: $(srcdir)/log_server.pb-c.c + touch $@ diff --git a/lib/protobuf-c/Makefile.in b/lib/protobuf-c/Makefile.in index 0eb22d3939..49b1e9d9de 100644 --- a/lib/protobuf-c/Makefile.in +++ b/lib/protobuf-c/Makefile.in @@ -170,11 +170,11 @@ cleandir: realclean .PHONY: clean mostlyclean distclean cleandir clobber realclean # Autogenerated dependencies, do not modify -protobuf-c.lo: $(srcdir)/protobuf-c.c $(incdir)/protobuf-c/protobuf-c.h \ - $(top_builddir)/config.h +protobuf-c.lo: $(srcdir)/protobuf-c.c $(incdir)/compat/endian.h \ + $(incdir)/protobuf-c/protobuf-c.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/protobuf-c.c -protobuf-c.i: $(srcdir)/protobuf-c.c $(incdir)/protobuf-c/protobuf-c.h \ - $(top_builddir)/config.h +protobuf-c.i: $(srcdir)/protobuf-c.c $(incdir)/compat/endian.h \ + $(incdir)/protobuf-c/protobuf-c.h $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< protobuf-c.plog: protobuf-c.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/protobuf-c.c --i-file $< --output-file $@ diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 5cf8ef243b..037a7da843 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -1687,10 +1687,10 @@ fuzz_policy.o: $(srcdir)/regress/fuzz/fuzz_policy.c $(devdir)/def_data.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/defaults.h \ - $(srcdir)/interfaces.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/check.h \ + $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/fuzz/fuzz_policy.c @@ -1699,10 +1699,10 @@ fuzz_policy.i: $(srcdir)/regress/fuzz/fuzz_policy.c $(devdir)/def_data.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_eventlog.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/defaults.h \ - $(srcdir)/interfaces.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(incdir)/sudo_iolog.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/check.h \ + $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< @@ -2320,15 +2320,19 @@ match_digest.plog: match_digest.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/match_digest.c --i-file $< --output-file $@ net_ifs.o: $(top_srcdir)/src/net_ifs.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 $(top_builddir)/config.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 $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(top_srcdir)/src/sudo.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(top_srcdir)/src/net_ifs.c net_ifs.i: $(top_srcdir)/src/net_ifs.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 $(top_builddir)/config.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 $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(top_srcdir)/src/sudo.h $(CC) -E -o $@ $(CPPFLAGS) $< net_ifs.plog: net_ifs.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(top_srcdir)/src/net_ifs.c --i-file $< --output-file $@ @@ -2808,18 +2812,20 @@ stubs.o: $(srcdir)/stubs.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/defaults.h \ - $(srcdir)/interfaces.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/cvtsudoers.h \ + $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/strlist.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/stubs.c stubs.i: $(srcdir)/stubs.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/defaults.h \ - $(srcdir)/interfaces.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/cvtsudoers.h \ + $(srcdir)/defaults.h $(srcdir)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/strlist.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< stubs.plog: stubs.i @@ -3072,13 +3078,25 @@ timestamp.i: $(srcdir)/timestamp.c $(devdir)/def_data.h \ $(CC) -E -o $@ $(CPPFLAGS) $< timestamp.plog: timestamp.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/timestamp.c --i-file $< --output-file $@ -timestr.lo: $(srcdir)/timestr.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_queue.h $(srcdir)/parse.h $(top_builddir)/config.h +timestr.lo: $(srcdir)/timestr.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/parse.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/timestr.c -timestr.i: $(srcdir)/timestr.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_queue.h $(srcdir)/parse.h $(top_builddir)/config.h +timestr.i: $(srcdir)/timestr.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/parse.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< timestr.plog: timestr.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/timestr.c --i-file $< --output-file $@ @@ -3172,9 +3190,27 @@ tsgetgrpw.i: $(srcdir)/tsgetgrpw.c $(devdir)/def_data.h \ $(CC) -E -o $@ $(CPPFLAGS) $< tsgetgrpw.plog: tsgetgrpw.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/tsgetgrpw.c --i-file $< --output-file $@ -unesc_str.lo: $(srcdir)/unesc_str.c +unesc_str.lo: $(srcdir)/unesc_str.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/unesc_str.c -unesc_str.i: $(srcdir)/unesc_str.c +unesc_str.i: $(srcdir)/unesc_str.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_eventlog.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< unesc_str.plog: unesc_str.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/unesc_str.c --i-file $< --output-file $@ diff --git a/src/Makefile.in b/src/Makefile.in index ba9804b144..f3a411f1be 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -459,16 +459,16 @@ copy_file.o: $(srcdir)/copy_file.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 $(top_builddir)/config.h \ - $(top_builddir)/pathnames.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) $(HARDENING_CFLAGS) $(srcdir)/copy_file.c copy_file.i: $(srcdir)/copy_file.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 $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_edit.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.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 $@ @@ -711,11 +711,8 @@ hooks.plog: hooks.i intercept.pb-c.lo: $(srcdir)/intercept.pb-c.c $(incdir)/intercept.pb-c.h \ $(incdir)/protobuf-c/protobuf-c.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/intercept.pb-c.c -intercept.pb-c.i: $(srcdir)/intercept.pb-c.c $(incdir)/intercept.pb-c.h \ - $(incdir)/protobuf-c/protobuf-c.h - $(CC) -E -o $@ $(CPPFLAGS) $< -intercept.pb-c.plog: intercept.pb-c.i - rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/intercept.pb-c.c --i-file $< --output-file $@ +intercept.pb-c.plog: $(srcdir)/intercept.pb-c.c + touch $@ intercept.pb-c.o: $(srcdir)/intercept.pb-c.c $(incdir)/intercept.pb-c.h \ $(incdir)/protobuf-c/protobuf-c.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/intercept.pb-c.c @@ -757,15 +754,19 @@ load_plugins.plog: load_plugins.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/load_plugins.c --i-file $< --output-file $@ net_ifs.o: $(srcdir)/net_ifs.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 $(top_builddir)/config.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 $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/net_ifs.c net_ifs.i: $(srcdir)/net_ifs.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 $(top_builddir)/config.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 $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< net_ifs.plog: net_ifs.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/net_ifs.c --i-file $< --output-file $@ @@ -807,11 +808,21 @@ parse_args.i: $(srcdir)/parse_args.c $(incdir)/compat/getopt.h \ $(CC) -E -o $@ $(CPPFLAGS) $< parse_args.plog: parse_args.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/parse_args.c --i-file $< --output-file $@ -preload.o: $(srcdir)/preload.c $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ - $(incdir)/sudo_plugin.h $(top_builddir)/config.h +preload.o: $(srcdir)/preload.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_dso.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 $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/preload.c -preload.i: $(srcdir)/preload.c $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ - $(incdir)/sudo_plugin.h $(top_builddir)/config.h +preload.i: $(srcdir)/preload.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_dso.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 $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h $(CC) -E -o $@ $(CPPFLAGS) $< preload.plog: preload.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/preload.c --i-file $< --output-file $@ From 424fa7f2b1c3d337383f01c1944294e8c94f821d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 21 Jun 2022 14:31:30 -0600 Subject: [PATCH 016/186] sudo_preload_dso: make the envp function argument const This lets us fix an inappropriate cast in sudo_intercept_common.c. --- src/exec_preload.c | 164 ++++++++++++++++++------------------ src/sudo_exec.h | 2 +- src/sudo_intercept_common.c | 4 +- 3 files changed, 84 insertions(+), 86 deletions(-) diff --git a/src/exec_preload.c b/src/exec_preload.c index 3bc7a15d3f..4f04a01132 100644 --- a/src/exec_preload.c +++ b/src/exec_preload.c @@ -37,13 +37,13 @@ * Add a DSO file to LD_PRELOAD or the system equivalent. */ char ** -sudo_preload_dso(char *envp[], const char *dso_file, int intercept_fd) +sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) { char *preload = NULL; - char **nenvp = NULL; - int env_len, len; - int preload_idx = -1; - int intercept_idx = -1; + char **nep, **nenvp = NULL; + char *const *ep; + char **preload_ptr = NULL; + char **intercept_ptr = NULL; bool fd_present = false; bool dso_present = false; # ifdef RTLD_PRELOAD_ENABLE_VAR @@ -54,6 +54,8 @@ sudo_preload_dso(char *envp[], const char *dso_file, int intercept_fd) # ifdef _PATH_ASAN_LIB char *dso_buf = NULL; # endif + size_t env_size; + int len; debug_decl(sudo_preload_dso, SUDO_DEBUG_UTIL); # ifdef _PATH_ASAN_LIB @@ -73,84 +75,81 @@ sudo_preload_dso(char *envp[], const char *dso_file, int intercept_fd) * XXX - need to support 32-bit and 64-bit variants */ - /* Count entries in envp, looking for LD_PRELOAD as we go. */ - for (env_len = 0; envp[env_len] != NULL; env_len++) { - if (strncmp(envp[env_len], RTLD_PRELOAD_VAR "=", sizeof(RTLD_PRELOAD_VAR)) == 0) { - if (preload_idx == -1) { - const char *cp = envp[env_len] + sizeof(RTLD_PRELOAD_VAR); - const size_t dso_len = strlen(dso_file); - - /* - * Check to see if dso_file is already first in the list. - * We don't bother checking for it later in the list. - */ - if (strncmp(cp, dso_file, dso_len) == 0) { - if (cp[dso_len] == '\0' || cp[dso_len] == RTLD_PRELOAD_DELIM) - dso_present = true; - } - - /* Save index of existing LD_PRELOAD variable. */ - preload_idx = env_len; - } else { - /* Remove duplicate LD_PRELOAD. */ - int i; - for (i = env_len; envp[i] != NULL; i++) { - envp[i] = envp[i + 1]; - } + /* Determine max size for new envp. */ + for (env_size = 0; envp[env_size] != NULL; env_size++) + continue; + if (!dso_enabled) + env_size++; + if (intercept_fd != -1) + env_size++; + env_size += 2; /* dso_file + terminating NULL */ + + /* Allocate new envp. */ + nenvp = reallocarray(NULL, env_size, sizeof(*nenvp)); + if (nenvp == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_ptr(NULL); + } + + /* + * Shallow copy envp, with special handling for RTLD_PRELOAD_VAR, + * RTLD_PRELOAD_ENABLE_VAR and SUDO_INTERCEPT_FD. + */ + for (ep = envp, nep = nenvp; *ep != NULL; ep++) { + if (strncmp(*ep, RTLD_PRELOAD_VAR "=", sizeof(RTLD_PRELOAD_VAR)) == 0) { + const char *cp = *ep + sizeof(RTLD_PRELOAD_VAR); + const size_t dso_len = strlen(dso_file); + + /* Skip duplicates. */ + if (preload_ptr != NULL) + continue; + + /* + * Check to see if dso_file is already first in the list. + * We don't bother checking for it later in the list. + */ + if (strncmp(cp, dso_file, dso_len) == 0) { + if (cp[dso_len] == '\0' || cp[dso_len] == RTLD_PRELOAD_DELIM) + dso_present = true; } - continue; + + /* Save pointer to LD_PRELOAD variable. */ + preload_ptr = nep; + + goto copy; } - if (intercept_fd != -1 && strncmp(envp[env_len], "SUDO_INTERCEPT_FD=", + if (intercept_fd != -1 && strncmp(*ep, "SUDO_INTERCEPT_FD=", sizeof("SUDO_INTERCEPT_FD=") - 1) == 0) { - if (intercept_idx == -1) { - const char *cp = envp[env_len] + sizeof("SUDO_INTERCEPT_FD=") - 1; - const char *errstr; - int fd; - - fd = sudo_strtonum(cp, 0, INT_MAX, &errstr); - if (fd == intercept_fd && errstr == NULL) - fd_present = true; - - /* Save index of existing SUDO_INTERCEPT_FD variable. */ - intercept_idx = env_len; - } else { - /* Remove duplicate SUDO_INTERCEPT_FD. */ - int i; - for (i = env_len; envp[i] != NULL; i++) { - envp[i] = envp[i + 1]; - } - } - continue; + const char *cp = *ep + sizeof("SUDO_INTERCEPT_FD=") - 1; + const char *errstr; + int fd; + + /* Skip duplicates. */ + if (intercept_ptr != NULL) + continue; + + fd = sudo_strtonum(cp, 0, INT_MAX, &errstr); + if (fd == intercept_fd && errstr == NULL) + fd_present = true; + + /* Save pointer to SUDO_INTERCEPT_FD variable. */ + intercept_ptr = nep; + + goto copy; } # ifdef RTLD_PRELOAD_ENABLE_VAR - if (strncmp(envp[env_len], RTLD_PRELOAD_ENABLE_VAR "=", sizeof(RTLD_PRELOAD_ENABLE_VAR)) == 0) { + if (strncmp(*ep, RTLD_PRELOAD_ENABLE_VAR "=", + sizeof(RTLD_PRELOAD_ENABLE_VAR)) == 0) { dso_enabled = true; - continue; } # endif - } - - /* - * Make a new copy of envp as needed. - * It would be nice to realloc the old envp[] but we don't know - * whether it was dynamically allocated. [TODO: plugin API] - */ - if (preload_idx == -1 || !dso_enabled || intercept_idx == -1) { - const int env_size = env_len + 1 + (preload_idx == -1) + dso_enabled + (intercept_idx == -1); // -V547 - - nenvp = reallocarray(NULL, env_size, sizeof(*nenvp)); - if (nenvp == NULL) { - sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return_ptr(NULL); - } - memcpy(nenvp, envp, env_len * sizeof(*envp)); - nenvp[env_len] = NULL; - envp = nenvp; +copy: + *nep++ = *ep; /* shallow copy */ } /* Prepend our LD_PRELOAD to existing value or add new entry at the end. */ if (!dso_present) { - if (preload_idx == -1) { + if (preload_ptr == NULL) { # ifdef RTLD_PRELOAD_DEFAULT len = asprintf(&preload, "%s=%s%c%s", RTLD_PRELOAD_VAR, dso_file, RTLD_PRELOAD_DELIM, RTLD_PRELOAD_DEFAULT); @@ -163,22 +162,20 @@ sudo_preload_dso(char *envp[], const char *dso_file, int intercept_fd) goto oom; } # endif - envp[env_len++] = preload; - envp[env_len] = NULL; + *nep++ = preload; } else { - const char *old_val = envp[preload_idx] + sizeof(RTLD_PRELOAD_VAR); + const char *old_val = *preload_ptr + sizeof(RTLD_PRELOAD_VAR); len = asprintf(&preload, "%s=%s%c%s", RTLD_PRELOAD_VAR, dso_file, RTLD_PRELOAD_DELIM, old_val); if (len == -1) { goto oom; } - envp[preload_idx] = preload; + *preload_ptr = preload; } } # ifdef RTLD_PRELOAD_ENABLE_VAR if (!dso_enabled) { - envp[env_len++] = RTLD_PRELOAD_ENABLE_VAR "="; - envp[env_len] = NULL; + *nenvp++ = RTLD_PRELOAD_ENABLE_VAR "="; } # endif if (!fd_present && intercept_fd != -1) { @@ -188,18 +185,21 @@ sudo_preload_dso(char *envp[], const char *dso_file, int intercept_fd) if (len == -1) { goto oom; } - if (intercept_idx != -1) { - envp[intercept_idx] = fdstr; + if (intercept_ptr != NULL) { + *intercept_ptr = fdstr; } else { - envp[env_len++] = fdstr; - envp[env_len] = NULL; + *nep++ = fdstr; } } + + /* NULL terminate nenvp at last. */ + *nep = NULL; + # ifdef _PATH_ASAN_LIB free(dso_buf); # endif - debug_return_ptr(envp); + debug_return_ptr(nenvp); oom: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); # ifdef _PATH_ASAN_LIB diff --git a/src/sudo_exec.h b/src/sudo_exec.h index 2f099a3325..5907675222 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -144,7 +144,7 @@ bool utmp_login(const char *from_line, const char *to_line, int ttyfd, bool utmp_logout(const char *line, int status); /* exec_preload.c */ -char **sudo_preload_dso(char *envp[], const char *dso_file, int intercept_fd); +char **sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd); /* exec_ptrace.c */ bool exec_ptrace_stopped(pid_t pid, int status, void *intercept); diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index a9ac766119..9558c0530d 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -447,9 +447,7 @@ command_allowed(const char *cmnd, char * const argv[], goto oom; } nargv[len] = NULL; - // XXX - bogus cast - nenvp = sudo_preload_dso((char **)envp, sudo_conf_intercept_path(), - sock); + nenvp = sudo_preload_dso(envp, sudo_conf_intercept_path(), sock); if (nenvp == NULL) goto oom; *ncmndp = ncmnd; From bfc6249902d842626058e74074832930feaf2f80 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 11:18:16 -0600 Subject: [PATCH 017/186] Fix a clang analyzer 14 warning about a possible NULL deref. --- lib/protobuf-c/protobuf-c.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/protobuf-c/protobuf-c.c b/lib/protobuf-c/protobuf-c.c index 3cc22c5f00..9ee355df59 100644 --- a/lib/protobuf-c/protobuf-c.c +++ b/lib/protobuf-c/protobuf-c.c @@ -3246,6 +3246,9 @@ protobuf_c_message_unpack(const ProtobufCMessageDescriptor *desc, /* allocate space for repeated fields, also check that all required fields have been set */ for (f = 0; f < desc->n_fields; f++) { const ProtobufCFieldDescriptor *field = desc->fields + f; + if (field == NULL) { + continue; + } if (field->label == PROTOBUF_C_LABEL_REPEATED) { size_t siz = sizeof_elt_in_repeated_array(field->type); From 50813f8160300b2ab060726a08c5e5c1196915cd Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 16:41:11 -0600 Subject: [PATCH 018/186] Quiet another -Wwrite-strings warning. --- lib/util/strsignal.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/strsignal.c b/lib/util/strsignal.c index ac952295ee..76c93785d6 100644 --- a/lib/util/strsignal.c +++ b/lib/util/strsignal.c @@ -47,6 +47,6 @@ sudo_strsignal(int signo) if (signo > 0 && signo < NSIG && sudo_sys_siglist[signo] != NULL) return (char *)sudo_sys_siglist[signo]; /* XXX - should be "Unknown signal: %d" */ - return _("Unknown signal"); + return (char *)_("Unknown signal"); } #endif /* HAVE_STRSIGNAL */ From 3badff39cae10bba939ab3f61938b98d46f61a4c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 29 Jun 2022 16:59:50 -0600 Subject: [PATCH 019/186] Define _LARGEFILE64_SOURCE if _FILE_OFFSET_BITS == 64. Fixes a -Wwrite-strings warning on 32-bit systems. --- lib/zlib/zconf.h.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/zlib/zconf.h.in b/lib/zlib/zconf.h.in index 95cb5b818c..799e5ffb87 100644 --- a/lib/zlib/zconf.h.in +++ b/lib/zlib/zconf.h.in @@ -20,9 +20,9 @@ /* * Configure does not define _LARGEFILE64_SOURCE by default. - * We need to manually define it on AIX and native 64-bit platforms. + * We need to manually define it on systems that support large files. */ -#if defined (_LARGE_FILES) || defined (__LP64__) +#if defined(__LP64__) || defined(_LARGE_FILES) || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64) # ifndef _LFS64_LARGEFILE # define _LFS64_LARGEFILE 1 # endif From 885abf48d78c1da60fbb051d25b62b36e525fecf Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 30 Jun 2022 11:10:43 -0600 Subject: [PATCH 020/186] Save the initial command run via sudo and use it when logging exit status. Otherwise, if we are in intercept mode or logging sub-commands the exit status will be logged with the wrong command. --- plugins/sudoers/audit.c | 2 +- plugins/sudoers/logging.c | 17 ++++++++++------- plugins/sudoers/logging.h | 3 ++- plugins/sudoers/sudoers.c | 21 ++++++++++++++++++--- plugins/sudoers/sudoers.h | 2 ++ 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index def7a3bff8..6d7d2c630b 100644 --- a/plugins/sudoers/audit.c +++ b/plugins/sudoers/audit.c @@ -208,7 +208,7 @@ audit_to_eventlog(struct eventlog *evlog, char * const command_info[], debug_decl(audit_to_eventlog, SUDOERS_DEBUG_PLUGIN); /* Fill in evlog from sudoers Defaults, run_argv and run_envp. */ - sudoers_to_eventlog(evlog, run_argv, run_envp, uuid_str); + sudoers_to_eventlog(evlog, NULL, run_argv, run_envp, uuid_str); /* Update iolog and execution environment from command_info[]. */ if (command_info != NULL) { diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 3f9aa7f327..b8f4c4fdc3 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -263,7 +263,7 @@ log_reject(const char *message, bool logit, bool mailit) if (!logit) SET(evl_flags, EVLOG_MAIL_ONLY); } - sudoers_to_eventlog(&evlog, NewArgv, env_get(), uuid_str); + sudoers_to_eventlog(&evlog, safe_cmnd, NewArgv, env_get(), uuid_str); ret = eventlog_reject(&evlog, evl_flags, message, NULL, NULL); if (!log_server_reject(&evlog, message)) ret = false; @@ -612,7 +612,8 @@ log_exit_status(int status) /* Log and mail messages should be in the sudoers locale. */ sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale); - sudoers_to_eventlog(&evlog, NewArgv, env_get(), sudo_user.uuid_str); + sudoers_to_eventlog(&evlog, saved_cmnd, saved_argv, env_get(), + sudo_user.uuid_str); if (def_mail_always) { SET(evl_flags, EVLOG_MAIL); if (!def_log_exit_status) @@ -695,7 +696,8 @@ vlog_warning(int flags, int errnum, const char *fmt, va_list ap) if (ISSET(flags, SLOG_NO_LOG)) SET(evl_flags, EVLOG_MAIL_ONLY); } - sudoers_to_eventlog(&evlog, NewArgv, env_get(), sudo_user.uuid_str); + sudoers_to_eventlog(&evlog, safe_cmnd, NewArgv, env_get(), + sudo_user.uuid_str); eventlog_alert(&evlog, evl_flags, &now, message, errstr); log_server_alert(&evlog, &now, message, errstr); } @@ -791,7 +793,8 @@ mail_parse_errors(void) ret = false; goto done; } - sudoers_to_eventlog(&evlog, NewArgv, env_get(), sudo_user.uuid_str); + sudoers_to_eventlog(&evlog, safe_cmnd, NewArgv, env_get(), + sudo_user.uuid_str); len = strlen(_("problem parsing sudoers")) + 1; STAILQ_FOREACH(pe, &parse_error_list, entries) { @@ -916,8 +919,8 @@ should_mail(int status) * The values in the resulting eventlog struct should not be freed. */ void -sudoers_to_eventlog(struct eventlog *evlog, char * const argv[], - char * const envp[], const char *uuid_str) +sudoers_to_eventlog(struct eventlog *evlog, const char *cmnd, + char * const argv[], char * const envp[], const char *uuid_str) { struct group *grp; debug_decl(sudoers_to_eventlog, SUDOERS_DEBUG_LOGGING); @@ -929,7 +932,7 @@ sudoers_to_eventlog(struct eventlog *evlog, char * const argv[], memset(evlog, 0, sizeof(*evlog)); evlog->iolog_file = sudo_user.iolog_file; evlog->iolog_path = sudo_user.iolog_path; - evlog->command = safe_cmnd ? safe_cmnd : (argv ? argv[0] : NULL); + evlog->command = cmnd ? (char *)cmnd : (argv ? argv[0] : NULL); evlog->cwd = user_cwd; if (def_runchroot != NULL && strcmp(def_runchroot, "*") != 0) { evlog->runchroot = def_runchroot; diff --git a/plugins/sudoers/logging.h b/plugins/sudoers/logging.h index 887b91aaa2..0109209308 100644 --- a/plugins/sudoers/logging.h +++ b/plugins/sudoers/logging.h @@ -62,6 +62,7 @@ typedef bool (*sudoers_logger_t)(const char *file, int line, int column, const c /* XXX - needed for auditing */ extern int NewArgc; extern char **NewArgv; +extern char **saved_argv; extern char *audit_msg; union sudo_defs_val; @@ -85,7 +86,7 @@ bool log_warningx(int flags, const char *fmt, ...) __printflike(2, 3); bool gai_log_warning(int flags, int errnum, const char *fmt, ...) __printflike(3, 4); bool sudoers_initlocale(const char *ulocale, const char *slocale); bool sudoers_locale_callback(const char *file, int line, int column, const union sudo_defs_val *sd_un, int op); -void sudoers_to_eventlog(struct eventlog *evlog, char * const argv[], char *const envp[], const char *uuid_str); +void sudoers_to_eventlog(struct eventlog *evlog, const char *cmnd, char * const argv[], char *const envp[], const char *uuid_str); void init_eventlog_config(void); bool init_log_details(struct log_details *details, struct eventlog *evlog); bool log_parse_error(const char *file, int line, int column, const char *fmt, va_list ap) __printflike(4, 0); diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 66e429299b..b48de3e1ff 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -102,6 +102,7 @@ static struct rlimit nproclimit; /* XXX - must be extern for audit bits of sudo_auth.c */ int NewArgc; char **NewArgv; +char **saved_argv; #ifdef SUDOERS_LOG_CLIENT # define remote_iologs (!SLIST_EMPTY(&def_log_servers)) @@ -433,7 +434,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], * Make a local copy of argc/argv, with special handling for the * '-i' option. We also allocate an extra slot for bash's --login. */ - if (NewArgv != NULL) { + if (NewArgv != NULL && NewArgv != saved_argv) { sudoers_gc_remove(GC_PTR, NewArgv); free(NewArgv); } @@ -803,8 +804,10 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], goto bad; } /* find_editor() already g/c'd edit_argv[] */ - sudoers_gc_remove(GC_PTR, NewArgv); - free(NewArgv); + if (NewArgv != saved_argv) { + sudoers_gc_remove(GC_PTR, NewArgv); + free(NewArgv); + } NewArgv = edit_argv; NewArgc = edit_argc; @@ -812,6 +815,16 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], env_swap_old(); } + /* Save the initial command and argv so we have it for exit logging. */ + if (saved_cmnd == NULL) { + saved_cmnd = strdup(safe_cmnd); + if (saved_cmnd == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + saved_argv = NewArgv; + } + goto done; bad: @@ -1764,6 +1777,7 @@ sudoers_cleanup(void) /* Clear globals */ list_pw = NULL; + saved_argv = NULL; NewArgv = NULL; NewArgc = 0; prev_user = NULL; @@ -1820,6 +1834,7 @@ sudo_user_free(void) free(user_cmnd); free(user_args); free(safe_cmnd); + free(saved_cmnd); free(user_stat); #ifdef HAVE_SELINUX free(user_role); diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 80226b43ec..da6d8cde0d 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -103,6 +103,7 @@ struct sudo_user { char *cmnd_args; char *cmnd_base; char *cmnd_safe; + char *cmnd_saved; char *class_name; char *krb5_ccname; struct gid_list *gid_list; @@ -245,6 +246,7 @@ struct sudo_user { #define user_srunhost (sudo_user.srunhost) #define user_ccname (sudo_user.krb5_ccname) #define safe_cmnd (sudo_user.cmnd_safe) +#define saved_cmnd (sudo_user.cmnd_saved) #define cmnd_fd (sudo_user.execfd) #define login_class (sudo_user.class_name) #define runas_pw (sudo_user._runas_pw) From 985a2261bc5ae0491dc0be0977425c4f9a782883 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 30 Jun 2022 13:35:04 -0600 Subject: [PATCH 021/186] sudoers_main: defer setting return value until the end when running a command Otherwise, we could return success when there was an error from a system call or memory allocation failure. --- plugins/sudoers/sudoers.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index b48de3e1ff..26f19abb58 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -699,15 +699,16 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], switch (sudo_mode & MODE_MASK) { case MODE_CHECK: ret = display_cmnd(snl, list_pw ? list_pw : sudo_user.pw); - break; + goto done; case MODE_LIST: ret = display_privs(snl, list_pw ? list_pw : sudo_user.pw, verbose); - break; + goto done; case MODE_VALIDATE: + ret = true; + goto done; case MODE_RUN: case MODE_EDIT: - /* ret may be overridden by "goto bad" later */ - ret = true; + /* ret will not be set until the very end. */ break; default: /* Should not happen. */ @@ -715,11 +716,6 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], goto done; } - if (ISSET(sudo_mode, (MODE_VALIDATE|MODE_CHECK|MODE_LIST))) { - /* ret already set appropriately */ - goto done; - } - /* * Set umask based on sudoers. * If user's umask is more restrictive, OR in those bits too @@ -825,6 +821,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], saved_argv = NewArgv; } + ret = true; goto done; bad: From 3cd9c5f5e641dd5dced1c5b099c7d9c7f7e7bf9a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 30 Jun 2022 13:35:07 -0600 Subject: [PATCH 022/186] Stop sending an InterceptResponse to a PolicyCheckRequest for log_subcmds. There's no real reason for the command to wait for sudo send back a response that will always be a PolicyAcceptMessage. --- include/intercept.pb-c.h | 4 +- include/sudo_event.h | 3 ++ src/exec_intercept.c | 89 +++++++++++++++++++++++-------------- src/exec_intercept.h | 1 + src/intercept.pb-c.c | 19 ++++++-- src/intercept.proto | 2 + src/sudo_intercept_common.c | 18 +++++++- 7 files changed, 97 insertions(+), 39 deletions(-) diff --git a/include/intercept.pb-c.h b/include/intercept.pb-c.h index 9d6390b8bc..2ea1683290 100644 --- a/include/intercept.pb-c.h +++ b/include/intercept.pb-c.h @@ -72,6 +72,7 @@ struct InterceptHello /* * Sudo response to an InterceptHello from sudo_intercept.so. * The client uses the port number and token to connect back to sudo. + * If log_only is set there is no InterceptResponse to a PolicyCheckRequest. */ struct HelloResponse { @@ -79,10 +80,11 @@ struct HelloResponse uint64_t token_lo; uint64_t token_hi; int32_t portno; + protobuf_c_boolean log_only; }; #define HELLO_RESPONSE__INIT \ { PROTOBUF_C_MESSAGE_INIT (&hello_response__descriptor) \ - , 0, 0, 0 } + , 0, 0, 0, 0 } /* diff --git a/include/sudo_event.h b/include/sudo_event.h index 12bb894784..67dfb20bdc 100644 --- a/include/sudo_event.h +++ b/include/sudo_event.h @@ -192,6 +192,9 @@ sudo_dso_public bool sudo_ev_got_break_v1(struct sudo_event_base *base); /* Return the base an event is associated with or NULL. */ #define sudo_ev_get_base(_ev) ((_ev) ? (_ev)->base : NULL) +/* Set the base an event is associated with. */ +#define sudo_ev_set_base(_ev, _b) ((_ev)->base = (_b)) + /* Magic pointer value to use self pointer as callback arg. */ #define sudo_ev_self_cbarg() ((void *)-1) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index 9d630ea00e..741773ba5b 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -53,6 +53,44 @@ static struct intercept_closure *accept_closure; static void intercept_accept_cb(int fd, int what, void *v); static void intercept_cb(int fd, int what, void *v); +/* + * Enable the closure->ev event with the specified events and callback, + * and set the connection state to new_state if it is valid. + * Returns true on success, else false. + */ +static bool +intercept_enable_event(int fd, short events, enum intercept_state new_state, + sudo_ev_callback_t callback, struct intercept_closure *closure) +{ + int rc; + debug_decl(intercept_enable_event, SUDO_DEBUG_EXEC); + + rc = sudo_ev_set(&closure->ev, fd, events, callback, closure); + if (rc == -1 || sudo_ev_add(NULL, &closure->ev, NULL, false) == -1) { + sudo_warn("%s", U_("unable to add event to queue")); + debug_return_bool(false); + } + if (new_state != INVALID_STATE) + closure->state = new_state; + debug_return_bool(true); +} + +static bool +enable_read_event(int fd, enum intercept_state new_state, + sudo_ev_callback_t callback, struct intercept_closure *closure) +{ + return intercept_enable_event(fd, SUDO_EV_READ|SUDO_EV_PERSIST, + new_state, callback, closure); +} + +static bool +enable_write_event(int fd, sudo_ev_callback_t callback, + struct intercept_closure *closure) +{ + return intercept_enable_event(fd, SUDO_EV_WRITE|SUDO_EV_PERSIST, + INVALID_STATE, callback, closure); +} + /* * Create an intercept closure. * Returns an opaque pointer to the closure, which is also @@ -63,7 +101,6 @@ intercept_setup(int fd, struct sudo_event_base *evbase, struct command_details *details) { struct intercept_closure *closure; - int rc; debug_decl(intercept_setup, SUDO_DEBUG_EXEC); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, @@ -76,6 +113,7 @@ intercept_setup(int fd, struct sudo_event_base *evbase, } closure->details = details; closure->listen_sock = -1; + sudo_ev_set_base(&closure->ev, evbase); if (ISSET(details->flags, CD_USE_PTRACE)) { /* @@ -92,15 +130,10 @@ intercept_setup(int fd, struct sudo_event_base *evbase, * Not using ptrace(2), use LD_PRELOAD (or its equivalent). If * we've already seen an InterceptHello, expect a policy check first. */ - closure->state = sudo_token_isset(intercept_token) ? + const int new_state = sudo_token_isset(intercept_token) ? RECV_SECRET : RECV_HELLO_INITIAL; - - rc = sudo_ev_set(&closure->ev, fd, SUDO_EV_READ|SUDO_EV_PERSIST, - intercept_cb, closure); - if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { - sudo_warn("%s", U_("unable to add event to queue")); + if (!enable_read_event(fd, new_state, intercept_cb, closure)) goto bad; - } } debug_return_ptr(closure); @@ -546,11 +579,9 @@ intercept_verify_token(int fd, struct intercept_closure *closure) static bool intercept_read(int fd, struct intercept_closure *closure) { - struct sudo_event_base *evbase = sudo_ev_get_base(&closure->ev); InterceptRequest *req = NULL; bool ret = false; ssize_t nread; - int rc; debug_decl(intercept_read, SUDO_DEBUG_EXEC); if (closure->state == RECV_SECRET) { @@ -644,7 +675,7 @@ intercept_read(int fd, struct intercept_closure *closure) sudo_debug_printf(SUDO_DEBUG_INFO, "%s: finished receiving %u bytes from client", __func__, closure->len); - sudo_ev_del(evbase, &closure->ev); + sudo_ev_del(NULL, &closure->ev); free(closure->buf); closure->buf = NULL; closure->len = 0; @@ -663,6 +694,11 @@ intercept_read(int fd, struct intercept_closure *closure) ret = intercept_check_policy_req(req->u.policy_check_req, closure); if (!ret) goto done; + if (!ISSET(closure->details->flags, CD_INTERCEPT)) { + /* Just logging, re-use event to read next InterceptHello. */ + ret = enable_read_event(fd, RECV_HELLO, intercept_cb, closure); + goto done; + } break; case INTERCEPT_REQUEST__TYPE_HELLO: switch (closure->state) { @@ -686,12 +722,8 @@ intercept_read(int fd, struct intercept_closure *closure) } /* Switch event to write mode for the reply. */ - rc = sudo_ev_set(&closure->ev, fd, SUDO_EV_WRITE|SUDO_EV_PERSIST, - intercept_cb, closure); - if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { - sudo_warn("%s", U_("unable to add event to queue")); + if (!enable_write_event(fd, intercept_cb, closure)) goto done; - } ret = true; @@ -744,6 +776,7 @@ fmt_hello_response(struct intercept_closure *closure) hello_resp.portno = intercept_listen_port; hello_resp.token_lo = intercept_token.u64[0]; hello_resp.token_hi = intercept_token.u64[1]; + hello_resp.log_only = !ISSET(closure->details->flags, CD_INTERCEPT); resp.u.hello_resp = &hello_resp; resp.type_case = INTERCEPT_RESPONSE__TYPE_HELLO_RESP; @@ -811,10 +844,8 @@ fmt_error_message(struct intercept_closure *closure) static bool intercept_write(int fd, struct intercept_closure *closure) { - struct sudo_event_base *evbase = sudo_ev_get_base(&closure->ev); bool ret = false; ssize_t nwritten; - int rc; debug_decl(intercept_write, SUDO_DEBUG_EXEC); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "state %d", @@ -864,9 +895,9 @@ intercept_write(int fd, struct intercept_closure *closure) debug_return_bool(true); } - sudo_debug_printf(SUDO_DEBUG_INFO, "%s: sent %u bytes to client", - __func__, closure->len); - sudo_ev_del(evbase, &closure->ev); + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: sent %u bytes to client", __func__, closure->len); + sudo_ev_del(NULL, &closure->ev); free(closure->buf); closure->buf = NULL; closure->len = 0; @@ -874,27 +905,19 @@ intercept_write(int fd, struct intercept_closure *closure) switch (closure->state) { case RECV_HELLO_INITIAL: - /* Re-use event for the listener. */ + /* Re-use the listener event. */ close(fd); - rc = sudo_ev_set(&closure->ev, closure->listen_sock, - SUDO_EV_READ|SUDO_EV_PERSIST, intercept_accept_cb, closure); - if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { - sudo_warn("%s", U_("unable to add event to queue")); + if (!enable_read_event(closure->listen_sock, RECV_CONNECTION, + intercept_accept_cb, closure)) goto done; - } closure->listen_sock = -1; closure->state = RECV_CONNECTION; accept_closure = closure; break; case POLICY_ACCEPT: /* Re-use event to read InterceptHello from sudo_intercept.so ctor. */ - rc = sudo_ev_set(&closure->ev, fd, SUDO_EV_READ|SUDO_EV_PERSIST, - intercept_cb, closure); - if (rc == -1 || sudo_ev_add(evbase, &closure->ev, NULL, false) == -1) { - sudo_warn("%s", U_("unable to add event to queue")); + if (!enable_read_event(fd, RECV_HELLO, intercept_cb, closure)) goto done; - } - closure->state = RECV_HELLO; break; default: /* Done with this connection. */ diff --git a/src/exec_intercept.h b/src/exec_intercept.h index e9d3a6ac36..baf429bb6c 100644 --- a/src/exec_intercept.h +++ b/src/exec_intercept.h @@ -20,6 +20,7 @@ #define SUDO_EXEC_INTERCEPT_H enum intercept_state { + INVALID_STATE, RECV_HELLO_INITIAL, RECV_HELLO, RECV_SECRET, diff --git a/src/intercept.pb-c.c b/src/intercept.pb-c.c index e4e44c9b68..36d11eeb8b 100644 --- a/src/intercept.pb-c.c +++ b/src/intercept.pb-c.c @@ -456,7 +456,7 @@ const ProtobufCMessageDescriptor intercept_hello__descriptor = (ProtobufCMessageInit) intercept_hello__init, NULL,NULL,NULL /* reserved[123] */ }; -static const ProtobufCFieldDescriptor hello_response__field_descriptors[3] = +static const ProtobufCFieldDescriptor hello_response__field_descriptors[4] = { { "token_lo", @@ -494,8 +494,21 @@ static const ProtobufCFieldDescriptor hello_response__field_descriptors[3] = 0, /* flags */ 0,NULL,NULL /* reserved1,reserved2, etc */ }, + { + "log_only", + 4, + PROTOBUF_C_LABEL_NONE, + PROTOBUF_C_TYPE_BOOL, + 0, /* quantifier_offset */ + offsetof(HelloResponse, log_only), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, }; static const unsigned hello_response__field_indices_by_name[] = { + 3, /* field[3] = log_only */ 2, /* field[2] = portno */ 1, /* field[1] = token_hi */ 0, /* field[0] = token_lo */ @@ -503,7 +516,7 @@ static const unsigned hello_response__field_indices_by_name[] = { static const ProtobufCIntRange hello_response__number_ranges[1 + 1] = { { 1, 0 }, - { 0, 3 } + { 0, 4 } }; const ProtobufCMessageDescriptor hello_response__descriptor = { @@ -513,7 +526,7 @@ const ProtobufCMessageDescriptor hello_response__descriptor = "HelloResponse", "", sizeof(HelloResponse), - 3, + 4, hello_response__field_descriptors, hello_response__field_indices_by_name, 1, hello_response__number_ranges, diff --git a/src/intercept.proto b/src/intercept.proto index 786ae7bbab..53a068a198 100644 --- a/src/intercept.proto +++ b/src/intercept.proto @@ -22,11 +22,13 @@ message InterceptHello { /* * Sudo response to an InterceptHello from sudo_intercept.so. * The client uses the port number and token to connect back to sudo. + * If log_only is set there is no InterceptResponse to a PolicyCheckRequest. */ message HelloResponse { fixed64 token_lo = 1; fixed64 token_hi = 2; int32 portno = 3; + bool log_only = 4; } /* diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index 9558c0530d..5c5844243f 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2021 Todd C. Miller + * Copyright (c) 2021-2022 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 @@ -61,6 +61,7 @@ extern char **environ; static union sudo_token_un intercept_token; static in_port_t intercept_port; +static bool log_only; /* Send entire request to sudo (blocking). */ static bool @@ -273,6 +274,7 @@ sudo_interposer_init(void) intercept_token.u64[0] = res->u.hello_resp->token_lo; intercept_token.u64[1] = res->u.hello_resp->token_hi; intercept_port = res->u.hello_resp->portno; + log_only = res->u.hello_resp->log_only; } else { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unexpected type_case value %d in %s from %s", @@ -420,6 +422,18 @@ command_allowed(const char *cmnd, char * const argv[], if (!send_policy_check_req(sock, cmnd, argv, envp)) goto done; + if (log_only) { + /* Just logging, no policy check. */ + nenvp = sudo_preload_dso(envp, sudo_conf_intercept_path(), sock); + if (nenvp == NULL) + goto oom; + *ncmndp = (char *)cmnd; /* safe */ + *nargvp = (char **)argv; /* safe */ + *nenvpp = nenvp; + ret = true; + goto done; + } + res = recv_intercept_response(sock); if (res == NULL) goto done; @@ -467,7 +481,7 @@ command_allowed(const char *cmnd, char * const argv[], default: sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unexpected type_case value %d in %s from %s", - res->type_case, "InterceptResponse", "sudo"); + res->type_case, "InterceptResponse", "sudo"); goto done; } From a311180bbc8f81d227b33ba9c0e159f04df54ac5 Mon Sep 17 00:00:00 2001 From: Li kunyu Date: Mon, 4 Jul 2022 12:31:50 +0800 Subject: [PATCH 023/186] sudoers/cvtsudoers: Remove the repeated ';' from code Signed-off-by: Li kunyu --- plugins/sudoers/cvtsudoers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index 847c5c7503..36bf8da545 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -691,7 +691,7 @@ cvtsudoers_parse_filter(char *expression) /* Parse keyword = value */ keyword = cp; if ((cp = strchr(cp, '=')) == NULL) { - sudo_warnx(U_("invalid filter: %s"), keyword);; + sudo_warnx(U_("invalid filter: %s"), keyword); free(s); debug_return_bool(false); } @@ -707,7 +707,7 @@ cvtsudoers_parse_filter(char *expression) } else if (strcmp(keyword, "cmnd") == 0 || strcmp(keyword, "cmd") == 0) { STAILQ_INSERT_TAIL(&filters->cmnds, s, entries); } else { - sudo_warnx(U_("invalid filter: %s"), keyword);; + sudo_warnx(U_("invalid filter: %s"), keyword); free(s); debug_return_bool(false); } From a9a164e71c643d7171e4fe912e3ff5c533e3d123 Mon Sep 17 00:00:00 2001 From: Li kunyu Date: Mon, 4 Jul 2022 12:36:11 +0800 Subject: [PATCH 024/186] src/send: Remove the repeated ';' from code Signed-off-by: Li kunyu --- src/sudo_intercept_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index 0702b8c817..cc7715ac1f 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -96,7 +96,7 @@ send_client_hello(int sock) /* Setup client hello. */ hello.pid = getpid(); - msg.type_case = INTERCEPT_REQUEST__TYPE_HELLO;; + msg.type_case = INTERCEPT_REQUEST__TYPE_HELLO; msg.u.hello = &hello; len = intercept_request__get_packed_size(&msg); From 42c6d9fb50628957e1d0478fc9eec7fe362eb026 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 1 Jul 2022 14:23:28 -0600 Subject: [PATCH 025/186] In timegm() initialize tm_isdst to 0 like tzcode does. --- lib/util/timegm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/util/timegm.c b/lib/util/timegm.c index d87c4eaade..968d829f4e 100644 --- a/lib/util/timegm.c +++ b/lib/util/timegm.c @@ -88,6 +88,7 @@ sudo_timegm(struct tm *tm) { time_t result; + tm->tm_isdst = 0; result = mktime(tm); if (result != -1) result += get_gmtoff(&result); From f6e4d2765a3f30bd73d07b9fa92a3fe3ff3bc3f6 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 5 Jul 2022 11:35:25 -0600 Subject: [PATCH 026/186] Add explicit include of unistd.h for getopt(3) and related variables. --- lib/eventlog/regress/logwrap/check_wrap.c | 1 + lib/util/regress/closefrom/closefrom_test.c | 1 + lib/util/regress/fnmatch/fnm_test.c | 1 + lib/util/regress/getgrouplist/getgrouplist_test.c | 1 + lib/util/regress/glob/globtest.c | 1 + lib/util/regress/parse_gids/parse_gids_test.c | 1 + lib/util/regress/progname/progname_test.c | 1 + lib/util/regress/strsig/strsig_test.c | 1 + lib/util/regress/strsplit/strsplit_test.c | 1 + lib/util/regress/strtofoo/strtobool_test.c | 1 + lib/util/regress/strtofoo/strtoid_test.c | 1 + lib/util/regress/strtofoo/strtomode_test.c | 1 + lib/util/regress/strtofoo/strtonum_test.c | 1 + lib/util/regress/sudo_conf/conf_test.c | 1 + lib/util/regress/sudo_parseln/parseln_test.c | 1 + lib/util/regress/tailq/hltq_test.c | 1 + lib/util/regress/uuid/uuid_test.c | 1 + logsrvd/regress/logsrvd_conf/logsrvd_conf_test.c | 1 + plugins/python/regress/check_python_examples.c | 1 + src/exec_ptrace.c | 1 + 20 files changed, 20 insertions(+) diff --git a/lib/eventlog/regress/logwrap/check_wrap.c b/lib/eventlog/regress/logwrap/check_wrap.c index 19f6b890ff..d144488259 100644 --- a/lib/eventlog/regress/logwrap/check_wrap.c +++ b/lib/eventlog/regress/logwrap/check_wrap.c @@ -22,6 +22,7 @@ #include #include #include +#include #define SUDO_ERROR_WRAP 0 diff --git a/lib/util/regress/closefrom/closefrom_test.c b/lib/util/regress/closefrom/closefrom_test.c index 5b1bc34d7e..375bb51023 100644 --- a/lib/util/regress/closefrom/closefrom_test.c +++ b/lib/util/regress/closefrom/closefrom_test.c @@ -23,6 +23,7 @@ #include #include #include +#include #define SUDO_ERROR_WRAP 0 diff --git a/lib/util/regress/fnmatch/fnm_test.c b/lib/util/regress/fnmatch/fnm_test.c index a9f6b1afbf..126683b8d9 100644 --- a/lib/util/regress/fnmatch/fnm_test.c +++ b/lib/util/regress/fnmatch/fnm_test.c @@ -9,6 +9,7 @@ #include #include #include +#include #ifdef HAVE_FNMATCH # include #else diff --git a/lib/util/regress/getgrouplist/getgrouplist_test.c b/lib/util/regress/getgrouplist/getgrouplist_test.c index c5903bc1a8..8429528b72 100644 --- a/lib/util/regress/getgrouplist/getgrouplist_test.c +++ b/lib/util/regress/getgrouplist/getgrouplist_test.c @@ -28,6 +28,7 @@ #endif #include #include +#include #include "sudo_compat.h" #include "sudo_fatal.h" diff --git a/lib/util/regress/glob/globtest.c b/lib/util/regress/glob/globtest.c index 0148861839..866535a1ba 100644 --- a/lib/util/regress/glob/globtest.c +++ b/lib/util/regress/glob/globtest.c @@ -15,6 +15,7 @@ # include "compat/glob.h" #endif #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/parse_gids/parse_gids_test.c b/lib/util/regress/parse_gids/parse_gids_test.c index 9fb8c3b73a..241e81b49d 100644 --- a/lib/util/regress/parse_gids/parse_gids_test.c +++ b/lib/util/regress/parse_gids/parse_gids_test.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_fatal.h" diff --git a/lib/util/regress/progname/progname_test.c b/lib/util/regress/progname/progname_test.c index 7a0fa5eee6..0a88fafeb5 100644 --- a/lib/util/regress/progname/progname_test.c +++ b/lib/util/regress/progname/progname_test.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/strsig/strsig_test.c b/lib/util/regress/strsig/strsig_test.c index 35b03a9d55..30aaa2d517 100644 --- a/lib/util/regress/strsig/strsig_test.c +++ b/lib/util/regress/strsig/strsig_test.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/strsplit/strsplit_test.c b/lib/util/regress/strsplit/strsplit_test.c index 39549127fb..7f0e071cbe 100644 --- a/lib/util/regress/strsplit/strsplit_test.c +++ b/lib/util/regress/strsplit/strsplit_test.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_fatal.h" diff --git a/lib/util/regress/strtofoo/strtobool_test.c b/lib/util/regress/strtofoo/strtobool_test.c index d616f7c604..5b5a6cf847 100644 --- a/lib/util/regress/strtofoo/strtobool_test.c +++ b/lib/util/regress/strtofoo/strtobool_test.c @@ -25,6 +25,7 @@ #else # include "compat/stdbool.h" #endif +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/strtofoo/strtoid_test.c b/lib/util/regress/strtofoo/strtoid_test.c index facaeebc8b..eec9d044c1 100644 --- a/lib/util/regress/strtofoo/strtoid_test.c +++ b/lib/util/regress/strtofoo/strtoid_test.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/strtofoo/strtomode_test.c b/lib/util/regress/strtofoo/strtomode_test.c index 480da5a1fa..5e4d862ea3 100644 --- a/lib/util/regress/strtofoo/strtomode_test.c +++ b/lib/util/regress/strtofoo/strtomode_test.c @@ -20,6 +20,7 @@ #include #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/strtofoo/strtonum_test.c b/lib/util/regress/strtofoo/strtonum_test.c index cf715d2e37..8aca97da8c 100644 --- a/lib/util/regress/strtofoo/strtonum_test.c +++ b/lib/util/regress/strtofoo/strtonum_test.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/sudo_conf/conf_test.c b/lib/util/regress/sudo_conf/conf_test.c index 25e8935151..3235019a2a 100644 --- a/lib/util/regress/sudo_conf/conf_test.c +++ b/lib/util/regress/sudo_conf/conf_test.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_conf.h" diff --git a/lib/util/regress/sudo_parseln/parseln_test.c b/lib/util/regress/sudo_parseln/parseln_test.c index 8f3892b7a6..8cd72947a5 100644 --- a/lib/util/regress/sudo_parseln/parseln_test.c +++ b/lib/util/regress/sudo_parseln/parseln_test.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/lib/util/regress/tailq/hltq_test.c b/lib/util/regress/tailq/hltq_test.c index 489911ca77..2a1b2bb090 100644 --- a/lib/util/regress/tailq/hltq_test.c +++ b/lib/util/regress/tailq/hltq_test.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_fatal.h" diff --git a/lib/util/regress/uuid/uuid_test.c b/lib/util/regress/uuid/uuid_test.c index 8baa0e7d21..37ef4171ec 100644 --- a/lib/util/regress/uuid/uuid_test.c +++ b/lib/util/regress/uuid/uuid_test.c @@ -25,6 +25,7 @@ # include #endif #include +#include #define SUDO_ERROR_WRAP 0 diff --git a/logsrvd/regress/logsrvd_conf/logsrvd_conf_test.c b/logsrvd/regress/logsrvd_conf/logsrvd_conf_test.c index 773536679d..84e66edb6d 100644 --- a/logsrvd/regress/logsrvd_conf/logsrvd_conf_test.c +++ b/logsrvd/regress/logsrvd_conf/logsrvd_conf_test.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "sudo_compat.h" #include "sudo_util.h" diff --git a/plugins/python/regress/check_python_examples.c b/plugins/python/regress/check_python_examples.c index 565d0deb66..122797a5ef 100644 --- a/plugins/python/regress/check_python_examples.c +++ b/plugins/python/regress/check_python_examples.c @@ -22,6 +22,7 @@ */ #include "testhelpers.h" +#include #include "sudo_dso.h" diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index dd2849d3f0..c6f9485014 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -38,6 +38,7 @@ #include #include #include +#include #if defined(HAVE_ENDIAN_H) # include #elif defined(HAVE_SYS_ENDIAN_H) From 41e7532c90dcaf4e52c160f7ff747aa868294a66 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 7 Jul 2022 10:13:22 -0600 Subject: [PATCH 027/186] Quote ^foo$ on command line to protect it from the shell. --- plugins/sudoers/regress/testsudoers/test18.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sudoers/regress/testsudoers/test18.sh b/plugins/sudoers/regress/testsudoers/test18.sh index c349aa26dd..645b9a5cdd 100755 --- a/plugins/sudoers/regress/testsudoers/test18.sh +++ b/plugins/sudoers/regress/testsudoers/test18.sh @@ -28,7 +28,7 @@ root ALL = /bin/*at ^/var/log/[^/]+$ EOF # Command: path, args: args start with escaped ^ -$TESTSUDOERS root /usr/bin/grep ^foo$ <<'EOF' +$TESTSUDOERS root /usr/bin/grep '^foo$' <<'EOF' root ALL = /usr/bin/grep \^foo$ EOF From 5a59ce159e0c17fb35474c9c516d97703b338027 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 7 Jul 2022 20:11:44 -0600 Subject: [PATCH 028/186] Fix a NOPASSWD issue with a non-existent command when fdexec=always In command_matches_all(), if the command is fully-qualified and open_cmnd() return false, only treat it as an error if we are able to stat(2) the command. For "sudo ALL" a non-existent command is not an error. --- plugins/sudoers/match_command.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index deca7d1cf1..049dd873e1 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -392,11 +392,14 @@ command_matches_all(const char *runchroot, if (user_cmnd[0] == '/') { /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(user_cmnd, runchroot, digests, &fd)) - goto bad; + bool open_error = !open_cmnd(user_cmnd, runchroot, digests, &fd); #ifndef SUDOERS_NAME_MATCH /* A non-existent file is not an error for "sudo ALL". */ if (do_stat(fd, user_cmnd, runchroot, &sb)) { + if (open_error) { + /* File exists but we couldn't open it above? */ + goto bad; + } if (!intercept_ok(user_cmnd, intercepted, &sb)) goto bad; } From a7f9c8162e9efafcc1709e17b766c2d934081994 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 7 Jul 2022 20:28:49 -0600 Subject: [PATCH 029/186] Fix compilation error when SUDOERS_NAME_MATCH is defined. --- plugins/sudoers/match_command.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index 049dd873e1..c234c1f390 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -391,9 +391,10 @@ command_matches_all(const char *runchroot, debug_decl(command_matches_all, SUDOERS_DEBUG_MATCH); if (user_cmnd[0] == '/') { +#ifndef SUDOERS_NAME_MATCH /* Open the file for fdexec or for digest matching. */ bool open_error = !open_cmnd(user_cmnd, runchroot, digests, &fd); -#ifndef SUDOERS_NAME_MATCH + /* A non-existent file is not an error for "sudo ALL". */ if (do_stat(fd, user_cmnd, runchroot, &sb)) { if (open_error) { @@ -403,6 +404,9 @@ command_matches_all(const char *runchroot, if (!intercept_ok(user_cmnd, intercepted, &sb)) goto bad; } +#else + /* Open the file for fdexec or for digest matching. */ + (void)open_cmnd(user_cmnd, runchroot, digests, &fd); #endif } From 3dc8497b48ccc68bc778ad01882fd8fcbda055ce Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 8 Jul 2022 10:53:00 -0600 Subject: [PATCH 030/186] Add additional PVS-studio suppression comments for generated code. --- plugins/sudoers/getdate.c | 2543 +++++++++++++++++++++++++------------ plugins/sudoers/getdate.y | 2 +- plugins/sudoers/gram.c | 8 +- plugins/sudoers/gram.y | 8 +- plugins/sudoers/toke.c | 2 +- plugins/sudoers/toke.l | 2 +- 6 files changed, 1766 insertions(+), 799 deletions(-) diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index 1a7c11dbbd..50b23ec2cd 100644 --- a/plugins/sudoers/getdate.c +++ b/plugins/sudoers/getdate.c @@ -4,18 +4,77 @@ */ #include -#include -#include -#define YYBYACC 1 -#define YYMAJOR 1 -#define YYMINOR 9 -#define YYLEX yylex() -#define YYEMPTY -1 -#define yyclearin (yychar=(YYEMPTY)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING() (yyerrflag!=0) -#define YYPREFIX "yy" -#line 2 "getdate.y" +/* A Bison parser, made by GNU Bison 3.8.2. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output, and Bison version. */ +#define YYBISON 30802 + +/* Bison version string. */ +#define YYBISON_VERSION "3.8.2" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + + + +/* First part of user prologue. */ +#line 1 "getdate.y" + /* ** Originally written by Steven M. Bellovin while ** at the University of North Carolina at Chapel Hill. Later tweaked by @@ -29,8 +88,8 @@ /* SUPPRESS 287 on yaccpar_sccsid *//* Unused static variable */ /* SUPPRESS 288 on yyerrlab *//* Label unused */ -/* PVS Studio suppression*/ -/* -V::1037, 1042*/ +// PVS Studio suppression +// -V::560, 592, 1037, 1042 #include @@ -109,238 +168,1685 @@ static int yylex(void); int yyparse(void); void yyerror(const char *s); -#line 97 "getdate.y" -#ifndef YYSTYPE_DEFINED -#define YYSTYPE_DEFINED -typedef union { - time_t Number; - enum _MERIDIAN Meridian; -} YYSTYPE; -#endif /* YYSTYPE_DEFINED */ -#line 115 "getdate.c" -#define tAGO 257 -#define tID 258 -#define tDST 259 -#define tDAY 260 -#define tDAYZONE 261 -#define tMINUTE_UNIT 262 -#define tMONTH 263 -#define tMONTH_UNIT 264 -#define tSEC_UNIT 265 -#define tSNUMBER 266 -#define tUNUMBER 267 -#define tZONE 268 -#define tMERIDIAN 269 -#define YYERRCODE 256 -const short yylhs[] = - { -1, - 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, - 3, 3, 3, 4, 4, 4, 6, 6, 6, 5, - 5, 5, 5, 5, 5, 5, 5, 7, 7, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 8, 1, - 1, -}; -const short yylen[] = - { 2, - 0, 2, 1, 1, 1, 1, 1, 1, 2, 4, - 4, 6, 6, 1, 1, 2, 1, 2, 2, 3, - 5, 3, 3, 2, 4, 2, 3, 2, 1, 2, - 2, 1, 2, 2, 1, 2, 2, 1, 1, 0, - 1, -}; -const short yydefred[] = - { 1, - 0, 0, 15, 32, 0, 38, 35, 0, 0, 0, - 2, 3, 4, 5, 6, 7, 8, 0, 18, 0, - 31, 36, 33, 19, 30, 0, 37, 34, 0, 9, - 0, 0, 16, 28, 0, 23, 27, 22, 0, 0, - 25, 11, 41, 0, 10, 0, 0, 21, 13, 12, -}; -const short yydgoto[] = - { 1, - 45, 11, 12, 13, 14, 15, 16, 17, 18, -}; -const short yysindex[] = - { 0, - -199, -38, 0, 0, -254, 0, 0, -260, -47, -245, - 0, 0, 0, 0, 0, 0, 0, -242, 0, -28, - 0, 0, 0, 0, 0, -259, 0, 0, -249, 0, - -247, -246, 0, 0, -244, 0, 0, 0, -55, -29, - 0, 0, 0, -243, 0, -241, -257, 0, 0, 0,}; -const short yyrindex[] = - { 0, - 0, 1, 0, 0, 0, 0, 0, 0, 60, 10, - 0, 0, 0, 0, 0, 0, 0, 19, 0, 28, - 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 46, 37, - 0, 0, 0, 0, 0, 0, 46, 0, 0, 0,}; -const short yygindex[] = - { 0, - -25, 0, 0, 0, 0, 0, 0, 0, 0, -}; -#define YYTABLESIZE 328 -const short yytable[] = - { 32, - 17, 21, 44, 22, 23, 19, 36, 37, 49, 14, - 31, 43, 20, 33, 34, 35, 38, 46, 29, 39, - 40, 50, 41, 47, 0, 48, 0, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 0, 0, 0, 0, 39, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 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, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 42, 0, 24, 43, 25, 26, 27, 28, 29, 0, - 0, 30, 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, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, - 40, 0, 40, 40, 26, 26, 26, 26, 26, 26, - 39, 0, 26, 0, 0, 0, 39, 39, -}; -const short yycheck[] = - { 47, - 0, 262, 58, 264, 265, 44, 266, 267, 266, 0, - 58, 269, 267, 259, 257, 44, 266, 47, 0, 267, - 267, 47, 267, 267, -1, 267, -1, 0, -1, -1, - -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, - 260, 261, 262, 263, 264, 265, 266, 267, 268, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 266, -1, 260, 269, 262, 263, 264, 265, 266, -1, - -1, 269, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 260, 261, 262, 263, 264, - 265, -1, 267, 268, 260, 261, 262, 263, 264, 265, - 261, -1, 268, -1, -1, -1, 267, 268, -}; -#define YYFINAL 1 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 269 -#if YYDEBUG -const char * const yyname[] = - { -"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, -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,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,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,"tAGO","tID","tDST", -"tDAY","tDAYZONE","tMINUTE_UNIT","tMONTH","tMONTH_UNIT","tSEC_UNIT","tSNUMBER", -"tUNUMBER","tZONE","tMERIDIAN", -}; -const char * const yyrule[] = - {"$accept : spec", -"spec :", -"spec : spec item", -"item : time", -"item : zone", -"item : date", -"item : day", -"item : rel", -"item : number", -"time : tUNUMBER tMERIDIAN", -"time : tUNUMBER ':' tUNUMBER o_merid", -"time : tUNUMBER ':' tUNUMBER tSNUMBER", -"time : tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid", -"time : tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER", -"zone : tZONE", -"zone : tDAYZONE", -"zone : tZONE tDST", -"day : tDAY", -"day : tDAY ','", -"day : tUNUMBER tDAY", -"date : tUNUMBER '/' tUNUMBER", -"date : tUNUMBER '/' tUNUMBER '/' tUNUMBER", -"date : tUNUMBER tSNUMBER tSNUMBER", -"date : tUNUMBER tMONTH tSNUMBER", -"date : tMONTH tUNUMBER", -"date : tMONTH tUNUMBER ',' tUNUMBER", -"date : tUNUMBER tMONTH", -"date : tUNUMBER tMONTH tUNUMBER", -"rel : relunit tAGO", -"rel : relunit", -"relunit : tUNUMBER tMINUTE_UNIT", -"relunit : tSNUMBER tMINUTE_UNIT", -"relunit : tMINUTE_UNIT", -"relunit : tSNUMBER tSEC_UNIT", -"relunit : tUNUMBER tSEC_UNIT", -"relunit : tSEC_UNIT", -"relunit : tSNUMBER tMONTH_UNIT", -"relunit : tUNUMBER tMONTH_UNIT", -"relunit : tMONTH_UNIT", -"number : tUNUMBER", -"o_merid :", -"o_merid : tMERIDIAN", -}; -#endif -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 10000 -#define YYMAXDEPTH 10000 -#endif + +#line 167 "getdate.c" + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif + + +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + tAGO = 258, /* tAGO */ + tID = 259, /* tID */ + tDST = 260, /* tDST */ + tDAY = 261, /* tDAY */ + tDAYZONE = 262, /* tDAYZONE */ + tMINUTE_UNIT = 263, /* tMINUTE_UNIT */ + tMONTH = 264, /* tMONTH */ + tMONTH_UNIT = 265, /* tMONTH_UNIT */ + tSEC_UNIT = 266, /* tSEC_UNIT */ + tSNUMBER = 267, /* tSNUMBER */ + tUNUMBER = 268, /* tUNUMBER */ + tZONE = 269, /* tZONE */ + tMERIDIAN = 270 /* tMERIDIAN */ + }; + typedef enum yytokentype yytoken_kind_t; +#endif +/* Token kinds. */ +#define YYEMPTY -2 +#define YYEOF 0 +#define YYerror 256 +#define YYUNDEF 257 +#define tAGO 258 +#define tID 259 +#define tDST 260 +#define tDAY 261 +#define tDAYZONE 262 +#define tMINUTE_UNIT 263 +#define tMONTH 264 +#define tMONTH_UNIT 265 +#define tSEC_UNIT 266 +#define tSNUMBER 267 +#define tUNUMBER 268 +#define tZONE 269 +#define tMERIDIAN 270 + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +union YYSTYPE +{ +#line 97 "getdate.y" + + time_t Number; + enum _MERIDIAN Meridian; + +#line 252 "getdate.c" + +}; +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + +extern YYSTYPE yylval; + + +int yyparse (void); + + + +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_tAGO = 3, /* tAGO */ + YYSYMBOL_tID = 4, /* tID */ + YYSYMBOL_tDST = 5, /* tDST */ + YYSYMBOL_tDAY = 6, /* tDAY */ + YYSYMBOL_tDAYZONE = 7, /* tDAYZONE */ + YYSYMBOL_tMINUTE_UNIT = 8, /* tMINUTE_UNIT */ + YYSYMBOL_tMONTH = 9, /* tMONTH */ + YYSYMBOL_tMONTH_UNIT = 10, /* tMONTH_UNIT */ + YYSYMBOL_tSEC_UNIT = 11, /* tSEC_UNIT */ + YYSYMBOL_tSNUMBER = 12, /* tSNUMBER */ + YYSYMBOL_tUNUMBER = 13, /* tUNUMBER */ + YYSYMBOL_tZONE = 14, /* tZONE */ + YYSYMBOL_tMERIDIAN = 15, /* tMERIDIAN */ + YYSYMBOL_16_ = 16, /* ':' */ + YYSYMBOL_17_ = 17, /* ',' */ + YYSYMBOL_18_ = 18, /* '/' */ + YYSYMBOL_YYACCEPT = 19, /* $accept */ + YYSYMBOL_spec = 20, /* spec */ + YYSYMBOL_item = 21, /* item */ + YYSYMBOL_time = 22, /* time */ + YYSYMBOL_zone = 23, /* zone */ + YYSYMBOL_day = 24, /* day */ + YYSYMBOL_date = 25, /* date */ + YYSYMBOL_rel = 26, /* rel */ + YYSYMBOL_relunit = 27, /* relunit */ + YYSYMBOL_number = 28, /* number */ + YYSYMBOL_o_merid = 29 /* o_merid */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + + + + +#ifdef short +# undef short +#endif + +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined HAVE_STDINT_H +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif +#endif + +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + . */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) +#else +# define YY_USE(E) /* empty */ +#endif + +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if !defined yyoverflow + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* !defined yyoverflow */ + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yy_state_t yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYPTRDIFF_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYPTRDIFF_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 2 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 41 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 19 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 11 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 42 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 52 + +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK 270 + + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const yytype_int8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 17, 2, 2, 18, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15 +}; + +#if YYDEBUG +/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_int16 yyrline[] = +{ + 0, 111, 111, 112, 115, 118, 121, 124, 127, 130, + 133, 139, 145, 152, 158, 168, 172, 177, 183, 187, + 191, 197, 201, 212, 218, 224, 228, 233, 237, 244, + 248, 251, 254, 257, 260, 263, 266, 269, 272, 275, + 280, 307, 310 +}; +#endif + +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "\"end of file\"", "error", "\"invalid token\"", "tAGO", "tID", "tDST", + "tDAY", "tDAYZONE", "tMINUTE_UNIT", "tMONTH", "tMONTH_UNIT", "tSEC_UNIT", + "tSNUMBER", "tUNUMBER", "tZONE", "tMERIDIAN", "':'", "','", "'/'", + "$accept", "spec", "item", "time", "zone", "day", "date", "rel", + "relunit", "number", "o_merid", YY_NULLPTR +}; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} +#endif + +#define YYPACT_NINF (-12) + +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) + +#define YYTABLE_NINF (-1) + +#define yytable_value_is_error(Yyn) \ + 0 + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int8 yypact[] = +{ + -12, 0, -12, -1, -12, -12, 10, -12, -12, 18, + 9, 17, -12, -12, -12, -12, -12, -12, 27, -12, + -12, 15, -12, -12, -12, -12, -12, -10, -12, -12, + 21, -12, 22, 23, -12, -12, 24, -12, -12, -12, + -11, 20, -12, -12, -12, 26, -12, 28, 19, -12, + -12, -12 +}; + +/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_int8 yydefact[] = +{ + 2, 0, 1, 18, 16, 33, 0, 39, 36, 0, + 40, 15, 3, 4, 5, 7, 6, 8, 30, 9, + 19, 25, 32, 37, 34, 20, 31, 27, 38, 35, + 0, 10, 0, 0, 17, 29, 0, 24, 28, 23, + 41, 21, 26, 12, 42, 0, 11, 0, 41, 22, + 14, 13 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -8 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + 0, 1, 12, 13, 14, 15, 16, 17, 18, 19, + 46 +}; + +/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int8 yytable[] = +{ + 2, 43, 37, 38, 44, 45, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 25, 20, 26, 27, 28, + 29, 30, 34, 21, 31, 32, 22, 33, 23, 24, + 35, 50, 36, 39, 44, 40, 41, 42, 47, 48, + 51, 49 +}; + +static const yytype_int8 yycheck[] = +{ + 0, 12, 12, 13, 15, 16, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 6, 17, 8, 9, 10, + 11, 12, 5, 13, 15, 16, 8, 18, 10, 11, + 3, 12, 17, 12, 15, 13, 13, 13, 18, 13, + 48, 13 +}; + +/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of + state STATE-NUM. */ +static const yytype_int8 yystos[] = +{ + 0, 20, 0, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 21, 22, 23, 24, 25, 26, 27, 28, + 17, 13, 8, 10, 11, 6, 8, 9, 10, 11, + 12, 15, 16, 18, 5, 3, 17, 12, 13, 12, + 13, 13, 13, 12, 15, 16, 29, 18, 13, 13, + 12, 29 +}; + +/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ +static const yytype_int8 yyr1[] = +{ + 0, 19, 20, 20, 21, 21, 21, 21, 21, 21, + 22, 22, 22, 22, 22, 23, 23, 23, 24, 24, + 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, + 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 28, 29, 29 +}; + +/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ +static const yytype_int8 yyr2[] = +{ + 0, 2, 0, 2, 1, 1, 1, 1, 1, 1, + 2, 4, 4, 6, 6, 1, 1, 2, 1, 2, + 2, 3, 5, 3, 3, 2, 4, 2, 3, 2, + 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, + 1, 0, 1 +}; + + +enum { YYENOMEM = -2 }; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYNOMEM goto yyexhaustedlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + + + + +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Kind, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) +{ + FILE *yyoutput = yyo; + YY_USE (yyoutput); + if (!yyvaluep) + return; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ + +static void +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) +{ + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + + yy_symbol_value_print (yyo, yykind, yyvaluep); + YYFPRINTF (yyo, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, + int yyrule) +{ + int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)]); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + + + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep) +{ + YY_USE (yyvaluep); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/* Lookahead token kind. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; +/* Number of syntax errors so far. */ +int yynerrs; + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (void) +{ + yy_state_fast_t yystate = 0; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus = 0; + + /* Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; + + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; + + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; + + int yyn; + /* The return value of yyparse. */ + int yyresult; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yychar = YYEMPTY; /* Cause a token to be read. */ + + goto yysetstate; + + +/*------------------------------------------------------------. +| yynewstate -- push a new state, which is found in yystate. | +`------------------------------------------------------------*/ +yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); + + if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + YYNOMEM; +#else + { + /* Get the current used size of the three stacks, in elements. */ + YYPTRDIFF_T yysize = yyssp - yyss + 1; + +# if defined yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + yy_state_t *yyss1 = yyss; + YYSTYPE *yyvs1 = yyvs; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; + } +# else /* defined YYSTACK_RELOCATE */ + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + YYNOMEM; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yy_state_t *yyss1 = yyss; + union yyalloc *yyptr = + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); + if (! yyptr) + YYNOMEM; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token\n")); + yychar = yylex (); + } + + if (yychar <= YYEOF) + { + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + goto yyerrlab1; + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + /* Discard the shifted token. */ + yychar = YYEMPTY; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 4: /* item: time */ +#line 115 "getdate.y" + { + yyHaveTime++; + } +#line 1290 "getdate.c" + break; + + case 5: /* item: zone */ +#line 118 "getdate.y" + { + yyHaveZone++; + } +#line 1298 "getdate.c" + break; + + case 6: /* item: date */ +#line 121 "getdate.y" + { + yyHaveDate++; + } +#line 1306 "getdate.c" + break; + + case 7: /* item: day */ +#line 124 "getdate.y" + { + yyHaveDay++; + } +#line 1314 "getdate.c" + break; + + case 8: /* item: rel */ +#line 127 "getdate.y" + { + yyHaveRel++; + } +#line 1322 "getdate.c" + break; + + case 10: /* time: tUNUMBER tMERIDIAN */ +#line 133 "getdate.y" + { + yyHour = (yyvsp[-1].Number); + yyMinutes = 0; + yySeconds = 0; + yyMeridian = (yyvsp[0].Meridian); + } +#line 1333 "getdate.c" + break; + + case 11: /* time: tUNUMBER ':' tUNUMBER o_merid */ +#line 139 "getdate.y" + { + yyHour = (yyvsp[-3].Number); + yyMinutes = (yyvsp[-1].Number); + yySeconds = 0; + yyMeridian = (yyvsp[0].Meridian); + } +#line 1344 "getdate.c" + break; + + case 12: /* time: tUNUMBER ':' tUNUMBER tSNUMBER */ +#line 145 "getdate.y" + { + yyHour = (yyvsp[-3].Number); + yyMinutes = (yyvsp[-1].Number); + yyMeridian = MER24; + yyDSTmode = DSToff; + yyTimezone = - ((yyvsp[0].Number) % 100 + ((yyvsp[0].Number) / 100) * 60); + } +#line 1356 "getdate.c" + break; + + case 13: /* time: tUNUMBER ':' tUNUMBER ':' tUNUMBER o_merid */ +#line 152 "getdate.y" + { + yyHour = (yyvsp[-5].Number); + yyMinutes = (yyvsp[-3].Number); + yySeconds = (yyvsp[-1].Number); + yyMeridian = (yyvsp[0].Meridian); + } +#line 1367 "getdate.c" + break; + + case 14: /* time: tUNUMBER ':' tUNUMBER ':' tUNUMBER tSNUMBER */ +#line 158 "getdate.y" + { + yyHour = (yyvsp[-5].Number); + yyMinutes = (yyvsp[-3].Number); + yySeconds = (yyvsp[-1].Number); + yyMeridian = MER24; + yyDSTmode = DSToff; + yyTimezone = - ((yyvsp[0].Number) % 100 + ((yyvsp[0].Number) / 100) * 60); + } +#line 1380 "getdate.c" + break; + + case 15: /* zone: tZONE */ +#line 168 "getdate.y" + { + yyTimezone = (yyvsp[0].Number); + yyDSTmode = DSToff; + } +#line 1389 "getdate.c" + break; + + case 16: /* zone: tDAYZONE */ +#line 172 "getdate.y" + { + yyTimezone = (yyvsp[0].Number); + yyDSTmode = DSTon; + } +#line 1398 "getdate.c" + break; + + case 17: /* zone: tZONE tDST */ +#line 177 "getdate.y" + { + yyTimezone = (yyvsp[-1].Number); + yyDSTmode = DSTon; + } +#line 1407 "getdate.c" + break; + + case 18: /* day: tDAY */ +#line 183 "getdate.y" + { + yyDayOrdinal = 1; + yyDayNumber = (yyvsp[0].Number); + } +#line 1416 "getdate.c" + break; + + case 19: /* day: tDAY ',' */ +#line 187 "getdate.y" + { + yyDayOrdinal = 1; + yyDayNumber = (yyvsp[-1].Number); + } +#line 1425 "getdate.c" + break; + + case 20: /* day: tUNUMBER tDAY */ +#line 191 "getdate.y" + { + yyDayOrdinal = (yyvsp[-1].Number); + yyDayNumber = (yyvsp[0].Number); + } +#line 1434 "getdate.c" + break; + + case 21: /* date: tUNUMBER '/' tUNUMBER */ +#line 197 "getdate.y" + { + yyMonth = (yyvsp[-2].Number); + yyDay = (yyvsp[0].Number); + } +#line 1443 "getdate.c" + break; + + case 22: /* date: tUNUMBER '/' tUNUMBER '/' tUNUMBER */ +#line 201 "getdate.y" + { + if ((yyvsp[-4].Number) >= 100) { + yyYear = (yyvsp[-4].Number); + yyMonth = (yyvsp[-2].Number); + yyDay = (yyvsp[0].Number); + } else { + yyMonth = (yyvsp[-4].Number); + yyDay = (yyvsp[-2].Number); + yyYear = (yyvsp[0].Number); + } + } +#line 1459 "getdate.c" + break; + + case 23: /* date: tUNUMBER tSNUMBER tSNUMBER */ +#line 212 "getdate.y" + { + /* ISO 8601 format. yyyy-mm-dd. */ + yyYear = (yyvsp[-2].Number); + yyMonth = -(yyvsp[-1].Number); + yyDay = -(yyvsp[0].Number); + } +#line 1470 "getdate.c" + break; + + case 24: /* date: tUNUMBER tMONTH tSNUMBER */ +#line 218 "getdate.y" + { + /* e.g. 17-JUN-1992. */ + yyDay = (yyvsp[-2].Number); + yyMonth = (yyvsp[-1].Number); + yyYear = -(yyvsp[0].Number); + } +#line 1481 "getdate.c" + break; + + case 25: /* date: tMONTH tUNUMBER */ +#line 224 "getdate.y" + { + yyMonth = (yyvsp[-1].Number); + yyDay = (yyvsp[0].Number); + } +#line 1490 "getdate.c" + break; + + case 26: /* date: tMONTH tUNUMBER ',' tUNUMBER */ +#line 228 "getdate.y" + { + yyMonth = (yyvsp[-3].Number); + yyDay = (yyvsp[-2].Number); + yyYear = (yyvsp[0].Number); + } +#line 1500 "getdate.c" + break; + + case 27: /* date: tUNUMBER tMONTH */ +#line 233 "getdate.y" + { + yyMonth = (yyvsp[0].Number); + yyDay = (yyvsp[-1].Number); + } +#line 1509 "getdate.c" + break; + + case 28: /* date: tUNUMBER tMONTH tUNUMBER */ +#line 237 "getdate.y" + { + yyMonth = (yyvsp[-1].Number); + yyDay = (yyvsp[-2].Number); + yyYear = (yyvsp[0].Number); + } +#line 1519 "getdate.c" + break; + + case 29: /* rel: relunit tAGO */ +#line 244 "getdate.y" + { + yyRelSeconds = -yyRelSeconds; + yyRelMonth = -yyRelMonth; + } +#line 1528 "getdate.c" + break; + + case 31: /* relunit: tUNUMBER tMINUTE_UNIT */ +#line 251 "getdate.y" + { + yyRelSeconds += (yyvsp[-1].Number) * (yyvsp[0].Number) * 60L; + } +#line 1536 "getdate.c" + break; + + case 32: /* relunit: tSNUMBER tMINUTE_UNIT */ +#line 254 "getdate.y" + { + yyRelSeconds += (yyvsp[-1].Number) * (yyvsp[0].Number) * 60L; + } +#line 1544 "getdate.c" + break; + + case 33: /* relunit: tMINUTE_UNIT */ +#line 257 "getdate.y" + { + yyRelSeconds += (yyvsp[0].Number) * 60L; + } +#line 1552 "getdate.c" + break; + + case 34: /* relunit: tSNUMBER tSEC_UNIT */ +#line 260 "getdate.y" + { + yyRelSeconds += (yyvsp[-1].Number); + } +#line 1560 "getdate.c" + break; + + case 35: /* relunit: tUNUMBER tSEC_UNIT */ +#line 263 "getdate.y" + { + yyRelSeconds += (yyvsp[-1].Number); + } +#line 1568 "getdate.c" + break; + + case 36: /* relunit: tSEC_UNIT */ +#line 266 "getdate.y" + { + yyRelSeconds++; + } +#line 1576 "getdate.c" + break; + + case 37: /* relunit: tSNUMBER tMONTH_UNIT */ +#line 269 "getdate.y" + { + yyRelMonth += (yyvsp[-1].Number) * (yyvsp[0].Number); + } +#line 1584 "getdate.c" + break; + + case 38: /* relunit: tUNUMBER tMONTH_UNIT */ +#line 272 "getdate.y" + { + yyRelMonth += (yyvsp[-1].Number) * (yyvsp[0].Number); + } +#line 1592 "getdate.c" + break; + + case 39: /* relunit: tMONTH_UNIT */ +#line 275 "getdate.y" + { + yyRelMonth += (yyvsp[0].Number); + } +#line 1600 "getdate.c" + break; + + case 40: /* number: tUNUMBER */ +#line 280 "getdate.y" + { + if (yyHaveTime && yyHaveDate && !yyHaveRel) + yyYear = (yyvsp[0].Number); + else { + if((yyvsp[0].Number)>10000) { + yyHaveDate++; + yyDay= ((yyvsp[0].Number))%100; + yyMonth= ((yyvsp[0].Number)/100)%100; + yyYear = (yyvsp[0].Number)/10000; + } + else { + yyHaveTime++; + if ((yyvsp[0].Number) < 100) { + yyHour = (yyvsp[0].Number); + yyMinutes = 0; + } + else { + yyHour = (yyvsp[0].Number) / 100; + yyMinutes = (yyvsp[0].Number) % 100; + } + yySeconds = 0; + yyMeridian = MER24; + } + } + } +#line 1630 "getdate.c" + break; + + case 41: /* o_merid: %empty */ +#line 307 "getdate.y" + { + (yyval.Meridian) = MER24; + } +#line 1638 "getdate.c" + break; + + case 42: /* o_merid: tMERIDIAN */ +#line 310 "getdate.y" + { + (yyval.Meridian) = (yyvsp[0].Meridian); + } +#line 1646 "getdate.c" + break; + + +#line 1650 "getdate.c" + + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + + *++yyvsp = yyval; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; + yyerror (YY_("syntax error")); + } + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; + ++yynerrs; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + /* Pop stack until we find a state that shifts the error token. */ + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + YY_ACCESSING_SYMBOL (yystate), yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturnlab; + + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturnlab; + + +/*-----------------------------------------------------------. +| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | +`-----------------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + goto yyreturnlab; + + +/*----------------------------------------------------------. +| yyreturnlab -- parsing is finished, clean up and return. | +`----------------------------------------------------------*/ +yyreturnlab: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); #endif -#define YYINITSTACKSIZE 200 -/* LINTUSED */ -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short *yyss; -short *yysslim; -YYSTYPE *yyvs; -unsigned int yystacksize; -int yyparse(void); -#line 316 "getdate.y" + + return yyresult; +} + +#line 315 "getdate.y" + /* Month and day table. */ static TABLE const MonthDayTable[] = { @@ -949,550 +2455,3 @@ main(int argc, char *argv[]) /* NOTREACHED */ } #endif /* TEST */ -#line 937 "getdate.c" -/* allocate initial stack or double stack size, up to YYMAXDEPTH */ -static int yygrowstack(void) -{ - unsigned int newsize; - long sslen; - short *newss; - YYSTYPE *newvs; - - if ((newsize = yystacksize) == 0) - newsize = YYINITSTACKSIZE; - else if (newsize >= YYMAXDEPTH) - return -1; - else if ((newsize *= 2) > YYMAXDEPTH) - newsize = YYMAXDEPTH; -#ifdef SIZE_MAX -#define YY_SIZE_MAX SIZE_MAX -#else -#define YY_SIZE_MAX 0xffffffffU -#endif - if (YY_SIZE_MAX / newsize < sizeof *newss) - goto bail; - sslen = yyssp - yyss; - 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 ? realloc(yyvs, newsize * sizeof *newvs) : - malloc(newsize * sizeof *newvs); /* overflow check above */ - if (newvs == NULL) - goto bail; - yyvs = newvs; - yyvsp = newvs + sslen; - yystacksize = newsize; - yysslim = yyss + newsize - 1; - return 0; -bail: - free(yyss); - free(yyvs); - yyss = yyssp = NULL; - yyvs = yyvsp = NULL; - yystacksize = 0; - return -1; -} - -#define YYABORT goto yyabort -#define YYREJECT goto yyabort -#define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab -int -yyparse(void) -{ - int yym, yyn, yystate; -#if YYDEBUG - const char *yys; - - if ((yys = getenv("YYDEBUG"))) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') - yydebug = yyn - '0'; - } -#endif /* YYDEBUG */ - - yynerrs = 0; - yyerrflag = 0; - yychar = (-1); - - if (yyss == NULL && yygrowstack()) goto yyoverflow; - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - -yyloop: - if ((yyn = yydefred[yystate]) != 0) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - } - if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, shifting to state %d\n", - YYPREFIX, yystate, yytable[yyn]); -#endif - if (yyssp >= yysslim && yygrowstack()) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - yychar = (-1); - if (yyerrflag > 0) --yyerrflag; - goto yyloop; - } - if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yychar) - { - yyn = yytable[yyn]; - goto yyreduce; - } - if (yyerrflag) goto yyinrecovery; -#if defined(__GNUC__) - goto yynewerror; -#endif -yynewerror: - yyerror("syntax error"); -#if defined(__GNUC__) - goto yyerrlab; -#endif -yyerrlab: - ++yynerrs; -yyinrecovery: - if (yyerrflag < 3) - { - yyerrflag = 3; - for (;;) - { - if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); -#endif - if (yyssp >= yysslim && yygrowstack()) - { - goto yyoverflow; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; - goto yyloop; - } - else - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yyssp); -#endif - if (yyssp <= yyss) goto yyabort; - --yyssp; - --yyvsp; - } - } - } - else - { - if (yychar == 0) goto yyabort; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, error recovery discards token %d (%s)\n", - YYPREFIX, yystate, yychar, yys); - } -#endif - yychar = (-1); - goto yyloop; - } -yyreduce: -#if YYDEBUG - if (yydebug) - printf("%sdebug: state %d, reducing by rule %d (%s)\n", - YYPREFIX, yystate, yyn, yyrule[yyn]); -#endif - yym = yylen[yyn]; - if (yym) - yyval = yyvsp[1-yym]; - else - memset(&yyval, 0, sizeof yyval); - switch (yyn) - { -case 3: -#line 115 "getdate.y" -{ - yyHaveTime++; - } -break; -case 4: -#line 118 "getdate.y" -{ - yyHaveZone++; - } -break; -case 5: -#line 121 "getdate.y" -{ - yyHaveDate++; - } -break; -case 6: -#line 124 "getdate.y" -{ - yyHaveDay++; - } -break; -case 7: -#line 127 "getdate.y" -{ - yyHaveRel++; - } -break; -case 9: -#line 133 "getdate.y" -{ - yyHour = yyvsp[-1].Number; - yyMinutes = 0; - yySeconds = 0; - yyMeridian = yyvsp[0].Meridian; - } -break; -case 10: -#line 139 "getdate.y" -{ - yyHour = yyvsp[-3].Number; - yyMinutes = yyvsp[-1].Number; - yySeconds = 0; - yyMeridian = yyvsp[0].Meridian; - } -break; -case 11: -#line 145 "getdate.y" -{ - yyHour = yyvsp[-3].Number; - yyMinutes = yyvsp[-1].Number; - yyMeridian = MER24; - yyDSTmode = DSToff; - yyTimezone = - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60); - } -break; -case 12: -#line 152 "getdate.y" -{ - yyHour = yyvsp[-5].Number; - yyMinutes = yyvsp[-3].Number; - yySeconds = yyvsp[-1].Number; - yyMeridian = yyvsp[0].Meridian; - } -break; -case 13: -#line 158 "getdate.y" -{ - yyHour = yyvsp[-5].Number; - yyMinutes = yyvsp[-3].Number; - yySeconds = yyvsp[-1].Number; - yyMeridian = MER24; - yyDSTmode = DSToff; - yyTimezone = - (yyvsp[0].Number % 100 + (yyvsp[0].Number / 100) * 60); - } -break; -case 14: -#line 168 "getdate.y" -{ - yyTimezone = yyvsp[0].Number; - yyDSTmode = DSToff; - } -break; -case 15: -#line 172 "getdate.y" -{ - yyTimezone = yyvsp[0].Number; - yyDSTmode = DSTon; - } -break; -case 16: -#line 177 "getdate.y" -{ - yyTimezone = yyvsp[-1].Number; - yyDSTmode = DSTon; - } -break; -case 17: -#line 183 "getdate.y" -{ - yyDayOrdinal = 1; - yyDayNumber = yyvsp[0].Number; - } -break; -case 18: -#line 187 "getdate.y" -{ - yyDayOrdinal = 1; - yyDayNumber = yyvsp[-1].Number; - } -break; -case 19: -#line 191 "getdate.y" -{ - yyDayOrdinal = yyvsp[-1].Number; - yyDayNumber = yyvsp[0].Number; - } -break; -case 20: -#line 197 "getdate.y" -{ - yyMonth = yyvsp[-2].Number; - yyDay = yyvsp[0].Number; - } -break; -case 21: -#line 201 "getdate.y" -{ - if (yyvsp[-4].Number >= 100) { - yyYear = yyvsp[-4].Number; - yyMonth = yyvsp[-2].Number; - yyDay = yyvsp[0].Number; - } else { - yyMonth = yyvsp[-4].Number; - yyDay = yyvsp[-2].Number; - yyYear = yyvsp[0].Number; - } - } -break; -case 22: -#line 212 "getdate.y" -{ - /* ISO 8601 format. yyyy-mm-dd. */ - yyYear = yyvsp[-2].Number; - yyMonth = -yyvsp[-1].Number; - yyDay = -yyvsp[0].Number; - } -break; -case 23: -#line 218 "getdate.y" -{ - /* e.g. 17-JUN-1992. */ - yyDay = yyvsp[-2].Number; - yyMonth = yyvsp[-1].Number; - yyYear = -yyvsp[0].Number; - } -break; -case 24: -#line 224 "getdate.y" -{ - yyMonth = yyvsp[-1].Number; - yyDay = yyvsp[0].Number; - } -break; -case 25: -#line 228 "getdate.y" -{ - yyMonth = yyvsp[-3].Number; - yyDay = yyvsp[-2].Number; - yyYear = yyvsp[0].Number; - } -break; -case 26: -#line 233 "getdate.y" -{ - yyMonth = yyvsp[0].Number; - yyDay = yyvsp[-1].Number; - } -break; -case 27: -#line 237 "getdate.y" -{ - yyMonth = yyvsp[-1].Number; - yyDay = yyvsp[-2].Number; - yyYear = yyvsp[0].Number; - } -break; -case 28: -#line 244 "getdate.y" -{ - yyRelSeconds = -yyRelSeconds; - yyRelMonth = -yyRelMonth; - } -break; -case 30: -#line 251 "getdate.y" -{ - yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L; - } -break; -case 31: -#line 254 "getdate.y" -{ - yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L; - } -break; -case 32: -#line 257 "getdate.y" -{ - yyRelSeconds += yyvsp[0].Number * 60L; - } -break; -case 33: -#line 260 "getdate.y" -{ - yyRelSeconds += yyvsp[-1].Number; - } -break; -case 34: -#line 263 "getdate.y" -{ - yyRelSeconds += yyvsp[-1].Number; - } -break; -case 35: -#line 266 "getdate.y" -{ - yyRelSeconds++; - } -break; -case 36: -#line 269 "getdate.y" -{ - yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; - } -break; -case 37: -#line 272 "getdate.y" -{ - yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; - } -break; -case 38: -#line 275 "getdate.y" -{ - yyRelMonth += yyvsp[0].Number; - } -break; -case 39: -#line 280 "getdate.y" -{ - if (yyHaveTime && yyHaveDate && !yyHaveRel) - yyYear = yyvsp[0].Number; - else { - if(yyvsp[0].Number>10000) { - yyHaveDate++; - yyDay= (yyvsp[0].Number)%100; - yyMonth= (yyvsp[0].Number/100)%100; - yyYear = yyvsp[0].Number/10000; - } - else { - yyHaveTime++; - if (yyvsp[0].Number < 100) { - yyHour = yyvsp[0].Number; - yyMinutes = 0; - } - else { - yyHour = yyvsp[0].Number / 100; - yyMinutes = yyvsp[0].Number % 100; - } - yySeconds = 0; - yyMeridian = MER24; - } - } - } -break; -case 40: -#line 307 "getdate.y" -{ - yyval.Meridian = MER24; - } -break; -case 41: -#line 310 "getdate.y" -{ - yyval.Meridian = yyvsp[0].Meridian; - } -break; -#line 1417 "getdate.c" - } - yyssp -= yym; - yystate = *yyssp; - yyvsp -= yym; - yym = yylhs[yyn]; - if (yystate == 0 && yym == 0) - { -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state 0 to\ - state %d\n", YYPREFIX, YYFINAL); -#endif - yystate = YYFINAL; - *++yyssp = YYFINAL; - *++yyvsp = yyval; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) - { - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; - printf("%sdebug: state %d, reading %d (%s)\n", - YYPREFIX, YYFINAL, yychar, yys); - } -#endif - } - if (yychar == 0) goto yyaccept; - goto yyloop; - } - if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && - yyn <= YYTABLESIZE && yycheck[yyn] == yystate) - yystate = yytable[yyn]; - else - yystate = yydgoto[yym]; -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yyssp, yystate); -#endif - if (yyssp >= yysslim && yygrowstack()) - { - goto yyoverflow; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; -yyoverflow: - yyerror("yacc stack overflow"); -yyabort: - free(yyss); - free(yyvs); - yyss = yyssp = NULL; - yyvs = yyvsp = NULL; - yystacksize = 0; - return (1); -yyaccept: - free(yyss); - free(yyvs); - yyss = yyssp = NULL; - yyvs = yyvsp = NULL; - yystacksize = 0; - return (0); -} diff --git a/plugins/sudoers/getdate.y b/plugins/sudoers/getdate.y index 8511d709bc..56e2038661 100644 --- a/plugins/sudoers/getdate.y +++ b/plugins/sudoers/getdate.y @@ -13,7 +13,7 @@ /* SUPPRESS 288 on yyerrlab *//* Label unused */ // PVS Studio suppression -// -V::1037, 1042 +// -V::560, 592, 1037, 1042 #include diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index c7f7693e5a..fcbe50dc26 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -126,7 +126,7 @@ #define this_lineno (sudoerschar == '\n' ? sudolineno - 1 : sudolineno) // PVS Studio suppression -// -V::1037, 1042 +// -V::560, 592, 1037, 1042 /* * Globals @@ -3438,11 +3438,15 @@ sudoerserror(const char *s) sudoers_errstr = NULL; } - // -V:sudoerserror:575, 618 +#pragma pvs(push) +#pragma pvs(disable: 575, 618) + if (s == NULL) sudoerserrorf(NULL); else sudoerserrorf("%s", s); + +#pragma pvs(pop) } static void diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 0e5cf780de..055d36e1b7 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -43,7 +43,7 @@ #define this_lineno (sudoerschar == '\n' ? sudolineno - 1 : sudolineno) // PVS Studio suppression -// -V::1037, 1042 +// -V::560, 592, 1037, 1042 /* * Globals @@ -1260,11 +1260,15 @@ sudoerserror(const char *s) sudoers_errstr = NULL; } - // -V:sudoerserror:575, 618 +#pragma pvs(push) +#pragma pvs(disable: 575, 618) + if (s == NULL) sudoerserrorf(NULL); else sudoerserrorf("%s", s); + +#pragma pvs(pop) } static void diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index 44365bc603..82c8423dcb 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -3085,7 +3085,7 @@ char *sudoerstext; #endif // PVS Studio suppression -// -V::519, 1004, 1037 +// -V::519, 547, 1004, 1037, 1048 int sudolineno; /* current sudoers line number. */ char *sudoers; /* sudoers file being parsed. */ diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 3cd4eecb8a..c843162d36 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -51,7 +51,7 @@ #endif // PVS Studio suppression -// -V::519, 1004, 1037 +// -V::519, 547, 1004, 1037, 1048 int sudolineno; /* current sudoers line number. */ char *sudoers; /* sudoers file being parsed. */ From fba81260ad50fb0c7ac77d260faf5f3e276d2ecc Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 8 Jul 2022 14:01:15 -0600 Subject: [PATCH 031/186] If update_defaults() fails, treat it as a parse error. --- plugins/sudoers/visudo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 5d1cc48e88..5189e5737a 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -655,7 +655,7 @@ reparse_sudoers(char *editor, int editor_argc, char **editor_argv, } fclose(sudoersin); if (!parse_error) { - (void) update_defaults(&parsed_policy, NULL, + parse_error = !update_defaults(&parsed_policy, NULL, SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER, true); check_defaults_and_aliases(strict, quiet); } @@ -975,7 +975,7 @@ check_syntax(const char *file, bool quiet, bool strict, bool check_owner, parse_error = true; } if (!parse_error) { - (void) update_defaults(&parsed_policy, NULL, + parse_error = !update_defaults(&parsed_policy, NULL, SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER, true); check_defaults_and_aliases(strict, quiet); } From 224d78993a24d1cc31ae0f6a0d0a59c66b765387 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 9 Jul 2022 09:00:48 -0600 Subject: [PATCH 032/186] sudo_putenv_nodebug: require that the environment string include a '=' --- plugins/sudoers/env.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/env.c b/plugins/sudoers/env.c index 99b6743003..eaf90f4a05 100644 --- a/plugins/sudoers/env.c +++ b/plugins/sudoers/env.c @@ -314,9 +314,15 @@ int sudo_putenv_nodebug(char *str, bool dupcheck, bool overwrite) { char **ep; - size_t len; + const char *equal; bool found = false; + equal = strchr(str, '='); + if (equal == NULL) { + errno = EINVAL; + return -1; + } + /* Make sure there is room for the new entry plus a NULL. */ if (env.env_size > 2 && env.env_len > env.env_size - 2) { char **nenvp; @@ -358,7 +364,7 @@ sudo_putenv_nodebug(char *str, bool dupcheck, bool overwrite) #endif if (dupcheck) { - len = (strchr(str, '=') - str) + 1; + size_t len = (size_t)(equal - str) + 1; for (ep = env.envp; *ep != NULL; ep++) { if (strncmp(str, *ep, len) == 0) { if (overwrite) From e7b7fbaf6e51634d950a4dccc2cc615bf6e7c35a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 9 Jul 2022 09:02:25 -0600 Subject: [PATCH 033/186] Increase the realloc increment from 128 to 1024. The contents of the env_add array should not include the leading "env=" prefix. --- plugins/sudoers/regress/fuzz/fuzz_policy.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/sudoers/regress/fuzz/fuzz_policy.c b/plugins/sudoers/regress/fuzz/fuzz_policy.c index e908f3bf8a..a03fe67a5b 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_policy.c +++ b/plugins/sudoers/regress/fuzz/fuzz_policy.c @@ -118,13 +118,13 @@ push(struct dynamic_array *arr, const char *entry) } if (arr->len + (entry != NULL) >= arr->size) { - char **tmp = reallocarray(arr->entries, arr->size + 128, sizeof(char *)); + char **tmp = reallocarray(arr->entries, arr->size + 1024, sizeof(char *)); if (tmp == NULL) { free(copy); return false; } arr->entries = tmp; - arr->size += 128; + arr->size += 1024; } if (copy != NULL) arr->entries[arr->len++] = copy; @@ -372,7 +372,9 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) /* Additional environment variables to add. */ if (strncmp(line, "env=", sizeof("env=") - 1) == 0) { - push(&env_add, line); + const char *cp = line + sizeof("env=") - 1; + if (strchr(cp, '=') != NULL) + push(&env_add, line); continue; } From a2b0a8330c0a3f94d68a00207ad8f227e5551532 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 9 Jul 2022 11:21:17 -0600 Subject: [PATCH 034/186] Fix a few whitespace issues. --- plugins/sudoers/cvtsudoers_csv.c | 2 +- plugins/sudoers/cvtsudoers_json.c | 4 ++-- plugins/sudoers/cvtsudoers_ldif.c | 16 ++++++++-------- plugins/sudoers/cvtsudoers_merge.c | 10 +++++----- plugins/sudoers/def_data.in | 2 +- plugins/sudoers/gram.c | 10 +++++----- plugins/sudoers/gram.y | 12 ++++++------ plugins/sudoers/parse.c | 18 +++++++++--------- plugins/sudoers/parse.h | 4 ++-- plugins/sudoers/policy.c | 12 ++++++------ src/apparmor.c | 24 +++++++++++++----------- 11 files changed, 58 insertions(+), 56 deletions(-) diff --git a/plugins/sudoers/cvtsudoers_csv.c b/plugins/sudoers/cvtsudoers_csv.c index 8d8e397150..aa96c5d63c 100644 --- a/plugins/sudoers/cvtsudoers_csv.c +++ b/plugins/sudoers/cvtsudoers_csv.c @@ -597,7 +597,7 @@ print_cmndspec_csv(FILE *fp, struct sudoers_parse_tree *parse_tree, || cs->role != next->role || cs->type != next->type #endif /* HAVE_SELINUX */ #ifdef HAVE_APPARMOR - || cs->apparmor_profile != next->apparmor_profile + || cs->apparmor_profile != next->apparmor_profile #endif /* HAVE_APPARMOR */ || cs->runchroot != next->runchroot || cs->runcwd != next->runcwd; diff --git a/plugins/sudoers/cvtsudoers_json.c b/plugins/sudoers/cvtsudoers_json.c index be5d55443f..ab686e1d74 100644 --- a/plugins/sudoers/cvtsudoers_json.c +++ b/plugins/sudoers/cvtsudoers_json.c @@ -759,13 +759,13 @@ print_cmndspec_json(struct json_container *jsonc, #endif /* HAVE_SELINUX */ #ifdef HAVE_APPARMOR - if (cs->apparmor_profile != NULL) { + if (cs->apparmor_profile != NULL) { sudo_json_open_array(jsonc, "AppArmor_Spec"); value.type = JSON_STRING; value.u.string = cs->apparmor_profile; sudo_json_add_value(jsonc, "apparmor_profile", &value); sudo_json_close_array(jsonc); - } + } #endif /* HAVE_APPARMOR */ #ifdef HAVE_PRIV_SET diff --git a/plugins/sudoers/cvtsudoers_ldif.c b/plugins/sudoers/cvtsudoers_ldif.c index b3ddf2cb24..9be75e504c 100644 --- a/plugins/sudoers/cvtsudoers_ldif.c +++ b/plugins/sudoers/cvtsudoers_ldif.c @@ -461,15 +461,15 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, #endif /* HAVE_SELINUX */ #ifdef HAVE_APPARMOR - /* Print AppArmor profile */ - if (cs->apparmor_profile != NULL) { - if (asprintf(&attr_val, "apparmor_profile=%s", cs->apparmor_profile) == -1) { - sudo_fatalx(U_("%s: %s"), __func__, - U_("unable to allocate memory")); - } - print_attribute_ldif(fp, "sudoOption", attr_val); - free(attr_val); + /* Print AppArmor profile */ + if (cs->apparmor_profile != NULL) { + if (asprintf(&attr_val, "apparmor_profile=%s", cs->apparmor_profile) == -1) { + sudo_fatalx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); } + print_attribute_ldif(fp, "sudoOption", attr_val); + free(attr_val); + } #endif /* HAVE_APPARMOR */ #ifdef HAVE_PRIV_SET diff --git a/plugins/sudoers/cvtsudoers_merge.c b/plugins/sudoers/cvtsudoers_merge.c index dde5b9b371..bd62cc068f 100644 --- a/plugins/sudoers/cvtsudoers_merge.c +++ b/plugins/sudoers/cvtsudoers_merge.c @@ -978,11 +978,11 @@ cmndspec_equivalent(struct cmndspec *cs1, struct cmndspec *cs2, bool check_negat #endif #ifdef HAVE_APPARMOR if (cs1->apparmor_profile != NULL && cs2->apparmor_profile != NULL) { - if (strcmp(cs1->apparmor_profile, cs2->apparmor_profile) != 0) - debug_return_bool(false); - } else if (cs1->apparmor_profile != cs2->apparmor_profile) { - debug_return_bool(false); - } + if (strcmp(cs1->apparmor_profile, cs2->apparmor_profile) != 0) + debug_return_bool(false); + } else if (cs1->apparmor_profile != cs2->apparmor_profile) { + debug_return_bool(false); + } #endif #ifdef HAVE_PRIV_SET if (cs1->privs != NULL && cs2->privs != NULL) { diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index 6372048c90..c24d6706cf 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -481,4 +481,4 @@ intercept_type dso trace apparmor_profile T_STR - "AppArmor profile to use in the new security context: %s" \ No newline at end of file + "AppArmor profile to use in the new security context: %s" diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index fcbe50dc26..1dffb57233 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -2139,8 +2139,8 @@ yyparse (void) parser_leak_remove(LEAK_PTR, (yyvsp[-2].options).type); #endif #ifdef HAVE_APPARMOR - cs->apparmor_profile = (yyvsp[-2].options).apparmor_profile; - parser_leak_remove(LEAK_PTR, (yyvsp[-2].options).apparmor_profile); + cs->apparmor_profile = (yyvsp[-2].options).apparmor_profile; + parser_leak_remove(LEAK_PTR, (yyvsp[-2].options).apparmor_profile); #endif #ifdef HAVE_PRIV_SET cs->privs = (yyvsp[-2].options).privs; @@ -2662,9 +2662,9 @@ yyparse (void) #line 864 "gram.y" { #ifdef HAVE_APPARMOR - parser_leak_remove(LEAK_PTR, (yyval.options).apparmor_profile); - free((yyval.options).apparmor_profile); - (yyval.options).apparmor_profile = (yyvsp[0].string); + parser_leak_remove(LEAK_PTR, (yyval.options).apparmor_profile); + free((yyval.options).apparmor_profile); + (yyval.options).apparmor_profile = (yyvsp[0].string); #endif } #line 2665 "gram.c" diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 055d36e1b7..2ac370918f 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -145,7 +145,7 @@ static void alias_error(const char *name, int errnum); %token CWD /* working directory for command */ %token TYPE /* SELinux type */ %token ROLE /* SELinux role */ -%token APPARMOR_PROFILE /* AppArmor profile */ +%token APPARMOR_PROFILE /* AppArmor profile */ %token PRIVS /* Solaris privileges */ %token LIMITPRIVS /* Solaris limit privileges */ %token CMND_TIMEOUT /* command timeout */ @@ -538,8 +538,8 @@ cmndspec : runasspec options cmndtag digcmnd { parser_leak_remove(LEAK_PTR, $2.type); #endif #ifdef HAVE_APPARMOR - cs->apparmor_profile = $2.apparmor_profile; - parser_leak_remove(LEAK_PTR, $2.apparmor_profile); + cs->apparmor_profile = $2.apparmor_profile; + parser_leak_remove(LEAK_PTR, $2.apparmor_profile); #endif #ifdef HAVE_PRIV_SET cs->privs = $2.privs; @@ -863,9 +863,9 @@ options : /* empty */ { } | options apparmor_profilespec { #ifdef HAVE_APPARMOR - parser_leak_remove(LEAK_PTR, $$.apparmor_profile); - free($$.apparmor_profile); - $$.apparmor_profile = $2; + parser_leak_remove(LEAK_PTR, $$.apparmor_profile); + free($$.apparmor_profile); + $$.apparmor_profile = $2; #endif } | options privsspec { diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index 5cb31cedb0..a03d8ac7ee 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -257,18 +257,18 @@ apply_cmndspec(struct cmndspec *cs) #ifdef HAVE_APPARMOR /* Set AppArmor profile, if specified */ if (cs->apparmor_profile != NULL) { - user_apparmor_profile = strdup(cs->apparmor_profile); - if (user_apparmor_profile == NULL) { - sudo_warnx(U_("%s: %s"), __func__, - U_("unable to allocate memory")); - debug_return_bool(false); - } + user_apparmor_profile = strdup(cs->apparmor_profile); + if (user_apparmor_profile == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } } else { - user_apparmor_profile = def_apparmor_profile; - def_apparmor_profile = NULL; + user_apparmor_profile = def_apparmor_profile; + def_apparmor_profile = NULL; } if (user_apparmor_profile != NULL) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "user_apparmor_profile -> %s", user_apparmor_profile); } #endif diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index e276faad02..cac32b6118 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -150,7 +150,7 @@ struct command_options { char *role, *type; /* SELinux role and type */ #endif #ifdef HAVE_APPARMOR - char *apparmor_profile; /* AppArmor profile */ + char *apparmor_profile; /* AppArmor profile */ #endif #ifdef HAVE_PRIV_SET char *privs, *limitprivs; /* Solaris privilege sets */ @@ -237,7 +237,7 @@ struct cmndspec { char *role, *type; /* SELinux role and type */ #endif #ifdef HAVE_APPARMOR - char *apparmor_profile; /* AppArmor profile */ + char *apparmor_profile; /* AppArmor profile */ #endif #ifdef HAVE_PRIV_SET char *privs, *limitprivs; /* Solaris privilege sets */ diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 2fcb8dd123..5a0852f4da 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -331,12 +331,12 @@ sudoers_policy_deserialize_info(void *v, struct defaults_list *defaults) #endif /* HAVE_SELINUX */ #ifdef HAVE_APPARMOR if (MATCHES(*cur, "apparmor_profile=")) { - CHECK(*cur, "apparmor_profile="); - free(user_apparmor_profile); - user_apparmor_profile = strdup(*cur + sizeof("apparmor_profile=") - 1); - if (user_apparmor_profile == NULL) + CHECK(*cur, "apparmor_profile="); + free(user_apparmor_profile); + user_apparmor_profile = strdup(*cur + sizeof("apparmor_profile=") - 1); + if (user_apparmor_profile == NULL) goto oom; - continue; + continue; } #endif /* HAVE_APPARMOR */ #ifdef HAVE_BSD_AUTH_H @@ -970,7 +970,7 @@ sudoers_policy_store_result(bool accepted, char *argv[], char *envp[], #endif /* HAVE_SELINUX */ #ifdef HAVE_APPARMOR if (user_apparmor_profile != NULL) { - if ((command_info[info_len++] = sudo_new_key_val("apparmor_profile", user_apparmor_profile)) == NULL) + if ((command_info[info_len++] = sudo_new_key_val("apparmor_profile", user_apparmor_profile)) == NULL) goto oom; } #endif /* HAVE_APPARMOR */ diff --git a/src/apparmor.c b/src/apparmor.c index b7bd1a28a1..cbfa2aa888 100644 --- a/src/apparmor.c +++ b/src/apparmor.c @@ -44,7 +44,8 @@ apparmor_is_enabled(void) FILE *fd; debug_decl(apparmor_is_enabled, SUDO_DEBUG_APPARMOR); - /* Check whether AppArmor is enabled by reading + /* + * Check whether AppArmor is enabled by reading * /sys/module/apparmor/parameters/enabled * * When this file exists and its contents are equal to "Y", AppArmor @@ -93,20 +94,21 @@ apparmor_prepare(const char *new_profile) goto done; } - if (mode == NULL) + if (mode == NULL) { sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: changing AppArmor profile: %s -> %s", __func__, - old_profile, new_profile ? new_profile : "?" - ); - else + "%s: changing AppArmor profile: %s -> %s", __func__, + old_profile, new_profile ? new_profile : "?"); + } else { sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: changing AppArmor profile: %s (%s) -> %s", __func__, - old_profile, mode, new_profile ? new_profile : "?" - ); + "%s: changing AppArmor profile: %s (%s) -> %s", __func__, + old_profile, mode, new_profile ? new_profile : "?"); + } done: - /* The profile string returned by aa_getcon must be free'd, while the - * mode string must _not_ be free'd */ + /* + * The profile string returned by aa_getcon must be free'd, while the + * mode string must _not_ be free'd. + */ if (old_profile != NULL) free(old_profile); From a5ac29219aaaa17260e4e15f24c01f9c15e9bc72 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 13 Jul 2022 13:06:21 -0600 Subject: [PATCH 035/186] intercept_check_policy: add oom label and fix approval failure case. If the approval plugin fails we need to set the state to POLICY_REJECT just like we do if the policy rejected the command. --- src/exec_intercept.c | 78 ++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 42 deletions(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index 741773ba5b..ea429e339a 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -341,7 +341,7 @@ update_command_info(char * const *old_command_info, const char *cmnd, /* * Perform a policy check for the given command. * While argv must be NULL-terminated, envp need not be. - * The status of the policy check is stored in closure->state. + * Sets closure->state to the result of the policy check before returning. * Return false on error, else true. */ bool @@ -353,7 +353,7 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, char **command_info_copy = NULL; char **user_env_out = NULL; char **run_argv = NULL; - bool ret = false; + bool ret = true; int i, rc; debug_decl(intercept_check_policy, SUDO_DEBUG_EXEC); @@ -371,10 +371,8 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, /* Rebuild command_info[] with runcwd and extract command. */ command_info_copy = update_command_info(command_info, NULL, runcwd ? runcwd : "unknown", &closure->command); - if (command_info_copy == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + if (command_info_copy == NULL) + goto oom; command_info = command_info_copy; closure->state = POLICY_ACCEPT; break; @@ -384,28 +382,24 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, audit_reject(policy_plugin.name, SUDO_POLICY_PLUGIN, closure->errstr, command_info); closure->state = POLICY_REJECT; - ret = true; goto done; default: - goto done; + /* Plugin error? */ + goto bad; } } else { /* No actual policy check, just logging child processes. */ sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "not checking policy, audit only"); closure->command = strdup(command); - if (closure->command == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + if (closure->command == NULL) + goto oom; /* Rebuild command_info[] with new command and runcwd. */ command_info = update_command_info(closure->details->info, command, runcwd ? runcwd : "unknown", NULL); - if (command_info == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + if (command_info == NULL) + goto oom; closure->state = POLICY_ACCEPT; run_argv = argv; } @@ -427,31 +421,23 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, for (i = 0; run_argv[i] != NULL; i++) continue; closure->run_argv = reallocarray(NULL, i + 1, sizeof(char *)); - if (closure->run_argv == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + if (closure->run_argv == NULL) + goto oom; for (i = 0; run_argv[i] != NULL; i++) { closure->run_argv[i] = strdup(run_argv[i]); - if (closure->run_argv[i] == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + if (closure->run_argv[i] == NULL) + goto oom; } closure->run_argv[i] = NULL; /* Make a copy of envp, which may not be NULL-terminated. */ closure->run_envp = reallocarray(NULL, envc + 1, sizeof(char *)); - if (closure->run_envp == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + if (closure->run_envp == NULL) + goto oom; for (i = 0; i < envc; i++) { closure->run_envp[i] = strdup(envp[i]); - if (closure->run_envp[i] == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + if (closure->run_envp[i] == NULL) + goto oom; } closure->run_envp[i] = NULL; @@ -460,24 +446,32 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, closure->run_argv, closure->run_envp); /* Call approval plugins and audit the result. */ - if (!approval_check(command_info, closure->run_argv, closure->run_envp)) - debug_return_int(0); + if (!approval_check(command_info, closure->run_argv, closure->run_envp)) { + if (closure->errstr == NULL) + closure->errstr = N_("approval plugin error"); + closure->state = POLICY_REJECT; + goto done; + } } /* Audit the event again for the sudo front-end. */ audit_accept("sudo", SUDO_FRONT_END, command_info, closure->run_argv, closure->run_envp); - ret = true; + goto done; + +oom: + closure->errstr = N_("unable to allocate memory"); + +bad: + if (closure->errstr == NULL) + closure->errstr = N_("policy plugin error"); + audit_error(policy_plugin.name, SUDO_POLICY_PLUGIN, closure->errstr, + command_info ? command_info : closure->details->info); + closure->state = POLICY_ERROR; + ret = false; done: - if (!ret) { - if (closure->errstr == NULL) - closure->errstr = N_("policy plugin error"); - audit_error(policy_plugin.name, SUDO_POLICY_PLUGIN, closure->errstr, - command_info ? command_info : closure->details->info); - closure->state = POLICY_ERROR; - } if (command_info_copy != NULL) { for (i = 0; command_info_copy[i] != NULL; i++) { free(command_info_copy[i]); From e5652fc65a54ab2d3f161c264254579f00699b00 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 14 Jul 2022 09:29:40 -0600 Subject: [PATCH 036/186] Linux execve(2) allows argv or envp to be NULL. Add checks to make sure we don't deference a NULL pointer. --- lib/util/sudo_debug.c | 10 +++++----- src/exec_intercept.c | 2 +- src/exec_preload.c | 5 +++++ src/exec_ptrace.c | 36 +++++++++++++++++++++++++++++------- src/sudo_intercept.c | 10 ++++++++++ src/sudo_intercept_common.c | 25 ++++++++++++++----------- 6 files changed, 64 insertions(+), 24 deletions(-) diff --git a/lib/util/sudo_debug.c b/lib/util/sudo_debug.c index d78536a0cb..a2ead5228a 100644 --- a/lib/util/sudo_debug.c +++ b/lib/util/sudo_debug.c @@ -831,7 +831,7 @@ sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *con size_t plen; debug_decl_func(sudo_debug_execve2); - if (sudo_debug_active_instance == -1) + if (sudo_debug_active_instance == -1 || path == NULL) goto out; /* Extract priority and subsystem from level. */ @@ -867,13 +867,13 @@ sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *con /* Alloc and build up buffer. */ plen = strlen(path); buflen = sizeof(EXEC_PREFIX) -1 + plen; - if (argv[0] != NULL) { + if (argv != NULL && argv[0] != NULL) { buflen += sizeof(" []") - 1; for (av = argv; *av; av++) buflen += strlen(*av) + 1; buflen--; } - if (log_envp) { + if (envp != NULL && log_envp) { buflen += sizeof(" []") - 1; for (av = envp; *av; av++) buflen += strlen(*av) + 1; @@ -892,7 +892,7 @@ sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *con cp += plen; /* Copy argv. */ - if (argv[0] != NULL) { + if (argv != NULL && argv[0] != NULL) { *cp++ = ' '; *cp++ = '['; for (av = argv; *av; av++) { @@ -904,7 +904,7 @@ sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *con cp[-1] = ']'; } - if (log_envp) { + if (envp != NULL && log_envp) { *cp++ = ' '; *cp++ = '['; for (av = envp; *av; av++) { diff --git a/src/exec_intercept.c b/src/exec_intercept.c index ea429e339a..6017d6481c 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -491,7 +491,7 @@ intercept_check_policy_req(PolicyCheckRequest *req, size_t n; debug_decl(intercept_check_policy_req, SUDO_DEBUG_EXEC); - if (req->command == NULL || req->n_argv == 0 || req->n_envp == 0) { + if (req->command == NULL || req->n_argv == 0) { closure->errstr = N_("invalid PolicyCheckRequest"); goto done; } diff --git a/src/exec_preload.c b/src/exec_preload.c index 4f04a01132..81e8653334 100644 --- a/src/exec_preload.c +++ b/src/exec_preload.c @@ -44,6 +44,7 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) char *const *ep; char **preload_ptr = NULL; char **intercept_ptr = NULL; + char *const empty[1] = { NULL }; bool fd_present = false; bool dso_present = false; # ifdef RTLD_PRELOAD_ENABLE_VAR @@ -75,6 +76,10 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) * XXX - need to support 32-bit and 64-bit variants */ + /* Treat a NULL envp as empty, thanks Linux. */ + if (envp == NULL) + envp = empty; + /* Determine max size for new envp. */ for (env_size = 0; envp[env_size] != NULL; env_size++) continue; diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index c6f9485014..4948679e8a 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -386,6 +386,12 @@ ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, size_t slen; debug_decl(ptrace_read_vec, SUDO_DEBUG_EXEC); + /* Treat a NULL vector as empty, thanks Linux. */ + if (addr == 0) { + vec[0] = NULL; + debug_return_size_t(0); + } + /* Fill in vector. */ for (;;) { # ifdef SECCOMP_AUDIT_ARCH_COMPAT @@ -443,6 +449,10 @@ ptrace_get_vec_len(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr) int len = 0; debug_decl(ptrace_get_vec_len, SUDO_DEBUG_EXEC); + /* Treat a NULL vector as empty, thanks Linux. */ + if (addr == 0) + debug_return_int(0); + for (;;) { # ifdef SECCOMP_AUDIT_ARCH_COMPAT if (next_word == (unsigned long)-1) { @@ -634,7 +644,7 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, argv_addr = get_sc_arg2(regs); envp_addr = get_sc_arg3(regs); - /* Count argv and envp */ + /* Count argv and envp. */ argc = ptrace_get_vec_len(pid, regs, argv_addr); envc = ptrace_get_vec_len(pid, regs, envp_addr); if (argc == -1 || envc == -1) @@ -643,6 +653,7 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, /* Reserve argv and envp at the start of argbuf so they are aligned. */ if ((argc + 1 + envc + 1) * sizeof(unsigned long) >= bufsize) { sudo_warnx("%s", U_("insufficient space for execve arguments")); + errno = ENOMEM; goto bad; } argv = (char **)argbuf; @@ -671,13 +682,18 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, bufsize -= len; /* Read the pathname. */ - len = ptrace_read_string(pid, path_addr, strtab, bufsize); - if (len == (size_t)-1) { - sudo_warn(U_("unable to read execve %s for process %d"), - "pathname", (int)pid); - goto bad; + if (path_addr == 0) { + /* execve(2) will fail with EINVAL */ + pathname = NULL; + } else { + len = ptrace_read_string(pid, path_addr, strtab, bufsize); + if (len == (size_t)-1) { + sudo_warn(U_("unable to read execve %s for process %d"), + "pathname", (int)pid); + goto bad; + } + pathname = strtab; } - pathname = strtab; sudo_debug_execve(SUDO_DEBUG_DIAG, pathname, argv, envp); @@ -1071,6 +1087,12 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) debug_return_bool(false); } + /* Must have a pathname. */ + if (pathname == NULL) { + ptrace_fail_syscall(pid, ®s, EINVAL); + goto done; + } + /* * Short-circuit the policy check if the command doesn't exist. * Otherwise, both sudo and the shell will report the error. diff --git a/src/sudo_intercept.c b/src/sudo_intercept.c index 97c6128929..48ecc9bc99 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -135,6 +135,11 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], void *fn = NULL; debug_decl(exec_wrapper, SUDO_DEBUG_EXEC); + if (cmnd == NULL) { + errno = EINVAL; + debug_return_int(-1); + } + /* Only check PATH for the command for execlp/execvp/execvpe. */ if (strchr(cmnd, '/') == NULL) { if (!is_execvp) { @@ -201,6 +206,11 @@ execl_wrapper(int type, const char *name, const char *arg, va_list ap) va_list ap2; debug_decl(execl_wrapper, SUDO_DEBUG_EXEC); + if (name == NULL || arg == NULL) { + errno = EINVAL; + debug_return_int(-1); + } + va_copy(ap2, ap); while (va_arg(ap2, char *) != NULL) argc++; diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index 1023939526..a81a3c880f 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -297,6 +297,7 @@ send_policy_check_req(int sock, const char *cmnd, char * const argv[], InterceptRequest msg = INTERCEPT_REQUEST__INIT; PolicyCheckRequest req = POLICY_CHECK_REQUEST__INIT; char cwdbuf[PATH_MAX]; + char *empty[1] = { NULL }; uint8_t *buf = NULL; bool ret = false; uint32_t msg_len; @@ -313,14 +314,14 @@ send_policy_check_req(int sock, const char *cmnd, char * const argv[], /* Setup policy check request. */ req.intercept_fd = sock; req.command = (char *)cmnd; - req.argv = (char **)argv; - for (len = 0; argv[len] != NULL; len++) - continue; - req.n_argv = len; - req.envp = (char **)envp; - for (len = 0; envp[len] != NULL; len++) - continue; - req.n_envp = len; + req.argv = argv ? (char **)argv : empty; + req.n_argv = 0; + while (req.argv[req.n_argv] != NULL) + req.n_argv++; + req.envp = envp ? (char **)envp : empty; + req.n_envp = 0; + while (req.envp[req.n_envp] != NULL) + req.n_envp++; if (getcwd(cwdbuf, sizeof(cwdbuf)) != NULL) { req.cwd = cwdbuf; } @@ -409,9 +410,11 @@ command_allowed(const char *cmnd, char * const argv[], if (sudo_debug_needed(SUDO_DEBUG_INFO)) { sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "req_command: %s", cmnd); - for (idx = 0; argv[idx] != NULL; idx++) { - sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, - "req_argv[%zu]: %s", idx, argv[idx]); + if (argv != NULL) { + for (idx = 0; argv[idx] != NULL; idx++) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "req_argv[%zu]: %s", idx, argv[idx]); + } } } From 75e97fd5b29151dc25af0a2ce234d8f1936e640e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 14 Jul 2022 09:49:00 -0600 Subject: [PATCH 037/186] Make sure the plugin provides a command, argv and envp. --- src/exec_intercept.c | 51 ++++++++++++++++++++++++++++---------------- src/sudo.c | 13 +++++++++++ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index 6017d6481c..c9d76f8aec 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -271,7 +271,7 @@ prepare_listener(struct intercept_closure *closure) */ static char ** update_command_info(char * const *old_command_info, const char *cmnd, - const char *runcwd, char **cmnd_out) + const char *runcwd, char **cmnd_out, struct intercept_closure *closure) { char **command_info; char * const *oci; @@ -281,7 +281,7 @@ update_command_info(char * const *old_command_info, const char *cmnd, /* Rebuild command_info[] with new command and add a runcwd. */ for (n = 0; old_command_info[n] != NULL; n++) continue; - command_info = reallocarray(NULL, n + 2, sizeof(char *)); + command_info = reallocarray(NULL, n + 3, sizeof(char *)); if (command_info == NULL) { goto bad; } @@ -290,19 +290,12 @@ update_command_info(char * const *old_command_info, const char *cmnd, switch (*cp) { case 'c': if (strncmp(cp, "command=", sizeof("command=") - 1) == 0) { - if (cmnd != NULL) { - command_info[n] = sudo_new_key_val("command", cmnd); - if (command_info[n] == NULL) { - goto bad; - } - n++; - continue; - } else if (cmnd_out != NULL) { - *cmnd_out = strdup(cp + sizeof("command=") - 1); - if (*cmnd_out == NULL) { - goto bad; - } + if (cmnd == NULL) { + /* No new command specified, use old value. */ + cmnd = cp + sizeof("command=") - 1; } + /* Filled in at the end. */ + continue; } break; case 'r': @@ -318,16 +311,38 @@ update_command_info(char * const *old_command_info, const char *cmnd, } n++; } + + /* Append new command. */ + if (cmnd == NULL) { + closure->errstr = N_("command not set by the security policy"); + goto bad; + } + command_info[n] = sudo_new_key_val("command", cmnd); + if (command_info[n] == NULL) { + goto oom; + } + n++; + /* Append actual runcwd. */ - command_info[n] = sudo_new_key_val("runcwd", runcwd); + command_info[n] = sudo_new_key_val("runcwd", runcwd ? runcwd : "unknown"); if (command_info[n] == NULL) { - goto bad; + goto oom; } n++; command_info[n] = NULL; + if (cmnd_out != NULL) { + *cmnd_out = strdup(cmnd); + if (*cmnd_out == NULL) { + goto oom; + } + } debug_return_ptr(command_info); + +oom: + closure->errstr = N_("unable to allocate memory"); + bad: if (command_info != NULL) { for (n = 0; command_info[n] != NULL; n++) { @@ -370,7 +385,7 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, case 1: /* Rebuild command_info[] with runcwd and extract command. */ command_info_copy = update_command_info(command_info, NULL, - runcwd ? runcwd : "unknown", &closure->command); + runcwd, &closure->command, closure); if (command_info_copy == NULL) goto oom; command_info = command_info_copy; @@ -397,7 +412,7 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, /* Rebuild command_info[] with new command and runcwd. */ command_info = update_command_info(closure->details->info, - command, runcwd ? runcwd : "unknown", NULL); + command, runcwd, NULL, closure); if (command_info == NULL) goto oom; closure->state = POLICY_ACCEPT; diff --git a/src/sudo.c b/src/sudo.c index 5bf4ad9c0a..0121586e34 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1021,6 +1021,19 @@ run_command(struct command_details *details) cstat.type = CMD_INVALID; cstat.val = 0; + if (details->command == NULL) { + sudo_warnx(U_("command not set by the security policy")); + debug_return_int(status); + } + if (details->argv == NULL) { + sudo_warnx(U_("argv not set by the security policy")); + debug_return_int(status); + } + if (details->envp == NULL) { + sudo_warnx(U_("envp not set by the security policy")); + debug_return_int(status); + } + sudo_execute(details, &cstat); switch (cstat.type) { From 7f9ea23e7447b8e1308fc282cd13b6cf5d39d3c4 Mon Sep 17 00:00:00 2001 From: William Brown Date: Mon, 25 Jul 2022 15:21:39 +1000 Subject: [PATCH 038/186] Update sudoUser to be utf8 in ldap schemas In most unix-style LDAP servers, uid is a utf8 string defined by OID 1.3.6.1.4.1.1466.115.121.1.15. However, sudoUser was defined as an IA5 String (OID 1.3.6.1.4.1.1466.115.121.1.26) which meant that sudoUser could only represent a subset of possible values. In some cases when using sudoers.ldap, the uid from the machine which was utf8 was fed back into sudo which would then issue a search for sudoUsers. If this uid contained utf8 characters, the ldap server would refuse to match into sudoUsers because these were limited to IA5. This is a safe-forward upgrade as IA5 is a subset of UTF8 meaning that this change will not impact existing deployments and their rules. --- docs/schema.OpenLDAP | 14 +++++++------- docs/schema.iPlanet | 6 +++--- docs/schema.olcSudo | 14 +++++++------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/schema.OpenLDAP b/docs/schema.OpenLDAP index e1d525f842..451c5250a6 100644 --- a/docs/schema.OpenLDAP +++ b/docs/schema.OpenLDAP @@ -7,9 +7,9 @@ attributetype ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SUBSTR caseExactSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' @@ -39,14 +39,14 @@ attributetype ( 1.3.6.1.4.1.15953.9.1.5 attributetype ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' diff --git a/docs/schema.iPlanet b/docs/schema.iPlanet index e512864369..56ad02bc0a 100644 --- a/docs/schema.iPlanet +++ b/docs/schema.iPlanet @@ -1,11 +1,11 @@ dn: cn=schema -attributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'SUDO' ) +attributeTypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' EQUALITY caseExactMatch SUBSTR caseExactSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'SUDO' ) attributeTypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' DESC 'Host(s) who may run sudo' EQUALITY caseExactIA5Match SUBSTR caseExactIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'SUDO' ) attributeTypes: ( 1.3.6.1.4.1.15953.9.1.3 NAME 'sudoCommand' DESC 'Command(s) to be executed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'SUDO' ) attributeTypes: ( 1.3.6.1.4.1.15953.9.1.4 NAME 'sudoRunAs' DESC 'User(s) impersonated by sudo (deprecated)' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'SUDO' ) attributeTypes: ( 1.3.6.1.4.1.15953.9.1.5 NAME 'sudoOption' DESC 'Options(s) followed by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'SUDO' ) -attributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'SUDO' ) -attributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'SUDO' ) +attributeTypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'SUDO' ) +attributeTypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' EQUALITY caseExactMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'SUDO' ) attributeTypes: ( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' DESC 'Start of time interval for which the entry is valid' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) attributeTypes: ( 1.3.6.1.4.1.15953.9.1.9 NAME 'sudoNotAfter' DESC 'End of time interval for which the entry is valid' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) attributeTypes: ( 1.3.6.1.4.1.15953.9.1.10 NAME 'sudoOrder' DESC 'an integer to order the sudoRole entries' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) diff --git a/docs/schema.olcSudo b/docs/schema.olcSudo index 8748dfc2a0..8948ca4ae6 100644 --- a/docs/schema.olcSudo +++ b/docs/schema.olcSudo @@ -9,9 +9,9 @@ cn: sudoschema olcattributetypes: ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SUBSTR caseExactSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) # olcattributetypes: ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' @@ -41,14 +41,14 @@ olcattributetypes: ( 1.3.6.1.4.1.15953.9.1.5 olcattributetypes: ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) # olcattributetypes: ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) # olcattributetypes: ( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' From 308a6c31d94ae42905568fb6f77c02ee67f1cd76 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 25 Jul 2022 11:02:47 -0600 Subject: [PATCH 039/186] Sync with schema.OpenLDAP for user/group utf8 support. --- docs/sudoers.ldap.man.in | 34 +++++++++++++++++----------------- docs/sudoers.ldap.mdoc.in | 34 +++++++++++++++++----------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/docs/sudoers.ldap.man.in b/docs/sudoers.ldap.man.in index 259e29e932..3e3bcba880 100644 --- a/docs/sudoers.ldap.man.in +++ b/docs/sudoers.ldap.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDOERS.LDAP" "@mansectform@" "February 16, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS.LDAP" "@mansectform@" "July 25, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -827,10 +827,10 @@ attribute: .sp .RS 10n attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' - DESC 'Netgroup triple' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + DESC 'Netgroup triple' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) .RE .fi .TP 6n @@ -1610,9 +1610,9 @@ file instead. attributetype ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SUBSTR caseExactSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' @@ -1642,14 +1642,14 @@ attributetype ( 1.3.6.1.4.1.15953.9.1.5 attributetype ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' @@ -1666,11 +1666,11 @@ attributetype ( 1.3.6.1.4.1.15953.9.1.9 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) attributetype ( 1.3.6.1.4.1.15953.9.1.10 - NAME 'sudoOrder' - DESC 'an integer to order the sudoRole entries' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + NAME 'sudoOrder' + DESC 'an integer to order the sudoRole entries' + EQUALITY integerMatch + ORDERING integerOrderingMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' diff --git a/docs/sudoers.ldap.mdoc.in b/docs/sudoers.ldap.mdoc.in index e967f06c39..ec265f6919 100644 --- a/docs/sudoers.ldap.mdoc.in +++ b/docs/sudoers.ldap.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd February 16, 2022 +.Dd July 25, 2022 .Dt SUDOERS.LDAP @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -776,10 +776,10 @@ requires the following change to the attribute: .Bd -literal -offset 4n attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' - DESC 'Netgroup triple' - EQUALITY caseIgnoreIA5Match - SUBSTR caseIgnoreIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + DESC 'Netgroup triple' + EQUALITY caseIgnoreIA5Match + SUBSTR caseIgnoreIA5SubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) .Ed .It Sy NETGROUP_SEARCH_FILTER Ar ldap_filter An LDAP filter which is used to restrict the set of records returned @@ -1474,9 +1474,9 @@ file instead. attributetype ( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser' DESC 'User(s) who may run sudo' - EQUALITY caseExactIA5Match - SUBSTR caseExactIA5SubstringsMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SUBSTR caseExactSubstringsMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.2 NAME 'sudoHost' @@ -1506,14 +1506,14 @@ attributetype ( 1.3.6.1.4.1.15953.9.1.5 attributetype ( 1.3.6.1.4.1.15953.9.1.6 NAME 'sudoRunAsUser' DESC 'User(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.7 NAME 'sudoRunAsGroup' DESC 'Group(s) impersonated by sudo' - EQUALITY caseExactIA5Match - SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) + EQUALITY caseExactMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) attributetype ( 1.3.6.1.4.1.15953.9.1.8 NAME 'sudoNotBefore' @@ -1530,11 +1530,11 @@ attributetype ( 1.3.6.1.4.1.15953.9.1.9 SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) attributetype ( 1.3.6.1.4.1.15953.9.1.10 - NAME 'sudoOrder' - DESC 'an integer to order the sudoRole entries' - EQUALITY integerMatch - ORDERING integerOrderingMatch - SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) + NAME 'sudoOrder' + DESC 'an integer to order the sudoRole entries' + EQUALITY integerMatch + ORDERING integerOrderingMatch + SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL DESC 'Sudoer Entries' From 15fd62f0d5e30f537e444aa4251137f671bdc27c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 25 Jul 2022 08:51:49 -0600 Subject: [PATCH 040/186] resolve_path: skip non-regular files --- src/sudo_intercept.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/sudo_intercept.c b/src/sudo_intercept.c index 48ecc9bc99..2e11faf3e7 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -104,6 +104,8 @@ resolve_path(const char *cmnd, char *out_cmnd, size_t out_size) } if (stat(path, &sb) == 0) { + if (!S_ISREG(sb.st_mode)) + continue; if (strlcpy(out_cmnd, path, out_size) >= out_size) { errval = ENAMETOOLONG; break; @@ -150,6 +152,17 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], debug_return_int(-1); } cmnd = cmnd_buf; + } else { + struct stat sb; + + /* Absolute or relative path name. */ + if (stat(cmnd, &sb) == -1) { + /* Leave errno unchanged. */ + debug_return_int(-1); + } else if (!S_ISREG(sb.st_mode)) { + errno = EACCES; + debug_return_int(-1); + } } # if defined(HAVE___INTERPOSE) From fccf3c9c566f3a2e1752b827e04d3a21cd15d22f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 25 Jul 2022 15:08:11 -0600 Subject: [PATCH 041/186] Add sudo_mmap_{alloc,allocarrary,strdup,free} functions. These allocate memory via mmap anonymous regions and store the mapped size immediately before the returned pointer as an unsigned long. They are intended to be used in cases where malloc(3) and free(3) are unsuitable due to concerns about corrupting global state in multi-threaded programs or signal handlers. --- MANIFEST | 1 + include/sudo_util.h | 10 +++ lib/util/Makefile.in | 18 ++++-- lib/util/mmap_alloc.c | 137 ++++++++++++++++++++++++++++++++++++++++++ lib/util/util.exp.in | 4 ++ 5 files changed, 166 insertions(+), 4 deletions(-) create mode 100644 lib/util/mmap_alloc.c diff --git a/MANIFEST b/MANIFEST index 6292985b87..22e2348df7 100644 --- a/MANIFEST +++ b/MANIFEST @@ -251,6 +251,7 @@ lib/util/mkdirat.c lib/util/mksiglist.c lib/util/mksigname.c lib/util/mktemp.c +lib/util/mmap_alloc.c lib/util/nanosleep.c lib/util/openat.c lib/util/parseln.c diff --git a/include/sudo_util.h b/include/sudo_util.h index 403a7fe49d..65996438b9 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -248,6 +248,16 @@ sudo_dso_public const char *sudo_logpri2str_v1(int num); sudo_dso_public bool sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet); #define sudo_mkdir_parents(_a, _b, _c, _d, _e) sudo_mkdir_parents_v1((_a), (_b), (_c), (_d), (_e)) +/* mmap_alloc.c */ +sudo_dso_public void *sudo_mmap_alloc_v1(size_t size); +#define sudo_mmap_alloc(_a) sudo_mmap_alloc_v1(_a) +sudo_dso_public void *sudo_mmap_allocarray_v1(size_t count, size_t size); +#define sudo_mmap_allocarray(_a, _b) sudo_mmap_allocarray_v1((_a), (_b)) +sudo_dso_public void sudo_mmap_free_v1(void *ptr); +#define sudo_mmap_free(_a) sudo_mmap_free_v1(_a) +sudo_dso_public char *sudo_mmap_strdup_v1(const char *str); +#define sudo_mmap_strdup(_a) sudo_mmap_strdup_v1(_a) + /* parseln.c */ sudo_dso_public ssize_t sudo_parseln_v1(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp); sudo_dso_public ssize_t sudo_parseln_v2(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp, int flags); diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 452f2f07b9..67177febd2 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -143,10 +143,10 @@ SHELL = @SHELL@ LTOBJS = basename.lo @DIGEST@ event.lo fatal.lo key_val.lo gethostname.lo \ gettime.lo getgrouplist.lo gidlist.lo json.lo lbuf.lo locking.lo \ - logfac.lo logpri.lo mkdir_parents.lo parseln.lo progname.lo rcstr.lo \ - regex.lo roundup.lo secure_path.lo setgroups.lo strsplit.lo \ - strtobool.lo strtoid.lo strtomode.lo strtonum.lo sudo_conf.lo \ - sudo_debug.lo sudo_dso.lo term.lo ttyname_dev.lo \ + logfac.lo logpri.lo mkdir_parents.lo mmap_alloc.lo parseln.lo \ + progname.lo rcstr.lo regex.lo roundup.lo secure_path.lo setgroups.lo \ + strsplit.lo strtobool.lo strtoid.lo strtomode.lo strtonum.lo \ + sudo_conf.lo sudo_debug.lo sudo_dso.lo term.lo ttyname_dev.lo \ ttysize.lo uuid.lo @COMMON_OBJS@ @LTLIBOBJS@ IOBJS = $(LTOBJS:.lo=.i) @@ -1086,6 +1086,16 @@ mktemp_test.i: $(srcdir)/regress/mktemp/mktemp_test.c \ $(CC) -E -o $@ $(CPPFLAGS) $< mktemp_test.plog: mktemp_test.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/mktemp/mktemp_test.c --i-file $< --output-file $@ +mmap_alloc.lo: $(srcdir)/mmap_alloc.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/mmap_alloc.c +mmap_alloc.i: $(srcdir)/mmap_alloc.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +mmap_alloc.plog: mmap_alloc.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/mmap_alloc.c --i-file $< --output-file $@ nanosleep.lo: $(srcdir)/nanosleep.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h diff --git a/lib/util/mmap_alloc.c b/lib/util/mmap_alloc.c new file mode 100644 index 0000000000..9e7bf84d61 --- /dev/null +++ b/lib/util/mmap_alloc.c @@ -0,0 +1,137 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2008 Otto Moerbeek + * Copyright (c) 2022 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 +#if defined(HAVE_STDINT_H) +# include +#elif defined(HAVE_INTTYPES_H) +# include +#endif + +#include "sudo_compat.h" +#include "sudo_util.h" + +#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) +# define MAP_ANON MAP_ANONYMOUS +#endif + +#ifndef MAP_FAILED +# define MAP_FAILED ((void *)-1) +#endif + +/* + * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX + * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW + */ +#define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4)) + +/* + * Allocate "size" bytes via mmap(). + * Space is allocated to store the size for later unmapping. + */ +void * +sudo_mmap_alloc_v1(size_t size) +{ + void *ptr; + unsigned long *ulp; +#ifndef MAP_ANON + int fd; + + /* SunOS-style mmap allocation using /dev/zero. */ + if ((fd = open("/dev/zero", O_RDWR)) == -1) + return NULL; + size += sizeof(unsigned long); + ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); + close(fd); +#else + size += sizeof(unsigned long); + ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); +#endif + if (ptr == MAP_FAILED) { + errno = ENOMEM; + return NULL; + } + + /* Store size before the actual data. */ + ulp = (unsigned long *)ptr; + ulp[0] = size; + return (void *)&ulp[1]; +} + +/* + * Allocate "nmemb" elements of "size" bytes via mmap(). + * If overflow would occur, errno is set to ENOMEM and + * NULL is returned. + */ +void * +sudo_mmap_allocarray_v1(size_t nmemb, size_t size) +{ + if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) && + nmemb > 0 && SIZE_MAX / nmemb < size) { + errno = ENOMEM; + return NULL; + } + return sudo_mmap_alloc_v1(nmemb * size); +} + +/* + * Make a copy of "str" via mmap() and return it. + */ +char * +sudo_mmap_strdup_v1(const char *str) +{ + size_t len = strlen(str); + char *newstr; + + if (len == SIZE_MAX) { + errno = ENOMEM; + return NULL; + } + newstr = sudo_mmap_alloc_v1(len + 1); + memcpy(newstr, str, len); + newstr[len] = '\0'; + + return newstr; +} + +/* + * Free "ptr" allocated by sudo_mmap_alloc(). + * The allocated size is stored (as unsigned long) in ptr[-1]. + */ +void +sudo_mmap_free_v1(void *ptr) +{ + if (ptr != NULL) { + unsigned long *ulp = ptr; + const unsigned long size = ulp[-1]; + + munmap((void *)&ulp[-1], size); + } +} diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index 48dcfb4af0..b289174e2f 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -110,6 +110,10 @@ sudo_lock_region_v1 sudo_logfac2str_v1 sudo_logpri2str_v1 sudo_mkdir_parents_v1 +sudo_mmap_alloc_v1 +sudo_mmap_allocarray_v1 +sudo_mmap_free_v1 +sudo_mmap_strdup_v1 sudo_new_key_val_v1 sudo_parse_gids_v1 sudo_parseln_v1 From e43c964c43347e1dd8ac87ded15ca681b53eecbc Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 25 Jul 2022 16:05:10 -0600 Subject: [PATCH 042/186] Use sudo_mmap_alloc functions instead of private versions. We no longer need to keep track of the allocation size. --- lib/util/snprintf.c | 70 +++++++++------------------------------------ 1 file changed, 13 insertions(+), 57 deletions(-) diff --git a/lib/util/snprintf.c b/lib/util/snprintf.c index f51742275a..6e3f1fcf9c 100644 --- a/lib/util/snprintf.c +++ b/lib/util/snprintf.c @@ -47,8 +47,6 @@ !defined(HAVE_VASPRINTF) || !defined(HAVE_ASPRINTF) || \ defined(PREFER_PORTABLE_SNPRINTF) -#include - #include #ifdef HAVE_NL_LANGINFO # include @@ -71,6 +69,7 @@ #include #include "sudo_compat.h" +#include "sudo_util.h" /* Avoid printf format attacks by ignoring the %n escape. */ #define NO_PRINTF_PERCENT_N @@ -107,51 +106,10 @@ union arg { #endif }; -static int __find_arguments(const char *fmt0, va_list ap, union arg **argtable, - size_t *argtablesiz); +static int __find_arguments(const char *fmt0, va_list ap, union arg **argtable); static int __grow_type_table(unsigned char **typetable, int *tablesize); static int xxxprintf(char **, size_t, int, const char *, va_list); -#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) -# define MAP_ANON MAP_ANONYMOUS -#endif - -#ifndef MAP_FAILED -# define MAP_FAILED ((void *) -1) -#endif - -/* - * Allocate "size" bytes via mmap. - */ -static void * -mmap_alloc(size_t size) -{ - void *p; -#ifndef MAP_ANON - int fd; - - if ((fd = open("/dev/zero", O_RDWR)) == -1) - return NULL; - p = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); - close(fd); -#else - p = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); -#endif - if (p == MAP_FAILED) - return NULL; - return p; -} - -/* - * Unmap "size" bytes of the ptr. - */ -static void -mmap_free(void *ptr, size_t size) -{ - if (ptr != NULL) - munmap(ptr, size); -} - #ifdef PRINTF_WIDE_CHAR /* * Convert a wide character string argument for the %ls format to a multibyte @@ -330,7 +288,6 @@ xxxprintf(char **strp, size_t strsize, int alloc, const char *fmt0, va_list ap) char *estr; /* pointer to last char in str */ union arg *argtable; /* args, built due to positional arg */ union arg statargtable[STATIC_ARG_TBL_SIZE]; - size_t argtablesiz; int nextarg; /* 1-based argument index */ va_list orgap; /* original argument pointer */ #ifdef PRINTF_WIDE_CHAR @@ -442,7 +399,7 @@ xxxprintf(char **strp, size_t strsize, int alloc, const char *fmt0, va_list ap) int hold = nextarg; \ if (argtable == NULL) { \ argtable = statargtable; \ - __find_arguments(fmt0, orgap, &argtable, &argtablesiz); \ + __find_arguments(fmt0, orgap, &argtable); \ } \ nextarg = n2; \ val = GETARG(int); \ @@ -562,7 +519,7 @@ reswitch: switch (ch) { if (argtable == NULL) { argtable = statargtable; __find_arguments(fmt0, orgap, - &argtable, &argtablesiz); + &argtable); } goto rflag; } @@ -588,7 +545,7 @@ reswitch: switch (ch) { if (argtable == NULL) { argtable = statargtable; __find_arguments(fmt0, orgap, - &argtable, &argtablesiz); + &argtable); } goto rflag; } @@ -1076,7 +1033,7 @@ number: if ((dprec = prec) >= 0) __freedtoa(dtoaresult); #endif if (argtable != NULL && argtable != statargtable) { - mmap_free(argtable, argtablesiz); + sudo_mmap_free(argtable); argtable = NULL; } return ret; @@ -1124,8 +1081,7 @@ number: if ((dprec = prec) >= 0) * problematic since we have nested functions..) */ static int -__find_arguments(const char *fmt0, va_list ap, union arg **argtable, - size_t *argtablesiz) +__find_arguments(const char *fmt0, va_list ap, union arg **argtable) { char *fmt; /* format string */ int ch; /* character from fmt */ @@ -1354,8 +1310,8 @@ reswitch: switch (ch) { * Build the argument table. */ if (tablemax >= STATIC_ARG_TBL_SIZE) { - *argtablesiz = sizeof(union arg) * (tablemax + 1); - *argtable = mmap_alloc(*argtablesiz); + *argtable = sudo_mmap_allocarray(tablemax + 1, + sizeof(union arg)); if (*argtable == NULL) return -1; } @@ -1453,7 +1409,7 @@ reswitch: switch (ch) { finish: if (typetable != NULL && typetable != stattypetable) { - mmap_free(typetable, *argtablesiz); + sudo_mmap_free(typetable); typetable = NULL; } return ret; @@ -1472,16 +1428,16 @@ __grow_type_table(unsigned char **typetable, int *tablesize) newsize = sysconf(_SC_PAGESIZE); if (*tablesize == STATIC_ARG_TBL_SIZE) { - *typetable = mmap_alloc(newsize); + *typetable = sudo_mmap_alloc(newsize); if (*typetable == NULL) return -1; memcpy(*typetable, oldtable, *tablesize); } else { - unsigned char *new = mmap_alloc(newsize); + unsigned char *new = sudo_mmap_alloc(newsize); if (new == NULL) return -1; memmove(new, *typetable, *tablesize); - mmap_free(*typetable, *tablesize); + sudo_mmap_free(*typetable); *typetable = new; } memset(*typetable + *tablesize, T_UNUSED, (newsize - *tablesize)); From 226a6cd754fcf4f77e117402f9d163d2cb210b19 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 25 Jul 2022 16:05:11 -0600 Subject: [PATCH 043/186] Use sudo_mmap_alloc functions in DSO-based intercept code. --- src/exec_preload.c | 201 +++++++++++++++++++++++++++++++----- src/sudo_exec.h | 1 + src/sudo_intercept.c | 21 ++-- src/sudo_intercept_common.c | 28 ++--- 4 files changed, 202 insertions(+), 49 deletions(-) diff --git a/src/exec_preload.c b/src/exec_preload.c index 81e8653334..2e9dc2ef73 100644 --- a/src/exec_preload.c +++ b/src/exec_preload.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2021 Todd C. Miller + * Copyright (c) 2009-2022 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 @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -31,13 +32,145 @@ #include "sudo.h" #include "sudo_exec.h" +#include "sudo_util.h" #ifdef RTLD_PRELOAD_VAR +typedef void * (*sudo_alloc_fn_t)(size_t, size_t); +typedef void (*sudo_free_fn_t)(void *); + +static void * +sudo_allocarray(size_t nmemb, size_t size) +{ + return reallocarray(NULL, nmemb, size); +} + +/* + * Allocate space for the string described by fmt and return it, + * or NULL on error. + * Currently only supports %%, %c, %d, and %s escapes. + */ +static char * +fmtstr(sudo_alloc_fn_t alloc_fn, sudo_free_fn_t free_fn, const char *ofmt, ...) +{ + char *cp, *cur, *newstr = NULL; + size_t len, size = 1; + const char *fmt; + va_list ap; + debug_decl(fmtstr, SUDO_DEBUG_UTIL); + + /* Determine size. */ + va_start(ap, ofmt); + for (fmt = ofmt; *fmt != '\0'; ) { + if (fmt[0] == '%') { + switch (fmt[1]) { + case '%': + case 'c': + size++; + fmt += 2; + continue; + case 's': + cp = va_arg(ap, char *); + size += strlen(cp ? cp : "(NULL)"); + fmt += 2; + continue; + case 'd': { + char numbuf[(((sizeof(int) * 8) + 2) / 3) + 2]; + len = snprintf(numbuf, sizeof(numbuf), "%d", va_arg(ap, int)); + if (len >= sizeof(numbuf)) { + goto oflow; + } + size += len; + fmt += 2; + continue; + } + default: + /* Treat as literal. */ + break; + } + } + size++; + fmt++; + } + va_end(ap); + + newstr = alloc_fn(1, size); + if (newstr == NULL) + debug_return_str(NULL); + + /* Format/copy data. */ + cur = newstr; + va_start(ap, ofmt); + for (fmt = ofmt; *fmt != '\0'; ) { + if (fmt[0] == '%') { + switch (fmt[1]) { + case '%': + if (size < 2) { + goto oflow; + } + *cur++ = '%'; + size--; + fmt += 2; + continue; + case 'c': + if (size < 2) { + goto oflow; + } + *cur++ = va_arg(ap, int); + size--; + fmt += 2; + continue; + case 's': + cp = va_arg(ap, char *); + len = strlcpy(cur, cp ? cp : "(NULL)", size); + if (len >= size) { + goto oflow; + } + cur += len; + size -= len; + fmt += 2; + continue; + case 'd': + len = snprintf(cur, size, "%d", va_arg(ap, int)); + if (len >= size) { + goto oflow; + } + cur += len; + size -= len; + fmt += 2; + continue; + default: + /* Treat as literal. */ + break; + } + } + if (size < 2) { + goto oflow; + } + *cur++ = *fmt++; + size++; + } + va_end(ap); + + if (size < 1) { + goto oflow; + } + *cur = '\0'; + + debug_return_str(newstr); + +oflow: + /* We pre-allocate enough space, so this should never happen. */ + free_fn(newstr); + sudo_warnx(U_("internal error, %s overflow"), __func__); + debug_return_str(NULL); +} + /* * Add a DSO file to LD_PRELOAD or the system equivalent. */ -char ** -sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) +static char ** +sudo_preload_dso_alloc(char *const envp[], const char *dso_file, + int intercept_fd, sudo_alloc_fn_t alloc_fn, sudo_free_fn_t free_fn) { char *preload = NULL; char **nep, **nenvp = NULL; @@ -56,17 +189,17 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) char *dso_buf = NULL; # endif size_t env_size; - int len; debug_decl(sudo_preload_dso, SUDO_DEBUG_UTIL); # ifdef _PATH_ASAN_LIB /* * The address sanitizer DSO needs to be first in the list. */ - len = asprintf(&dso_buf, "%s%c%s", _PATH_ASAN_LIB, RTLD_PRELOAD_DELIM, - dso_file); - if (len == -1) - goto oom; + dso_buf = fmtstr(alloc_fn, free_fn, "%s%c%s", _PATH_ASAN_LIB, + RTLD_PRELOAD_DELIM, dso_file); + if (dso_buf == NULL) { + goto oom; + } dso_file = dso_buf; # endif @@ -90,11 +223,9 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) env_size += 2; /* dso_file + terminating NULL */ /* Allocate new envp. */ - nenvp = reallocarray(NULL, env_size, sizeof(*nenvp)); - if (nenvp == NULL) { - sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return_ptr(NULL); - } + nenvp = alloc_fn(env_size, sizeof(*nenvp)); + if (nenvp == NULL) + goto oom; /* * Shallow copy envp, with special handling for RTLD_PRELOAD_VAR, @@ -156,13 +287,14 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) if (!dso_present) { if (preload_ptr == NULL) { # ifdef RTLD_PRELOAD_DEFAULT - len = asprintf(&preload, "%s=%s%c%s", RTLD_PRELOAD_VAR, dso_file, - RTLD_PRELOAD_DELIM, RTLD_PRELOAD_DEFAULT); - if (len == -1) { + preload = fmtstr(alloc_fn, free_fn, "%s=%s%c%s", RTLD_PRELOAD_VAR, + dso_file, RTLD_PRELOAD_DELIM, RTLD_PRELOAD_DEFAULT); + if (preload == NULL) { goto oom; } # else - preload = sudo_new_key_val(RTLD_PRELOAD_VAR, dso_file); + preload = fmtstr(alloc_fn, free_fn, "%s=%s", RTLD_PRELOAD_VAR, + dso_file); if (preload == NULL) { goto oom; } @@ -170,9 +302,9 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) *nep++ = preload; } else { const char *old_val = *preload_ptr + sizeof(RTLD_PRELOAD_VAR); - len = asprintf(&preload, "%s=%s%c%s", RTLD_PRELOAD_VAR, + preload = fmtstr(alloc_fn, free_fn, "%s=%s%c%s", RTLD_PRELOAD_VAR, dso_file, RTLD_PRELOAD_DELIM, old_val); - if (len == -1) { + if (preload == NULL) { goto oom; } *preload_ptr = preload; @@ -184,10 +316,9 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) } # endif if (!fd_present && intercept_fd != -1) { - char *fdstr; - - len = asprintf(&fdstr, "SUDO_INTERCEPT_FD=%d", intercept_fd); - if (len == -1) { + char *fdstr = fmtstr(alloc_fn, free_fn, "SUDO_INTERCEPT_FD=%d", + intercept_fd); + if (fdstr == NULL) { goto oom; } if (intercept_ptr != NULL) { @@ -201,17 +332,33 @@ sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd) *nep = NULL; # ifdef _PATH_ASAN_LIB - free(dso_buf); + free_fn(dso_buf); # endif debug_return_ptr(nenvp); oom: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); # ifdef _PATH_ASAN_LIB - free(dso_buf); + free_fn(dso_buf); # endif - free(preload); - free(nenvp); + free_fn(preload); + free_fn(nenvp); debug_return_ptr(NULL); } + +char ** +sudo_preload_dso_mmap(char *const envp[], const char *dso_file, + int intercept_fd) +{ + return sudo_preload_dso_alloc(envp, dso_file, intercept_fd, + sudo_mmap_allocarray_v1, sudo_mmap_free_v1); +} + +char ** +sudo_preload_dso(char *const envp[], const char *dso_file, + int intercept_fd) +{ + return sudo_preload_dso_alloc(envp, dso_file, intercept_fd, + sudo_allocarray, free); +} #endif /* RTLD_PRELOAD_VAR */ diff --git a/src/sudo_exec.h b/src/sudo_exec.h index 5907675222..b8a8bcff20 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -145,6 +145,7 @@ bool utmp_logout(const char *line, int status); /* exec_preload.c */ char **sudo_preload_dso(char *const envp[], const char *dso_file, int intercept_fd); +char **sudo_preload_dso_mmap(char *const envp[], const char *dso_file, int intercept_fd); /* exec_ptrace.c */ bool exec_ptrace_stopped(pid_t pid, int status, void *intercept); diff --git a/src/sudo_intercept.c b/src/sudo_intercept.c index 2e11faf3e7..71bffd1d82 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -135,6 +135,7 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], char *ncmnd = NULL, **nargv = NULL, **nenvp = NULL; char cmnd_buf[PATH_MAX]; void *fn = NULL; + unsigned int i; debug_decl(exec_wrapper, SUDO_DEBUG_EXEC); if (cmnd == NULL) { @@ -188,24 +189,28 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], for (argc = 0; argv[argc] != NULL; argc++) continue; - shargv = reallocarray(NULL, (argc + 2), sizeof(char *)); + shargv = sudo_mmap_allocarray(argc + 2, sizeof(char *)); if (shargv == NULL) return -1; shargv[0] = "sh"; shargv[1] = ncmnd; memcpy(shargv + 2, nargv + 1, argc * sizeof(char *)); ((sudo_fn_execve_t)fn)(_PATH_SUDO_BSHELL, (char **)shargv, nenvp); - free(shargv); + sudo_mmap_free(shargv); } } else { errno = EACCES; } if (ncmnd != cmnd) - free(ncmnd); - if (nargv != argv) - free(nargv); + sudo_mmap_free(ncmnd); + if (nargv != argv && nargv != NULL) { + for (i = 0; nargv[i] != NULL; i++) + sudo_mmap_free(nargv[i]); + sudo_mmap_free(nargv); + } + /* Leaks allocated preload vars. */ if (nenvp != envp) - free(nenvp); + sudo_mmap_free(nenvp); debug_return_int(-1); } @@ -228,7 +233,7 @@ execl_wrapper(int type, const char *name, const char *arg, va_list ap) while (va_arg(ap2, char *) != NULL) argc++; va_end(ap2); - argv = reallocarray(NULL, (argc + 1), sizeof(char *)); + argv = sudo_mmap_allocarray(argc + 1, sizeof(char *)); if (argv == NULL) debug_return_int(-1); @@ -240,7 +245,7 @@ execl_wrapper(int type, const char *name, const char *arg, va_list ap) envp = va_arg(ap, char **); exec_wrapper(name, argv, envp, type == SUDO_EXECLP); - free(argv); + sudo_mmap_free(argv); debug_return_int(-1); } diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index a81a3c880f..ea7f0d926e 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -111,7 +111,7 @@ send_client_hello(int sock) msg_len = len; len += sizeof(msg_len); - if ((buf = malloc(len)) == NULL) { + if ((buf = sudo_mmap_alloc(len)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto done; } @@ -121,7 +121,7 @@ send_client_hello(int sock) ret = send_req(sock, buf, len); done: - free(buf); + sudo_mmap_free(buf); debug_return_bool(ret); } @@ -169,7 +169,7 @@ recv_intercept_response(int fd) } /* Read response from sudo (blocking). */ - if ((buf = malloc(res_len)) == NULL) { + if ((buf = sudo_mmap_alloc(res_len)) == NULL) { goto done; } cp = buf; @@ -202,7 +202,7 @@ recv_intercept_response(int fd) } done: - free(buf); + sudo_mmap_free(buf); debug_return_ptr(res); } @@ -338,7 +338,7 @@ send_policy_check_req(int sock, const char *cmnd, char * const argv[], msg_len = len; len += sizeof(msg_len); - if ((buf = malloc(len)) == NULL) { + if ((buf = sudo_mmap_alloc(len)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto done; } @@ -348,7 +348,7 @@ send_policy_check_req(int sock, const char *cmnd, char * const argv[], ret = send_req(sock, buf, len); done: - free(buf); + sudo_mmap_free(buf); debug_return_bool(ret); } @@ -427,7 +427,7 @@ command_allowed(const char *cmnd, char * const argv[], if (log_only) { /* Just logging, no policy check. */ - nenvp = sudo_preload_dso(envp, sudo_conf_intercept_path(), sock); + nenvp = sudo_preload_dso_mmap(envp, sudo_conf_intercept_path(), sock); if (nenvp == NULL) goto oom; *ncmndp = (char *)cmnd; /* safe */ @@ -451,20 +451,20 @@ command_allowed(const char *cmnd, char * const argv[], "run_argv[%zu]: %s", idx, res->u.accept_msg->run_argv[idx]); } } - ncmnd = strdup(res->u.accept_msg->run_command); + ncmnd = sudo_mmap_strdup(res->u.accept_msg->run_command); if (ncmnd == NULL) goto oom; - nargv = reallocarray(NULL, res->u.accept_msg->n_run_argv + 1, + nargv = sudo_mmap_allocarray(res->u.accept_msg->n_run_argv + 1, sizeof(char *)); if (nargv == NULL) goto oom; for (len = 0; len < res->u.accept_msg->n_run_argv; len++) { - nargv[len] = strdup(res->u.accept_msg->run_argv[len]); + nargv[len] = sudo_mmap_strdup(res->u.accept_msg->run_argv[len]); if (nargv[len] == NULL) goto oom; } nargv[len] = NULL; - nenvp = sudo_preload_dso(envp, sudo_conf_intercept_path(), sock); + nenvp = sudo_preload_dso_mmap(envp, sudo_conf_intercept_path(), sock); if (nenvp == NULL) goto oom; *ncmndp = ncmnd; @@ -489,10 +489,10 @@ command_allowed(const char *cmnd, char * const argv[], } oom: - free(ncmnd); + sudo_mmap_free(ncmnd); while (len > 0) - free(nargv[--len]); - free(nargv); + sudo_mmap_free(nargv[--len]); + sudo_mmap_free(nargv); done: /* Keep socket open for ctor when we execute the command. */ From 5516cdcd5bf51322e5c022acf99f52cc09cd49dc Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 25 Jul 2022 19:56:54 -0600 Subject: [PATCH 044/186] For preload DSO make copies of cmnd, argv, envp and map them read-only. --- include/sudo_util.h | 2 + lib/util/mmap_alloc.c | 22 ++++++++- lib/util/util.exp.in | 1 + src/sudo_intercept.c | 108 +++++++++++++++++++++++++++++++++++------- 4 files changed, 114 insertions(+), 19 deletions(-) diff --git a/include/sudo_util.h b/include/sudo_util.h index 65996438b9..1dcf7fa846 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -257,6 +257,8 @@ sudo_dso_public void sudo_mmap_free_v1(void *ptr); #define sudo_mmap_free(_a) sudo_mmap_free_v1(_a) sudo_dso_public char *sudo_mmap_strdup_v1(const char *str); #define sudo_mmap_strdup(_a) sudo_mmap_strdup_v1(_a) +sudo_dso_public int sudo_mmap_protect_v1(void *ptr); +#define sudo_mmap_protect(_a) sudo_mmap_protect_v1(_a) /* parseln.c */ sudo_dso_public ssize_t sudo_parseln_v1(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp); diff --git a/lib/util/mmap_alloc.c b/lib/util/mmap_alloc.c index 9e7bf84d61..ce62370521 100644 --- a/lib/util/mmap_alloc.c +++ b/lib/util/mmap_alloc.c @@ -121,6 +121,24 @@ sudo_mmap_strdup_v1(const char *str) return newstr; } +/* + * Set the page permissions for the allocation represented by "ptr" to + * read-only. Returns 0 on success, -1 on failure. + */ +int +sudo_mmap_protect_v1(void *ptr) +{ + if (ptr != NULL) { + unsigned long *ulp = ptr; + const unsigned long size = ulp[-1]; + return mprotect((void *)&ulp[-1], size, PROT_READ); + } + + /* Can't protect NULL. */ + errno = EINVAL; + return -1; +} + /* * Free "ptr" allocated by sudo_mmap_alloc(). * The allocated size is stored (as unsigned long) in ptr[-1]. @@ -131,7 +149,9 @@ sudo_mmap_free_v1(void *ptr) if (ptr != NULL) { unsigned long *ulp = ptr; const unsigned long size = ulp[-1]; + int saved_errno = errno; - munmap((void *)&ulp[-1], size); + (void)munmap((void *)&ulp[-1], size); + errno = saved_errno; } } diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index b289174e2f..dd5fbc1012 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -113,6 +113,7 @@ sudo_mkdir_parents_v1 sudo_mmap_alloc_v1 sudo_mmap_allocarray_v1 sudo_mmap_free_v1 +sudo_mmap_protect_v1 sudo_mmap_strdup_v1 sudo_new_key_val_v1 sudo_parse_gids_v1 diff --git a/src/sudo_intercept.c b/src/sudo_intercept.c index 71bffd1d82..5b11fbf7c0 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -62,6 +62,51 @@ extern bool command_allowed(const char *cmnd, char * const argv[], char * const typedef int (*sudo_fn_execve_t)(const char *, char *const *, char *const *); +static void +free_vector(char **vec) +{ + char **cur; + debug_decl(free_vector, SUDO_DEBUG_EXEC); + + if (vec != NULL) { + for (cur = vec; *cur != NULL; cur++) { + sudo_mmap_free(*cur); + } + sudo_mmap_free(vec); + } + + debug_return; +} + +static char ** +copy_vector(char * const *src) +{ + char **copy; + int i, len; + debug_decl(copy_vector, SUDO_DEBUG_EXEC); + + if (src == NULL) + debug_return_ptr(NULL); + + for (len = 0; src[len] != NULL; len++) { + continue; + } + copy = sudo_mmap_allocarray(len + 1, sizeof(char *)); + if (copy == NULL) { + debug_return_ptr(NULL); + } + for (i = 0; i < len; i++) { + copy[i] = sudo_mmap_strdup(src[i]); + if (copy[i] == NULL) { + sudo_mmap_free(copy); + debug_return_ptr(NULL); + } + } + copy[i] = NULL; + + debug_return_ptr(copy); +} + /* * We do PATH resolution here rather than in the policy because we * want to use the PATH in the current environment. @@ -74,6 +119,7 @@ resolve_path(const char *cmnd, char *out_cmnd, size_t out_size) char path[PATH_MAX]; char **p, *cp, *endp; int dirlen, len; + debug_decl(resolve_path, SUDO_DEBUG_EXEC); for (p = environ; (cp = *p) != NULL; p++) { if (strncmp(cp, "PATH=", sizeof("PATH=") - 1) == 0) { @@ -83,7 +129,7 @@ resolve_path(const char *cmnd, char *out_cmnd, size_t out_size) } if (cp == NULL) { errno = ENOENT; - return false; + debug_return_bool(false); } endp = cp + strlen(cp); @@ -110,7 +156,7 @@ resolve_path(const char *cmnd, char *out_cmnd, size_t out_size) errval = ENAMETOOLONG; break; } - return true; + debug_return_bool(true); } switch (errno) { case EACCES: @@ -121,21 +167,21 @@ resolve_path(const char *cmnd, char *out_cmnd, size_t out_size) case ENOENT: break; default: - return false; + debug_return_bool(false); } } errno = errval; - return false; + debug_return_bool(false); } static int exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], bool is_execvp) { + char *cmnd_copy = NULL, **argv_copy = NULL, **envp_copy = NULL; char *ncmnd = NULL, **nargv = NULL, **nenvp = NULL; char cmnd_buf[PATH_MAX]; void *fn = NULL; - unsigned int i; debug_decl(exec_wrapper, SUDO_DEBUG_EXEC); if (cmnd == NULL) { @@ -147,10 +193,10 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], if (strchr(cmnd, '/') == NULL) { if (!is_execvp) { errno = ENOENT; - debug_return_int(-1); + goto bad; } if (!resolve_path(cmnd, cmnd_buf, sizeof(cmnd_buf))) { - debug_return_int(-1); + goto bad; } cmnd = cmnd_buf; } else { @@ -159,13 +205,37 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], /* Absolute or relative path name. */ if (stat(cmnd, &sb) == -1) { /* Leave errno unchanged. */ - debug_return_int(-1); + goto bad; } else if (!S_ISREG(sb.st_mode)) { errno = EACCES; - debug_return_int(-1); + goto bad; } } + /* + * Make copies of cmnd, argv, and envp. + */ + cmnd_copy = sudo_mmap_strdup(cmnd); + if (cmnd_copy == NULL) { + debug_return_int(-1); + } + sudo_mmap_protect(cmnd_copy); + cmnd = cmnd_copy; + + argv_copy = copy_vector(argv); + if (argv_copy == NULL) { + goto bad; + } + sudo_mmap_protect(argv_copy); + argv = argv_copy; + + envp_copy = copy_vector(envp); + if (envp_copy == NULL) { + goto bad; + } + sudo_mmap_protect(envp_copy); + envp = envp_copy; + # if defined(HAVE___INTERPOSE) fn = execve; # elif defined(HAVE_DLOPEN) @@ -175,7 +245,7 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], # endif if (fn == NULL) { errno = EACCES; - debug_return_int(-1); + goto bad; } if (command_allowed(cmnd, argv, envp, &ncmnd, &nargv, &nenvp)) { @@ -191,7 +261,7 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], continue; shargv = sudo_mmap_allocarray(argc + 2, sizeof(char *)); if (shargv == NULL) - return -1; + goto bad; shargv[0] = "sh"; shargv[1] = ncmnd; memcpy(shargv + 2, nargv + 1, argc * sizeof(char *)); @@ -201,15 +271,17 @@ exec_wrapper(const char *cmnd, char * const argv[], char * const envp[], } else { errno = EACCES; } - if (ncmnd != cmnd) + +bad: + sudo_mmap_free(cmnd_copy); + if (ncmnd != cmnd_copy) sudo_mmap_free(ncmnd); - if (nargv != argv && nargv != NULL) { - for (i = 0; nargv[i] != NULL; i++) - sudo_mmap_free(nargv[i]); - sudo_mmap_free(nargv); - } + free_vector(argv_copy); + if (nargv != argv_copy) + free_vector(nargv); + free_vector(envp_copy); /* Leaks allocated preload vars. */ - if (nenvp != envp) + if (nenvp != envp_copy) sudo_mmap_free(nenvp); debug_return_int(-1); From 3c1f3ef1027705f321ec1995972aae09c0f7c1ac Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 08:43:44 -0600 Subject: [PATCH 045/186] Change to runcwd during the policy check where possible. Otherwise, attempts to run "./command" from a shell with intercept set will fail if the current working directory is different from the main sudo process. --- src/exec_intercept.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index c9d76f8aec..7696723242 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -369,10 +369,19 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, char **user_env_out = NULL; char **run_argv = NULL; bool ret = true; - int i, rc; + int i, rc, saved_dir = -1; debug_decl(intercept_check_policy, SUDO_DEBUG_EXEC); if (ISSET(closure->details->flags, CD_INTERCEPT)) { + /* Change to runcwd for the policy check if possible. */ + if (runcwd != NULL) { + saved_dir = open(".", O_RDONLY); + if (saved_dir != -1 && chdir(runcwd) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to chdir to %s", __func__, runcwd); + } + } + /* We don't currently have a good way to validate the environment. */ sudo_debug_set_active_instance(policy_plugin.debug_instance); rc = policy_plugin.u.policy->check_policy(argc, argv, NULL, @@ -487,6 +496,9 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, ret = false; done: + if (saved_dir != -1) + fchdir(saved_dir); + if (command_info_copy != NULL) { for (i = 0; command_info_copy[i] != NULL; i++) { free(command_info_copy[i]); From 16ea0bb3fd9e8f1bc354515b50f5e1976c146955 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 08:56:27 -0600 Subject: [PATCH 046/186] intercept_check_policy: close saved_dir before returning --- src/exec_intercept.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index 7696723242..20fe288380 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -496,8 +496,13 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, ret = false; done: - if (saved_dir != -1) - fchdir(saved_dir); + if (saved_dir != -1) { + if (fchdir(saved_dir) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to restore saved cwd", __func__); + } + close(saved_dir); + } if (command_info_copy != NULL) { for (i = 0; command_info_copy[i] != NULL; i++) { From de3d5fe934f540819b11872c654b7baf353d351f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 11:04:29 -0600 Subject: [PATCH 047/186] Reject relative command paths if runcwd is not set. This is now treated as a policy rejection. --- src/exec_intercept.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index 20fe288380..b998638087 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -373,12 +373,28 @@ intercept_check_policy(const char *command, int argc, char **argv, int envc, debug_decl(intercept_check_policy, SUDO_DEBUG_EXEC); if (ISSET(closure->details->flags, CD_INTERCEPT)) { - /* Change to runcwd for the policy check if possible. */ - if (runcwd != NULL) { - saved_dir = open(".", O_RDONLY); - if (saved_dir != -1 && chdir(runcwd) == -1) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, - "%s: unable to chdir to %s", __func__, runcwd); + /* Change to runcwd for the policy check if necessary. */ + if (*command != '/') { + if (runcwd == NULL || (saved_dir = open(".", O_RDONLY)) == -1 || + chdir(runcwd) == -1) { + if (runcwd == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "relative command path but no runcwd specified"); + } else if (saved_dir == -1) { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to open current directory for reading"); + } else { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to chdir for %s", runcwd); + } + if (closure->errstr == NULL) + closure->errstr = N_("command rejected by policy"); + audit_reject(policy_plugin.name, SUDO_POLICY_PLUGIN, + closure->errstr, closure->details->info); + closure->state = POLICY_REJECT; + goto done; } } From f5dc739ea30a7ca7f6c55019e8169e4dac8e150c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 11:28:38 -0600 Subject: [PATCH 048/186] Quiet some harmless PVS-Studio warnings. --- src/sudo.c | 6 +++--- src/sudo_intercept_common.c | 10 ++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/sudo.c b/src/sudo.c index 0121586e34..7e26b869c2 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1022,15 +1022,15 @@ run_command(struct command_details *details) cstat.val = 0; if (details->command == NULL) { - sudo_warnx(U_("command not set by the security policy")); + sudo_warnx("%s", U_("command not set by the security policy")); debug_return_int(status); } if (details->argv == NULL) { - sudo_warnx(U_("argv not set by the security policy")); + sudo_warnx("%s", U_("argv not set by the security policy")); debug_return_int(status); } if (details->envp == NULL) { - sudo_warnx(U_("envp not set by the security policy")); + sudo_warnx("%s", U_("envp not set by the security policy")); debug_return_int(status); } diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index ea7f0d926e..9a21fefc25 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -315,13 +315,11 @@ send_policy_check_req(int sock, const char *cmnd, char * const argv[], req.intercept_fd = sock; req.command = (char *)cmnd; req.argv = argv ? (char **)argv : empty; - req.n_argv = 0; - while (req.argv[req.n_argv] != NULL) - req.n_argv++; + for (req.n_argv = 0; req.argv[req.n_argv] != NULL; req.n_argv++) + continue; req.envp = envp ? (char **)envp : empty; - req.n_envp = 0; - while (req.envp[req.n_envp] != NULL) - req.n_envp++; + for (req.n_envp = 0; req.envp[req.n_envp] != NULL; req.n_envp++) + continue; if (getcwd(cwdbuf, sizeof(cwdbuf)) != NULL) { req.cwd = cwdbuf; } From 3421c8b6cedc582ed5eab573f59d4feddc7e1ab3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 11:44:12 -0600 Subject: [PATCH 049/186] Fix potential NULL pointer deference found by clang-analyzer. --- lib/util/sudo_debug.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/util/sudo_debug.c b/lib/util/sudo_debug.c index a2ead5228a..c06ba8cdef 100644 --- a/lib/util/sudo_debug.c +++ b/lib/util/sudo_debug.c @@ -861,7 +861,7 @@ sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *con continue; /* Log envp for debug level "debug". */ - if (output->settings[subsys] >= SUDO_DEBUG_DEBUG - 1 && envp[0] != NULL) + if (output->settings[subsys] >= SUDO_DEBUG_DEBUG - 1 && envp != NULL) log_envp = true; /* Alloc and build up buffer. */ @@ -873,7 +873,7 @@ sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *con buflen += strlen(*av) + 1; buflen--; } - if (envp != NULL && log_envp) { + if (log_envp && envp[0] != NULL) { buflen += sizeof(" []") - 1; for (av = envp; *av; av++) buflen += strlen(*av) + 1; @@ -904,7 +904,7 @@ sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *con cp[-1] = ']'; } - if (envp != NULL && log_envp) { + if (log_envp && envp[0] != NULL) { *cp++ = ' '; *cp++ = '['; for (av = envp; *av; av++) { From 6c9b3c7613af54a63e7dc4a2207831467a4eb8d9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 12:54:52 -0600 Subject: [PATCH 050/186] fmtstr: add missing va_end() for the overflow case Coverity CID 275335 --- src/exec_preload.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/exec_preload.c b/src/exec_preload.c index 2e9dc2ef73..c8a06e4012 100644 --- a/src/exec_preload.c +++ b/src/exec_preload.c @@ -149,17 +149,18 @@ fmtstr(sudo_alloc_fn_t alloc_fn, sudo_free_fn_t free_fn, const char *ofmt, ...) *cur++ = *fmt++; size++; } - va_end(ap); if (size < 1) { goto oflow; } *cur = '\0'; + va_end(ap); debug_return_str(newstr); oflow: /* We pre-allocate enough space, so this should never happen. */ + va_end(ap); free_fn(newstr); sudo_warnx(U_("internal error, %s overflow"), __func__); debug_return_str(NULL); From 23ab31fce00e10f46bc705229bf33dbba64b34cf Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 13:05:46 -0600 Subject: [PATCH 051/186] Avoid a Coverity positive. --- lib/util/mmap_alloc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/util/mmap_alloc.c b/lib/util/mmap_alloc.c index ce62370521..b136369f9a 100644 --- a/lib/util/mmap_alloc.c +++ b/lib/util/mmap_alloc.c @@ -147,11 +147,11 @@ void sudo_mmap_free_v1(void *ptr) { if (ptr != NULL) { - unsigned long *ulp = ptr; - const unsigned long size = ulp[-1]; + unsigned long *ulp = (unsigned long *)ptr - 1; + const unsigned long size = ulp[0]; int saved_errno = errno; - (void)munmap((void *)&ulp[-1], size); + (void)munmap((void *)ulp, size); errno = saved_errno; } } From 882990b1b3d017d3db472413090046ada2437ddf Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 26 Jul 2022 15:14:03 -0600 Subject: [PATCH 052/186] Use gcc's malloc attribute for malloc-like allocation functions. --- include/sudo_compat.h | 9 +++++++++ include/sudo_util.h | 10 +++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/sudo_compat.h b/include/sudo_compat.h index ee3c229624..698a67ea6b 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -51,6 +51,15 @@ # define __attribute__(x) #endif +/* For malloc-like functions that return uninitialized or zeroed memory. */ +#ifndef __malloc +# if __GNUC_PREREQ__(2, 96) +# define __malloc __attribute__((__malloc__)) +# else +# define __malloc +# endif +#endif + /* For catching format string mismatches */ #ifndef __printflike # if __GNUC_PREREQ__(3, 3) diff --git a/include/sudo_util.h b/include/sudo_util.h index 1dcf7fa846..bafad020de 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -249,14 +249,14 @@ sudo_dso_public bool sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gi #define sudo_mkdir_parents(_a, _b, _c, _d, _e) sudo_mkdir_parents_v1((_a), (_b), (_c), (_d), (_e)) /* mmap_alloc.c */ -sudo_dso_public void *sudo_mmap_alloc_v1(size_t size); +sudo_dso_public void *sudo_mmap_alloc_v1(size_t size) __malloc; #define sudo_mmap_alloc(_a) sudo_mmap_alloc_v1(_a) -sudo_dso_public void *sudo_mmap_allocarray_v1(size_t count, size_t size); +sudo_dso_public void *sudo_mmap_allocarray_v1(size_t count, size_t size) __malloc; #define sudo_mmap_allocarray(_a, _b) sudo_mmap_allocarray_v1((_a), (_b)) -sudo_dso_public void sudo_mmap_free_v1(void *ptr); -#define sudo_mmap_free(_a) sudo_mmap_free_v1(_a) sudo_dso_public char *sudo_mmap_strdup_v1(const char *str); #define sudo_mmap_strdup(_a) sudo_mmap_strdup_v1(_a) +sudo_dso_public void sudo_mmap_free_v1(void *ptr); +#define sudo_mmap_free(_a) sudo_mmap_free_v1(_a) sudo_dso_public int sudo_mmap_protect_v1(void *ptr); #define sudo_mmap_protect(_a) sudo_mmap_protect_v1(_a) @@ -271,7 +271,7 @@ sudo_dso_public void initprogname2(const char *, const char * const *); /* rcstr.c */ sudo_dso_public char *sudo_rcstr_dup(const char *src); -sudo_dso_public char *sudo_rcstr_alloc(size_t len); +sudo_dso_public char *sudo_rcstr_alloc(size_t len) __malloc; sudo_dso_public char *sudo_rcstr_addref(const char *s); sudo_dso_public void sudo_rcstr_delref(const char *s); From 25513b4f37fce479fdd0d82d7155cd17e68491c0 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 27 Jul 2022 14:11:13 -0600 Subject: [PATCH 053/186] The length returned by ptrace_read_string() include the NUL. We were wasting a extra byte in the string table for each entry. --- src/exec_ptrace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 4948679e8a..617159317e 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -428,8 +428,8 @@ ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, if (slen == (size_t)-1) debug_return_size_t(-1); vec[len++] = buf; - buf += slen + 1; - bufsize -= slen + 1; + buf += slen; + bufsize -= slen; addr += regs->wordsize; continue; } From 225feb386e29dc15169356e6edd589051e43f8db Mon Sep 17 00:00:00 2001 From: Benjamin Drung Date: Fri, 29 Jul 2022 11:35:47 +0200 Subject: [PATCH 054/186] Add XDG_CURRENT_DESKTOP to initial_keepenv_table Qt needs `XDG_CURRENT_DESKTOP` to be set to determine the correct theme. Since `DISPLAY` and `XAUTHORITY` are already in the default table of variables to preserve in the environment, just add `XDG_CURRENT_DESKTOP` to it. Bug: https://launchpad.net/bugs/1958055 Signed-off-by: Benjamin Drung --- plugins/sudoers/env.c | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/sudoers/env.c b/plugins/sudoers/env.c index eaf90f4a05..9e092b2502 100644 --- a/plugins/sudoers/env.c +++ b/plugins/sudoers/env.c @@ -224,6 +224,7 @@ static const char *initial_keepenv_table[] = { "PS2", "XAUTHORITY", "XAUTHORIZATION", + "XDG_CURRENT_DESKTOP", NULL }; From 620a563b547c0d6f508fbcc30f552f1da97c45e0 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 29 Jul 2022 15:17:45 -0600 Subject: [PATCH 055/186] Only set MODE_POLICY_INTERCEPTED if we are running a command. Fixes an error with "sudo -l" when intercept is enabled globally. --- 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 26f19abb58..9b90cb90d1 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -399,7 +399,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], } /* Was previous command was intercepted? */ - if (def_intercept) + if (ISSET(sudo_mode, MODE_RUN) && def_intercept) SET(sudo_mode, MODE_POLICY_INTERCEPTED); /* Only certain mode flags are legal for intercepted commands. */ From b80b012de0248691c152027a7aa2f7cc4a7e8b88 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 29 Jul 2022 15:22:26 -0600 Subject: [PATCH 056/186] Use PTRACE_EVENT_EXEC to stop execution before return from execve(2). We can now verify that the arguments match what we accepted before the command actually runs. If there is a mismatch, the process is killed. Shell scripts must be handled specially since the path executed will be the interpreter, not the script name. Linux allows interpreters to be nested up to 4 deep. --- src/exec_ptrace.c | 383 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 352 insertions(+), 31 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 617159317e..0f7231ae21 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -598,17 +599,18 @@ ptrace_write_vec(pid_t pid, struct sudo_ptrace_regs *regs, char **vec, } /* - * Use /proc/PID/cwd to determine the current working directory. + * Read a link from /proc/PID and store the result in buf. + * Used to read the cwd and exe links in /proc/PID. * Returns true on success, else false. */ static bool -getcwd_by_pid(pid_t pid, char *buf, size_t bufsize) +read_proc_link(pid_t pid, const char *name, char *buf, size_t bufsize) { size_t len; char path[PATH_MAX]; - debug_decl(getcwd_by_pid, SUDO_DEBUG_EXEC); + debug_decl(read_proc_link, SUDO_DEBUG_EXEC); - len = snprintf(path, sizeof(path), "/proc/%d/cwd", (int)pid); + len = snprintf(path, sizeof(path), "/proc/%d/%s", (int)pid, name); if (len < sizeof(path)) { len = readlink(path, buf, bufsize - 1); if (len != (size_t)-1) { @@ -634,10 +636,13 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, size_t bufsize, len; debug_decl(get_execve_info, SUDO_DEBUG_EXEC); + /* XXX - Linux allows this to be bigger, see execve(2). */ bufsize = sysconf(_SC_ARG_MAX) + PATH_MAX; argbuf = malloc(bufsize); - if (argbuf == NULL) - sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + if (argbuf == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } /* execve(2) takes three arguments: pathname, argv, envp. */ path_addr = get_sc_arg1(regs); @@ -867,7 +872,8 @@ int exec_ptrace_seize(pid_t child) { const long ptrace_opts = PTRACE_O_TRACESECCOMP|PTRACE_O_TRACECLONE| - PTRACE_O_TRACEFORK|PTRACE_O_TRACEVFORK; + PTRACE_O_TRACEFORK|PTRACE_O_TRACEVFORK| + PTRACE_O_TRACEEXEC; int ret = -1; int status; debug_decl(exec_ptrace_seize, SUDO_DEBUG_EXEC); @@ -924,45 +930,193 @@ exec_ptrace_seize(pid_t child) } /* - * Verify that the execve(2) argument we wrote match the contents of closure. - * Returns true if they match, else false. + * Compare two pathnames. If do_stat is true, fall back to stat(2)ing + * the paths for a dev/inode match if the strings don't match. + * Returns true on match, else false. */ static bool -verify_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, - struct intercept_closure *closure) +pathname_matches(const char *path1, const char *path2, bool do_stat) { - char *pathname, **argv, **envp, *buf; - int argc, envc, i; - bool ret = true; - debug_decl(verify_execve_info, SUDO_DEBUG_EXEC); + struct stat sb1, sb2; + debug_decl(pathname_matches, SUDO_DEBUG_EXEC); - buf = get_execve_info(pid, regs, &pathname, &argc, &argv, - &envc, &envp); - if (buf == NULL) + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: compare %s to %s", __func__, + path1 ? path1 : "(NULL)", path2 ? path2 : "(NULL)"); + + if (path1 == NULL || path2 == NULL) debug_return_bool(false); - if (pathname == NULL || strcmp(pathname, closure->command) != 0) { - sudo_warn( + if (strcmp(path1, path2) == 0) + debug_return_bool(true); + + if (do_stat && stat(path1, &sb1) == 0 && stat(path2, &sb2) == 0) { + if (sb1.st_dev == sb2.st_dev && sb1.st_ino == sb2.st_ino) + debug_return_bool(true); + } + + debug_return_bool(false); +} + +/* + * Open script and check for '#!' magic number followed by an interpreter. + * If present, check the interpreter against execpath, and argument string + * (if any) against argv[1]. + * Returns number of argv entries to skip on success, else 0. + */ +static int +script_matches(const char *script, const char *execpath, int argc, + char * const *argv) +{ + char * const *orig_argv = argv; + size_t linesize = 0; + char *interp, *interp_args, *line = NULL; + char magic[2]; + int count; + FILE *fp = NULL; + ssize_t len; + debug_decl(get_interpreter, SUDO_DEBUG_EXEC); + + /* Linux allows up to 4 nested interpreters. */ + for (count = 0; count < 4; count++) { + if (fp != NULL) + fclose(fp); + fp = fopen(script, "r"); + if (fp == NULL) { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_ERRNO, + "%s: unable to open %s for reading", __func__, script); + goto done; + } + + if (fread(magic, 1, 2, fp) != 2 || memcmp(magic, "#!", 2) != 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG, "%s: %s: not a script", + __func__, script); + goto done; + } + + /* Check interpreter, skipping the shebang and trim trailing space. */ + len = getdelim(&line, &linesize, '\n', fp); + if (len == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: %s: can't get interpreter", + __func__, script); + goto done; + } + while (len > 0 && isspace((unsigned char)line[len - 1])) { + len--; + line[len] = '\0'; + } + sudo_debug_printf(SUDO_DEBUG_DEBUG, "%s: %s: shebang line \"%s\"", + __func__, script, line); + + /* + * Split line into interpreter and args. + * Whitespace is not supported in the interpreter path. + */ + for (interp = line; isspace((unsigned char)*interp); interp++) + continue; + interp_args = strpbrk(interp, " \t"); + if (interp_args != NULL) { + *interp_args++ = '\0'; + while (isspace((unsigned char)*interp_args)) + interp_args++; + } + + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: interpreter %s, args \"%s\"", + __func__, interp, interp_args ? interp_args : ""); + + /* Match interpreter. */ + if (!pathname_matches(execpath, interp, true)) { + /* It is possible for the interpreter to be a script too. */ + if (argv > 0 && strcmp(interp, argv[1]) == 0) { + /* Interpreter args must match for *this* interpreter. */ + if (interp_args == NULL || + (argc > 1 && strcmp(interp_args, argv[2]) == 0)) { + script = interp; + argv++; + argc--; + if (interp_args != NULL) { + argv++; + argc--; + } + /* Check whether interp is itself a script. */ + continue; + } + } + } + if (argc > 0 && interp_args != NULL) { + if (strcmp(interp_args, argv[1]) != 0) { + sudo_warnx( + U_("interpreter argument , expected \"%s\", got \"%s\""), + interp_args, argc > 1 ? argv[1] : "(NULL)"); + goto done; + } + argv++; + } + argv++; + break; + } + +done: + free(line); + if (fp != NULL) + fclose(fp); + debug_return_int((int)(argv - orig_argv)); +} + +/* + * Check if the execve(2) arguments match the contents of closure. + * Returns true if they match, else false. + */ +static bool +execve_args_match(const char *pathname, int argc, char * const *argv, + int envc, char * const *envp, bool do_stat, + struct intercept_closure *closure) +{ + bool ret = true; + int i; + debug_decl(execve_args_match, SUDO_DEBUG_EXEC); + + if (!pathname_matches(pathname, closure->command, do_stat)) { + /* For scripts, pathname will refer to the interpreter instead. */ + if (do_stat) { + int skip = script_matches(closure->command, pathname, + argc, argv); + if (skip != 0) { + /* Skip interpreter (and args) in argv. */ + argv += skip; + argc -= skip; + goto check_argv; + } + } + sudo_warnx( U_("pathname mismatch, expected \"%s\", got \"%s\""), closure->command, pathname ? pathname : "(NULL)"); ret = false; } +check_argv: for (i = 0; i < argc; i++) { if (closure->run_argv[i] == NULL) { ret = false; - sudo_warn( + sudo_warnx( U_("%s[%d] mismatch, expected \"%s\", got \"%s\""), "argv", i, "(NULL)", argv[i] ? argv[i] : "(NULL)"); break; - } else if (argv[i] == NULL) { + } + if (argv[i] == NULL) { ret = false; - sudo_warn( + sudo_warnx( U_("%s[%d] mismatch, expected \"%s\", got \"%s\""), "argv", i, closure->run_argv[i], "(NULL)"); break; - } else if (strcmp(argv[i], closure->run_argv[i]) != 0) { + } + if (strcmp(argv[i], closure->run_argv[i]) != 0) { + if (i == 0) { + /* Special case for argv[0] which may contain the basename. */ + const char *base = sudo_basename(closure->run_argv[0]); + if (strcmp(argv[i], base) == 0) + continue; + } ret = false; - sudo_warn( + sudo_warnx( U_("%s[%d] mismatch, expected \"%s\", got \"%s\""), "argv", i, closure->run_argv[i], argv[i]); } @@ -970,24 +1124,181 @@ verify_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, for (i = 0; i < envc; i++) { if (closure->run_envp[i] == NULL) { ret = false; - sudo_warn( + sudo_warnx( U_("%s[%d] mismatch, expected \"%s\", got \"%s\""), "envp", i, "(NULL)", envp[i] ? envp[i] : "(NULL)"); break; } else if (envp[i] == NULL) { ret = false; - sudo_warn( + sudo_warnx( U_("%s[%d] mismatch, expected \"%s\", got \"%s\""), "envp", i, closure->run_envp[i], "(NULL)"); break; } else if (strcmp(envp[i], closure->run_envp[i]) != 0) { ret = false; - sudo_warn( + sudo_warnx( U_("%s[%d] mismatch, expected \"%s\", got \"%s\""), "envp", i, closure->run_envp[i], envp[i]); } } - free(buf); + + debug_return_bool(ret); +} + +/* + * Verify that the execve(2) argument we wrote match the contents of closure. + * Returns true if they match, else false. + */ +static bool +verify_execve_args(pid_t pid, struct sudo_ptrace_regs *regs, + struct intercept_closure *closure) +{ + char *pathname, **argv, **envp, *buf; + int argc, envc; + bool ret = false; + debug_decl(verify_execve_args, SUDO_DEBUG_EXEC); + + buf = get_execve_info(pid, regs, &pathname, &argc, &argv, + &envc, &envp); + if (buf != NULL) { + ret = execve_args_match(pathname, argc, argv, envc, envp, false, closure); + free(buf); + } + + debug_return_bool(ret); +} + +/* + * Verify that the command executed matches the arguments we checked. + * Returns true on success and false on error. + */ +static bool +ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, + struct intercept_closure *closure) +{ + unsigned long argv_addr, envp_addr, sp, word; + char **argv, **envp, *strtab, *argbuf = NULL; + char pathname[PATH_MAX]; + sigset_t chldmask; + bool ret = false; + int argc, envc, status; + size_t bufsize, len; + debug_decl(ptrace_verify_post_exec, SUDO_DEBUG_EXEC); + + /* Block SIGCHLD for the critical section (waitpid). */ + sigemptyset(&chldmask); + sigaddset(&chldmask, SIGCHLD); + sigprocmask(SIG_BLOCK, &chldmask, NULL); + + /* Allow execve(2) to continue and wait for PTRACE_EVENT_EXEC. */ + ptrace(PTRACE_SYSCALL, pid, NULL, NULL); + for (;;) { + if (waitpid(pid, &status, __WALL) != -1) + break; + if (errno == EINTR) + continue; + sudo_warn(U_("%s: %s"), __func__, "waitpid"); + goto done; + } + if (!WIFSTOPPED(status)) { + sudo_warnx(U_("process %d exited unexpectedly"), (int)pid); + goto done; + } + if (status >> 8 != (SIGTRAP | (PTRACE_EVENT_EXEC << 8))) { + sudo_warnx(U_("process %d unexpected status 0x%x"), (int)pid, status); + goto done; + } + + /* Get the executable path. */ + if (!read_proc_link(pid, "exe", pathname, sizeof(pathname))) { + /* Missing /proc file system is not a fatal error. */ + sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: unable to read /proc/%d/exe", + __func__, (int)pid); + ret = true; + goto done; + } + + /* Update the registers to get the new stack pointer. */ + if (!ptrace_getregs(pid, regs, regs->compat)) { + sudo_warn(U_("unable to get registers for process %d"), (int)pid); + goto done; + } + sp = get_stack_pointer(regs); + + /* + * We assume the initial stack layout is as follows: + * argc: sp + * argv: sp + wordsize + * envp: sp + wordsize + (argc * wordsize) + */ + + /* Read argc, first address on the stack. */ + word = ptrace(PTRACE_PEEKDATA, pid, sp, NULL); + if (word == (unsigned long)-1) { + sudo_warn("%s: ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", + __func__, (int)pid, sp); + goto done; + } + argc = (int)word; + + /* argv follows arc, followed by envp. */ + sp += regs->wordsize; + argv_addr = sp; + sp += regs->wordsize * (argc + 1); + envp_addr = sp; + + /* Count the number of entries in envp for easy copying. */ + envc = ptrace_get_vec_len(pid, regs, envp_addr); + if (envc == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "%s: %d unable to get length of environment", __func__, (int)pid); + goto done; + } + + /* Allocate a single buffer for argv, envp and their strings. */ + /* XXX - Linux allows this to be bigger, see execve(2). */ + bufsize = sysconf(_SC_ARG_MAX); + argbuf = malloc(bufsize); + if (argbuf == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + + /* Reserve argv and envp at the start of argbuf so they are aligned. */ + argv = (char **)argbuf; + envp = argv + argc + 1; + strtab = (char *)(envp + envc + 1); + bufsize -= strtab - argbuf; + + /* Read argv */ + len = ptrace_read_vec(pid, regs, argv_addr, argv, strtab, bufsize); + if (len == (size_t)-1) { + sudo_warn(U_("unable to read execve %s for process %d"), + "argv", (int)pid); + goto done; + } + strtab += len; + bufsize -= len; + + /* Read envp */ + len = ptrace_read_vec(pid, regs, envp_addr, envp, strtab, bufsize); + if (len == (size_t)-1) { + sudo_warn(U_("unable to read execve %s for process %d"), + "envp", (int)pid); + goto done; + } + strtab += len; + bufsize -= len; + + ret = execve_args_match(pathname, argc, argv, envc, envp, true, closure); + if (!ret) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "%s: %d new execve args don't match closure", __func__, (int)pid); + } + +done: + free(argbuf); + sigprocmask(SIG_UNBLOCK, &chldmask, NULL); debug_return_bool(ret); } @@ -1073,7 +1384,7 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) } /* Get the current working directory and execve info. */ - if (!getcwd_by_pid(pid, cwd, sizeof(cwd))) + if (!read_proc_link(pid, "cwd", cwd, sizeof(cwd))) (void)strlcpy(cwd, "unknown", sizeof(cwd)); buf = get_execve_info(pid, ®s, &pathname, &argc, &argv, &envc, &envp); @@ -1214,12 +1525,19 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) if (closure->state == POLICY_TEST) { /* Verify the contents of what we just wrote. */ - if (!verify_execve_info(pid, ®s, closure)) { + if (!verify_execve_args(pid, ®s, closure)) { sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: new execve args don't match closure", __func__); } } } + if (closure->state == POLICY_ACCEPT) { + /* Verify execve(2) args post-exec. */ + if (!ptrace_verify_post_exec(pid, ®s, closure)) { + if (errno != ESRCH) + kill(pid, SIGKILL); + } + } break; default: /* If rejected, fake the syscall and set return to EACCES */ @@ -1257,6 +1575,9 @@ exec_ptrace_stopped(pid_t pid, int status, void *intercept) sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: %d failed to intercept execve", __func__, (int)pid); } + } else if (sigtrap == (SIGTRAP | (PTRACE_EVENT_EXEC << 8))) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "%s: %d PTRACE_EVENT_EXEC", __func__, (int)pid); } else if (sigtrap == (SIGTRAP | (PTRACE_EVENT_CLONE << 8)) || sigtrap == (SIGTRAP | (PTRACE_EVENT_VFORK << 8)) || sigtrap == (SIGTRAP | (PTRACE_EVENT_FORK << 8))) { From 3ce19efca958e607ab5a24fea3baf3adfbc4aac6 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 29 Jul 2022 15:22:27 -0600 Subject: [PATCH 057/186] Add intercept_verify sudoers option to control execve(2) argument checking. --- docs/sudoers.man.in | 27 +++++++++++++++++++- docs/sudoers.mdoc.in | 26 +++++++++++++++++++- plugins/sudoers/def_data.c | 4 +++ plugins/sudoers/def_data.h | 4 ++- plugins/sudoers/def_data.in | 3 +++ plugins/sudoers/defaults.c | 1 + plugins/sudoers/policy.c | 6 ++++- src/exec_ptrace.c | 10 +++++--- src/sudo.c | 1 + src/sudo.h | 49 +++++++++++++++++++------------------ 10 files changed, 99 insertions(+), 32 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index 5f73f7ca2c..fadc62382b 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "May 31, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "July 29, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -3399,6 +3399,31 @@ by default. .sp This setting is only supported by version 1.9.8 or higher. .TP 18n +intercept_verify +If set, +\fBsudo\fR +will attempt to verify that a command run in intercept mode has +the expected path name and command line arguments. +The process is stopped after +execve(2) +has completed but before the new command has had a chance to run. +In the case of a path name or argument mismatch, the command will be sent a +\fRSIGKILL\fR +signal and terminated. +This flag has no effect unless the +\fIintercept\fR +flag is enabled or the +\fIINTERCEPT\fR +tag has been set for the command and the +\fIintercept_type\fR +option is set to +\fItrace\fR. +This flag is +\fIon\fR +by default. +.sp +This setting is only supported by version 1.9.12 or higher. +.TP 18n netgroup_tuple If set, netgroup lookups will be performed using the full netgroup tuple: host name, user name, and domain (if one is set). diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 29aeacfdde..f4987d8ea5 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd May 31, 2022 +.Dd July 29, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -3220,6 +3220,30 @@ This flag is by default. .Pp This setting is only supported by version 1.9.8 or higher. +.It intercept_verify +If set, +.Nm sudo +will attempt to verify that a command run in intercept mode has +the expected path name and command line arguments. +The process is stopped after +.Xr execve 2 +has completed but before the new command has had a chance to run. +In the case of a path name or argument mismatch, the command will be sent a +.Dv SIGKILL +signal and terminated. +This flag has no effect unless the +.Em intercept +flag is enabled or the +.Em INTERCEPT +tag has been set for the command and the +.Em intercept_type +option is set to +.Em trace . +This flag is +.Em on +by default. +.Pp +This setting is only supported by version 1.9.12 or higher. .It netgroup_tuple If set, netgroup lookups will be performed using the full netgroup tuple: host name, user name, and domain (if one is set). diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index 41de8fc0b4..54b20356e4 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -667,6 +667,10 @@ struct sudo_defs_types sudo_defs_table[] = { "intercept_type", T_TUPLE, N_("The mechanism used by the intercept and log_subcmds options: %s"), def_data_intercept_type, + }, { + "intercept_verify", T_FLAG, + N_("Whether to verify the command and arguments after execution"), + NULL, }, { "apparmor_profile", T_STR, N_("AppArmor profile to use in the new security context: %s"), diff --git a/plugins/sudoers/def_data.h b/plugins/sudoers/def_data.h index 38de4386bb..4d8d36bfc8 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -308,7 +308,9 @@ #define def_passprompt_regex (sudo_defs_table[I_PASSPROMPT_REGEX].sd_un.list) #define I_INTERCEPT_TYPE 153 #define def_intercept_type (sudo_defs_table[I_INTERCEPT_TYPE].sd_un.tuple) -#define I_APPARMOR_PROFILE 154 +#define I_INTERCEPT_VERIFY 154 +#define def_intercept_verify (sudo_defs_table[I_INTERCEPT_VERIFY].sd_un.flag) +#define I_APPARMOR_PROFILE 155 #define def_apparmor_profile (sudo_defs_table[I_APPARMOR_PROFILE].sd_un.str) enum def_tuple { diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index c24d6706cf..645dae6a63 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -479,6 +479,9 @@ intercept_type T_TUPLE "The mechanism used by the intercept and log_subcmds options: %s" dso trace +intercept_verify + T_FLAG + "Whether to verify the command and arguments after execution" apparmor_profile T_STR "AppArmor profile to use in the new security context: %s" diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 9b8c6a76b2..1c993c2d59 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -549,6 +549,7 @@ init_defaults(void) if ((def_rlimit_core = strdup("0,0")) == NULL) goto oom; def_intercept_type = dso; + def_intercept_verify = true; def_netgroup_tuple = false; def_sudoedit_checkdir = true; def_iolog_mode = S_IRUSR|S_IWUSR; diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 5a0852f4da..fe2c20d733 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -636,7 +636,7 @@ sudoers_policy_store_result(bool accepted, char *argv[], char *envp[], } /* Increase the length of command_info as needed, it is *not* checked. */ - command_info = calloc(71, sizeof(char *)); + command_info = calloc(72, sizeof(char *)); if (command_info == NULL) goto oom; @@ -812,6 +812,10 @@ sudoers_policy_store_result(bool accepted, char *argv[], char *envp[], if ((command_info[info_len++] = strdup("use_ptrace=true")) == NULL) goto oom; } + if (def_intercept_verify) { + if ((command_info[info_len++] = strdup("intercept_verify=true")) == NULL) + goto oom; + } if (def_noexec) { if ((command_info[info_len++] = strdup("noexec=true")) == NULL) goto oom; diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 0f7231ae21..310a2f3c6b 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -1532,10 +1532,12 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) } } if (closure->state == POLICY_ACCEPT) { - /* Verify execve(2) args post-exec. */ - if (!ptrace_verify_post_exec(pid, ®s, closure)) { - if (errno != ESRCH) - kill(pid, SIGKILL); + if (ISSET(closure->details->flags, CD_INTERCEPT_VERIFY)) { + /* Verify execve(2) args post-exec. */ + if (!ptrace_verify_post_exec(pid, ®s, closure)) { + if (errno != ESRCH) + kill(pid, SIGKILL); + } } } break; diff --git a/src/sudo.c b/src/sudo.c index 7e26b869c2..f66318dc3e 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -734,6 +734,7 @@ command_info_to_details(char * const info[], struct command_details *details) break; case 'i': SET_FLAG("intercept=", CD_INTERCEPT) + SET_FLAG("intercept_verify=", CD_INTERCEPT_VERIFY) break; case 'l': SET_STRING("login_class=", login_class) diff --git a/src/sudo.h b/src/sudo.h index 756c8db3ab..29628885fc 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -149,30 +149,31 @@ struct user_details { int ts_cols; }; -#define CD_SET_UID 0x000001 -#define CD_SET_EUID 0x000002 -#define CD_SET_GID 0x000004 -#define CD_SET_EGID 0x000008 -#define CD_PRESERVE_GROUPS 0x000010 -#define CD_INTERCEPT 0x000020 -#define CD_NOEXEC 0x000040 -#define CD_SET_PRIORITY 0x000080 -#define CD_SET_UMASK 0x000100 -#define CD_SET_TIMEOUT 0x000200 -#define CD_SUDOEDIT 0x000400 -#define CD_BACKGROUND 0x000800 -#define CD_RBAC_ENABLED 0x001000 -#define CD_USE_PTY 0x002000 -#define CD_SET_UTMP 0x004000 -#define CD_EXEC_BG 0x008000 -#define CD_SUDOEDIT_FOLLOW 0x010000 -#define CD_SUDOEDIT_CHECKDIR 0x020000 -#define CD_SET_GROUPS 0x040000 -#define CD_LOGIN_SHELL 0x080000 -#define CD_OVERRIDE_UMASK 0x100000 -#define CD_LOG_SUBCMDS 0x200000 -#define CD_USE_PTRACE 0x400000 -#define CD_FEXECVE 0x800000 +#define CD_SET_UID 0x00000001 +#define CD_SET_EUID 0x00000002 +#define CD_SET_GID 0x00000004 +#define CD_SET_EGID 0x00000008 +#define CD_PRESERVE_GROUPS 0x00000010 +#define CD_INTERCEPT 0x00000020 +#define CD_NOEXEC 0x00000040 +#define CD_SET_PRIORITY 0x00000080 +#define CD_SET_UMASK 0x00000100 +#define CD_SET_TIMEOUT 0x00000200 +#define CD_SUDOEDIT 0x00000400 +#define CD_BACKGROUND 0x00000800 +#define CD_RBAC_ENABLED 0x00001000 +#define CD_USE_PTY 0x00002000 +#define CD_SET_UTMP 0x00004000 +#define CD_EXEC_BG 0x00008000 +#define CD_SUDOEDIT_FOLLOW 0x00010000 +#define CD_SUDOEDIT_CHECKDIR 0x00020000 +#define CD_SET_GROUPS 0x00040000 +#define CD_LOGIN_SHELL 0x00080000 +#define CD_OVERRIDE_UMASK 0x00100000 +#define CD_LOG_SUBCMDS 0x00200000 +#define CD_USE_PTRACE 0x00400000 +#define CD_FEXECVE 0x00800000 +#define CD_INTERCEPT_VERIFY 0x01000000 struct preserved_fd { TAILQ_ENTRY(preserved_fd) entries; From 3eb6e785697084373ec91f3db5dde3ae2a3e55dc Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 29 Jul 2022 19:51:57 -0600 Subject: [PATCH 058/186] Update a codespell exclude pattern. --- etc/codespell.exclude | 2 +- etc/codespell.ignore | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/etc/codespell.exclude b/etc/codespell.exclude index b74f1560e5..ec46ef6ae3 100644 --- a/etc/codespell.exclude +++ b/etc/codespell.exclude @@ -10,7 +10,7 @@ (TAG_SET((nt).setenv) && (nt).setenv != (ot).setenv) || \ (TAG_SET((nt).send_mail) && (nt).send_mail != (ot).send_mail)) sv sw ta te tg th tr uk ur vi wa wo zh_CN zh_HK - if (!PyArg_ParseTupleAndKeywords(py_args ? py_args : py_empty, py_kwargs, "Ois|i:sudo.ConvMessage", keywords, + if (!PyArg_ParseTupleAndKeywords(py_args ? py_args : py_empty, py_kwargs, "Ois|i:sudo.ConvMessage", (char **)keywords, $ans = ; if ($ans =~ /^[yY]/) { .nr BA @BAMAN@ diff --git a/etc/codespell.ignore b/etc/codespell.ignore index 1fd87a90b0..1b9cc1ba9f 100644 --- a/etc/codespell.ignore +++ b/etc/codespell.ignore @@ -1,4 +1,3 @@ -Ois SOM VAS alloced @@ -8,8 +7,8 @@ ist numer pleas sav +statics thur toke vas wit -statics From 4de5e12ddbd8c6b43f23784e94c1a3bbb02422ee Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 29 Jul 2022 20:18:55 -0600 Subject: [PATCH 059/186] Document the TOCTOU issue with intercept mode. Describe how intercept_verify attempts to reduce the risk. --- docs/sudoers.man.in | 27 +++++++++++++++++++++++++++ docs/sudoers.mdoc.in | 27 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index fadc62382b..b3b7eda8ba 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -3410,6 +3410,12 @@ has completed but before the new command has had a chance to run. In the case of a path name or argument mismatch, the command will be sent a \fRSIGKILL\fR signal and terminated. +This can help prevent a time of check vs. time of use issue with +intercept mode where the +execve(2) +arguments could be altered after the +\fBsudoers\fR +policy check. This flag has no effect unless the \fIintercept\fR flag is enabled or the @@ -7012,6 +7018,27 @@ you can always just try it out and check whether or not external commands run via a shell are logged when \fIintercept\fR is enabled. +.sp +There is an inherent race condition between when a command is checked against +\fBsudoers\fR +rules and when it is actually executed. +If a user is allowed to run arbitrary commands, they may be able +to change the +execve(2) +arguments in the program after the +\fBsudoers\fR +policy check has completed but before the new command is executed. +Starting with version 1.9.12, the +ptrace(2) +method will verify that the command and its arguments have not changed after +execve(2) +has completed but before execution of the new program has had a chance to run. +This is not the case with the +\fIdso\fR +method. +See the description of the +\fIintercept_verify\fR +setting for more information. .RE .TP 10n log diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index f4987d8ea5..b68b973ca9 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -3231,6 +3231,12 @@ has completed but before the new command has had a chance to run. In the case of a path name or argument mismatch, the command will be sent a .Dv SIGKILL signal and terminated. +This can help prevent a time of check vs. time of use issue with +intercept mode where the +.Xr execve 2 +arguments could be altered after the +.Nm +policy check. This flag has no effect unless the .Em intercept flag is enabled or the @@ -6498,6 +6504,27 @@ you can always just try it out and check whether or not external commands run via a shell are logged when .Em intercept is enabled. +.Pp +There is an inherent race condition between when a command is checked against +.Nm +rules and when it is actually executed. +If a user is allowed to run arbitrary commands, they may be able +to change the +.Xr execve 2 +arguments in the program after the +.Nm +policy check has completed but before the new command is executed. +Starting with version 1.9.12, the +.Xr ptrace 2 +method will verify that the command and its arguments have not changed after +.Xr execve 2 +has completed but before execution of the new program has had a chance to run. +This is not the case with the +.Em dso +method. +See the description of the +.Em intercept_verify +setting for more information. .It log There are two separate but related ways to log additional commands. The first is to enable I/O logging using the From 2b5dcf255db7af59e0ab5c01cf9e444e3e641e4f Mon Sep 17 00:00:00 2001 From: Carlo Teubner <435950+c4rlo@users.noreply.github.com> Date: Sun, 31 Jul 2022 17:20:50 +0100 Subject: [PATCH 060/186] visudo.c: add nvim (Neovim) to lineno_editor list Neovim supports it: https://neovim.io/doc/user/starting.html#-+ --- plugins/sudoers/visudo.c | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 5189e5737a..18f362b54d 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -419,6 +419,7 @@ static const char *lineno_editors[] = { "vi", "nvi", "vim", + "nvim", "elvis", "*macs", "mg", From cf250354fca318ad5e44e98befb90cd83fc7cfe4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 1 Aug 2022 13:40:47 -0600 Subject: [PATCH 061/186] Defer chdir(2) until sesh when running with SELinux. We need to be running with the correct security context or the chdir(2) may fail. GitHub issue #160. --- src/exec.c | 22 ++++++++++++++-------- src/selinux.c | 18 +++++++++++++++--- src/sesh.c | 23 +++++++++++++++++++++-- src/sudo.c | 12 ++---------- src/sudo.h | 5 +++-- 5 files changed, 55 insertions(+), 25 deletions(-) diff --git a/src/exec.c b/src/exec.c index d572b2a1bb..237b91a097 100644 --- a/src/exec.c +++ b/src/exec.c @@ -229,13 +229,19 @@ exec_setup(struct command_details *details, int intercept_fd, int errfd) if (details->cwd != NULL) { if (details->chroot != NULL || user_details.cwd == NULL || strcmp(details->cwd, user_details.cwd) != 0) { - /* Note: cwd is relative to the new root, if any. */ - if (chdir(details->cwd) == -1) { - sudo_warn(U_("unable to change directory to %s"), details->cwd); - if (!details->cwd_optional) - goto done; - if (details->chroot != NULL) - sudo_warnx(U_("starting from %s"), "/"); + if (ISSET(details->flags, CD_RBAC_ENABLED)) { + /* For SELinux, chdir(2) in sesh after the context change. */ + SET(details->flags, CD_RBAC_SET_CWD); + } else { + /* Note: cwd is relative to the new root, if any. */ + if (chdir(details->cwd) == -1) { + sudo_warn(U_("unable to change directory to %s"), + details->cwd); + if (!ISSET(details->flags, CD_CWD_OPTIONAL)) + goto done; + if (details->chroot != NULL) + sudo_warnx(U_("starting from %s"), "/"); + } } } } @@ -288,7 +294,7 @@ exec_cmnd(struct command_details *details, sigset_t *mask, #ifdef HAVE_SELINUX if (ISSET(details->flags, CD_RBAC_ENABLED)) { selinux_execve(details->execfd, details->command, details->argv, - details->envp, details->flags); + details->envp, details->cwd, details->flags); } else #endif { diff --git a/src/selinux.c b/src/selinux.c index 8c78e045e0..b4d392ac98 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2016 Todd C. Miller + * Copyright (c) 2009-2022 Todd C. Miller * Copyright (c) 2008 Dan Walsh * * Borrowed heavily from newrole source code @@ -440,7 +440,7 @@ selinux_setexeccon(void) void selinux_execve(int fd, const char *path, char *const argv[], char *envp[], - int flags) + const char *rundir, int flags) { char **nargv; const char *sesh; @@ -470,7 +470,7 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], errno = EINVAL; debug_return; } - nargv = reallocarray(NULL, argc + 3, sizeof(char *)); + nargv = reallocarray(NULL, argc + 4, sizeof(char *)); if (nargv == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return; @@ -484,6 +484,18 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], nargv[0] = (char *)(login_shell ? "-sesh" : "sesh"); } nargc = 1; + if (ISSET(flags, CD_RBAC_SET_CWD)) { + const char *prefix = ISSET(flags, CD_CWD_OPTIONAL) ? "+" : ""; + if (rundir == NULL) { + sudo_warnx("internal error: sesh rundir not set"); + errno = EINVAL; + debug_return; + } + if (asprintf(&nargv[nargc++], "--chdir=%s%s", prefix, rundir) == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return; + } + } if (fd != -1 && asprintf(&nargv[nargc++], "--execfd=%d", fd) == -1) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return; diff --git a/src/sesh.c b/src/sesh.c index f05762ffb8..adce559fd7 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -94,11 +94,30 @@ main(int argc, char *argv[], char *envp[]) SET(flags, CD_NOEXEC); } + /* If argv[1] is --chdir=dir, change to specified dir. */ + if (strncmp(argv[1], "--chdir=", sizeof("--chdir=") - 1) == 0) { + const char *cp = argv[1] + sizeof("--chdir=") - 1; + bool cwd_optional = false; + + /* If run dir starts with a '+', ignore chdir(2) failure. */ + if (*cp == '+') { + cwd_optional = true; + cp++; + } + if (chdir(cp) == -1) { + sudo_warnx(U_("unable to change directory to %s"), cp); + if (!cwd_optional) + exit(EXIT_FAILURE); + } + argv++; + argc--; + } + /* If argv[1] is --execfd=%d, extract the fd to exec with. */ - if (strncmp(argv[1], "--execfd=", 9) == 0) { + if (strncmp(argv[1], "--execfd=", sizeof("--execfd=") - 1) == 0) { const char *errstr; - cp = argv[1] + 9; + cp = argv[1] + sizeof("--execfd=") - 1; fd = sudo_strtonum(cp, 0, INT_MAX, &errstr); if (errstr != NULL) sudo_fatalx(U_("invalid file descriptor number: %s"), cp); diff --git a/src/sudo.c b/src/sudo.c index f66318dc3e..9097004436 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2021 Todd C. Miller + * Copyright (c) 2009-2022 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 @@ -696,15 +696,7 @@ command_info_to_details(char * const info[], struct command_details *details) SET_STRING("chroot=", chroot) SET_STRING("command=", command) SET_STRING("cwd=", cwd) - if (strncmp("cwd_optional=", info[i], sizeof("cwd_optional=") - 1) == 0) { - cp = info[i] + sizeof("cwd_optional=") - 1; - details->cwd_optional = sudo_strtobool(cp); - if (details->cwd_optional == -1) { - errno = EINVAL; - sudo_fatal("%s", info[i]); - } - break; - } + SET_FLAG("cwd_optional=", CD_CWD_OPTIONAL) if (strncmp("closefrom=", info[i], sizeof("closefrom=") - 1) == 0) { cp = info[i] + sizeof("closefrom=") - 1; details->closefrom = sudo_strtonum(cp, 0, INT_MAX, &errstr); diff --git a/src/sudo.h b/src/sudo.h index 29628885fc..f6b7a91305 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -174,6 +174,8 @@ struct user_details { #define CD_USE_PTRACE 0x00400000 #define CD_FEXECVE 0x00800000 #define CD_INTERCEPT_VERIFY 0x01000000 +#define CD_RBAC_SET_CWD 0x02000000 +#define CD_CWD_OPTIONAL 0x04000000 struct preserved_fd { TAILQ_ENTRY(preserved_fd) entries; @@ -191,7 +193,6 @@ struct command_details { int closefrom; int flags; int execfd; - int cwd_optional; struct preserved_fd_list preserved_fds; struct passwd *pw; const char *command; @@ -287,7 +288,7 @@ int selinux_relabel_tty(const char *ttyn, int ttyfd); int selinux_restore_tty(void); int selinux_setexeccon(void); void selinux_execve(int fd, const char *path, char *const argv[], - char *envp[], int flags); + char *envp[], const char *rundir, int flags); /* apparmor.c */ int apparmor_is_enabled(void); From e4f08157b6693b956fe9c7c987bc3eeac1abb2cc Mon Sep 17 00:00:00 2001 From: Tim Shearer Date: Tue, 2 Aug 2022 08:48:32 -0400 Subject: [PATCH 062/186] Fix incorrect SHA384/512 digest calculation. Resolves an issue where certain message sizes result in an incorrect checksum. Specifically, when: (n*8) mod 1024 == 896 where n is the file size in bytes. --- lib/util/sha2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/sha2.c b/lib/util/sha2.c index b7a28cca8f..f769f77f21 100644 --- a/lib/util/sha2.c +++ b/lib/util/sha2.c @@ -490,7 +490,7 @@ SHA512Pad(SHA2_CTX *ctx) SHA512Update(ctx, (uint8_t *)"\200", 1); /* Pad message such that the resulting length modulo 1024 is 896. */ - while ((ctx->count[0] & 1008) != 896) + while ((ctx->count[0] & 1016) != 896) SHA512Update(ctx, (uint8_t *)"\0", 1); /* Append length of message in bits and do final SHA512Transform(). */ From c27acf55eca26e4dcb390053a319426a05ee1d7f Mon Sep 17 00:00:00 2001 From: Li zeming Date: Mon, 1 Aug 2022 11:08:09 +0800 Subject: [PATCH 063/186] util/arc4random: (void*) type pointer passing address could remove cast Signed-off-by: Li zeming --- lib/util/arc4random.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/arc4random.c b/lib/util/arc4random.c index fa892fb606..a517919289 100644 --- a/lib/util/arc4random.c +++ b/lib/util/arc4random.c @@ -150,7 +150,7 @@ _rs_rekey(unsigned char *dat, size_t datlen) static inline void _rs_random_buf(void *_buf, size_t n) { - unsigned char *buf = (unsigned char *)_buf; + unsigned char *buf = _buf; unsigned char *keystream; size_t m; From 393d9997cbc4798e2cb22f4518fbc024ed9d6706 Mon Sep 17 00:00:00 2001 From: Li zeming Date: Mon, 1 Aug 2022 10:46:56 +0800 Subject: [PATCH 064/186] iolog/hostcheck: These two parameters do not need to be initialized and assigned, the following code is directly assigned Signed-off-by: Li zeming --- lib/iolog/hostcheck.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/iolog/hostcheck.c b/lib/iolog/hostcheck.c index 95c14d0591..d23514e8b8 100644 --- a/lib/iolog/hostcheck.c +++ b/lib/iolog/hostcheck.c @@ -188,7 +188,7 @@ matches_common_name(const char *hostname, const char *ipaddr, const X509 *cert, { X509_NAME_ENTRY *common_name_entry = NULL; ASN1_STRING *common_name_asn1 = NULL; - int common_name_loc = -1; + int common_name_loc; debug_decl(matches_common_name, SUDO_DEBUG_UTIL); /* Find the position of the CN field in the Subject field of the certificate */ @@ -268,7 +268,7 @@ matches_subject_alternative_name(const char *hostname, const char *ipaddr, const { HostnameValidationResult result = MatchNotFound; int i; - int san_names_nb = -1; + int san_names_nb; STACK_OF(GENERAL_NAME) *san_names = NULL; debug_decl(matches_subject_alternative_name, SUDO_DEBUG_UTIL); From 556dacf1ff0b8dab0e3d0de4a2e21f71e36fe424 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 2 Aug 2022 14:28:28 -0600 Subject: [PATCH 065/186] Add a way to run a command without updating the cached credentials. This can also be used to test for whether or not the user's credentials are currently cached. --- docs/sudo.man.in | 24 ++++++++++++++++++---- docs/sudo.mdoc.in | 19 +++++++++++++---- plugins/sudoers/check.c | 4 ++-- plugins/sudoers/policy.c | 21 +++++++++++++------ plugins/sudoers/sudoers.h | 3 ++- src/parse_args.c | 34 +++++++++++++++++++++++++------ src/sudo.c | 6 ++++++ src/sudo.h | 43 ++++++++++++++++++++------------------- src/sudo_usage.h.in | 10 ++++----- 9 files changed, 115 insertions(+), 49 deletions(-) diff --git a/docs/sudo.man.in b/docs/sudo.man.in index 15a07c0ac6..8d4f6e30b4 100644 --- a/docs/sudo.man.in +++ b/docs/sudo.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDO" "@mansectsu@" "February 16, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "@mansectsu@" "August 2, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -41,7 +41,7 @@ .HP 5n \fBsudo\fR \fB\-v\fR -[\fB\-ABknS\fR] +[\fB\-ABkNnS\fR] .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] @@ -51,7 +51,7 @@ .HP 5n \fBsudo\fR \fB\-l\fR -[\fB\-ABknS\fR] +[\fB\-ABkNnS\fR] .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] @@ -81,7 +81,7 @@ .br .HP 9n \fBsudoedit\fR -[\fB\-ABknS\fR] +[\fB\-ABkNnS\fR] .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-C\fR\ \fInum\fR] .if \n(LC [\fB\-c\fR\ \fIclass\fR] @@ -532,6 +532,22 @@ is specified but not allowed by the policy, \fBsudo\fR will exit with a status value of 1. .TP 12n +\fB\-N\fR, \fB\--no-update\fR +Do not update the user's cached credentials, even if the user successfully +authenticates. +Unlike the +\fB\-k\fR +flag, existing cached credentials are used if they are valid. +To detect when the user's cached credentials are valid (or when no +authentication is required), the following command can be used: +.RS 18n +sudo -Nnv +.RE +.RS 12n +.sp +Not all security policies support credential caching. +.RE +.TP 12n \fB\-n\fR, \fB\--non-interactive\fR Avoid prompting the user for input of any kind. If a password is required for the command to run, diff --git a/docs/sudo.mdoc.in b/docs/sudo.mdoc.in index 3b1914aa2a..f5a687e741 100644 --- a/docs/sudo.mdoc.in +++ b/docs/sudo.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd February 16, 2022 +.Dd August 2, 2022 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -36,7 +36,7 @@ .Fl h | K | k | V .Nm sudo .Fl v -.Op Fl ABknS +.Op Fl ABkNnS .if \n(BA \{\ .Op Fl a Ar type .\} @@ -46,7 +46,7 @@ .Op Fl u Ar user .Nm sudo .Fl l -.Op Fl ABknS +.Op Fl ABkNnS .if \n(BA \{\ .Op Fl a Ar type .\} @@ -80,7 +80,7 @@ .Op Fl i | s .Op Ar command .Nm sudoedit -.Op Fl ABknS +.Op Fl ABkNnS .if \n(BA \{\ .Op Fl a Ar type .\} @@ -505,6 +505,17 @@ If a is specified but not allowed by the policy, .Nm will exit with a status value of 1. +.It Fl N , -no-update +Do not update the user's cached credentials, even if the user successfully +authenticates. +Unlike the +.Fl k +flag, existing cached credentials are used if they are valid. +To detect when the user's cached credentials are valid (or when no +authentication is required), the following command can be used: +.Dl sudo -Nnv +.Pp +Not all security policies support credential caching. .It Fl n , -non-interactive Avoid prompting the user for input of any kind. If a password is required for the command to run, diff --git a/plugins/sudoers/check.c b/plugins/sudoers/check.c index 6f5d9cc0ad..d6ef6be2a1 100644 --- a/plugins/sudoers/check.c +++ b/plugins/sudoers/check.c @@ -215,8 +215,8 @@ check_user(int validated, int mode) * Only update time stamp if user validated and was approved. * Failure to update the time stamp is not a fatal error. */ - if (ret == true && closure.tstat != TS_ERROR) { - if (ISSET(validated, VALIDATE_SUCCESS)) + if (ret == true && ISSET(validated, VALIDATE_SUCCESS)) { + if (ISSET(mode, MODE_UPDATE_TICKET) && closure.tstat != TS_ERROR) (void)timestamp_update(closure.cookie, closure.auth_pw); } } diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index fe2c20d733..a7d79a6da4 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -84,11 +84,11 @@ parse_bool(const char *line, int varlen, int *flags, int fval) } } -#define RUN_VALID_FLAGS (MODE_ASKPASS|MODE_PRESERVE_ENV|MODE_RESET_HOME|MODE_IMPLIED_SHELL|MODE_LOGIN_SHELL|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_PRESERVE_GROUPS|MODE_SHELL|MODE_RUN|MODE_POLICY_INTERCEPTED) -#define EDIT_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_EDIT) -#define LIST_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_LIST|MODE_CHECK) -#define VALIDATE_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_VALIDATE) -#define INVALIDATE_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_INVALIDATE) +#define RUN_VALID_FLAGS (MODE_ASKPASS|MODE_PRESERVE_ENV|MODE_RESET_HOME|MODE_IMPLIED_SHELL|MODE_LOGIN_SHELL|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_UPDATE_TICKET|MODE_PRESERVE_GROUPS|MODE_SHELL|MODE_RUN|MODE_POLICY_INTERCEPTED) +#define EDIT_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_UPDATE_TICKET|MODE_EDIT) +#define LIST_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_UPDATE_TICKET|MODE_LIST|MODE_CHECK) +#define VALIDATE_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_UPDATE_TICKET|MODE_VALIDATE) +#define INVALIDATE_VALID_FLAGS (MODE_ASKPASS|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_UPDATE_TICKET|MODE_INVALIDATE) /* * Deserialize args, settings and user_info arrays. @@ -102,7 +102,7 @@ sudoers_policy_deserialize_info(void *v, struct defaults_list *defaults) const char *remhost = NULL; unsigned char uuid[16]; char * const *cur; - int flags = 0; + int flags = MODE_UPDATE_TICKET; debug_decl(sudoers_policy_deserialize_info, SUDOERS_DEBUG_PLUGIN); #define MATCHES(s, v) \ @@ -280,6 +280,12 @@ sudoers_policy_deserialize_info(void *v, struct defaults_list *defaults) goto bad; continue; } + if (MATCHES(*cur, "update_ticket=")) { + if (parse_bool(*cur, sizeof("update_ticket") -1, &flags, + MODE_UPDATE_TICKET) == -1) + goto bad; + continue; + } if (MATCHES(*cur, "noninteractive=")) { if (parse_bool(*cur, sizeof("noninteractive") - 1, &flags, MODE_NONINTERACTIVE) == -1) @@ -395,6 +401,9 @@ sudoers_policy_deserialize_info(void *v, struct defaults_list *defaults) } #endif } + /* Ignore ticket trumps update. */ + if (ISSET(flags, MODE_IGNORE_TICKET)) + CLR(flags, MODE_UPDATE_TICKET); user_gid = (gid_t)-1; user_sid = (pid_t)-1; diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index da6d8cde0d..e27067480b 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -201,7 +201,8 @@ struct sudo_user { #define MODE_PRESERVE_ENV 0x00400000 #define MODE_NONINTERACTIVE 0x00800000 #define MODE_IGNORE_TICKET 0x01000000 -#define MODE_POLICY_INTERCEPTED 0x02000000 +#define MODE_UPDATE_TICKET 0x02000000 +#define MODE_POLICY_INTERCEPTED 0x04000000 /* Mode bits allowed for intercepted commands. */ #define MODE_INTERCEPT_MASK (MODE_RUN|MODE_NONINTERACTIVE|MODE_IGNORE_TICKET|MODE_POLICY_INTERCEPTED) diff --git a/src/parse_args.c b/src/parse_args.c index ae8af5dd23..fefd9edd60 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -49,6 +49,7 @@ int tgetpass_flags; */ static void help(void) __attribute__((__noreturn__)); static void usage_excl(void) __attribute__((__noreturn__)); +static void usage_excl_ticket(void) __attribute__((__noreturn__)); /* * Mapping of command line flags to name/value settings. @@ -63,6 +64,7 @@ static struct sudo_settings sudo_settings[] = { { "run_shell" }, { "login_shell" }, { "ignore_ticket" }, + { "update_ticket" }, { "prompt" }, { "selinux_role" }, { "selinux_type" }, @@ -111,8 +113,8 @@ struct environment { * There is a more limited set of options for sudoedit (the sudo-specific * long options are listed first). */ -static const char sudo_short_opts[] = "+Aa:BbC:c:D:Eeg:Hh::iKklnPp:R:r:SsT:t:U:u:Vv"; -static const char edit_short_opts[] = "+Aa:BC:c:D:g:h::knp:R:r:ST:t:u:V"; +static const char sudo_short_opts[] = "+Aa:BbC:c:D:Eeg:Hh::iKklNnPp:R:r:SsT:t:U:u:Vv"; +static const char edit_short_opts[] = "+Aa:BC:c:D:g:h::KkNnp:R:r:ST:t:u:V"; static struct option sudo_long_opts[] = { /* sudo-specific long options */ { "background", no_argument, NULL, 'b' }, @@ -137,6 +139,7 @@ static struct option sudo_long_opts[] = { { "help", no_argument, NULL, 'h' }, { "host", required_argument, NULL, OPT_HOSTNAME }, { "reset-timestamp", no_argument, NULL, 'k' }, + { "no-update", no_argument, NULL, 'N' }, { "non-interactive", no_argument, NULL, 'n' }, { "prompt", required_argument, NULL, 'p' }, { "chroot", required_argument, NULL, 'R' }, @@ -403,15 +406,16 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, sudo_settings[ARG_LOGIN_SHELL].value = "true"; SET(flags, MODE_LOGIN_SHELL); break; - case 'k': - sudo_settings[ARG_IGNORE_TICKET].value = "true"; - break; case 'K': - sudo_settings[ARG_IGNORE_TICKET].value = "true"; if (mode && mode != MODE_KILL) usage_excl(); mode = MODE_KILL; valid_flags = 0; + FALLTHROUGH; + case 'k': + if (sudo_settings[ARG_UPDATE_TICKET].value != NULL) + usage_excl_ticket(); + sudo_settings[ARG_IGNORE_TICKET].value = "true"; break; case 'l': if (mode) { @@ -423,6 +427,11 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, mode = MODE_LIST; valid_flags = LIST_VALID_FLAGS; break; + case 'N': + if (sudo_settings[ARG_IGNORE_TICKET].value != NULL) + usage_excl_ticket(); + sudo_settings[ARG_UPDATE_TICKET].value = "false"; + break; case 'n': SET(flags, MODE_NONINTERACTIVE); sudo_settings[ARG_NONINTERACTIVE].value = "true"; @@ -758,6 +767,19 @@ usage_excl(void) usage(); } +/* + * Tell which options are mutually exclusive and exit. + */ +static void +usage_excl_ticket(void) +{ + debug_decl(usage_excl_ticket, SUDO_DEBUG_ARGS); + + sudo_warnx("%s", + U_("Only one of the -K, -k or -N options may be specified")); + usage(); +} + static void help(void) { diff --git a/src/sudo.c b/src/sudo.c index 9097004436..18beb1bd82 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -1065,6 +1065,12 @@ format_plugin_settings(struct plugin_container *plugin) unsigned int i = 0; debug_decl(format_plugin_settings, SUDO_DEBUG_PCOMM); + /* We update the ticket entry by default. */ + if (sudo_settings[ARG_IGNORE_TICKET].value == NULL && + sudo_settings[ARG_UPDATE_TICKET].value == NULL) { + sudo_settings[ARG_UPDATE_TICKET].value = "true"; + } + /* Determine sudo_settings array size (including plugin_path and NULL) */ plugin_settings_size = 2; for (setting = sudo_settings; setting->name != NULL; setting++) diff --git a/src/sudo.h b/src/sudo.h index f6b7a91305..c0d2dcfbb0 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -84,27 +84,28 @@ #define ARG_USER_SHELL 5 #define ARG_LOGIN_SHELL 6 #define ARG_IGNORE_TICKET 7 -#define ARG_PROMPT 8 -#define ARG_SELINUX_ROLE 9 -#define ARG_SELINUX_TYPE 10 -#define ARG_RUNAS_USER 11 -#define ARG_PROGNAME 12 -#define ARG_IMPLIED_SHELL 13 -#define ARG_PRESERVE_GROUPS 14 -#define ARG_NONINTERACTIVE 15 -#define ARG_SUDOEDIT 16 -#define ARG_CLOSEFROM 17 -#define ARG_NET_ADDRS 18 -#define ARG_MAX_GROUPS 19 -#define ARG_PLUGIN_DIR 20 -#define ARG_REMOTE_HOST 21 -#define ARG_TIMEOUT 22 -#define ARG_CHROOT 23 -#define ARG_CWD 24 -#define ARG_ASKPASS 25 -#define ARG_INTERCEPT_SETID 26 -#define ARG_INTERCEPT_PTRACE 27 -#define ARG_APPARMOR_PROFILE 28 +#define ARG_UPDATE_TICKET 8 +#define ARG_PROMPT 9 +#define ARG_SELINUX_ROLE 10 +#define ARG_SELINUX_TYPE 11 +#define ARG_RUNAS_USER 12 +#define ARG_PROGNAME 13 +#define ARG_IMPLIED_SHELL 14 +#define ARG_PRESERVE_GROUPS 15 +#define ARG_NONINTERACTIVE 16 +#define ARG_SUDOEDIT 17 +#define ARG_CLOSEFROM 18 +#define ARG_NET_ADDRS 19 +#define ARG_MAX_GROUPS 20 +#define ARG_PLUGIN_DIR 21 +#define ARG_REMOTE_HOST 22 +#define ARG_TIMEOUT 23 +#define ARG_CHROOT 24 +#define ARG_CWD 25 +#define ARG_ASKPASS 26 +#define ARG_INTERCEPT_SETID 27 +#define ARG_INTERCEPT_PTRACE 28 +#define ARG_APPARMOR_PROFILE 29 /* * Flags for tgetpass() diff --git a/src/sudo_usage.h.in b/src/sudo_usage.h.in index fce40d30c0..9b85a85800 100644 --- a/src/sudo_usage.h.in +++ b/src/sudo_usage.h.in @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2007-2010, 2013, 2015, 2017, 2020 + * Copyright (c) 2007-2010, 2013, 2015, 2017, 2020-2022 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -26,10 +26,10 @@ */ #define SUDO_USAGE0 " -h | -V" #define SUDO_USAGE1 " -h | -K | -k | -V" -#define SUDO_USAGE2 " -v [-ABknS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-u user]" -#define SUDO_USAGE3 " -l [-ABknS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-U user] [-u user] [command]" -#define SUDO_USAGE4 " [-ABbEHknPS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] [-D directory] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] [VAR=value] [-i|-s] []" -#define SUDO_USAGE5 " -e [-ABknS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] file ..." +#define SUDO_USAGE2 " -v [-ABkNnS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-u user]" +#define SUDO_USAGE3 " -l [-ABkNnS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-U user] [-u user] [command]" +#define SUDO_USAGE4 " [-ABbEHkNnPS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] [-D directory] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] [VAR=value] [-i|-s] []" +#define SUDO_USAGE5 " -e [-ABkNnS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] file ..." /* * Configure script arguments used to build sudo. From 9c61d7e6e99decc0366e97dcb32ca3d8aa1c7d72 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 2 Aug 2022 14:28:29 -0600 Subject: [PATCH 066/186] Bump the sudo plugin minor version. The "update_ticket" entry was added to the settings list and the "intercept_verify" entry was added to the command_info list. --- docs/sudo_plugin.mdoc.in | 17 +++++++++++++++-- include/sudo_plugin.h | 2 +- ...ultiple_approval_plugin_and_arguments.stdout | 4 ++-- src/exec.c | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/docs/sudo_plugin.mdoc.in b/docs/sudo_plugin.mdoc.in index 24f2f5976d..8724f64a97 100644 --- a/docs/sudo_plugin.mdoc.in +++ b/docs/sudo_plugin.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd May 26, 2022 +.Dd August 2, 2022 .Dt SUDO_PLUGIN @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -4771,7 +4771,20 @@ entries were added to the .Li settings list. The -.Em user_ptrace +.Em apparmor_profile +and +.Em use_ptrace +entries were added to the +.Li command_info +list. +.It Version 1.20 (sudo 1.9.12) +The +.Em update_ticket +entry was added to the +.Li settings +list. +The +.Em intercept_verify entry was added to the .Li command_info list. diff --git a/include/sudo_plugin.h b/include/sudo_plugin.h index 032a5fd48d..45c30ce353 100644 --- a/include/sudo_plugin.h +++ b/include/sudo_plugin.h @@ -21,7 +21,7 @@ /* API version major/minor */ #define SUDO_API_VERSION_MAJOR 1 -#define SUDO_API_VERSION_MINOR 19 +#define SUDO_API_VERSION_MINOR 20 #define SUDO_API_MKVERSION(x, y) (((x) << 16) | (y)) #define SUDO_API_VERSION SUDO_API_MKVERSION(SUDO_API_VERSION_MAJOR, SUDO_API_VERSION_MINOR) diff --git a/plugins/python/regress/testdata/check_multiple_approval_plugin_and_arguments.stdout b/plugins/python/regress/testdata/check_multiple_approval_plugin_and_arguments.stdout index d0c1566cf3..9884aa0df5 100644 --- a/plugins/python/regress/testdata/check_multiple_approval_plugin_and_arguments.stdout +++ b/plugins/python/regress/testdata/check_multiple_approval_plugin_and_arguments.stdout @@ -26,7 +26,7 @@ "INFO1=VALUE1", "info2=value2" ], - "version": "1.19" + "version": "1.20" } (APPROVAL 2) Constructed: { @@ -56,7 +56,7 @@ "INFO1=VALUE1", "info2=value2" ], - "version": "1.19" + "version": "1.20" } (APPROVAL 1) Show version was called with arguments: (0,) Python approval plugin (API 1.0): ApprovalTestPlugin (loaded from 'SRC_DIR/regress/plugin_approval_test.py') diff --git a/src/exec.c b/src/exec.c index 237b91a097..eaae6477be 100644 --- a/src/exec.c +++ b/src/exec.c @@ -360,7 +360,7 @@ sudo_terminated(struct command_status *cstat) debug_return_bool(false); } -#if SUDO_API_VERSION != SUDO_API_MKVERSION(1, 19) +#if SUDO_API_VERSION != SUDO_API_MKVERSION(1, 20) # error "Update sudo_needs_pty() after changing the plugin API" #endif static bool From b422ddea75124a0af2fa0149a23f9563766daf00 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 2 Aug 2022 14:28:30 -0600 Subject: [PATCH 067/186] Sudo 1.9.12. --- NEWS | 46 ++++++++++++++++++++++++++++++++++++++++++++++ configure | 18 +++++++++--------- configure.ac | 2 +- 3 files changed, 56 insertions(+), 10 deletions(-) diff --git a/NEWS b/NEWS index 10744d3266..fd3c830283 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,49 @@ +What's new in Sudo 1.9.12 + + * Fixed a bug in the ptrace-based intercept mode where the current + working directory could include garbage at the end. + + * Fixed a compilation error on systems that lack the stdint.h + header. Bug #1035 + + * Fixed a bug when logging the command's exit status in intercept + mode. The wrong command could be logged with the exit status. + + * For ptrace-based intercept mode, sudo will now attempt to + verify that the command path name, arguments and environment + have not changed from the time when they were authorized by the + security policy. The new "intercept_verify" sudoers setting can + be used to control this behavior. + + * Fixed running commands with a relative path (e.g. ./foo) in + intercept mode. Previously, this would fail if sudo's current + working directory was different from that of the command. + + * Sudo now supports passing the execve(2) system call the NULL + pointer for the `argv` and/or `envp` arguments when in intercept + mode. Linux treats a NULL pointer like an empty array. + + * The sudoers LDAP schema now allows sudoUser, sudoRunasUser and + sudoRunasGroup to include UTF-8 characters, not just 7-bit ASCII. + + * Fixed a problem with "sudo -i" on SELinux when the target user's + home directory is not searchable by sudo. GitHub issue #160. + + * Neovim has been added to the list of visudo editors that support + passing the line number on the command line. + + * Fixed a bug in the SHA384/512 message digest padding. + + * Added a new "-N" (--no-update) command line option to sudo which + can be used to prevent sudo from updating the user's cached + credentials. It is now possible to determine whether or not a + user's cached credentials are currently valid by running: + + $ sudo -Nnv + + and checking the exit value. One use case for this is to indicate + in a shell prompt that sudo is "active" for the user. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts diff --git a/configure b/configure index cd658a2ae8..276f7affd2 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.71 for sudo 1.9.11p3. +# Generated by GNU Autoconf 2.71 for sudo 1.9.12. # # Report bugs to . # @@ -621,8 +621,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.9.11p3' -PACKAGE_STRING='sudo 1.9.11p3' +PACKAGE_VERSION='1.9.12' +PACKAGE_STRING='sudo 1.9.12' PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/' PACKAGE_URL='' @@ -1640,7 +1640,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.11p3 to adapt to many kinds of systems. +\`configure' configures sudo 1.9.12 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1706,7 +1706,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.9.11p3:";; + short | recursive ) echo "Configuration of sudo 1.9.12:";; esac cat <<\_ACEOF @@ -1996,7 +1996,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.9.11p3 +sudo configure 1.9.12 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2653,7 +2653,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.11p3, which was +It was created by sudo $as_me 1.9.12, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -33050,7 +33050,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.11p3, which was +This file was extended by sudo $as_me 1.9.12, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -33118,7 +33118,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -sudo config.status 1.9.11p3 +sudo config.status 1.9.12 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 676166bf52..1a67cea995 100644 --- a/configure.ac +++ b/configure.ac @@ -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.70]) -AC_INIT([sudo], [1.9.11p3], [https://bugzilla.sudo.ws/], [sudo]) +AC_INIT([sudo], [1.9.12], [https://bugzilla.sudo.ws/], [sudo]) AC_CONFIG_HEADERS([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) AC_CONFIG_AUX_DIR([scripts]) From 9ebaabfdded049f740b3180a98e4131aa4971178 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 4 Aug 2022 09:35:06 -0600 Subject: [PATCH 068/186] sudo_dso_load: restore original error for AIX on failure. For AIX, if dlopen() fails we try again with RTLD_MEMBER set and a default member (shr.o or shr_64.o). However, if that also fails, the user will receive a useless error message that doesn't correspond to the actual problem. We now retry the original dlopen() if the fallback to RTLD_MEMBER fails, which has the effect of restoring the original error message. --- lib/util/sudo_dso.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/util/sudo_dso.c b/lib/util/sudo_dso.c index 0c8a08ef29..cecdf97b68 100644 --- a/lib/util/sudo_dso.c +++ b/lib/util/sudo_dso.c @@ -217,6 +217,10 @@ sudo_dso_load_v1(const char *path, int mode) ret = dlopen(cp, flags|RTLD_MEMBER); free(cp); } + if (ret == NULL) { + /* Retry with the original path so we get the correct error. */ + ret = dlopen(path, flags); + } } #endif /* RTLD_MEMBER */ From a366c623f17aef75f49abf48098fbde87a230ec8 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 4 Aug 2022 13:11:07 -0600 Subject: [PATCH 069/186] Use our own arc4random() in preference to the glibc version. The glibc arc4random() may fail in chroot on older kernels and exit. --- configure | 4 ++++ configure.ac | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/configure b/configure index 276f7affd2..a7244dfe79 100755 --- a/configure +++ b/configure @@ -17851,6 +17851,10 @@ fi # We use our own getentropy() by default on Linux. : ${ac_cv_func_getentropy='no'} + # The glibc arc4random() may fail in chroot on older kernels. + # We use our own arc4random() by default on Linux. + : ${ac_cv_func_arc4random='no'} + # The glibc closefrom() emulation may fail in chroot. # We use our own closefrom() by default on Linux. : ${ac_cv_func_closefrom='no'} diff --git a/configure.ac b/configure.ac index 1a67cea995..0fd9db0b35 100644 --- a/configure.ac +++ b/configure.ac @@ -2080,6 +2080,10 @@ case "$host" in # We use our own getentropy() by default on Linux. : ${ac_cv_func_getentropy='no'} + # The glibc arc4random() may fail in chroot on older kernels. + # We use our own arc4random() by default on Linux. + : ${ac_cv_func_arc4random='no'} + # The glibc closefrom() emulation may fail in chroot. # We use our own closefrom() by default on Linux. : ${ac_cv_func_closefrom='no'} From 6e08fa9fb220e26c61fadcc99246c32d47eac49b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 5 Aug 2022 10:09:39 -0600 Subject: [PATCH 070/186] Update copyright year for embedded zlib. --- LICENSE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index 89cab969f7..8c61f3728a 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -296,7 +296,7 @@ The file getentropy.c bears the following license: The embedded copy of zlib bears the following license: - Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages From 2f3afd14ed5333fa268877490cb4aa6f1c9540d1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 8 Aug 2022 07:43:00 -0600 Subject: [PATCH 071/186] In putenv(3) replacement reject a string with no '=' or that starts with one. --- plugins/sudoers/env.c | 9 ++++++++- src/env_hooks.c | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/env.c b/plugins/sudoers/env.c index 9e092b2502..887d6468f8 100644 --- a/plugins/sudoers/env.c +++ b/plugins/sudoers/env.c @@ -318,8 +318,15 @@ sudo_putenv_nodebug(char *str, bool dupcheck, bool overwrite) const char *equal; bool found = false; + /* Some putenv(3) implementations check for NULL. */ + if (str == NULL) { + errno = EINVAL; + return -1; + } + + /* The string must contain a '=' char but not start with one. */ equal = strchr(str, '='); - if (equal == NULL) { + if (equal == NULL || equal == str) { errno = EINVAL; return -1; } diff --git a/src/env_hooks.c b/src/env_hooks.c index 5f9a61c751..442efb502e 100644 --- a/src/env_hooks.c +++ b/src/env_hooks.c @@ -76,11 +76,25 @@ static int rpl_putenv(PUTENV_CONST char *string) { char **ep; + const char *equal; size_t len; bool found = false; + /* Some putenv(3) implementations check for NULL. */ + if (string == NULL) { + errno = EINVAL; + return -1; + } + + /* The string must contain a '=' char but not start with one. */ + equal = strchr(string, '='); + if (equal == NULL || equal == string) { + errno = EINVAL; + return -1; + } + /* Look for existing entry. */ - len = (strchr(string, '=') - string) + 1; + len = (equal - string) + 1; for (ep = environ; *ep != NULL; ep++) { if (strncmp(string, *ep, len) == 0) { *ep = (char *)string; From 68b26056f927d87d83441f9c37b49d70f0c730e0 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 11 Aug 2022 19:34:48 -0600 Subject: [PATCH 072/186] regen --- docs/sudo_plugin.man.in | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/sudo_plugin.man.in b/docs/sudo_plugin.man.in index 4fa699e210..d37c6577e4 100644 --- a/docs/sudo_plugin.man.in +++ b/docs/sudo_plugin.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDO_PLUGIN" "5" "May 26, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN" "5" "August 2, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -5383,7 +5383,21 @@ entries were added to the \fRsettings\fR list. The -\fIuser_ptrace\fR +\fIapparmor_profile\fR +and +\fIuse_ptrace\fR +entries were added to the +\fRcommand_info\fR +list. +.TP 6n +Version 1.20 (sudo 1.9.12) +The +\fIupdate_ticket\fR +entry was added to the +\fRsettings\fR +list. +The +\fIintercept_verify\fR entry was added to the \fRcommand_info\fR list. From 158facf6d5852ebc420adca5ff06135b18ee57b8 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 11 Aug 2022 19:34:50 -0600 Subject: [PATCH 073/186] Use multilib rules to look for a 64-bit group plugin on failure. If sudo_dso_load() fails on a 64-bit system, try to load a 64-bit native version of the file using system-dependent multilib rules. If we don't support multilib on the platform, check for a version of the file that ends in "64" before the .so suffix. --- docs/sudoers.man.in | 32 +++++++- docs/sudoers.mdoc.in | 32 +++++++- plugins/sudoers/group_plugin.c | 133 ++++++++++++++++++++++++++++----- 3 files changed, 174 insertions(+), 23 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index b3b7eda8ba..2aaf7fa6c8 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "July 29, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "August 11, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -3410,7 +3410,7 @@ has completed but before the new command has had a chance to run. In the case of a path name or argument mismatch, the command will be sent a \fRSIGKILL\fR signal and terminated. -This can help prevent a time of check vs. time of use issue with +This can help prevent a time of check versus time of use issue with intercept mode where the execve(2) arguments could be altered after the @@ -4979,6 +4979,34 @@ These arguments (if any) will be passed to the plugin's initialization function. If arguments are present, the string must be enclosed in double quotes (\&""). .sp +On 64-bit systems, if the plugin is present but cannot be loaded, +\fBsudoers\fR +will look for a 64-bit version and, if it exists, load that as a fallback. +The exact rules for this vary by system. +On Solaris, if the plugin is stored in a directory ending in +\(lqlib\(rq, +\fBsudoers\fR +will create a fallback path by appending +\(lq/64\(rq +to the directory name; +\fI/usr/lib/sudo_plugin.so\fR +becomes +\fI/usr/lib/64/sudo_plugin.so\fR. +On Linux, a directory ending in +\(lqlib\(rq +will be transformed to +\(lqlib64\(rq +as the fallback path; +\fI/usr/lib/sudo_plugin.so\fR +becomes +\fI/usr/lib64/sudo_plugin.so\fR. +On all other systems, the fallback path is generated by adding a +\(lq64\(rq +before the file extension; +\fIsudo_plugin.so\fR +becomes +\fIsudo_plugin64.so\fR. +.sp For more information see \fIGROUP PROVIDER PLUGINS\fR. .TP 14n diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index b68b973ca9..dffbdc52af 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd July 29, 2022 +.Dd August 11, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -3231,7 +3231,7 @@ has completed but before the new command has had a chance to run. In the case of a path name or argument mismatch, the command will be sent a .Dv SIGKILL signal and terminated. -This can help prevent a time of check vs. time of use issue with +This can help prevent a time of check versus time of use issue with intercept mode where the .Xr execve 2 arguments could be altered after the @@ -4690,6 +4690,34 @@ These arguments (if any) will be passed to the plugin's initialization function. If arguments are present, the string must be enclosed in double quotes .Pq \&"" . .Pp +On 64-bit systems, if the plugin is present but cannot be loaded, +.Nm +will look for a 64-bit version and, if it exists, load that as a fallback. +The exact rules for this vary by system. +On Solaris, if the plugin is stored in a directory ending in +.Dq lib , +.Nm +will create a fallback path by appending +.Dq /64 +to the directory name; +.Pa /usr/lib/sudo_plugin.so +becomes +.Pa /usr/lib/64/sudo_plugin.so . +On Linux, a directory ending in +.Dq lib +will be transformed to +.Dq lib64 +as the fallback path; +.Pa /usr/lib/sudo_plugin.so +becomes +.Pa /usr/lib64/sudo_plugin.so . +On all other systems, the fallback path is generated by adding a +.Dq 64 +before the file extension; +.Pa sudo_plugin.so +becomes +.Pa sudo_plugin64.so . +.Pp For more information see .Sx "GROUP PROVIDER PLUGINS" . .It lecture diff --git a/plugins/sudoers/group_plugin.c b/plugins/sudoers/group_plugin.c index 65bdbeb859..72a35b6ef5 100644 --- a/plugins/sudoers/group_plugin.c +++ b/plugins/sudoers/group_plugin.c @@ -40,6 +40,90 @@ static void *group_handle; static struct sudoers_group_plugin *group_plugin; const char *path_plugin_dir = _PATH_SUDO_PLUGIN_DIR; +/* + * Check for a fallback path when the original group plugin is not loadable. + * Returns true on success, rewriting path and filling in sb, else false. + */ +static bool +group_plugin_fallback(char *path, size_t pathsize, struct stat *sb) +{ +#if defined(__LP64__) + char newpath[PATH_MAX]; + bool ret = false; + int len; + debug_decl(group_plugin_fallback, SUDOERS_DEBUG_UTIL); + +# if defined(__sun__) || defined(__linux__) + /* + * Solaris uses /lib/64 and /usr/lib/64 for 64-bit libraries. + * Linux may use /lib64 and /usr/lib64 for 64-bit libraries. + * If dirname(path) ends in /lib, try /lib/64 (Solaris) or /lib64 (Linux). + */ +# if defined(__sun__) + const char *lib64 = "lib/64"; +# else + const char *lib64 = "lib64"; +# endif + const char *base, *slash; + int dirlen; + + slash = strrchr(path, '/'); + if (slash == NULL) { + goto done; + } + base = slash + 1; + + /* Collapse consecutive slashes. */ + while (slash > path && slash[-1] == '/') { + slash--; + } + + /* If directory ends in /lib/, try again with /lib/64/ or /lib64/. */ + dirlen = slash - path; + if (dirlen < 4 || strncmp(slash - 4, "/lib", 4) != 0) { + goto done; + } + dirlen -= 4; + len = snprintf(newpath, sizeof(newpath), "%.*s/%s/%s", dirlen, path, lib64, + base); +# else /* !__sun__ && !__linux__ */ + /* + * Multilib not supported, check for a path of the form libfoo64.so. + */ + const char *dot; + int plen; + + dot = strrchr(path, '.'); + if (dot == NULL) { + goto done; + } + plen = dot - path; + + /* If basename(path) doesn't match libfoo64.so, try adding the 64. */ + if (plen >= 2 && strncmp(dot - 2, "64", 2) == 0) { + goto done; + } + len = snprintf(newpath, sizeof(newpath), "%.*s64%s", plen, path, dot); +# endif /* __sun__ || __linux__ */ + if (len < 0 || len >= ssizeof(newpath)) { + errno = ENAMETOOLONG; + goto done; + } + if (stat(newpath, sb) == -1) { + goto done; + } + if (strlcpy(path, newpath, pathsize) >= pathsize) { + errno = ENAMETOOLONG; + goto done; + } + ret = true; +done: + debug_return_bool(ret); +#else + return false; +#endif /* __LP64__ */ +} + /* * Load the specified plugin and run its init function. * Returns -1 if unable to open the plugin, else it returns @@ -52,6 +136,7 @@ group_plugin_load(const char *plugin_info) char *args, path[PATH_MAX]; char **argv = NULL; int len, rc = -1; + bool retry = true; debug_decl(group_plugin_load, SUDOERS_DEBUG_UTIL); /* @@ -72,31 +157,41 @@ group_plugin_load(const char *plugin_info) (*plugin_info != '/') ? path_plugin_dir : "", plugin_info); goto done; } - - /* Check owner and mode of plugin path. */ if (stat(path, &sb) != 0) { sudo_warn("%s", path); goto done; } - if (!sudo_conf_developer_mode()) { - if (sb.st_uid != ROOT_UID) { - sudo_warnx(U_("%s must be owned by uid %d"), path, ROOT_UID); - goto done; - } - if ((sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) { - sudo_warnx(U_("%s must only be writable by owner"), path); - goto done; - } - } - /* Open plugin and map in symbol. */ - group_handle = sudo_dso_load(path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL); - if (!group_handle) { - const char *errstr = sudo_dso_strerror(); - sudo_warnx(U_("unable to load %s: %s"), path, - errstr ? errstr : "unknown error"); - goto done; + for (;;) { + if (!sudo_conf_developer_mode()) { + /* Check owner and mode of plugin path. */ + if (sb.st_uid != ROOT_UID) { + sudo_warnx(U_("%s must be owned by uid %d"), path, ROOT_UID); + goto done; + } + if ((sb.st_mode & (S_IWGRP|S_IWOTH)) != 0) { + sudo_warnx(U_("%s must only be writable by owner"), path); + goto done; + } + } + + group_handle = sudo_dso_load(path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL); + if (group_handle != NULL) { + break; + } + + if (!retry || !group_plugin_fallback(path, sizeof(path), &sb)) { + const char *errstr = sudo_dso_strerror(); + sudo_warnx(U_("unable to load %s: %s"), path, + errstr ? errstr : "unknown error"); + goto done; + } + + /* Retry once with the fallback path. */ + retry = false; } + + /* Map in symbol from group plugin. */ group_plugin = sudo_dso_findsym(group_handle, "group_plugin"); if (group_plugin == NULL) { sudo_warnx(U_("unable to find symbol \"group_plugin\" in %s"), path); From 81a3339df942fa88c86cd5c5ce14e88d29553c81 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 10:21:14 -0600 Subject: [PATCH 074/186] Remove cast from time_t to int to avoid a Coverity false positive. The cast should not be required. --- plugins/sudoers/getdate.c | 2 +- plugins/sudoers/getdate.y | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index 50b23ec2cd..0f06b466c1 100644 --- a/plugins/sudoers/getdate.c +++ b/plugins/sudoers/getdate.c @@ -2103,7 +2103,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, if (Year < EPOCH || (sizeof(time_t) == sizeof(int) && Year > 2038) || Month < 1 || Month > 12 /* Lint fluff: "conversion from long may lose accuracy" */ - || Day < 1 || Day > DaysInMonth[(int)--Month]) + || Day < 1 || Day > DaysInMonth[--Month]) return -1; for (Julian = Day - 1, i = 0; i < Month; i++) diff --git a/plugins/sudoers/getdate.y b/plugins/sudoers/getdate.y index 56e2038661..1e3893c990 100644 --- a/plugins/sudoers/getdate.y +++ b/plugins/sudoers/getdate.y @@ -569,7 +569,7 @@ Convert(time_t Month, time_t Day, time_t Year, time_t Hours, time_t Minutes, if (Year < EPOCH || (sizeof(time_t) == sizeof(int) && Year > 2038) || Month < 1 || Month > 12 /* Lint fluff: "conversion from long may lose accuracy" */ - || Day < 1 || Day > DaysInMonth[(int)--Month]) + || Day < 1 || Day > DaysInMonth[--Month]) return -1; for (Julian = Day - 1, i = 0; i < Month; i++) From d65bcf2ab35c068df6330a64ee13da35b8834aac Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 10:27:01 -0600 Subject: [PATCH 075/186] Avoid a Coverity false positive. --- plugins/sudoers/match_digest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/match_digest.c b/plugins/sudoers/match_digest.c index 1763e8e30c..f1655951e6 100644 --- a/plugins/sudoers/match_digest.c +++ b/plugins/sudoers/match_digest.c @@ -105,9 +105,9 @@ digest_matches(int fd, const char *path, const char *runchroot, } else { /* Convert base64 to binary. */ size_t len = base64_decode(digest->digest_str, sudoers_digest, digest_len); + if (len == (size_t)-1) + goto bad_format; if (len != digest_len) { - if (len == (size_t)-1) - goto bad_format; sudo_warnx( U_("digest for %s (%s) bad length %zu, expected %zu"), path, digest->digest_str, len, digest_len); From 23fa22975cb529b6a1499b523cb27c19c682b0c3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 10:32:19 -0600 Subject: [PATCH 076/186] Handle sysconf(_SC_ARG_MAX) failure, Coverity CID 276504. --- src/exec_ptrace.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 310a2f3c6b..087b9ae554 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -630,14 +630,19 @@ static char * get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, int *argc_out, char ***argv_out, int *envc_out, char ***envp_out) { - char *argbuf, *strtab, *pathname, **argv, **envp; + char *strtab, *pathname, **argv, **envp, *argbuf = NULL; unsigned long path_addr, argv_addr, envp_addr; int argc, envc; size_t bufsize, len; debug_decl(get_execve_info, SUDO_DEBUG_EXEC); /* XXX - Linux allows this to be bigger, see execve(2). */ - bufsize = sysconf(_SC_ARG_MAX) + PATH_MAX; + bufsize = sysconf(_SC_ARG_MAX); + if (bufsize == (size_t)-1) { + sudo_warnx(U_("%s: %s"), __func__, "sysconf"); + goto bad; + } + bufsize += PATH_MAX; argbuf = malloc(bufsize); if (argbuf == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); @@ -1258,6 +1263,10 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, /* Allocate a single buffer for argv, envp and their strings. */ /* XXX - Linux allows this to be bigger, see execve(2). */ bufsize = sysconf(_SC_ARG_MAX); + if (bufsize == (size_t)-1) { + sudo_warnx(U_("%s: %s"), __func__, "sysconf"); + goto done; + } argbuf = malloc(bufsize); if (argbuf == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); From bc5016296d19e399984691c2a7fbb48ee87fc97c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 15:07:25 -0600 Subject: [PATCH 077/186] Handle the case where argc is 0 when rebuilding argv. We need to pass the pathname to the policy plugin in argv[0] so we must be sure to allocate space for it even if argc is 0. --- src/exec_intercept.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index b998638087..8586dba129 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -553,7 +553,14 @@ intercept_check_policy_req(PolicyCheckRequest *req, } } - /* Rebuild argv from PolicyCheckReq so it is NULL-terminated. */ + /* If argv is empty, reserve an extra slot for the command. */ + if (req->n_argv == 0) + req->n_argv = 1; + + /* + * Rebuild argv from PolicyCheckReq so it is NULL-terminated. + * The plugin API requires us to pass the pathname to exec in argv[0]. + */ argv = reallocarray(NULL, req->n_argv + 1, sizeof(char *)); if (argv == NULL) { closure->errstr = N_("unable to allocate memory"); From 48a9126a1b6c70369096d298aa3f638a80a3b8ee Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 15:08:38 -0600 Subject: [PATCH 078/186] Update debug_decl name for sudo_preload_dso -> sudo_preload_dso_alloc change. --- src/exec_preload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/exec_preload.c b/src/exec_preload.c index c8a06e4012..d90fc63225 100644 --- a/src/exec_preload.c +++ b/src/exec_preload.c @@ -190,7 +190,7 @@ sudo_preload_dso_alloc(char *const envp[], const char *dso_file, char *dso_buf = NULL; # endif size_t env_size; - debug_decl(sudo_preload_dso, SUDO_DEBUG_UTIL); + debug_decl(sudo_preload_dso_alloc, SUDO_DEBUG_UTIL); # ifdef _PATH_ASAN_LIB /* From 76bd1bcc956c904a39863c1626394590ca8f71c2 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 15:10:42 -0600 Subject: [PATCH 079/186] copy_vector: treat a NULL pointer as an empty vector. Linux execve(2) allows argv to be NULL so we must allocate an empty vector in this case and not return an error. --- src/sudo_intercept.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/sudo_intercept.c b/src/sudo_intercept.c index 5b11fbf7c0..7c2a2d3e56 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -82,14 +82,12 @@ static char ** copy_vector(char * const *src) { char **copy; - int i, len; + int i, len = 0; debug_decl(copy_vector, SUDO_DEBUG_EXEC); - if (src == NULL) - debug_return_ptr(NULL); - - for (len = 0; src[len] != NULL; len++) { - continue; + if (src != NULL) { + while (src[len] != NULL) + len++; } copy = sudo_mmap_allocarray(len + 1, sizeof(char *)); if (copy == NULL) { From aef4a6188649ca13232cf5bad0ebdded77c4b768 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 15:12:21 -0600 Subject: [PATCH 080/186] Handle the case where argc is 0 when allocating space for argv. We need to pass the pathname to the policy plugin in argv[0] so we must be sure to allocate space for it even if argc is 0. --- src/exec_ptrace.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 087b9ae554..23a0111adb 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -632,7 +632,7 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, { char *strtab, *pathname, **argv, **envp, *argbuf = NULL; unsigned long path_addr, argv_addr, envp_addr; - int argc, envc; + int argc, envc, extra = 0; size_t bufsize, len; debug_decl(get_execve_info, SUDO_DEBUG_EXEC); @@ -660,14 +660,18 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, if (argc == -1 || envc == -1) goto bad; + /* If argv is empty, reserve an extra slot for the command. */ + if (argc == 0) + extra++; + /* Reserve argv and envp at the start of argbuf so they are aligned. */ - if ((argc + 1 + envc + 1) * sizeof(unsigned long) >= bufsize) { + if ((argc + extra + 1 + envc + 1) * sizeof(unsigned long) >= bufsize) { sudo_warnx("%s", U_("insufficient space for execve arguments")); errno = ENOMEM; goto bad; } argv = (char **)argbuf; - envp = argv + argc + 1; + envp = argv + argc + extra + 1; strtab = (char *)(envp + envc + 1); bufsize -= strtab - argbuf; @@ -1246,7 +1250,7 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, } argc = (int)word; - /* argv follows arc, followed by envp. */ + /* argv follows argc, followed by envp. */ sp += regs->wordsize; argv_addr = sp; sp += regs->wordsize * (argc + 1); @@ -1423,10 +1427,18 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) goto done; } + /* We can only pass the pathname to exececute via argv[0] (plugin API). */ + argv[0] = pathname; + if (argc == 0) { + /* Rewrite an empty argv[] with the path to execute. */ + argv[1] = NULL; + argc = 1; + argv_mismatch = true; + } + /* Perform a policy check. */ sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %d: checking policy for %s", __func__, (int)pid, pathname); - argv[0] = pathname; if (!intercept_check_policy(pathname, argc, argv, envc, envp, cwd, closure)) { sudo_warnx("%s", U_(closure->errstr)); From 9f552471bceca7271cc599bd21c2c869bc161ae1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 18 Aug 2022 15:15:06 -0600 Subject: [PATCH 081/186] Treat argv and closure->run_argv of different sizes as a mismatch. If argv and closure->run_argv match up to the point where we hit a NULL but one of them has additional entries, we still need to rewrite argv. --- src/exec_ptrace.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 23a0111adb..ffbd8bdf33 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -1468,6 +1468,8 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) break; } } + if (closure->run_argv[i] != NULL || argv[i] != NULL) + argv_mismatch = true; if (path_mismatch || argv_mismatch) { /* From b2d8909c1965ab0812d5d3fa7f623b07deb854b5 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 19 Aug 2022 11:05:10 -0600 Subject: [PATCH 082/186] ptrace_intercept_execve: fail syscall rather than killing process on error. If the execve(2) args are bogus pointers, we should just return an error instead of killing the process. For consistency with the kernel, convert EIO from ptrace(2) to EFAULT. Also convert some ptrace(2) warnings to debug printfs so sudo is less chatty. --- src/exec_ptrace.c | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index ffbd8bdf33..46b5bd56be 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -348,8 +348,9 @@ ptrace_read_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) for (;;) { word = ptrace(PTRACE_PEEKDATA, pid, addr, NULL); if (word == (unsigned long)-1) { - sudo_warn("%s: ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", - __func__, (int)pid, addr); + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", (int)pid, addr); debug_return_ssize_t(-1); } @@ -653,6 +654,9 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, path_addr = get_sc_arg1(regs); argv_addr = get_sc_arg2(regs); envp_addr = get_sc_arg3(regs); + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: %d: path 0x%lx, argv 0x%lx, envp 0x%lx", __func__, + (int)pid, path_addr, argv_addr, envp_addr); /* Count argv and envp. */ argc = ptrace_get_vec_len(pid, regs, argv_addr); @@ -678,8 +682,9 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, /* Read argv */ len = ptrace_read_vec(pid, regs, argv_addr, argv, strtab, bufsize); if (len == (size_t)-1) { - sudo_warn(U_("unable to read execve %s for process %d"), - "argv", (int)pid); + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to read execve argv for process %d", (int)pid); goto bad; } strtab += len; @@ -688,8 +693,9 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, /* Read envp */ len = ptrace_read_vec(pid, regs, envp_addr, envp, strtab, bufsize); if (len == (size_t)-1) { - sudo_warn(U_("unable to read execve %s for process %d"), - "envp", (int)pid); + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to read execve envp for process %d", (int)pid); goto bad; } strtab += len; @@ -702,8 +708,9 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, } else { len = ptrace_read_string(pid, path_addr, strtab, bufsize); if (len == (size_t)-1) { - sudo_warn(U_("unable to read execve %s for process %d"), - "pathname", (int)pid); + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to read execve pathname for process %d", (int)pid); goto bad; } pathname = strtab; @@ -1286,8 +1293,9 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, /* Read argv */ len = ptrace_read_vec(pid, regs, argv_addr, argv, strtab, bufsize); if (len == (size_t)-1) { - sudo_warn(U_("unable to read execve %s for process %d"), - "argv", (int)pid); + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to read execve argv for process %d", (int)pid); goto done; } strtab += len; @@ -1296,8 +1304,9 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, /* Read envp */ len = ptrace_read_vec(pid, regs, envp_addr, envp, strtab, bufsize); if (len == (size_t)-1) { - sudo_warn(U_("unable to read execve %s for process %d"), - "envp", (int)pid); + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to read execve envp for process %d", (int)pid); goto done; } strtab += len; @@ -1404,11 +1413,11 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) if (buf == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, "%s: %d: unable to get execve info", __func__, (int)pid); - - /* Unrecoverable error, kill the process if it still exists. */ - if (errno != ESRCH) - kill(pid, SIGKILL); - debug_return_bool(false); + /* EIO from ptrace is like EFAULT from the kernel. */ + if (errno == EIO) + errno = EFAULT; + ptrace_fail_syscall(pid, ®s, errno); + goto done; } /* Must have a pathname. */ From 8eb619ac2b1af901ddd253aeaf74c4539f77b1a9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 19 Aug 2022 11:34:40 -0600 Subject: [PATCH 083/186] ptrace_getregs: try to determine compat mode if caller doesn't know. In ptrace_verify_post_exec(), we don't know whether the executable that is now running is a native or compat binary. In most cases ptrace_getregs() will be able to figure it out for us. --- src/exec_ptrace.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 46b5bd56be..fdf1cda62b 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -275,7 +275,7 @@ set_sc_arg4(struct sudo_ptrace_regs *regs, unsigned long addr) * Returns true on success, else false. */ static bool -ptrace_getregs(int pid, struct sudo_ptrace_regs *regs, bool compat) +ptrace_getregs(int pid, struct sudo_ptrace_regs *regs, int compat) { debug_decl(ptrace_getregs, SUDO_DEBUG_EXEC); @@ -283,12 +283,21 @@ ptrace_getregs(int pid, struct sudo_ptrace_regs *regs, bool compat) /* PTRACE_GETREGSET has bugs with the MIPS o32 ABI at least. */ if (ptrace(PTRACE_GETREGS, pid, NULL, ®s->u) == -1) debug_return_bool(false); + if (compat == -1) { + /* Assume that 64-bit executables will have a 64-bit stack pointer. */ + if (reg_sp(®s->u.native) > 0xffffffff) + compat = false; + } # else struct iovec iov; iov.iov_base = ®s->u; iov.iov_len = sizeof(regs->u); if (ptrace(PTRACE_GETREGSET, pid, (void *)NT_PRSTATUS, &iov) == -1) debug_return_bool(false); + if (compat == -1) { + /* Guess compat based on size of register struct returned. */ + compat = iov.iov_len != sizeof(regs->u.native); + } # endif /* __mips__ */ /* Machine-dependent parameters to support compat binaries. */ @@ -297,7 +306,7 @@ ptrace_getregs(int pid, struct sudo_ptrace_regs *regs, bool compat) regs->wordsize = sizeof(int); } else { regs->compat = false; - regs->wordsize = sizeof(unsigned long); + regs->wordsize = sizeof(long); } debug_return_bool(true); @@ -1233,13 +1242,23 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, ret = true; goto done; } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %d: verify %s", __func__, + (int)pid, pathname); - /* Update the registers to get the new stack pointer. */ - if (!ptrace_getregs(pid, regs, regs->compat)) { + /* + * Update the registers to get the new stack pointer. + * We don't know whether this is a native or compat executable + * so ask ptrace_getregs() to figure it out for us (if it can). + */ + if (!ptrace_getregs(pid, regs, -1)) { sudo_warn(U_("unable to get registers for process %d"), (int)pid); goto done; } sp = get_stack_pointer(regs); + if (sp == 0) { + sudo_warnx(U_("invalid stack pointer for process %d"), (int)pid); + goto done; + } /* * We assume the initial stack layout is as follows: @@ -1364,6 +1383,8 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) sudo_warn(U_("unable to get registers for process %d"), (int)pid); debug_return_bool(false); } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %d: compat: %s, wordsize: %u", + __func__, (int)pid, regs.compat ? "true" : "false", regs.wordsize); # ifdef SECCOMP_AUDIT_ARCH_COMPAT if (regs.compat) { From 8145ad12dad529cfd6b3b62eb94f75ebc3f54b7c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 19 Aug 2022 11:37:38 -0600 Subject: [PATCH 084/186] Quiet another -Wwrite-strings warning. --- src/regress/intercept/test_ptrace.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/regress/intercept/test_ptrace.c b/src/regress/intercept/test_ptrace.c index 36b52eef4b..47ff22b639 100644 --- a/src/regress/intercept/test_ptrace.c +++ b/src/regress/intercept/test_ptrace.c @@ -82,16 +82,16 @@ init_debug_files(struct sudo_conf_debug_file_list *file_list, case 0: debug_return; case 1: - file->debug_flags = "exec@diag"; + file->debug_flags = (char *)"exec@diag"; break; case 2: - file->debug_flags = "exec@info"; + file->debug_flags = (char *)"exec@info"; break; default: - file->debug_flags = "exec@debug"; + file->debug_flags = (char *)"exec@debug"; break; } - file->debug_file = "/dev/stderr"; + file->debug_file = (char *)"/dev/stderr"; TAILQ_INSERT_HEAD(file_list, file, entries); debug_return; From c948717bd419ce58a80b0577fc9d1110970c653e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 19 Aug 2022 13:37:49 -0600 Subject: [PATCH 085/186] Fix shadowed variable warning on aarch64. --- src/exec_ptrace.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/exec_ptrace.h b/src/exec_ptrace.h index 4340a48ea0..529c70ba08 100644 --- a/src/exec_ptrace.h +++ b/src/exec_ptrace.h @@ -88,9 +88,9 @@ # define reg_arg4(x) (x).regs[3] /* x3 */ # define reg_set_syscall(_r, _nr) do { \ struct iovec _iov; \ - long syscallno = (_nr); \ - _iov.iov_base = &syscallno; \ - _iov.iov_len = sizeof(syscallno); \ + long _syscallno = (_nr); \ + _iov.iov_base = &_syscallno; \ + _iov.iov_len = sizeof(_syscallno); \ ptrace(PTRACE_SETREGSET, pid, NT_ARM_SYSTEM_CALL, &_iov); \ } while (0) #elif defined(__arm__) From a3a181df07efccc0d28571775cf1221f2ec31be9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 20 Aug 2022 14:36:29 -0600 Subject: [PATCH 086/186] Fix shadowed variable warning. --- src/sesh.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sesh.c b/src/sesh.c index adce559fd7..ab4bc78720 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -96,10 +96,10 @@ main(int argc, char *argv[], char *envp[]) /* If argv[1] is --chdir=dir, change to specified dir. */ if (strncmp(argv[1], "--chdir=", sizeof("--chdir=") - 1) == 0) { - const char *cp = argv[1] + sizeof("--chdir=") - 1; bool cwd_optional = false; /* If run dir starts with a '+', ignore chdir(2) failure. */ + cp = argv[1] + sizeof("--chdir=") - 1; if (*cp == '+') { cwd_optional = true; cp++; From 4d58fc904da6f8df7f1699b0c0d5d50060e039dd Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 22 Aug 2022 09:04:44 -0600 Subject: [PATCH 087/186] Correct type of sudoers_audit. GitHub issue #61 --- src/preload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/preload.c b/src/preload.c index 40348dc383..5bfd9fd87e 100644 --- a/src/preload.c +++ b/src/preload.c @@ -42,7 +42,7 @@ extern struct policy_plugin sudoers_policy; extern struct io_plugin sudoers_io; -extern struct io_plugin sudoers_audit; +extern struct audit_plugin sudoers_audit; static struct sudo_preload_symbol sudo_rtld_default_symbols[] = { # ifdef HAVE_GSS_KRB5_CCACHE_NAME From 3d995f7e58a38b42b41ba94026e2b7a3042d9df4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 22 Aug 2022 11:46:46 -0600 Subject: [PATCH 088/186] ptrace_getregs: make compat check more generic No need to use different checks for mips and non-mips, the compiler will optimize away the superfluous check. --- src/exec_ptrace.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index fdf1cda62b..901f974352 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -283,22 +283,26 @@ ptrace_getregs(int pid, struct sudo_ptrace_regs *regs, int compat) /* PTRACE_GETREGSET has bugs with the MIPS o32 ABI at least. */ if (ptrace(PTRACE_GETREGS, pid, NULL, ®s->u) == -1) debug_return_bool(false); - if (compat == -1) { - /* Assume that 64-bit executables will have a 64-bit stack pointer. */ - if (reg_sp(®s->u.native) > 0xffffffff) - compat = false; - } # else struct iovec iov; iov.iov_base = ®s->u; iov.iov_len = sizeof(regs->u); if (ptrace(PTRACE_GETREGSET, pid, (void *)NT_PRSTATUS, &iov) == -1) debug_return_bool(false); +# endif /* __mips__ */ if (compat == -1) { - /* Guess compat based on size of register struct returned. */ - compat = iov.iov_len != sizeof(regs->u.native); +# ifdef SECCOMP_AUDIT_ARCH_COMPAT + if (sizeof(regs->u.native) != sizeof(regs->u.compat)) { + /* Guess compat based on size of register struct returned. */ + compat = iov.iov_len != sizeof(regs->u.native); + } else { + /* Assume a 64-bit executable will have a 64-bit stack pointer. */ + compat = reg_sp(regs->u.native) < 0xffffffff; + } +# else + compat = false; +# endif /* SECCOMP_AUDIT_ARCH_COMPAT */ } -# endif /* __mips__ */ /* Machine-dependent parameters to support compat binaries. */ if (compat) { From 966eae6bf343aeeb136501fc228e4bfc7ea547db Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 23 Aug 2022 11:12:51 -0600 Subject: [PATCH 089/186] intercept_verify also compares the environment. Also mention the overhead involved in checking things. --- docs/sudoers.man.in | 24 ++++++++++++++++++++---- docs/sudoers.mdoc.in | 24 ++++++++++++++++++++---- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index 2aaf7fa6c8..e1a0decfb7 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "August 11, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "August 23, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -3403,19 +3403,35 @@ intercept_verify If set, \fBsudo\fR will attempt to verify that a command run in intercept mode has -the expected path name and command line arguments. -The process is stopped after +the expected path name, command line arguments and environment. +.sp +The process will be stopped after execve(2) has completed but before the new command has had a chance to run. -In the case of a path name or argument mismatch, the command will be sent a +To verify the command, +\fBsudo\fR +will read the command's path from +\fI/proc/PID/exe\fR, +the command line arguments and environment from the process's memory, +and compare them against the arguments that were passed to +execve(2). +In the event of a mismatch, the command will be sent a \fRSIGKILL\fR signal and terminated. +.sp This can help prevent a time of check versus time of use issue with intercept mode where the execve(2) arguments could be altered after the \fBsudoers\fR policy check. +The checks can only be performed if the +proc(@mansectform@) +file system is available. +The additional overhead from +\fIintercept_verify\fR +can slow down intercept mode considerably for shell scripts that +execute a large number of commands. This flag has no effect unless the \fIintercept\fR flag is enabled or the diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index dffbdc52af..920c62eda6 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 11, 2022 +.Dd August 23, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -3224,19 +3224,35 @@ This setting is only supported by version 1.9.8 or higher. If set, .Nm sudo will attempt to verify that a command run in intercept mode has -the expected path name and command line arguments. -The process is stopped after +the expected path name, command line arguments and environment. +.Pp +The process will be stopped after .Xr execve 2 has completed but before the new command has had a chance to run. -In the case of a path name or argument mismatch, the command will be sent a +To verify the command, +.Nm sudo +will read the command's path from +.Pa /proc/PID/exe , +the command line arguments and environment from the process's memory, +and compare them against the arguments that were passed to +.Xr execve 2 . +In the event of a mismatch, the command will be sent a .Dv SIGKILL signal and terminated. +.Pp This can help prevent a time of check versus time of use issue with intercept mode where the .Xr execve 2 arguments could be altered after the .Nm policy check. +The checks can only be performed if the +.Xr proc @mansectform@ +file system is available. +The additional overhead from +.Em intercept_verify +can slow down intercept mode considerably for shell scripts that +execute a large number of commands. This flag has no effect unless the .Em intercept flag is enabled or the From 22dad3f59c91e49e15cd9f57ab67da87fd27ad18 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 25 Aug 2022 09:33:42 -0600 Subject: [PATCH 090/186] Only set MODE_POLICY_INTERCEPTED on subsequent policy checks. This fixes a bug where MODE_POLICY_INTERCEPTED was set too early if the intercept option was set globally in sudoers. It should only be set after the original command has executed. --- plugins/sudoers/sudoers.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 9b90cb90d1..e53ab82f2c 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -398,16 +398,16 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], debug_return_int(-1); } - /* Was previous command was intercepted? */ - if (ISSET(sudo_mode, MODE_RUN) && def_intercept) - SET(sudo_mode, MODE_POLICY_INTERCEPTED); + if (need_reinit) { + /* Was previous command intercepted? */ + if (ISSET(sudo_mode, MODE_RUN) && def_intercept) + SET(sudo_mode, MODE_POLICY_INTERCEPTED); - /* Only certain mode flags are legal for intercepted commands. */ - if (ISSET(sudo_mode, MODE_POLICY_INTERCEPTED)) - sudo_mode &= MODE_INTERCEPT_MASK; + /* Only certain mode flags are legal for intercepted commands. */ + if (ISSET(sudo_mode, MODE_POLICY_INTERCEPTED)) + sudo_mode &= MODE_INTERCEPT_MASK; - /* Re-initialize defaults if we are called multiple times. */ - if (need_reinit) { + /* Re-initialize defaults if we are called multiple times. */ if (!sudoers_reinit_defaults()) debug_return_int(-1); } From 36747f89a80e2da550ab924202b05513a5f89013 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 25 Aug 2022 09:35:42 -0600 Subject: [PATCH 091/186] Skip all of check_user() for intercept unless intercept_authenticate set. Previously we were calling the PAM approval modules even in intercept mode which can take a lot of time. We may wish to make PAM approval configurable in intercept mode in the future. --- plugins/sudoers/check.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/sudoers/check.c b/plugins/sudoers/check.c index d6ef6be2a1..d7bfd9ad1d 100644 --- a/plugins/sudoers/check.c +++ b/plugins/sudoers/check.c @@ -164,6 +164,16 @@ check_user(int validated, int mode) bool exempt = false; debug_decl(check_user, SUDOERS_DEBUG_AUTH); + /* + * In intercept mode, only check the user if configured to do so. + * We already have a session so no need to init the auth subsystem. + */ + if (ISSET(sudo_mode, MODE_POLICY_INTERCEPTED)) { + if (!def_intercept_authenticate) { + debug_return_int(true); + } + } + /* * Init authentication system regardless of whether we need a password. * Required for proper PAM session support. @@ -310,10 +320,6 @@ user_is_exempt(void) bool ret = false; debug_decl(user_is_exempt, SUDOERS_DEBUG_AUTH); - if (ISSET(sudo_mode, MODE_POLICY_INTERCEPTED)) { - if (!def_intercept_authenticate) - ret = true; - } if (def_exempt_group) { if (user_in_group(sudo_user.pw, def_exempt_group)) ret = true; From 14356c19405c192ee212a60ceb7945ef278e0fe4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 25 Aug 2022 12:37:19 -0600 Subject: [PATCH 092/186] Use process_vm_readv(2) and process_vm_writev(2) if available. This is faster than reading/writing from/to the remote process one word at a time using PTRACE_PEEKDATA and PTRACE_POKEDATA. --- config.h.in | 3 + configure | 10 ++ configure.ac | 4 + src/exec_ptrace.c | 302 +++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 302 insertions(+), 17 deletions(-) diff --git a/config.h.in b/config.h.in index c9c024a154..b2fd69e347 100644 --- a/config.h.in +++ b/config.h.in @@ -686,6 +686,9 @@ /* Define to 1 if you have the `priv_set' function. */ #undef HAVE_PRIV_SET +/* Define to 1 if you have the `process_vm_readv' function. */ +#undef HAVE_PROCESS_VM_READV + /* Define to 1 if you have the header file. */ #undef HAVE_PROCFS_H diff --git a/configure b/configure index a7244dfe79..f9d1a199cc 100755 --- a/configure +++ b/configure @@ -17858,6 +17858,16 @@ fi # The glibc closefrom() emulation may fail in chroot. # We use our own closefrom() by default on Linux. : ${ac_cv_func_closefrom='no'} + + # Linux 3.2 supports reading/writing a another process + # without using ptrace(2). + ac_fn_c_check_func "$LINENO" "process_vm_readv" "ac_cv_func_process_vm_readv" +if test "x$ac_cv_func_process_vm_readv" = xyes +then : + printf "%s\n" "#define HAVE_PROCESS_VM_READV 1" >>confdefs.h + +fi + ;; *-*-gnu*) # lockf() is broken on the Hurd diff --git a/configure.ac b/configure.ac index 0fd9db0b35..c8bbb1439b 100644 --- a/configure.ac +++ b/configure.ac @@ -2087,6 +2087,10 @@ case "$host" in # The glibc closefrom() emulation may fail in chroot. # We use our own closefrom() by default on Linux. : ${ac_cv_func_closefrom='no'} + + # Linux 3.2 supports reading/writing a another process + # without using ptrace(2). + AC_CHECK_FUNCS([process_vm_readv]) ;; *-*-gnu*) # lockf() is broken on the Hurd diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index 901f974352..e765de01b3 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -65,6 +65,9 @@ # endif static int seccomp_trap_supported = -1; +#ifdef HAVE_PROCESS_VM_READV +static size_t page_size; +#endif /* Register getters and setters. */ # ifdef SECCOMP_AUDIT_ARCH_COMPAT @@ -341,18 +344,76 @@ ptrace_setregs(int pid, struct sudo_ptrace_regs *regs) } /* - * Read the string at addr and store in buf. + * Read the string at addr and store in buf using process_vm_readv(2). + * Returns the number of bytes stored, including the NUL. + */ +static size_t +ptrace_readv_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) +{ + const char *cp, *buf0 = buf; + struct iovec local, remote; + ssize_t nread; + debug_decl(ptrace_read_string, SUDO_DEBUG_EXEC); + + /* + * Read the string via process_vm_readv(2) one page at a time. + * We could do larger reads but since we don't know the length + * of the string, going one page at a time is simplest. + */ + for (;;) { + local.iov_base = buf; + local.iov_len = bufsize; + remote.iov_base = (void *)addr; + remote.iov_len = MIN(bufsize, page_size); + + nread = process_vm_readv(pid, &local, 1, &remote, 1, 0); + switch (nread) { + case -1: + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "process_vm_readv(%d, [0x%lx, %zu], 1, [0x%lx, %zu], 1, 0)", + (int)pid, (unsigned long)local.iov_base, local.iov_len, + (unsigned long)remote.iov_base, remote.iov_len); + debug_return_ssize_t(-1); + case 0: + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "process_vm_readv(%d, [0x%lx, %zu], 1, [0x%lx, %zu], 1, 0): %s", + (int)pid, (unsigned long)local.iov_base, local.iov_len, + (unsigned long)remote.iov_base, remote.iov_len, "premature EOF"); + debug_return_ssize_t(-1); + default: + /* Check for NUL terminator in page. */ + cp = memchr(buf, '\0', nread); + if (cp != NULL) + debug_return_size_t((cp - buf0) + 1); /* includes NUL */ + buf += nread; + bufsize -= nread; + addr += sizeof(unsigned long); + break; + } + } + debug_return_ssize_t(-1); +} + +/* + * Read the string at addr and store in buf using ptrace(2). * Returns the number of bytes stored, including the NUL. */ static size_t ptrace_read_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) { - const char *buf0 = buf; - const char *cp; + const char *cp, *buf0 = buf; unsigned long word; - unsigned int i; + size_t i; debug_decl(ptrace_read_string, SUDO_DEBUG_EXEC); +#ifdef HAVE_PROCESS_VM_READV + i = ptrace_readv_string(pid, addr, buf, bufsize); + if (i != (size_t)-1 || errno != ENOSYS) + debug_return_size_t(i); +#endif /* HAVE_PROCESS_VM_READV */ + /* * Read the string via ptrace(2) one (native) word at a time. * We use the native word size even in compat mode because that @@ -372,7 +433,7 @@ ptrace_read_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) if (bufsize == 0) { sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: %d: out of space reading string", __func__, (int)pid); - debug_return_size_t(-1); + debug_return_ssize_t(-1); } *buf = cp[i]; if (*buf++ == '\0') @@ -390,14 +451,14 @@ ptrace_read_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) */ static size_t ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, - char **vec, char *buf, size_t bufsize) + int count, char **vec, char *buf, size_t bufsize) { # ifdef SECCOMP_AUDIT_ARCH_COMPAT unsigned long next_word = -1; # endif unsigned long word; char *buf0 = buf; - int len = 0; + int i, len = 0; size_t slen; debug_decl(ptrace_read_vec, SUDO_DEBUG_EXEC); @@ -408,7 +469,7 @@ ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, } /* Fill in vector. */ - for (;;) { + for (i = 0; i <= count; i++) { # ifdef SECCOMP_AUDIT_ARCH_COMPAT if (next_word == (unsigned long)-1) { word = ptrace(PTRACE_PEEKDATA, pid, addr, NULL); @@ -434,14 +495,14 @@ ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, case -1: sudo_warn("%s: ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", __func__, (int)pid, addr); - debug_return_size_t(-1); + debug_return_ssize_t(-1); case 0: vec[len] = NULL; debug_return_size_t(buf - buf0); default: slen = ptrace_read_string(pid, word, buf, bufsize); if (slen == (size_t)-1) - debug_return_size_t(-1); + debug_return_ssize_t(-1); vec[len++] = buf; buf += slen; bufsize -= slen; @@ -449,6 +510,8 @@ ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, continue; } } + errno = ENOSPC; + debug_return_ssize_t(-1); } /* @@ -505,21 +568,83 @@ ptrace_get_vec_len(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr) } } +#ifdef HAVE_PROCESS_VM_READV /* - * Write the NUL-terminated string str to addr in the tracee. + * Write the NUL-terminated string str to addr in the tracee using + * process_vm_writev(2). + * Returns the number of bytes written, including trailing NUL. + */ +static size_t +ptrace_writev_string(pid_t pid, unsigned long addr, const char *str0) +{ + const char *str = str0; + size_t len = strlen(str) + 1; + debug_decl(ptrace_writev_string, SUDO_DEBUG_EXEC); + + /* + * Write the string via process_vm_writev(2), handling partial writes. + */ + for (;;) { + struct iovec local, remote; + ssize_t nwritten; + + local.iov_base = (void *)str; + local.iov_len = len; + remote.iov_base = (void *)addr; + remote.iov_len = len; + + nwritten = process_vm_writev(pid, &local, 1, &remote, 1, 0); + switch (nwritten) { + case -1: + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "process_vm_writev(%d, [0x%lx, %zu], 1, [0x%lx, %zu], 1, 0)", + (int)pid, (unsigned long)local.iov_base, local.iov_len, + (unsigned long)remote.iov_base, remote.iov_len); + debug_return_ssize_t(-1); + case 0: + /* Should not be possible. */ + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "process_vm_writev(%d, [0x%lx, %zu], 1, [0x%lx, %zu], 1, 0): %s", + (int)pid, (unsigned long)local.iov_base, local.iov_len, + (unsigned long)remote.iov_base, remote.iov_len, + "zero bytes written"); + debug_return_ssize_t(-1); + default: + str += nwritten; + len -= nwritten; + addr += nwritten; + if (len == 0) + debug_return_size_t(str - str0); /* includes NUL */ + break; + } + } + debug_return_ssize_t(-1); +} +#endif /* HAVE_PROCESS_VM_READV */ + +/* + * Write the NUL-terminated string str to addr in the tracee using ptrace(2). * Returns the number of bytes written, including trailing NUL. */ static size_t ptrace_write_string(pid_t pid, unsigned long addr, const char *str) { const char *str0 = str; - unsigned int i; + size_t i; union { unsigned long word; char buf[sizeof(unsigned long)]; } u; debug_decl(ptrace_write_string, SUDO_DEBUG_EXEC); +#ifdef HAVE_PROCESS_VM_READV + i = ptrace_writev_string(pid, addr, str); + if (i != (size_t)-1 || errno != ENOSYS) + debug_return_size_t(i); +#endif /* HAVE_PROCESS_VM_READV */ + /* * Write the string via ptrace(2) one (native) word at a time. * We use the native word size even in compat mode because that @@ -537,7 +662,7 @@ ptrace_write_string(pid_t pid, unsigned long addr, const char *str) if (ptrace(PTRACE_POKEDATA, pid, addr, u.word) == -1) { sudo_warn("%s: ptrace(PTRACE_POKEDATA, %d, 0x%lx, %.*s)", __func__, (int)pid, addr, (int)sizeof(u.buf), u.buf); - debug_return_size_t(-1); + debug_return_ssize_t(-1); } if ((u.word & 0xff) == 0) { /* If the last byte we wrote is a NUL we are done. */ @@ -547,6 +672,137 @@ ptrace_write_string(pid_t pid, unsigned long addr, const char *str) } } +#ifdef HAVE_PROCESS_VM_READV +/* + * Write the string vector vec to addr in the tracee which must have + * sufficient space. Strings are written to strtab. + * Returns the number of bytes used in strtab (including NULs). + * process_vm_writev() version. + */ +static size_t +ptrace_writev_vec(pid_t pid, struct sudo_ptrace_regs *regs, char **vec, + unsigned long addr, unsigned long strtab) +{ + const unsigned long addr0 = addr; + const unsigned long strtab0 = strtab; + unsigned long *addrbuf = NULL; + struct iovec *local, *remote; + struct iovec local_addrs, remote_addrs; + size_t i, j, len, off = 0; + ssize_t expected = -1, nwritten, total_written = 0; + debug_decl(ptrace_writev_vec, SUDO_DEBUG_EXEC); + + /* Build up local and remote iovecs for process_vm_writev(2). */ + for (len = 0; vec[len] != NULL; len++) + continue; + local = reallocarray(NULL, len, sizeof(struct iovec)); + remote = reallocarray(NULL, len, sizeof(struct iovec)); + j = regs->compat && (len & 1) != 0; /* pad for final NULL in compat */ + addrbuf = reallocarray(NULL, len + 1 + j, regs->wordsize); + if (local == NULL || remote == NULL || addrbuf == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + for (i = 0, j = 0; i < len; i++) { + unsigned long word = strtab; + + /* Store remote string. */ + const size_t size = strlen(vec[i]) + 1; + local[i].iov_base = vec[i]; + local[i].iov_len = size; + remote[i].iov_base = (void *)strtab; + remote[i].iov_len = size; + strtab += size; + + /* Store address of remote string. */ +# ifdef SECCOMP_AUDIT_ARCH_COMPAT + if (regs->compat) { + /* + * For compat binaries we need to pack two 32-bit string addresses + * into a single 64-bit word. If this is the last string, NULL + * will be written as the second 32-bit address. + */ + if ((i & 1) == 1) { + /* Wrote this string address last iteration. */ + continue; + } +# if BYTE_ORDER == BIG_ENDIAN + word <<= 32; + if (vec[i + 1] != NULL) + word |= strtab; +# else + if (vec[i + 1] != NULL) + word |= strtab << 32; +# endif + } +# endif + addrbuf[j++] = word; + addr += sizeof(unsigned long); + } + if (!regs->compat || (len & 1) == 0) { + addrbuf[j] = 0; + } + + /* Write strings addresses to addr0 on remote. */ + local_addrs.iov_base = addrbuf; + local_addrs.iov_len = (len + 1) * regs->wordsize; + remote_addrs.iov_base = (void *)addr0; + remote_addrs.iov_len = local_addrs.iov_len; + if (process_vm_writev(pid, &local_addrs, 1, &remote_addrs, 1, 0) == -1) + goto done; + + /* Copy the strings to the (remote) string table. */ + expected = strtab - strtab0; + for (;;) { + nwritten = process_vm_writev(pid, local + off, len - off, + remote + off, len - off, 0); + switch (nwritten) { + case -1: + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "process_vm_writev(%d, 0x%lx, %zu, 0x%lx, %zu, 0)", + (int)pid, (unsigned long)local + off, len - off, + (unsigned long)remote + off, len - off); + goto done; + case 0: + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "process_vm_writev(%d, 0x%lx, %zu, 0x%lx, %zu, 0): %s", + (int)pid, (unsigned long)local + off, len - off, + (unsigned long)remote + off, len - off, + "zero bytes written"); + goto done; + default: + total_written += nwritten; + if (total_written >= expected) + goto done; + + /* Adjust offset for partial write (doesn't cross iov boundary). */ + while (off < len) { + nwritten -= local[off].iov_len; + off++; + if (nwritten <= 0) + break; + } + if (off == len) { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "overflow while resuming process_vm_writev()"); + goto done; + } + break; + } + } +done: + free(local); + free(remote); + free(addrbuf); + if (total_written == expected) + debug_return_size_t(total_written); + debug_return_ssize_t(-1); +} +#endif /* HAVE_PROCESS_VM_READV */ + /* * Write the string vector vec to addr in the tracee which must have * sufficient space. Strings are written to strtab. @@ -560,6 +816,12 @@ ptrace_write_vec(pid_t pid, struct sudo_ptrace_regs *regs, char **vec, size_t i, len; debug_decl(ptrace_write_vec, SUDO_DEBUG_EXEC); +#ifdef HAVE_PROCESS_VM_READV + i = ptrace_writev_vec(pid, regs, vec, addr, strtab); + if (i != (size_t)-1 || errno != ENOSYS) + debug_return_size_t(i); +#endif /* HAVE_PROCESS_VM_READV */ + /* Copy string vector into tracee one word at a time. */ for (i = 0; vec[i] != NULL; i++) { unsigned long word = strtab; @@ -693,7 +955,7 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, bufsize -= strtab - argbuf; /* Read argv */ - len = ptrace_read_vec(pid, regs, argv_addr, argv, strtab, bufsize); + len = ptrace_read_vec(pid, regs, argv_addr, argc, argv, strtab, bufsize); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, @@ -704,7 +966,7 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, bufsize -= len; /* Read envp */ - len = ptrace_read_vec(pid, regs, envp_addr, envp, strtab, bufsize); + len = ptrace_read_vec(pid, regs, envp_addr, envc, envp, strtab, bufsize); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, @@ -907,6 +1169,12 @@ exec_ptrace_seize(pid_t child) int status; debug_decl(exec_ptrace_seize, SUDO_DEBUG_EXEC); +#ifdef HAVE_PROCESS_VM_READV + page_size = sysconf(_SC_PAGESIZE); + if (page_size == (size_t)-1) + page_size = 4096; +#endif + /* Seize control of the child process. */ if (ptrace(PTRACE_SEIZE, child, NULL, ptrace_opts) == -1) { /* @@ -1314,7 +1582,7 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, bufsize -= strtab - argbuf; /* Read argv */ - len = ptrace_read_vec(pid, regs, argv_addr, argv, strtab, bufsize); + len = ptrace_read_vec(pid, regs, argv_addr, argc, argv, strtab, bufsize); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, @@ -1325,7 +1593,7 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, bufsize -= len; /* Read envp */ - len = ptrace_read_vec(pid, regs, envp_addr, envp, strtab, bufsize); + len = ptrace_read_vec(pid, regs, envp_addr, envc, envp, strtab, bufsize); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, From 2902ebe067cd731a30c976ea3caf5d564540eca4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 25 Aug 2022 14:21:12 -0600 Subject: [PATCH 093/186] intercept_check_policy_req: an empty argv[] is now supported --- src/exec_intercept.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/exec_intercept.c b/src/exec_intercept.c index 8586dba129..ab446c4526 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -539,7 +539,7 @@ intercept_check_policy_req(PolicyCheckRequest *req, size_t n; debug_decl(intercept_check_policy_req, SUDO_DEBUG_EXEC); - if (req->command == NULL || req->n_argv == 0) { + if (req->command == NULL) { closure->errstr = N_("invalid PolicyCheckRequest"); goto done; } From 0af393e75bb1cc37f4941919037fb049ec71790a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 25 Aug 2022 14:22:21 -0600 Subject: [PATCH 094/186] Suppress PVS-Studio false positive. --- lib/util/arc4random.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/arc4random.c b/lib/util/arc4random.c index a517919289..4002645d1b 100644 --- a/lib/util/arc4random.c +++ b/lib/util/arc4random.c @@ -143,7 +143,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); // -V512 + memset(rs_buf, 0, KEYSZ + IVSZ); // -V::512, 1086 rs_have = sizeof(rs_buf) - KEYSZ - IVSZ; } From 351175eb266fdb8624dab7d58a37423728982d17 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 25 Aug 2022 14:42:26 -0600 Subject: [PATCH 095/186] Update CodeQL Action to v2 using current example config. --- .github/workflows/codeql-analysis.yml | 34 ++++++++++++++------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e91529392d..eb975a4a83 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,12 +13,12 @@ name: "CodeQL" on: push: - branches: [ main ] + branches: [ "main" ] pull_request: # The branches below must be a subset of the branches above - branches: [ main ] + branches: [ "main" ] schedule: - - cron: '19 3 * * 2' + - cron: '25 15 * * 0' jobs: analyze: @@ -34,37 +34,39 @@ jobs: matrix: language: [ 'cpp', 'python' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://git.io/codeql-language-support + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - #- run: | - # make bootstrap - # make release + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 From 922772c6cbd5d06e9c3b58a419c8bed4ef70f0ae Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 25 Aug 2022 19:01:59 -0600 Subject: [PATCH 096/186] Rework the intercept section in "Preventing shell escapes". --- docs/sudoers.man.in | 116 +++++++++++++++++++++++-------------------- docs/sudoers.mdoc.in | 116 +++++++++++++++++++++++-------------------- 2 files changed, 126 insertions(+), 106 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index e1a0decfb7..60e6c774a1 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "August 23, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "August 25, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -3430,7 +3430,7 @@ proc(@mansectform@) file system is available. The additional overhead from \fIintercept_verify\fR -can slow down intercept mode considerably for shell scripts that +may add additional latency when running shell scripts that execute a large number of commands. This flag has no effect unless the \fIintercept\fR @@ -6953,12 +6953,7 @@ do not is often unworkable. .TP 10n intercept .br -Many systems that support shared libraries have the ability to -override default library functions by pointing an environment -variable (usually -\fRLD_PRELOAD\fR) -to an alternate shared library. -On such systems, +On most systems, \fBsudo\fR's \fIintercept\fR functionality can be used to transparently intercept an attempt to @@ -6966,74 +6961,88 @@ run a new command, allow or deny it based on \fIsudoers\fR rules, and log the result. For example, this can be used to restrict the commands run from -within a privileged shell. +within a privileged shell or editor. +.sp +There are two underlying mechanisms that may be used to implement +\fIintercept\fR +mode: +\fIdso\fR +and +\fItrace\fR. +The +\fIintercept_type\fR +setting can be used to select between them. +.sp +The first mechanism, +\fIdso\fR, +overrides the standard C library functions that are used to execute a +command. +It does this by setting an environment variable (usually +\fRLD_PRELOAD\fR) +to the path of a dynamic shared object, or shared library, +containing custom versions of the +\fBexecl\fR(), +\fBexecle\fR(), +\fBexeclp\fR(), +\fBexecv\fR(), +\fBexecve\fR(), +\fBexecvp\fR(), +\fBexecvpe\fR(), +and +\fBsystem\fR() +library functions that connect back to +\fBsudo\fR +for a policy decision. Note, however, that this applies only to dynamically-linked executables. It is not possible to intercept commands for statically-linked executables -or executables that run under binary emulation. -This implementation of the +or executables that run under binary emulation this way. +Because most dynamic loaders ignore +\fRLD_PRELOAD\fR +(or the equivalent) when running set-user-ID and set-group-ID programs, +\fBsudoers\fR +will not permit such programs to be run in \fIintercept\fR -functionality is incompatible with +mode by default. +The +\fIdso\fR +mechanism is incompatible with \fBsudo\fR's SELinux RBAC support (but see below). SELinux disables \fRLD_PRELOAD\fR -by default and interferes with file descriptor inheritance. +by default and interferes with file descriptor inheritance, which +\fBsudo\fR +relies on. .sp -Linux systems that support +The second mechanism, +\fItrace\fR, +is available on Linux systems that support seccomp(2) -filtering can use a different method involving +filtering. +It uses ptrace(2) -instead of pre-loading a shared library. -This method supports both static and dynamic executables as well as +and +seccomp(2) +to intercept the +execve(2) +system call instead of pre-loading a dynamic shared object. +Both static and dynamic executables are supported and it is compatible with \fBsudo\fR's SELinux RBAC mode. -Because it operates at the system call level, not the library function level, -it is possible to intercept all calls to -execve(2). Functions utilizing the execveat(2) system call, such as fexecve(3), are not currently intercepted. .sp -The shared library-based -\fIintercept\fR -functionality only works for programs that use the -\fBexecl\fR(), -\fBexecle\fR(), -\fBexeclp\fR(), -\fBexecv\fR(), -\fBexecve\fR(), -\fBexecvp\fR(), -\fBexecvpe\fR(), -or -\fBsystem\fR() -library functions to run the new command. -This may be expanded in a future release of -\fBsudo\fR. -Because most dynamic loaders ignore -\fRLD_PRELOAD\fR -(or the equivalent) when running set-user-ID and set-group-ID programs, -\fBsudoers\fR -will not permit such programs to be run in -\fIintercept\fR -mode. -The Linux -seccomp(2)\-based -implementation does not share these restrictions. -.sp The \fIintercept\fR feature is known to work on Solaris, *BSD, Linux, macOS, HP-UX 11.x and AIX 5.3 and above. It should be supported on most operating systems that support the \fRLD_PRELOAD\fR -environment variable. -Check your operating system's manual pages for the dynamic linker -(usually ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see if -\fRLD_PRELOAD\fR -is supported. +environment variable or an equivalent. It is not possible to intercept shell built-in commands or restrict the ability to read or write sensitive files from within a shell. .sp @@ -7073,8 +7082,9 @@ arguments in the program after the \fBsudoers\fR policy check has completed but before the new command is executed. Starting with version 1.9.12, the -ptrace(2) -method will verify that the command and its arguments have not changed after +\fItrace\fR +method will verify that the command and its arguments have not +changed after execve(2) has completed but before execution of the new program has had a chance to run. This is not the case with the diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 920c62eda6..5fc48cc106 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 23, 2022 +.Dd August 25, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -3251,7 +3251,7 @@ The checks can only be performed if the file system is available. The additional overhead from .Em intercept_verify -can slow down intercept mode considerably for shell scripts that +may add additional latency when running shell scripts that execute a large number of commands. This flag has no effect unless the .Em intercept @@ -6443,12 +6443,7 @@ Due to the large number of programs that offer shell escapes, restricting users to the set of programs that do not is often unworkable. .It intercept -Many systems that support shared libraries have the ability to -override default library functions by pointing an environment -variable (usually -.Ev LD_PRELOAD ) -to an alternate shared library. -On such systems, +On most systems, .Nm sudo Ns 's .Em intercept functionality can be used to transparently intercept an attempt to @@ -6456,74 +6451,88 @@ run a new command, allow or deny it based on .Em sudoers rules, and log the result. For example, this can be used to restrict the commands run from -within a privileged shell. +within a privileged shell or editor. +.Pp +There are two underlying mechanisms that may be used to implement +.Em intercept +mode: +.Em dso +and +.Em trace . +The +.Em intercept_type +setting can be used to select between them. +.Pp +The first mechanism, +.Em dso , +overrides the standard C library functions that are used to execute a +command. +It does this by setting an environment variable (usually +.Ev LD_PRELOAD ) +to the path of a dynamic shared object, or shared library, +containing custom versions of the +.Fn execl , +.Fn execle , +.Fn execlp , +.Fn execv , +.Fn execve , +.Fn execvp , +.Fn execvpe , +and +.Fn system +library functions that connect back to +.Nm sudo +for a policy decision. Note, however, that this applies only to dynamically-linked executables. It is not possible to intercept commands for statically-linked executables -or executables that run under binary emulation. -This implementation of the +or executables that run under binary emulation this way. +Because most dynamic loaders ignore +.Ev LD_PRELOAD +(or the equivalent) when running set-user-ID and set-group-ID programs, +.Nm +will not permit such programs to be run in .Em intercept -functionality is incompatible with +mode by default. +The +.Em dso +mechanism is incompatible with .Nm sudo Ns 's SELinux RBAC support (but see below). SELinux disables .Ev LD_PRELOAD -by default and interferes with file descriptor inheritance. +by default and interferes with file descriptor inheritance, which +.Nm sudo +relies on. .Pp -Linux systems that support +The second mechanism, +.Em trace , +is available on Linux systems that support .Xr seccomp 2 -filtering can use a different method involving +filtering. +It uses .Xr ptrace 2 -instead of pre-loading a shared library. -This method supports both static and dynamic executables as well as +and +.Xr seccomp 2 +to intercept the +.Xr execve 2 +system call instead of pre-loading a dynamic shared object. +Both static and dynamic executables are supported and it is compatible with .Nm sudo Ns 's SELinux RBAC mode. -Because it operates at the system call level, not the library function level, -it is possible to intercept all calls to -.Xr execve 2 . Functions utilizing the .Xr execveat 2 system call, such as .Xr fexecve 3 , are not currently intercepted. .Pp -The shared library-based -.Em intercept -functionality only works for programs that use the -.Fn execl , -.Fn execle , -.Fn execlp , -.Fn execv , -.Fn execve , -.Fn execvp , -.Fn execvpe , -or -.Fn system -library functions to run the new command. -This may be expanded in a future release of -.Nm sudo . -Because most dynamic loaders ignore -.Ev LD_PRELOAD -(or the equivalent) when running set-user-ID and set-group-ID programs, -.Nm -will not permit such programs to be run in -.Em intercept -mode. -The Linux -.Xr seccomp 2 Ns \- Ns based -implementation does not share these restrictions. -.Pp The .Em intercept feature is known to work on Solaris, *BSD, Linux, macOS, HP-UX 11.x and AIX 5.3 and above. It should be supported on most operating systems that support the .Ev LD_PRELOAD -environment variable. -Check your operating system's manual pages for the dynamic linker -(usually ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see if -.Ev LD_PRELOAD -is supported. +environment variable or an equivalent. It is not possible to intercept shell built-in commands or restrict the ability to read or write sensitive files from within a shell. .Pp @@ -6559,8 +6568,9 @@ arguments in the program after the .Nm policy check has completed but before the new command is executed. Starting with version 1.9.12, the -.Xr ptrace 2 -method will verify that the command and its arguments have not changed after +.Em trace +method will verify that the command and its arguments have not +changed after .Xr execve 2 has completed but before execution of the new program has had a chance to run. This is not the case with the From 234c56b87f42d4bb30e959285b15bb39edb8b11c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 28 Aug 2022 08:27:30 -0600 Subject: [PATCH 097/186] Protect ptrace_readv_string() with #ifdef HAVE_PROCESS_VM_READV --- src/exec_ptrace.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index e765de01b3..d7f939652a 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -343,6 +343,7 @@ ptrace_setregs(int pid, struct sudo_ptrace_regs *regs) debug_return_bool(true); } +#ifdef HAVE_PROCESS_VM_READV /* * Read the string at addr and store in buf using process_vm_readv(2). * Returns the number of bytes stored, including the NUL. @@ -395,6 +396,7 @@ ptrace_readv_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) } debug_return_ssize_t(-1); } +#endif /* HAVE_PROCESS_VM_READV */ /* * Read the string at addr and store in buf using ptrace(2). From 0d2f1c4a2b90ce7e4edaa2f01bb39f5dcf66c334 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 28 Aug 2022 18:59:41 -0600 Subject: [PATCH 098/186] ptrace_verify_post_exec: use /proc/PID/cmdline and /proc/PID/environ There is no reason to read these directly from the tracee when we rely on /proc being mounted to access /proc/PID/exe. --- src/exec_ptrace.c | 151 ++++++++++++++++++++++++---------------------- src/exec_ptrace.h | 4 ++ 2 files changed, 83 insertions(+), 72 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index d7f939652a..d2a06eb4ef 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -28,6 +28,7 @@ #include #include +#include #include #include #if defined(HAVE_STDINT_H) @@ -68,6 +69,7 @@ static int seccomp_trap_supported = -1; #ifdef HAVE_PROCESS_VM_READV static size_t page_size; #endif +static size_t arg_max; /* Register getters and setters. */ # ifdef SECCOMP_AUDIT_ARCH_COMPAT @@ -915,12 +917,7 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, debug_decl(get_execve_info, SUDO_DEBUG_EXEC); /* XXX - Linux allows this to be bigger, see execve(2). */ - bufsize = sysconf(_SC_ARG_MAX); - if (bufsize == (size_t)-1) { - sudo_warnx(U_("%s: %s"), __func__, "sysconf"); - goto bad; - } - bufsize += PATH_MAX; + bufsize = arg_max + PATH_MAX; argbuf = malloc(bufsize); if (argbuf == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); @@ -1176,6 +1173,9 @@ exec_ptrace_seize(pid_t child) if (page_size == (size_t)-1) page_size = 4096; #endif + arg_max = sysconf(_SC_ARG_MAX); + if (arg_max == (size_t)-1) + arg_max = 128 * 1024; /* Seize control of the child process. */ if (ptrace(PTRACE_SEIZE, child, NULL, ptrace_opts) == -1) { @@ -1361,6 +1361,75 @@ script_matches(const char *script, const char *execpath, int argc, debug_return_int((int)(argv - orig_argv)); } +static size_t +read_proc_vec(pid_t pid, const char *name, int *countp, char ***vecp, + char **bufp, size_t *bufsizep, size_t off) +{ + size_t remainder = *bufsizep - off; + char path[PATH_MAX], *strtab = *bufp + off; + char *strend, **vec, **vp; + int count = 0, fd, len; + ssize_t nread; + debug_decl(read_proc_vec, SUDO_DEBUG_EXEC); + + len = snprintf(path, sizeof(path), "/proc/%d/%s", (int)pid, name); + if (len < 0 || len >= ssizeof(path)) + debug_return_ssize_t(-1); + + fd = open(path, O_RDONLY); + if (fd == -1) + debug_return_ssize_t(-1); + + /* Read in strings until EOF. */ + do { + nread = read(fd, strtab, remainder); + if (nread == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to read %s", __func__, path); + close(fd); + debug_return_ssize_t(-1); + } + strtab += nread; + remainder -= nread; + if (remainder < sizeof(char *)) { + close(fd); + debug_return_ssize_t(-1); + } + } while (nread != 0); + close(fd); + + /* Trim off the extra NUL byte at the end of the string table. */ + if (strtab - *bufp >= 2 && strtab[-1] == '\0' && strtab[-2] == '\0') { + strtab--; + remainder++; + } + strend = strtab; + + /* Store vector in buf after string table and make it aligned. */ + vec = (char **)LONGALIGN(strtab); + + /* Fill in vector with the strings we read. */ + for (strtab = *bufp + off, vp = vec; strtab < strend; ) { + if (remainder < 2 * sizeof(char *)) { + close(fd); + debug_return_ssize_t(-1); + } + *vp++ = strtab; + remainder -= sizeof(char *); + strtab = memchr(strtab, '\0', strend - strtab); + if (strtab == NULL) + break; + strtab++; + count++; + } + *vp++ = NULL; /* we always leave room for NULL */ + + *countp = count; + *vecp = vec; + + debug_return_size_t((char *)vp - *bufp - off); +} + /* * Check if the execve(2) arguments match the contents of closure. * Returns true if they match, else false. @@ -1475,8 +1544,7 @@ static bool ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, struct intercept_closure *closure) { - unsigned long argv_addr, envp_addr, sp, word; - char **argv, **envp, *strtab, *argbuf = NULL; + char **argv, **envp, *argbuf = NULL; char pathname[PATH_MAX]; sigset_t chldmask; bool ret = false; @@ -1519,91 +1587,30 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %d: verify %s", __func__, (int)pid, pathname); - /* - * Update the registers to get the new stack pointer. - * We don't know whether this is a native or compat executable - * so ask ptrace_getregs() to figure it out for us (if it can). - */ - if (!ptrace_getregs(pid, regs, -1)) { - sudo_warn(U_("unable to get registers for process %d"), (int)pid); - goto done; - } - sp = get_stack_pointer(regs); - if (sp == 0) { - sudo_warnx(U_("invalid stack pointer for process %d"), (int)pid); - goto done; - } - - /* - * We assume the initial stack layout is as follows: - * argc: sp - * argv: sp + wordsize - * envp: sp + wordsize + (argc * wordsize) - */ - - /* Read argc, first address on the stack. */ - word = ptrace(PTRACE_PEEKDATA, pid, sp, NULL); - if (word == (unsigned long)-1) { - sudo_warn("%s: ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", - __func__, (int)pid, sp); - goto done; - } - argc = (int)word; - - /* argv follows argc, followed by envp. */ - sp += regs->wordsize; - argv_addr = sp; - sp += regs->wordsize * (argc + 1); - envp_addr = sp; - - /* Count the number of entries in envp for easy copying. */ - envc = ptrace_get_vec_len(pid, regs, envp_addr); - if (envc == -1) { - sudo_debug_printf(SUDO_DEBUG_ERROR, - "%s: %d unable to get length of environment", __func__, (int)pid); - goto done; - } - /* Allocate a single buffer for argv, envp and their strings. */ /* XXX - Linux allows this to be bigger, see execve(2). */ - bufsize = sysconf(_SC_ARG_MAX); - if (bufsize == (size_t)-1) { - sudo_warnx(U_("%s: %s"), __func__, "sysconf"); - goto done; - } + bufsize = arg_max; argbuf = malloc(bufsize); if (argbuf == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto done; } - /* Reserve argv and envp at the start of argbuf so they are aligned. */ - argv = (char **)argbuf; - envp = argv + argc + 1; - strtab = (char *)(envp + envc + 1); - bufsize -= strtab - argbuf; - - /* Read argv */ - len = ptrace_read_vec(pid, regs, argv_addr, argc, argv, strtab, bufsize); + len = read_proc_vec(pid, "cmdline", &argc, &argv, &argbuf, &bufsize, 0); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to read execve argv for process %d", (int)pid); goto done; } - strtab += len; - bufsize -= len; - /* Read envp */ - len = ptrace_read_vec(pid, regs, envp_addr, envc, envp, strtab, bufsize); + len = read_proc_vec(pid, "environ", &envc, &envp, &argbuf, &bufsize, len); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to read execve envp for process %d", (int)pid); goto done; } - strtab += len; - bufsize -= len; ret = execve_args_match(pathname, argc, argv, envc, envp, true, closure); if (!ret) { diff --git a/src/exec_ptrace.h b/src/exec_ptrace.h index 529c70ba08..680194db3d 100644 --- a/src/exec_ptrace.h +++ b/src/exec_ptrace.h @@ -50,6 +50,10 @@ #define WORDALIGN(_a, _r) \ (((_a) + ((long)(_r).wordsize - 1L)) & ~((long)(_r).wordsize - 1L)) +/* Align pointer to a native word boundary. */ +#define LONGALIGN(_p) \ + (((unsigned long)(_p) + (sizeof(long) - 1)) & ~(sizeof(long) - 1)) + /* * See syscall(2) for a list of registers used in system calls. * For example code, see tools/testing/selftests/seccomp/seccomp_bpf.c From 817f63b05d95d0e4bae381a1bb4503e1559b8fe8 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 29 Aug 2022 12:47:42 -0600 Subject: [PATCH 099/186] Realloc the buffer used to store argv and envp as needed. We now store the vector immediately after the string table. It is possible for argv and its contents to be invalidated by realloc() when reading envp so we store the pointers as offsets until we are done allocating. --- src/exec_ptrace.c | 355 ++++++++++++++++++++++++++-------------------- 1 file changed, 204 insertions(+), 151 deletions(-) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index d2a06eb4ef..fa354140c8 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -364,6 +364,13 @@ ptrace_readv_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) * of the string, going one page at a time is simplest. */ for (;;) { + if (bufsize == 0) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "%s: %d: out of space reading string", __func__, (int)pid); + errno = ENOSPC; + debug_return_ssize_t(-1); + } + local.iov_base = buf; local.iov_len = bufsize; remote.iov_base = (void *)addr; @@ -437,6 +444,7 @@ ptrace_read_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) if (bufsize == 0) { sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: %d: out of space reading string", __func__, (int)pid); + errno = ENOSPC; debug_return_ssize_t(-1); } *buf = cp[i]; @@ -449,93 +457,124 @@ ptrace_read_string(pid_t pid, unsigned long addr, char *buf, size_t bufsize) } /* - * Read the string vector at addr and store in vec, which must have - * sufficient space. Strings are stored in buf. - * Returns the number of bytes in buf consumed (including NULs). + * Expand buf by doubling its size. + * Updates bufp and bufsizep and recalculates curp and remp if non-NULL. + * Returns true on success, else false. + */ +static bool +growbuf(char **bufp, size_t *bufsizep, char **curp, size_t *remp) +{ + const size_t oldsize = *bufsizep; + char *newbuf; + debug_decl(growbuf, SUDO_DEBUG_EXEC); + + /* Double the size of the buffer. */ + newbuf = reallocarray(*bufp, 2, oldsize); + if (newbuf == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + if (curp != NULL) + *curp = newbuf + (*curp - *bufp); + if (remp != NULL) + *remp += oldsize; + *bufp = newbuf; + *bufsizep = 2 * oldsize; + debug_return_bool(true); +} + +/* + * Build a NULL-terminated string vector from a string table. + * On success, returns number of bytes used for the vector and sets + * vecp to the start of the vector and countp to the number of elements + * (not including the NULL). The buffer is resized as needed. + * Both vecp and its elements are stored as offsets into buf, not pointers. + * However, NULL is still stored as NULL. + * Returns (size_t)-1 on failure. */ static size_t -ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, - int count, char **vec, char *buf, size_t bufsize) +strtab_to_vec(char *strtab, size_t strtab_len, int *countp, char ***vecp, + char **bufp, size_t *bufsizep, size_t remainder) { -# ifdef SECCOMP_AUDIT_ARCH_COMPAT - unsigned long next_word = -1; -# endif - unsigned long word; - char *buf0 = buf; - int i, len = 0; - size_t slen; - debug_decl(ptrace_read_vec, SUDO_DEBUG_EXEC); + char *strend = strtab + strtab_len; + char **vec, **vp; + int count = 0; + debug_decl(strtab_to_vec, SUDO_DEBUG_EXEC); - /* Treat a NULL vector as empty, thanks Linux. */ - if (addr == 0) { - vec[0] = NULL; - debug_return_size_t(0); + /* Store vector in buf after string table and make it aligned. */ + while (remainder < 2 * sizeof(char *)) { + if (!growbuf(bufp, bufsizep, &strtab, &remainder)) + debug_return_ssize_t(-1); + strend = strtab + strtab_len; } + vec = (char **)LONGALIGN(strend); + remainder -= (char *)vec - strend; - /* Fill in vector. */ - for (i = 0; i <= count; i++) { -# ifdef SECCOMP_AUDIT_ARCH_COMPAT - if (next_word == (unsigned long)-1) { - word = ptrace(PTRACE_PEEKDATA, pid, addr, NULL); - if (regs->compat) { - /* Stash the next compat word in next_word. */ -# if BYTE_ORDER == BIG_ENDIAN - next_word = word & 0xffffffffU; - word >>= 32; -# else - next_word = word >> 32; - word &= 0xffffffffU; -# endif - } - } else { - /* Use the stashed value of the next word. */ - word = next_word; - next_word = (unsigned long)-1; - } -# else /* SECCOMP_AUDIT_ARCH_COMPAT */ - word = ptrace(PTRACE_PEEKDATA, pid, addr, NULL); -# endif /* SECCOMP_AUDIT_ARCH_COMPAT */ - switch (word) { - case -1: - sudo_warn("%s: ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", - __func__, (int)pid, addr); - debug_return_ssize_t(-1); - case 0: - vec[len] = NULL; - debug_return_size_t(buf - buf0); - default: - slen = ptrace_read_string(pid, word, buf, bufsize); - if (slen == (size_t)-1) + /* Fill in vector with the strings we read. */ + for (vp = vec; strtab < strend; ) { + while (remainder < 2 * sizeof(char *)) { + if (!growbuf(bufp, bufsizep, &strtab, &remainder)) debug_return_ssize_t(-1); - vec[len++] = buf; - buf += slen; - bufsize -= slen; - addr += regs->wordsize; - continue; + strend = strtab + strtab_len; + vec = (char **)LONGALIGN(strend); + vp = vec + count; } + /* Store offset into buf (not a pointer) in case of realloc(). */ + *vp++ = (char *)(strtab - *bufp); + remainder -= sizeof(char *); + strtab = memchr(strtab, '\0', strend - strtab); + if (strtab == NULL) + break; + strtab++; + count++; } - errno = ENOSPC; - debug_return_ssize_t(-1); + *vp++ = NULL; /* we always leave room for NULL */ + + *countp = count; + *vecp = (char **)((char *)vec - *bufp); + + debug_return_size_t((char *)vp - strend); } /* - * Return the length of the string vector at addr or -1 on error. + * Read the string vector at addr and store it in bufp, which + * is reallocated as needed. The actual vector is returned in vecp. + * The count stored in countp does not include the terminating NULL pointer. + * The vecp and its contents are _offsets_, not pointers, in case the buffer + * gets reallocated later. The caller is responsible for converting the + * offsets into pointers based on the buffer before using. + * Returns the number of bytes in buf consumed (including NULs). */ -static int -ptrace_get_vec_len(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr) +static size_t +ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, + int *countp, char ***vecp, char **bufp, size_t *bufsizep, size_t off) { # ifdef SECCOMP_AUDIT_ARCH_COMPAT unsigned long next_word = -1; # endif + size_t remainder = *bufsizep - off; + char *strtab = *bufp + off; unsigned long word; - int len = 0; - debug_decl(ptrace_get_vec_len, SUDO_DEBUG_EXEC); + size_t len, strtab_len; + debug_decl(ptrace_read_vec, SUDO_DEBUG_EXEC); /* Treat a NULL vector as empty, thanks Linux. */ - if (addr == 0) - debug_return_int(0); + if (addr == 0) { + char **vp; - for (;;) { + while (remainder < 2 * sizeof(char *)) { + if (!growbuf(bufp, bufsizep, &strtab, &remainder)) + debug_return_ssize_t(-1); + } + vp = (char **)LONGALIGN(strtab); + *vecp = (char **)((char *)vp - *bufp); + *countp = 0; + *vp++ = NULL; + debug_return_size_t((char *)vp - strtab); + } + + /* Fill in string table. */ + do { # ifdef SECCOMP_AUDIT_ARCH_COMPAT if (next_word == (unsigned long)-1) { word = ptrace(PTRACE_PEEKDATA, pid, addr, NULL); @@ -561,15 +600,36 @@ ptrace_get_vec_len(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr) case -1: sudo_warn("%s: ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", __func__, (int)pid, addr); - debug_return_int(-1); + debug_return_ssize_t(-1); case 0: - debug_return_int(len); + /* NULL terminator */ + break; default: - len++; + for (;;) { + len = ptrace_read_string(pid, word, strtab, remainder); + if (len != (size_t)-1) + break; + if (errno != ENOSPC) + debug_return_ssize_t(-1); + if (!growbuf(bufp, bufsizep, &strtab, &remainder)) + debug_return_ssize_t(-1); + } + strtab += len; + remainder -= len; addr += regs->wordsize; continue; } - } + } while (word != 0); + + /* Store strings in a vector after the string table. */ + strtab_len = strtab - (*bufp + off); + strtab = *bufp + off; + len = strtab_to_vec(strtab, strtab_len, countp, vecp, bufp, bufsizep, + remainder); + if (len == (size_t)-1) + debug_return_ssize_t(-1); + + debug_return_size_t(strtab_len + len); } #ifdef HAVE_PROCESS_VM_READV @@ -884,11 +944,11 @@ ptrace_write_vec(pid_t pid, struct sudo_ptrace_regs *regs, char **vec, * Returns true on success, else false. */ static bool -read_proc_link(pid_t pid, const char *name, char *buf, size_t bufsize) +proc_read_link(pid_t pid, const char *name, char *buf, size_t bufsize) { size_t len; char path[PATH_MAX]; - debug_decl(read_proc_link, SUDO_DEBUG_EXEC); + debug_decl(proc_read_link, SUDO_DEBUG_EXEC); len = snprintf(path, sizeof(path), "/proc/%d/%s", (int)pid, name); if (len < sizeof(path)) { @@ -910,14 +970,13 @@ static char * get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, int *argc_out, char ***argv_out, int *envc_out, char ***envp_out) { - char *strtab, *pathname, **argv, **envp, *argbuf = NULL; + char *pathname, **argv, **envp, *argbuf = NULL; unsigned long path_addr, argv_addr, envp_addr; - int argc, envc, extra = 0; - size_t bufsize, len; + size_t bufsize, len, off = 0; + int i, argc, envc = 0; debug_decl(get_execve_info, SUDO_DEBUG_EXEC); - /* XXX - Linux allows this to be bigger, see execve(2). */ - bufsize = arg_max + PATH_MAX; + bufsize = PATH_MAX + arg_max; argbuf = malloc(bufsize); if (argbuf == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); @@ -932,62 +991,60 @@ get_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, char **pathname_out, "%s: %d: path 0x%lx, argv 0x%lx, envp 0x%lx", __func__, (int)pid, path_addr, argv_addr, envp_addr); - /* Count argv and envp. */ - argc = ptrace_get_vec_len(pid, regs, argv_addr); - envc = ptrace_get_vec_len(pid, regs, envp_addr); - if (argc == -1 || envc == -1) - goto bad; - - /* If argv is empty, reserve an extra slot for the command. */ - if (argc == 0) - extra++; - - /* Reserve argv and envp at the start of argbuf so they are aligned. */ - if ((argc + extra + 1 + envc + 1) * sizeof(unsigned long) >= bufsize) { - sudo_warnx("%s", U_("insufficient space for execve arguments")); - errno = ENOMEM; - goto bad; + /* Read the pathname. */ + if (path_addr == 0) { + /* execve(2) will fail with EINVAL */ + pathname = NULL; + } else { + len = ptrace_read_string(pid, path_addr, argbuf, bufsize); + if (len == (size_t)-1) { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to read execve pathname for process %d", (int)pid); + goto bad; + } + pathname = argbuf; + off = len; } - argv = (char **)argbuf; - envp = argv + argc + extra + 1; - strtab = (char *)(envp + envc + 1); - bufsize -= strtab - argbuf; /* Read argv */ - len = ptrace_read_vec(pid, regs, argv_addr, argc, argv, strtab, bufsize); + len = ptrace_read_vec(pid, regs, argv_addr, &argc, &argv, &argbuf, + &bufsize, off); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to read execve argv for process %d", (int)pid); goto bad; } - strtab += len; - bufsize -= len; + off += len; + + if (argc == 0) { + /* Reserve an extra slot so we can store argv[0]. */ + while (bufsize - off < sizeof(char *)) { + if (!growbuf(&argbuf, &bufsize, NULL, NULL)) + goto bad; + } + off += sizeof(char *); + } /* Read envp */ - len = ptrace_read_vec(pid, regs, envp_addr, envc, envp, strtab, bufsize); + len = ptrace_read_vec(pid, regs, envp_addr, &envc, &envp, &argbuf, + &bufsize, off); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to read execve envp for process %d", (int)pid); goto bad; } - strtab += len; - bufsize -= len; - /* Read the pathname. */ - if (path_addr == 0) { - /* execve(2) will fail with EINVAL */ - pathname = NULL; - } else { - len = ptrace_read_string(pid, path_addr, strtab, bufsize); - if (len == (size_t)-1) { - sudo_debug_printf( - SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, - "unable to read execve pathname for process %d", (int)pid); - goto bad; - } - pathname = strtab; + /* Convert offsets in argv and envp to pointers. */ + argv = (char **)(argbuf + (unsigned long)argv); + for (i = 0; i < argc; i++) { + argv[i] = argbuf + (unsigned long)argv[i]; + } + envp = (char **)(argbuf + (unsigned long)envp); + for (i = 0; i < envc; i++) { + envp[i] = argbuf + (unsigned long)envp[i]; } sudo_debug_execve(SUDO_DEBUG_DIAG, pathname, argv, envp); @@ -1362,18 +1419,18 @@ script_matches(const char *script, const char *execpath, int argc, } static size_t -read_proc_vec(pid_t pid, const char *name, int *countp, char ***vecp, +proc_read_vec(pid_t pid, const char *name, int *countp, char ***vecp, char **bufp, size_t *bufsizep, size_t off) { size_t remainder = *bufsizep - off; + size_t len, strtab_len; char path[PATH_MAX], *strtab = *bufp + off; - char *strend, **vec, **vp; - int count = 0, fd, len; + int fd; ssize_t nread; - debug_decl(read_proc_vec, SUDO_DEBUG_EXEC); + debug_decl(proc_read_vec, SUDO_DEBUG_EXEC); len = snprintf(path, sizeof(path), "/proc/%d/%s", (int)pid, name); - if (len < 0 || len >= ssizeof(path)) + if (len >= sizeof(path)) debug_return_ssize_t(-1); fd = open(path, O_RDONLY); @@ -1392,8 +1449,10 @@ read_proc_vec(pid_t pid, const char *name, int *countp, char ***vecp, strtab += nread; remainder -= nread; if (remainder < sizeof(char *)) { - close(fd); - debug_return_ssize_t(-1); + while (!growbuf(bufp, bufsizep, &strtab, &remainder)) { + close(fd); + debug_return_ssize_t(-1); + } } } while (nread != 0); close(fd); @@ -1403,31 +1462,16 @@ read_proc_vec(pid_t pid, const char *name, int *countp, char ***vecp, strtab--; remainder++; } - strend = strtab; - - /* Store vector in buf after string table and make it aligned. */ - vec = (char **)LONGALIGN(strtab); - - /* Fill in vector with the strings we read. */ - for (strtab = *bufp + off, vp = vec; strtab < strend; ) { - if (remainder < 2 * sizeof(char *)) { - close(fd); - debug_return_ssize_t(-1); - } - *vp++ = strtab; - remainder -= sizeof(char *); - strtab = memchr(strtab, '\0', strend - strtab); - if (strtab == NULL) - break; - strtab++; - count++; - } - *vp++ = NULL; /* we always leave room for NULL */ - *countp = count; - *vecp = vec; + /* Store strings in a vector after the string table. */ + strtab_len = strtab - (*bufp + off); + strtab = *bufp + off; + len = strtab_to_vec(strtab, strtab_len, countp, vecp, bufp, bufsizep, + remainder); + if (len == (size_t)-1) + debug_return_ssize_t(-1); - debug_return_size_t((char *)vp - *bufp - off); + debug_return_size_t(strtab_len + len); } /* @@ -1548,7 +1592,7 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, char pathname[PATH_MAX]; sigset_t chldmask; bool ret = false; - int argc, envc, status; + int argc, envc, i, status; size_t bufsize, len; debug_decl(ptrace_verify_post_exec, SUDO_DEBUG_EXEC); @@ -1577,7 +1621,7 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, } /* Get the executable path. */ - if (!read_proc_link(pid, "exe", pathname, sizeof(pathname))) { + if (!proc_read_link(pid, "exe", pathname, sizeof(pathname))) { /* Missing /proc file system is not a fatal error. */ sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: unable to read /proc/%d/exe", __func__, (int)pid); @@ -1588,7 +1632,6 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, (int)pid, pathname); /* Allocate a single buffer for argv, envp and their strings. */ - /* XXX - Linux allows this to be bigger, see execve(2). */ bufsize = arg_max; argbuf = malloc(bufsize); if (argbuf == NULL) { @@ -1596,7 +1639,7 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, goto done; } - len = read_proc_vec(pid, "cmdline", &argc, &argv, &argbuf, &bufsize, 0); + len = proc_read_vec(pid, "cmdline", &argc, &argv, &argbuf, &bufsize, 0); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, @@ -1604,7 +1647,7 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, goto done; } - len = read_proc_vec(pid, "environ", &envc, &envp, &argbuf, &bufsize, len); + len = proc_read_vec(pid, "environ", &envc, &envp, &argbuf, &bufsize, len); if (len == (size_t)-1) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, @@ -1612,6 +1655,16 @@ ptrace_verify_post_exec(pid_t pid, struct sudo_ptrace_regs *regs, goto done; } + /* Convert offsets in argv and envp to pointers. */ + argv = (char **)(argbuf + (unsigned long)argv); + for (i = 0; i < argc; i++) { + argv[i] = argbuf + (unsigned long)argv[i]; + } + envp = (char **)(argbuf + (unsigned long)envp); + for (i = 0; i < envc; i++) { + envp[i] = argbuf + (unsigned long)envp[i]; + } + ret = execve_args_match(pathname, argc, argv, envc, envp, true, closure); if (!ret) { sudo_debug_printf(SUDO_DEBUG_ERROR, @@ -1708,7 +1761,7 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) } /* Get the current working directory and execve info. */ - if (!read_proc_link(pid, "cwd", cwd, sizeof(cwd))) + if (!proc_read_link(pid, "cwd", cwd, sizeof(cwd))) (void)strlcpy(cwd, "unknown", sizeof(cwd)); buf = get_execve_info(pid, ®s, &pathname, &argc, &argv, &envc, &envp); From caa0408a8a146e8121ccce5bf6dddd9aaef2e215 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 29 Aug 2022 14:10:49 -0600 Subject: [PATCH 100/186] intercept_verify is fast, but the policy check is (relatively) slow. --- docs/sudoers.man.in | 9 +++++---- docs/sudoers.mdoc.in | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index 60e6c774a1..1a7c1555a2 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -2023,6 +2023,11 @@ and logged just like they would be if run through directly. This is useful in conjunction with commands that allow shell escapes such as editors, shells, and paginators. +There is additional overhead due to the policy check that may add +latency when running commands such as shell scripts that execute a +large number of sub-commands. +For interactive commands, such as a shell or editor, +the overhead is not usually noticable. .sp In the following example, user \fBchuck\fR @@ -3428,10 +3433,6 @@ policy check. The checks can only be performed if the proc(@mansectform@) file system is available. -The additional overhead from -\fIintercept_verify\fR -may add additional latency when running shell scripts that -execute a large number of commands. This flag has no effect unless the \fIintercept\fR flag is enabled or the diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 5fc48cc106..6ab4f49bb3 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -1926,6 +1926,11 @@ and logged just like they would be if run through directly. This is useful in conjunction with commands that allow shell escapes such as editors, shells, and paginators. +There is additional overhead due to the policy check that may add +latency when running commands such as shell scripts that execute a +large number of sub-commands. +For interactive commands, such as a shell or editor, +the overhead is not usually noticeable. .Pp In the following example, user .Sy chuck @@ -3249,10 +3254,6 @@ policy check. The checks can only be performed if the .Xr proc @mansectform@ file system is available. -The additional overhead from -.Em intercept_verify -may add additional latency when running shell scripts that -execute a large number of commands. This flag has no effect unless the .Em intercept flag is enabled or the From a6472710e6ca234e9637f64e5ad65ac7b11d63f1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 30 Aug 2022 07:35:43 -0600 Subject: [PATCH 101/186] Zero out register struct before calling ptrace_getregs(). Quiets a spurious valgrind warning. --- src/exec_ptrace.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/exec_ptrace.c b/src/exec_ptrace.c index fa354140c8..81cd10bc2d 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -1713,6 +1713,7 @@ ptrace_intercept_execve(pid_t pid, struct intercept_closure *closure) } /* Get the registers. */ + memset(®s, 0, sizeof(regs)); if (!ptrace_getregs(pid, ®s, msg)) { sudo_warn(U_("unable to get registers for process %d"), (int)pid); debug_return_bool(false); From 37ae66062dfda418ff04b6ffa8324ac71b74d444 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 31 Aug 2022 11:33:04 -0600 Subject: [PATCH 102/186] Document cvtsudoers JSON output format --- docs/cvtsudoers.man.in | 441 +++++++++++++++++++++++++++++++++++++++- docs/cvtsudoers.mdoc.in | 401 +++++++++++++++++++++++++++++++++++- 2 files changed, 840 insertions(+), 2 deletions(-) diff --git a/docs/cvtsudoers.man.in b/docs/cvtsudoers.man.in index 5e65be3bf1..16d3b4b4f6 100644 --- a/docs/cvtsudoers.man.in +++ b/docs/cvtsudoers.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "CVTSUDOERS" "1" "February 16, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" +.TH "CVTSUDOERS" "1" "August 31, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" .nh .if n .ad l .SH "NAME" @@ -522,6 +522,445 @@ command line option. .PP Options on the command line will override values from the configuration file. +.SS "JSON output format" +The +\fIsudoers\fR +JSON format may contain any of the following top-level objects: +.TP 6n +Defaults +An array of objects, each containing an +\fIOptions\fR +array and an optional +\fIBinding\fR +array. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +If a +\fIBinding\fR +is present, the setting will only take effect if one of the specified +\fIcommand\fR, +\fIhostname\fR, +\fIusergid\fR, +\fIusergroup\fR, +\fIuserid\fR, +\fIusername\fR, +or alias entries match. +.sp +For example: +.nf +.sp +.RS 6n +"Defaults": [ + { + "Binding": [ + { "hostname": "somehost" } + ], + "Options": [ + { "set_home": true } + ] + } +] +.RE +.fi +.RS 6n +.sp +will enable the +\fIset_home\fR +option when the local host name matches +\fIsomehost\fR. +.RE +.TP 6n +User_Aliases +A JSON object containing one or more +\fIsudoers\fR +User_Alias entries where each named alias has as its value an array +containing one or more objects. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be one of +\fInetgroup\fR, +\fInonunixgid\fR, +\fInonunixgroup\fR, +\fIuseralias\fR, +\fIusergid\fR, +\fIusergroup\fR, +\fIuserid\fR, +or +\fIusername\fR. +.sp +For example: +.nf +.sp +.RS 6n +"User_Aliases": { + "SYSADMIN": [ + { "username": "will" }, + { "usergroup": "wheel" }, + { "netgroup": "admin" } + ] +} +.RE +.fi +.RS 6n +.sp +will define a +\fIUser_Alias\fR +named SYSADMIN that contains the user +\(lqwill\(rq, +the Unix group +\(lqwheel\(rq, +and the netgroup +\(lqadmin\(rq. +.RE +.TP 6n +Runas_Aliases +A JSON object containing one or more +\fIsudoers\fR +Runas_Alias entries, where each named alias has as its value an array +containing one or more objects. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be one of +\fInetgroup\fR, +\fInonunixgid\fR, +\fInonunixgroup\fR, +\fIrunasalias\fR, +\fIusergid\fR, +\fIusergroup\fR, +\fIuserid\fR, +or +\fIusername\fR. +.sp +For example: +.nf +.sp +.RS 6n +"Runas_Aliases": { + "DB": [ + { "username": "oracle" }, + { "username": "sybase" } + ], + "OP": [ + { "username": "root" }, + { "username": "operator" } + ] +} +.RE +.fi +.RS 6n +.sp +will define two +\fIRunas_Alias\fR +entries: +\(lqDB\(rq +and +\(lqOP\(rq. +.RE +.TP 6n +Host_Aliases +A JSON object containing one or more +\fIsudoers\fR +Host_Alias entries where each named alias has as its value an array +containing one or more objects. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be one of +\fIhostalias\fR, +\fIhostname\fR, +\fInetgroup\fR, +or +\fInetworkaddr\fR. +.sp +For example: +.nf +.sp +.RS 6n +"Host_Aliases": { + "DORMNET": [ + { "networkaddr": "128.138.243.0" }, + { "networkaddr": "128.138.204.0/24" } + ], + "SERVERS": [ + { "hostname": "boulder" }, + { "hostname": "refuge" } + ] +} +.RE +.fi +.TP 6n +Cmnd_Aliases +A JSON object containing one or more +\fIsudoers\fR +Cmnd_Alias entries where each named alias has as its value an array +containing one or more objects. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be either another +\fIcmndalias\fR +or a +\fIcommand\fR. +For example: +.nf +.sp +.RS 6n +"Cmnd_Aliases": { + "SHELLS": [ + { "command": "/bin/bash" }, + { "command": "/bin/csh" }, + { "command": "/bin/sh" }, + { "command": "/bin/zsh" } + ], + "VIPW": [ + { "command": "/usr/bin/chpass" }, + { "command": "/usr/bin/chfn" }, + { "command": "/usr/bin/chsh" }, + { "command": "/usr/bin/passwd" }, + { "command": "/usr/sbin/vigr" }, + { "command": "/usr/sbin/vipw" } + ] +} +.RE +.fi +.TP 6n +User_Specs +A JSON array containing one or more objects, each representing a +\fIsudoers\fR +User_Spec. +Each object in the +\fIUser_Specs\fR +array should contain a +\fIUser_List\fR +array, a +\fIHost_List\fR +array and a +\fICmnd_Specs\fR +array. +.sp +A +\fIUser_List\fR +consists of one or more objects. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be one of +\fInetgroup\fR, +\fInonunixgid\fR, +\fInonunixgroup\fR, +\fIuseralias\fR, +\fIusergid\fR, +\fIusergroup\fR, +\fIuserid\fR, +or +\fIusername\fR. +If +\fIusername\fR +is set to the special value +\fBALL\fR, +it will match any user. +.sp +A +\fIHost_List\fR +consists of one or more objects. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be one of +\fIhostalias\fR, +\fIhostname\fR, +\fInetgroup\fR, +or +\fInetworkaddr\fR. +If +\fIhostname\fR +is set to the special value +\fBALL\fR, +it will match any host. +.sp +The +\fICmnd_Specs\fR +array consists of one or more JSON objects describing a command that +may be run. +Each +\fICmnd_Specs\fR +is made up of a +\fICommands\fR +array, an optional +\fIrunasusers\fR +array, an optional +\fIrunasgroups\fR +array, and an optional +\fIOptions array.\fR +.sp +The +\fICommands\fR +array consists of one or more objects containing +\(lqname:value\(rq +pair elements. +The following names and values are supported: +.PP +.RS 6n +.PD 0 +.TP 10n +command +A string containing the command to run. +The special value +\fBALL\fR +it will match any command. +.PD +.TP 10n +negated +A boolean value that, if true, will negate any comparison performed +with the object. +.TP 10n +sha224 +A string containing the SHA224 digest of the +\fIcommand\fR. +.TP 10n +sha256 +A string containing the SHA256 digest of the +\fIcommand\fR. +.TP 10n +sha384 +A string containing the SHA384 digest of the +\fIcommand\fR. +.TP 10n +sha512 +A string containing the SHA512 digest of the +\fIcommand\fR. +.PP +The +\fIrunasusers\fR +array consists of objects describing users the command may be run as. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be one of +\fInetgroup\fR, +\fInonunixgid\fR, +\fInonunixgroup\fR, +\fIrunasalias\fR, +\fIusergid\fR, +\fIusergroup\fR, +\fIuserid\fR, +or +\fIusername\fR. +If +\fIusername\fR +is set to the special value +\fBALL\fR, +it will match any user. +If +\fIusername\fR +is set to the empty string +\(lq\(rq, +it will match the invoking user. +.sp +The +\fIrunasgroups\fR +array consists of objects describing groups the command may be run as. +Each object contains a +\(lqname:value\(rq +pair and an optional +\fInegated\fR +entry, which will negate any comparison performed with the object. +The name may be one of +\fIrunasalias\fR, +\fIusergid\fR, +or +\fIusergroup\fR. +If +\fIusergroup\fR +is set to the special value +\fBALL\fR, +it will match any group. +.sp +The +\fIOptions\fR +array is of the same format as the one in the +\fIDefaults\fR +object. +Any +\fITag_Spec\fR +entries in +\fIsudoers\fR +are converted to +\fIOptions\fR. +A user with +\(lqsudo ALL\(rq +privileges will automatically have the +\fIsetenv\fR +option enabled to match the implicit behavior provided by +\fIsudoers\fR. +.sp +For example, the following +\fIsudoers\fR +entry: +.nf +.sp +.RS 6n +millert ALL = (ALL : ALL) NOPASSWD: ALL, !/usr/bin/id +.RE +.fi +.sp +converts to: +.nf +.sp +.RS 6n +"User_Specs": [ + { + "User_List": [ + { "username": "millert" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "ALL" } + ], + "runasgroups": [ + { "usergroup": "ALL" } + ], + "Options": [ + { "authenticate": false }, + { "setenv": true } + ], + "Commands": [ + { "command": "ALL" }, + { + "command": "/usr/bin/id", + "negated": true + } + ] + } + ] + } +] +.RE +.fi +.RE .SH "FILES" .TP 26n \fI@sysconfdir@/cvtsudoers.conf\fR diff --git a/docs/cvtsudoers.mdoc.in b/docs/cvtsudoers.mdoc.in index 7aa06868f5..913bf19632 100644 --- a/docs/cvtsudoers.mdoc.in +++ b/docs/cvtsudoers.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd February 16, 2022 +.Dd August 31, 2022 .Dt CVTSUDOERS 1 .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -454,6 +454,405 @@ command line option. .Pp Options on the command line will override values from the configuration file. +.Ss JSON output format +The +.Em sudoers +JSON format may contain any of the following top-level objects: +.Bl -tag -width 4n +.It Defaults +An array of objects, each containing an +.Em Options +array and an optional +.Em Binding +array. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +If a +.Em Binding +is present, the setting will only take effect if one of the specified +.Em command , +.Em hostname , +.Em usergid , +.Em usergroup , +.Em userid , +.Em username , +or alias entries match. +.Pp +For example: +.Bd -literal +"Defaults": [ + { + "Binding": [ + { "hostname": "somehost" } + ], + "Options": [ + { "set_home": true } + ] + } +] +.Ed +.Pp +will enable the +.Em set_home +option when the local host name matches +.Em somehost . +.It User_Aliases +A JSON object containing one or more +.Em sudoers +User_Alias entries where each named alias has as its value an array +containing one or more objects. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be one of +.Em netgroup , +.Em nonunixgid , +.Em nonunixgroup , +.Em useralias , +.Em usergid , +.Em usergroup , +.Em userid , +or +.Em username . +.Pp +For example: +.Bd -literal +"User_Aliases": { + "SYSADMIN": [ + { "username": "will" }, + { "usergroup": "wheel" }, + { "netgroup": "admin" } + ] +} +.Ed +.Pp +will define a +.Em User_Alias +named SYSADMIN that contains the user +.Dq will , +the Unix group +.Dq wheel , +and the netgroup +.Dq admin . +.It Runas_Aliases +A JSON object containing one or more +.Em sudoers +Runas_Alias entries, where each named alias has as its value an array +containing one or more objects. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be one of +.Em netgroup , +.Em nonunixgid , +.Em nonunixgroup , +.Em runasalias , +.Em usergid , +.Em usergroup , +.Em userid , +or +.Em username . +.Pp +For example: +.Bd -literal +"Runas_Aliases": { + "DB": [ + { "username": "oracle" }, + { "username": "sybase" } + ], + "OP": [ + { "username": "root" }, + { "username": "operator" } + ] +} +.Ed +.Pp +will define two +.Em Runas_Alias +entries: +.Dq DB +and +.Dq OP . +.It Host_Aliases +A JSON object containing one or more +.Em sudoers +Host_Alias entries where each named alias has as its value an array +containing one or more objects. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be one of +.Em hostalias , +.Em hostname , +.Em netgroup , +or +.Em networkaddr . +.Pp +For example: +.Bd -literal +"Host_Aliases": { + "DORMNET": [ + { "networkaddr": "128.138.243.0" }, + { "networkaddr": "128.138.204.0/24" } + ], + "SERVERS": [ + { "hostname": "boulder" }, + { "hostname": "refuge" } + ] +} +.Ed +.It Cmnd_Aliases +A JSON object containing one or more +.Em sudoers +Cmnd_Alias entries where each named alias has as its value an array +containing one or more objects. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be either another +.Em cmndalias +or a +.Em command . +For example: +.Bd -literal +"Cmnd_Aliases": { + "SHELLS": [ + { "command": "/bin/bash" }, + { "command": "/bin/csh" }, + { "command": "/bin/sh" }, + { "command": "/bin/zsh" } + ], + "VIPW": [ + { "command": "/usr/bin/chpass" }, + { "command": "/usr/bin/chfn" }, + { "command": "/usr/bin/chsh" }, + { "command": "/usr/bin/passwd" }, + { "command": "/usr/sbin/vigr" }, + { "command": "/usr/sbin/vipw" } + ] +} +.Ed +.It User_Specs +A JSON array containing one or more objects, each representing a +.Em sudoers +User_Spec. +Each object in the +.Em User_Specs +array should contain a +.Em User_List +array, a +.Em Host_List +array and a +.Em Cmnd_Specs +array. +.Pp +A +.Em User_List +consists of one or more objects. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be one of +.Em netgroup , +.Em nonunixgid , +.Em nonunixgroup , +.Em useralias , +.Em usergid , +.Em usergroup , +.Em userid , +or +.Em username . +If +.Em username +is set to the special value +.Sy ALL , +it will match any user. +.Pp +A +.Em Host_List +consists of one or more objects. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be one of +.Em hostalias , +.Em hostname , +.Em netgroup , +or +.Em networkaddr . +If +.Em hostname +is set to the special value +.Sy ALL , +it will match any host. +.Pp +The +.Em Cmnd_Specs +array consists of one or more JSON objects describing a command that +may be run. +Each +.Em Cmnd_Specs +is made up of a +.Em Commands +array, an optional +.Em runasusers +array, an optional +.Em runasgroups +array, and an optional +.Em Options array. +.Pp +The +.Em Commands +array consists of one or more objects containing +.Dq name:value +pair elements. +The following names and values are supported: +.Bl -tag -width 8n +.It command +A string containing the command to run. +The special value +.Sy ALL +it will match any command. +.It negated +A boolean value that, if true, will negate any comparison performed +with the object. +.It sha224 +A string containing the SHA224 digest of the +.Em command . +.It sha256 +A string containing the SHA256 digest of the +.Em command . +.It sha384 +A string containing the SHA384 digest of the +.Em command . +.It sha512 +A string containing the SHA512 digest of the +.Em command . +.El +.Pp +The +.Em runasusers +array consists of objects describing users the command may be run as. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be one of +.Em netgroup , +.Em nonunixgid , +.Em nonunixgroup , +.Em runasalias , +.Em usergid , +.Em usergroup , +.Em userid , +or +.Em username . +If +.Em username +is set to the special value +.Sy ALL , +it will match any user. +If +.Em username +is set to the empty string +.Dq "" , +it will match the invoking user. +.Pp +The +.Em runasgroups +array consists of objects describing groups the command may be run as. +Each object contains a +.Dq name:value +pair and an optional +.Em negated +entry, which will negate any comparison performed with the object. +The name may be one of +.Em runasalias , +.Em usergid , +or +.Em usergroup . +If +.Em usergroup +is set to the special value +.Sy ALL , +it will match any group. +.Pp +The +.Em Options +array is of the same format as the one in the +.Em Defaults +object. +Any +.Em Tag_Spec +entries in +.Em sudoers +are converted to +.Em Options . +A user with +.Dq sudo ALL +privileges will automatically have the +.Em setenv +option enabled to match the implicit behavior provided by +.Em sudoers . +.Pp +For example, the following +.Em sudoers +entry: +.Bd -literal +millert ALL = (ALL : ALL) NOPASSWD: ALL, !/usr/bin/id +.Ed +.Pp +converts to: +.Bd -literal +"User_Specs": [ + { + "User_List": [ + { "username": "millert" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "ALL" } + ], + "runasgroups": [ + { "usergroup": "ALL" } + ], + "Options": [ + { "authenticate": false }, + { "setenv": true } + ], + "Commands": [ + { "command": "ALL" }, + { + "command": "/usr/bin/id", + "negated": true + } + ] + } + ] + } +] +.Ed +.El .Sh FILES .Bl -tag -width 24n .It Pa @sysconfdir@/cvtsudoers.conf From 159bdb1cb78b3d5541391058a03a6cf9e65b49b1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 2 Sep 2022 14:01:43 -0600 Subject: [PATCH 103/186] Document cvtsudoers CSV output format --- docs/cvtsudoers.man.in | 264 ++++++++++++++++++++++++++++++++++++++-- docs/cvtsudoers.mdoc.in | 224 ++++++++++++++++++++++++++++++++-- 2 files changed, 466 insertions(+), 22 deletions(-) diff --git a/docs/cvtsudoers.man.in b/docs/cvtsudoers.man.in index 16d3b4b4f6..0a409ade4e 100644 --- a/docs/cvtsudoers.man.in +++ b/docs/cvtsudoers.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "CVTSUDOERS" "1" "August 31, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" +.TH "CVTSUDOERS" "1" "September 2, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" .nh .if n .ad l .SH "NAME" @@ -143,12 +143,9 @@ The following formats are supported: CSV CSV (comma-separated value) files are often used by spreadsheets and report generators. -For CSV output, -\fBcvtsudoers\fR -double quotes strings that contain commas. -For each literal double quote character present inside the string, -two double quotes are output. -This method of quoting commas is compatible with most spreadsheet programs. +See +\fICSV output format\fR +for more details. .PD .TP 10n JSON @@ -160,6 +157,9 @@ The various values have explicit types which removes much of the ambiguity of the \fIsudoers\fR format. +See +\fIJSON output format\fR +for more details. .TP 10n LDIF LDIF (LDAP Data Interchange Format) files can be imported into an LDAP @@ -264,7 +264,12 @@ For example, \fBuser\fR = \fIoperator\fR or \fBhost\fR = \fIwww\fR. -An upper-case Cmnd_Alias, Host_alias, or Host_Alias may be specified as the +An upper-case +\fRCmnd_Alias\fR, +\fRHost_alias\fR, +or +\fRUser_Alias\fR +may be specified as the \(lqcmnd\(rq, \(lqhost\(rq, or @@ -622,7 +627,9 @@ and the netgroup Runas_Aliases A JSON object containing one or more \fIsudoers\fR -Runas_Alias entries, where each named alias has as its value an array +.TP 6n +Runas_Alias +entries, where each named alias has as its value an array containing one or more objects. Each object contains a \(lqname:value\(rq @@ -669,7 +676,8 @@ and Host_Aliases A JSON object containing one or more \fIsudoers\fR -Host_Alias entries where each named alias has as its value an array +\fRHost_Alias\fR +entries where each named alias has as its value an array containing one or more objects. Each object contains a \(lqname:value\(rq @@ -703,7 +711,8 @@ For example: Cmnd_Aliases A JSON object containing one or more \fIsudoers\fR -Cmnd_Alias entries where each named alias has as its value an array +\fRCmnd_Alias\fR +entries where each named alias has as its value an array containing one or more objects. Each object contains a \(lqname:value\(rq @@ -961,6 +970,239 @@ converts to: .RE .fi .RE +.SS "CSV output format" +CSV (comma-separated value) files are often used by spreadsheets +and report generators. +For CSV output, +\fBcvtsudoers\fR +double quotes strings that contain commas. +For each literal double quote character present inside the string, +two double quotes are output. +This method of quoting commas is compatible with most spreadsheet programs. +.PP +There are three possible sections in +\fBcvtsudoers\fR's +CSV output, each separated by a blank line: +.TP 6n +defaults +This section includes any +\fIDefaults\fR +settings in +\fIsudoers\fR. +The +\fIdefaults\fR +section begins with the following heading: +.nf +.sp +.RS 12n +defaults_type,binding,name,operator,value +.RE +.fi +.RS 6n +.sp +The fields are as follows: +.TP 10n +defaults_type +The type of +\fIDefaults\fR +setting; one of +\fRdefaults\fR, +\fRdefaults_command\fR, +\fRdefaults_host\fR, +\fRdefaults_runas\fR, +or +\fRdefaults_user\fR. +.TP 10n +binding +For +\fRdefaults_command\fR, +\fRdefaults_host\fR, +\fRdefaults_runas\fR, +and +\fRdefaults_user\fR +this is the value that must match for the setting to be applied. +.TP 10n +name +The name of the +\fIDefaults\fR +setting. +.TP 10n +operator +The operator determines how the value is applied to the setting. +It may be either +\(lq=\(rq +(assignment), +\(lq+=\(rq +(append), +or +\(lq-=\(rq +(remove). +.TP 10n +value +The setting's value, usually a string or, for +settings used in a boolean context, +\fItrue\fR +or +\fIfalse\fR. +.PD 0 +.PP +.RE +.PD +.TP 6n +aliases +This section includes any +\fRCmnd_Alias\fR +\fRHost_Alias\fR, +\fRRunas_Alias\fR, +or +\fRUser_Alias\fR, +entries from +\fIsudoers\fR. +The +\fIaliases\fR +section begins with the following heading: +.nf +.sp +.RS 12n +alias_type,alias_name,members +.RE +.fi +.RS 6n +.sp +The fields are as follows: +.TP 10n +alias_type +The type of alias; one of +\fRCmnd_Alias\fR, +\fRHost_Alias\fR, +\fRRunas_Alias\fR, +or +\fRUser_Alias\fR. +.TP 10n +alias_name +The name of the alias; a string starting with an upper-case letter that +consists of upper-case letters, digits, or underscores. +.TP 10n +members +A comma-separated list of members belonging to the alias. +Due to the use of commas, +\fImembers\fR +is surrounded by double quotes if it contains more than one member. +.PD 0 +.PP +.RE +.PD +.TP 6n +rules +.br +This section includes the +\fIsudoers\fR +rules that grant privileges. +The +\fIrules\fR +section begins with the following heading: +.nf +.sp +.RS 12n +rule,user,host,runusers,rungroups,options,command +.RE +.fi +.RS 6n +.sp +The fields are as follows: +.TP 10n +rule +This field indicates a +\fIsudoers\fR +\fIrule\fR +entry. +.TP 10n +user +The user the rule applies to. +This may also be a Unix group (preceded by a +\(oq%\(cq +character), a non-Unix group (preceded by +\(oq%:\(cq) +or a netgroup (preceded by a +\(oq+\(cq +character) +or a +\fRUser_Alias\fR. +If set to the special value +\fBALL\fR, +it will match any user. +.TP 10n +host +The host the rule applies to. +This may also be a netgroup (preceded by a +\(oq+\(cq +character) +or a +\fRHost_Alias\fR. +If set to the special value +\fBALL\fR, +it will match any host. +.TP 10n +runusers +An optional comma-separated list of users (or +\fRRunas_Alias\fRes) +the command may be run as. +If it contains more than one member, the value is surrounded by +double quotes. +If set to the special value +\fBALL\fR, +it will match any user. +If empty, the root user is assumed. +.TP 10n +rungroups +.br +An optional comma-separated list of groups (or +\fRRunas_Alias\fRes) +the command may be run as. +If it contains more than one member, the value is surrounded by +double quotes. +If set to the special value +\fBALL\fR, +it will match any group. +If empty, the +\fIrunuser\fR's +group is used. +.TP 10n +options +An optional list of +\fIDefaults\fR +settings to apply to the command. +Any +\fITag_Spec\fR +entries in +\fIsudoers\fR +are converted to +\fIoptions\fR. +.TP 10n +commands +A list of commands, with optional arguments, that the user is allowed to run. +If set to the special value +\fBALL\fR, +it will match any command. +.PP +For example, the following +\fIsudoers\fR +entry: +.nf +.sp +.RS 6n +millert ALL = (ALL : ALL) NOPASSWD: ALL, !/usr/bin/id +.RE +.fi +.sp +converts to: +.nf +.sp +.RS 6n +rule,millert,ALL,ALL,ALL,"!authenticate","ALL,!/usr/bin/id" +.RE +.fi +.RE .SH "FILES" .TP 26n \fI@sysconfdir@/cvtsudoers.conf\fR diff --git a/docs/cvtsudoers.mdoc.in b/docs/cvtsudoers.mdoc.in index 913bf19632..059b7a8703 100644 --- a/docs/cvtsudoers.mdoc.in +++ b/docs/cvtsudoers.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd August 31, 2022 +.Dd September 2, 2022 .Dt CVTSUDOERS 1 .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -125,12 +125,9 @@ The following formats are supported: .It CSV CSV (comma-separated value) files are often used by spreadsheets and report generators. -For CSV output, -.Nm -double quotes strings that contain commas. -For each literal double quote character present inside the string, -two double quotes are output. -This method of quoting commas is compatible with most spreadsheet programs. +See +.Sx CSV output format +for more details. .It JSON JSON (JavaScript Object Notation) files are usually easier for third-party applications to consume than the traditional @@ -140,6 +137,9 @@ The various values have explicit types which removes much of the ambiguity of the .Em sudoers format. +See +.Sx JSON output format +for more details. .It LDIF LDIF (LDAP Data Interchange Format) files can be imported into an LDAP server for use with @@ -217,7 +217,12 @@ For example, .Sy user No = Ar operator or .Sy host No = Ar www . -An upper-case Cmnd_Alias, Host_alias, or Host_Alias may be specified as the +An upper-case +.Li Cmnd_Alias , +.Li Host_alias , +or +.Li User_Alias +may be specified as the .Dq cmnd , .Dq host , or @@ -542,7 +547,8 @@ and the netgroup .It Runas_Aliases A JSON object containing one or more .Em sudoers -Runas_Alias entries, where each named alias has as its value an array +.It Runas_Alias +entries, where each named alias has as its value an array containing one or more objects. Each object contains a .Dq name:value @@ -583,7 +589,8 @@ and .It Host_Aliases A JSON object containing one or more .Em sudoers -Host_Alias entries where each named alias has as its value an array +.Li Host_Alias +entries where each named alias has as its value an array containing one or more objects. Each object contains a .Dq name:value @@ -613,7 +620,8 @@ For example: .It Cmnd_Aliases A JSON object containing one or more .Em sudoers -Cmnd_Alias entries where each named alias has as its value an array +.Li Cmnd_Alias +entries where each named alias has as its value an array containing one or more objects. Each object contains a .Dq name:value @@ -853,6 +861,200 @@ converts to: ] .Ed .El +.Ss CSV output format +CSV (comma-separated value) files are often used by spreadsheets +and report generators. +For CSV output, +.Nm +double quotes strings that contain commas. +For each literal double quote character present inside the string, +two double quotes are output. +This method of quoting commas is compatible with most spreadsheet programs. +.Pp +There are three possible sections in +.Nm cvtsudoers Ns 's +CSV output, each separated by a blank line: +.Bl -tag -width 4n +.It defaults +This section includes any +.Em Defaults +settings in +.Em sudoers . +The +.Em defaults +section begins with the following heading: +.Bd -literal -offset indent +defaults_type,binding,name,operator,value +.Ed +.Pp +The fields are as follows: +.Bl -tag -width 8n +.It defaults_type +The type of +.Em Defaults +setting; one of +.Li defaults , +.Li defaults_command , +.Li defaults_host , +.Li defaults_runas , +or +.Li defaults_user . +.It binding +For +.Li defaults_command , +.Li defaults_host , +.Li defaults_runas , +and +.Li defaults_user +this is the value that must match for the setting to be applied. +.It name +The name of the +.Em Defaults +setting. +.It operator +The operator determines how the value is applied to the setting. +It may be either +.Dq = +(assignment), +.Dq += +(append), +or +.Dq -= +(remove). +.It value +The setting's value, usually a string or, for +settings used in a boolean context, +.Em true +or +.Em false . +.El +.It aliases +This section includes any +.Li Cmnd_Alias +.Li Host_Alias , +.Li Runas_Alias , +or +.Li User_Alias , +entries from +.Em sudoers . +The +.Em aliases +section begins with the following heading: +.Bd -literal -offset indent +alias_type,alias_name,members +.Ed +.Pp +The fields are as follows: +.Bl -tag -width 8n +.It alias_type +The type of alias; one of +.Li Cmnd_Alias , +.Li Host_Alias , +.Li Runas_Alias , +or +.Li User_Alias . +.It alias_name +The name of the alias; a string starting with an upper-case letter that +consists of upper-case letters, digits, or underscores. +.It members +A comma-separated list of members belonging to the alias. +Due to the use of commas, +.Em members +is surrounded by double quotes if it contains more than one member. +.El +.It rules +This section includes the +.Em sudoers +rules that grant privileges. +The +.Em rules +section begins with the following heading: +.Bd -literal -offset indent +rule,user,host,runusers,rungroups,options,command +.Ed +.Pp +The fields are as follows: +.Bl -tag -width 8n +.It rule +This field indicates a +.Em sudoers +.Em rule +entry. +.It user +The user the rule applies to. +This may also be a Unix group (preceded by a +.Ql % +character), a non-Unix group (preceded by +.Ql %: ) +or a netgroup (preceded by a +.Ql + +character) +or a +.Li User_Alias . +If set to the special value +.Sy ALL , +it will match any user. +.It host +The host the rule applies to. +This may also be a netgroup (preceded by a +.Ql + +character) +or a +.Li Host_Alias . +If set to the special value +.Sy ALL , +it will match any host. +.It runusers +An optional comma-separated list of users (or +.Li Runas_Alias Ns No es ) +the command may be run as. +If it contains more than one member, the value is surrounded by +double quotes. +If set to the special value +.Sy ALL , +it will match any user. +If empty, the root user is assumed. +.It rungroups +An optional comma-separated list of groups (or +.Li Runas_Alias Ns No es ) +the command may be run as. +If it contains more than one member, the value is surrounded by +double quotes. +If set to the special value +.Sy ALL , +it will match any group. +If empty, the +.Em runuser Ns 's +group is used. +.It options +An optional list of +.Em Defaults +settings to apply to the command. +Any +.Em Tag_Spec +entries in +.Em sudoers +are converted to +.Em options . +.It commands +A list of commands, with optional arguments, that the user is allowed to run. +If set to the special value +.Sy ALL , +it will match any command. +.El +.Pp +For example, the following +.Em sudoers +entry: +.Bd -literal +millert ALL = (ALL : ALL) NOPASSWD: ALL, !/usr/bin/id +.Ed +.Pp +converts to: +.Bd -literal +rule,millert,ALL,ALL,ALL,"!authenticate","ALL,!/usr/bin/id" +.Ed -literal +.El .Sh FILES .Bl -tag -width 24n .It Pa @sysconfdir@/cvtsudoers.conf From 49e9e5eb85730414156d8ecee08b60717c03bb2e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 2 Sep 2022 14:45:57 -0600 Subject: [PATCH 104/186] Only check the admin flag file once in intercept mode. --- plugins/sudoers/sudoers.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index e53ab82f2c..a5a3972e91 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -186,6 +186,10 @@ sudoers_reinit_defaults(void) /* Restore error logging. */ sudoers_error_hook = logger; + /* No need to check the admin flag file multiple times. */ + if (ISSET(sudo_mode, MODE_POLICY_INTERCEPTED)) + def_admin_flag = false; + debug_return_bool(true); } From 21b48a303443856b8350ca3d4c6d8449af0954ec Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 2 Sep 2022 15:22:40 -0600 Subject: [PATCH 105/186] Fix typo. --- docs/cvtsudoers.mdoc.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/cvtsudoers.mdoc.in b/docs/cvtsudoers.mdoc.in index 059b7a8703..cfcb3f31b9 100644 --- a/docs/cvtsudoers.mdoc.in +++ b/docs/cvtsudoers.mdoc.in @@ -648,7 +648,7 @@ For example: { "command": "/usr/bin/passwd" }, { "command": "/usr/sbin/vigr" }, { "command": "/usr/sbin/vipw" } - ] + ] } .Ed .It User_Specs @@ -1053,7 +1053,7 @@ millert ALL = (ALL : ALL) NOPASSWD: ALL, !/usr/bin/id converts to: .Bd -literal rule,millert,ALL,ALL,ALL,"!authenticate","ALL,!/usr/bin/id" -.Ed -literal +.Ed .El .Sh FILES .Bl -tag -width 24n From 02e92c2afd257d8b9b4d92ef43ae3ec814714e89 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 3 Sep 2022 09:43:41 -0600 Subject: [PATCH 106/186] Set MODE_POLICY_INTERCEPTED for log_subcmds too. This fixes a problem where sub-commands were not being logged to the remote log server, if configured. Since we don't go through sudoers_policy_main() again for log_subcmds, we set the flag in sudoers_audit_accept() instead. The reason this is complicated is that when I/O logging is enabled the initial accept message gets sent as part of the remote logging handshake. GitHub issue #174 --- plugins/sudoers/audit.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index 6d7d2c630b..a4d1d850df 100644 --- a/plugins/sudoers/audit.c +++ b/plugins/sudoers/audit.c @@ -341,6 +341,7 @@ sudoers_audit_accept(const char *plugin_name, unsigned int plugin_type, { const char *uuid_str = NULL; struct eventlog evlog; + static bool first = true; int ret = true; debug_decl(sudoers_audit_accept, SUDOERS_DEBUG_PLUGIN); @@ -366,6 +367,13 @@ sudoers_audit_accept(const char *plugin_name, unsigned int plugin_type, ret = false; } + if (first) { + /* log_subcmds doesn't go through sudo_policy_main again to set this. */ + if (def_log_subcmds) + SET(sudo_mode, MODE_POLICY_INTERCEPTED); + first = false; + } + debug_return_int(ret); } From 2815b77e47adc14ce00ae06c339163539f082118 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 2 Sep 2022 15:28:33 -0600 Subject: [PATCH 107/186] Update with latest changes. --- NEWS | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index fd3c830283..7c96ab6ef1 100644 --- a/NEWS +++ b/NEWS @@ -32,7 +32,7 @@ What's new in Sudo 1.9.12 * Neovim has been added to the list of visudo editors that support passing the line number on the command line. - * Fixed a bug in the SHA384/512 message digest padding. + * Fixed a bug in sudo's SHA384 and SHA512 message digest padding. * Added a new "-N" (--no-update) command line option to sudo which can be used to prevent sudo from updating the user's cached @@ -44,6 +44,29 @@ What's new in Sudo 1.9.12 and checking the exit value. One use case for this is to indicate in a shell prompt that sudo is "active" for the user. + * PAM approval modules are no longer invoked when running sub-commands + in intercept mode unless the "intercept_authenticate" option is set. + There is a substantial performance penalty for calling into PAM + for each command run. PAM approval modules are still called for + the initial command. + + * Intercept mode on Linux now uses process_vm_readv(2) and + process_vm_writev(2) if available. + + * The XDG_CURRENT_DESKTOP environment variable is now preserved + by default. This makes it possible for graphical applications + to choose the correct theme when run via sudo. + + * On 64-bit systems, if sudo fails to load a sudoers group plugin, + it will use system-specific heuristics to try to locate a 64-bit + version of the plugin. + + * The cvtsudoers manual now documents the JSON and CSV output + formats. GitHub issue #172. + + * Fixed a bug where sub-commands were not being logged to a remote + log server when log_subcmds was enabled. GitHub issue #174. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts From 67be673856ab8eae1801c0e85306f9d5eb359056 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 3 Sep 2022 09:50:00 -0600 Subject: [PATCH 108/186] Mention how to restore the historic core resource limit behavior. --- docs/UPGRADE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/UPGRADE.md b/docs/UPGRADE.md index d61eea551d..5b2271cecf 100644 --- a/docs/UPGRADE.md +++ b/docs/UPGRADE.md @@ -25,6 +25,11 @@ Notes on upgrading from an older release such as those seen with the Linux logrotate utility, which could interpret a core dump as a valid configuration file. + To restore the historic core dump file size behavior, add the + following line to the sudoers file: + + Defaults rlimit_core=default + * Upgrading from a version prior to 1.9.7: Sudo now links with OpenSSL 1.0.1 or higher by default if it From 965e2a0c09b49806158d0a672a574506cbe65ae0 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 6 Sep 2022 15:40:59 -0600 Subject: [PATCH 109/186] It is possibble for sudoerserrorf() to be called with a NULL format. So log_parse_error() needs to check fmt for NULL before using it. --- plugins/sudoers/gram.y | 3 ++- plugins/sudoers/logging.c | 4 +++- plugins/sudoers/logging.h | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 2ac370918f..06fc816e3e 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -1195,7 +1195,8 @@ sudoerserrorf(const char *fmt, ...) if (sudoers_error_hook != NULL) { va_start(ap, fmt); - sudoers_error_hook(sudoers, this_lineno, column, fmt, ap); + sudoers_error_hook(sudoers, this_lineno, column, + fmt ? fmt : "parse error", ap); va_end(ap); } if (sudoers_warnings && fmt != NULL) { diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index b8f4c4fdc3..065fdd8abb 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -857,7 +857,9 @@ log_parse_error(const char *file, int line, int column, const char *fmt, bool ret; debug_decl(log_parse_error, SUDOERS_DEBUG_LOGGING); - if (strcmp(fmt, "%s") == 0) { + if (fmt == NULL) { + errstr = _("syntax error"); + } else if (strcmp(fmt, "%s") == 0) { /* Optimize common case, a single string. */ errstr = _(va_arg(args, char *)); } else { diff --git a/plugins/sudoers/logging.h b/plugins/sudoers/logging.h index 0109209308..627a860b41 100644 --- a/plugins/sudoers/logging.h +++ b/plugins/sudoers/logging.h @@ -89,7 +89,7 @@ bool sudoers_locale_callback(const char *file, int line, int column, const union void sudoers_to_eventlog(struct eventlog *evlog, const char *cmnd, char * const argv[], char *const envp[], const char *uuid_str); void init_eventlog_config(void); bool init_log_details(struct log_details *details, struct eventlog *evlog); -bool log_parse_error(const char *file, int line, int column, const char *fmt, va_list ap) __printflike(4, 0); +bool log_parse_error(const char *file, int line, int column, const char *fmt, va_list ap) __printf0like(4, 0); bool mail_parse_errors(void); #endif /* SUDOERS_LOGGING_H */ From 7f169da8321dfc27473cd5d57491515bda951a1b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 6 Sep 2022 15:47:29 -0600 Subject: [PATCH 110/186] Back out unintended change in last commit. --- plugins/sudoers/gram.y | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 06fc816e3e..2ac370918f 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -1195,8 +1195,7 @@ sudoerserrorf(const char *fmt, ...) if (sudoers_error_hook != NULL) { va_start(ap, fmt); - sudoers_error_hook(sudoers, this_lineno, column, - fmt ? fmt : "parse error", ap); + sudoers_error_hook(sudoers, this_lineno, column, fmt, ap); va_end(ap); } if (sudoers_warnings && fmt != NULL) { From 89a40741b4c99a054f5fa36cca89b6c22d18c332 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 7 Sep 2022 07:25:31 -0600 Subject: [PATCH 111/186] Add __printf0like to visudo_track_error(). --- plugins/sudoers/visudo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 18f362b54d..fcd9d9f794 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -90,7 +90,7 @@ static char *get_editor(int *editor_argc, char ***editor_argv); static bool check_syntax(const char *, bool, bool, bool, bool); static bool edit_sudoers(struct sudoersfile *, char *, int, char **, int); static bool install_sudoers(struct sudoersfile *, bool, bool); -static bool visudo_track_error(const char *file, int line, int column, const char *fmt, va_list args); +static bool visudo_track_error(const char *file, int line, int column, const char *fmt, va_list args) __printf0like(4, 0); static int print_unused(struct sudoers_parse_tree *, struct alias *, void *); static bool reparse_sudoers(char *, int, char **, bool, bool); static int run_command(const char *, char *const *); From d6c7abd42e17f2a04699b338b737292bc649bd8a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 7 Sep 2022 14:45:47 -0600 Subject: [PATCH 112/186] log_parse_error: make errstr const to quiet a -Wwrite-strings warning --- plugins/sudoers/logging.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 065fdd8abb..e240ca6925 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -852,7 +852,8 @@ log_parse_error(const char *file, int line, int column, const char *fmt, va_list args) { const int flags = SLOG_RAW_MSG|SLOG_NO_STDERR; - char *errstr, *tofree = NULL; + char *tofree = NULL; + const char *errstr; struct parse_error *pe; bool ret; debug_decl(log_parse_error, SUDOERS_DEBUG_LOGGING); @@ -863,9 +864,9 @@ log_parse_error(const char *file, int line, int column, const char *fmt, /* Optimize common case, a single string. */ errstr = _(va_arg(args, char *)); } else { - if (vasprintf(&errstr, _(fmt), args) == -1) + if (vasprintf(&tofree, _(fmt), args) == -1) debug_return_bool(false); - tofree = errstr; + errstr = tofree; } if (line > 0) { From b85f95cb30162d6b4f07e2689a739f6f77e987fb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 11 Sep 2022 19:06:22 -0600 Subject: [PATCH 113/186] Fix a typo --- docs/sudoers.man.in | 4 ++-- docs/sudoers.mdoc.in | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index 1a7c1555a2..ab16a3a172 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -2027,7 +2027,7 @@ There is additional overhead due to the policy check that may add latency when running commands such as shell scripts that execute a large number of sub-commands. For interactive commands, such as a shell or editor, -the overhead is not usually noticable. +the overhead is not usually noticeable. .sp In the following example, user \fBchuck\fR @@ -4296,7 +4296,7 @@ unless insults are enabled. editor A colon (\(oq:\&\(cq) -separated list of editors path names used by +separated list of editor path names used by \fBsudoedit\fR and \fBvisudo\fR. diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 6ab4f49bb3..823bd209a3 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -4071,7 +4071,7 @@ unless insults are enabled. .It editor A colon .Pq Ql :\& -separated list of editors path names used by +separated list of editor path names used by .Nm sudoedit and .Nm visudo . From 3f6ffead0bc91d344d98160658bce447a91fffe4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 11 Sep 2022 19:06:23 -0600 Subject: [PATCH 114/186] Move the init_session() errstr description to where it belongs. --- docs/sudo_plugin.man.in | 94 ++++++++++++++++++++-------------------- docs/sudo_plugin.mdoc.in | 91 +++++++++++++++++++------------------- 2 files changed, 91 insertions(+), 94 deletions(-) diff --git a/docs/sudo_plugin.man.in b/docs/sudo_plugin.man.in index d37c6577e4..450b315c1a 100644 --- a/docs/sudo_plugin.man.in +++ b/docs/sudo_plugin.man.in @@ -1824,21 +1824,28 @@ function can be used to tear down the session that was opened by \fRinit_session\fR. .sp -The +Returns 1 on success, 0 on failure, and \-1 on error. +On error, the plugin may optionally call the +\fBconversation\fR() +or +\fBplugin_printf\fR() +function with +\fRSUDO_CONF_ERROR_MSG\fR +to present additional +error information to the user. +.sp +The function arguments are as follows: +.TP 6n +pwd +If the user-ID the command will run as was found in the password database, \fIpwd\fR -argument points to a passwd struct for the user the -command will be run as if the user-ID the command will run as was found -in the password database, otherwise it will be +will describe that user, otherwise it will be \fRNULL\fR. -.sp +.TP 6n +user_env_out The -\fIuser_env_out\fR -argument points to the environment the command will -run in, in the form of a \fRNULL\fR-terminated -vector of -\(lqname=value\(rq -strings. +environment vector to use when executing the command. This is the same string passed back to the front-end via the Policy Plugin's \fIuser_env_out\fR @@ -1863,17 +1870,37 @@ version specified by the front-end before using \fIuser_env_out\fR. Failure to do so may result in a crash. +.TP 6n +errstr +If the +\fBinit_session\fR() +function returns a value other than 1, the plugin may +store a message describing the failure or error in +\fIerrstr\fR. +The +\fBsudo\fR +front-end will then pass this value to any registered audit plugins. +The string stored in +\fIerrstr\fR +must remain valid until the plugin's +\fBclose\fR() +function is called. .sp -Returns 1 on success, 0 on failure, and \-1 on error. -On error, the plugin may optionally call the -\fBconversation\fR() -or -\fBplugin_printf\fR() -function with -\fRSUDO_CONF_ERROR_MSG\fR -to present additional -error information to the user. +The +\fIerrstr\fR +parameter is only available starting with +API version 1.15. +A plugin +\fBmust\fR +check the API version specified by the +\fBsudo\fR +front-end before using +\fIerrstr\fR. +Failure to do so may result in a crash. +.PD 0 +.PP .RE +.PD .TP 6n register_hooks .nf @@ -2017,33 +2044,6 @@ version 1.15 or higher, \fBevent_alloc\fR() will not be set. .RE -.TP 6n -errstr -If the -\fBinit_session\fR() -function returns a value other than 1, the plugin may -store a message describing the failure or error in -\fIerrstr\fR. -The -\fBsudo\fR -front-end will then pass this value to any registered audit plugins. -The string stored in -\fIerrstr\fR -must remain valid until the plugin's -\fBclose\fR() -function is called. -.sp -The -\fIerrstr\fR -parameter is only available starting with -API version 1.15. -A plugin -\fBmust\fR -check the API version specified by the -\fBsudo\fR -front-end before using -\fIerrstr\fR. -Failure to do so may result in a crash. .PP \fIPolicy Plugin Version Macros\fR .nf diff --git a/docs/sudo_plugin.mdoc.in b/docs/sudo_plugin.mdoc.in index 8724f64a97..eca7f9a338 100644 --- a/docs/sudo_plugin.mdoc.in +++ b/docs/sudo_plugin.mdoc.in @@ -1630,21 +1630,27 @@ function can be used to tear down the session that was opened by .Li init_session . .Pp -The -.Em pwd -argument points to a passwd struct for the user the -command will be run as if the user-ID the command will run as was found -in the password database, otherwise it will be -.Dv NULL . +Returns 1 on success, 0 on failure, and \-1 on error. +On error, the plugin may optionally call the +.Fn conversation +or +.Fn plugin_printf +function with +.Dv SUDO_CONF_ERROR_MSG +to present additional +error information to the user. .Pp +The function arguments are as follows: +.Bl -tag -width 4n +.It pwd +If the user-ID the command will run as was found in the password database, +.Fa pwd +will describe that user, otherwise it will be +.Dv NULL . +.It user_env_out The -.Em user_env_out -argument points to the environment the command will -run in, in the form of a .Dv NULL Ns -terminated -vector of -.Dq name=value -strings. +environment vector to use when executing the command. This is the same string passed back to the front-end via the Policy Plugin's .Em user_env_out @@ -1669,16 +1675,33 @@ version specified by the front-end before using .Em user_env_out . Failure to do so may result in a crash. +.It errstr +If the +.Fn init_session +function returns a value other than 1, the plugin may +store a message describing the failure or error in +.Fa errstr . +The +.Nm sudo +front-end will then pass this value to any registered audit plugins. +The string stored in +.Fa errstr +must remain valid until the plugin's +.Fn close +function is called. .Pp -Returns 1 on success, 0 on failure, and \-1 on error. -On error, the plugin may optionally call the -.Fn conversation -or -.Fn plugin_printf -function with -.Dv SUDO_CONF_ERROR_MSG -to present additional -error information to the user. +The +.Fa errstr +parameter is only available starting with +API version 1.15. +A plugin +.Sy must +check the API version specified by the +.Nm sudo +front-end before using +.Fa errstr . +Failure to do so may result in a crash. +.El .It register_hooks .Bd -literal -compact void (*register_hooks)(int version, @@ -1807,32 +1830,6 @@ front-end doesn't support API version 1.15 or higher, .Fn event_alloc will not be set. -.It errstr -If the -.Fn init_session -function returns a value other than 1, the plugin may -store a message describing the failure or error in -.Fa errstr . -The -.Nm sudo -front-end will then pass this value to any registered audit plugins. -The string stored in -.Fa errstr -must remain valid until the plugin's -.Fn close -function is called. -.Pp -The -.Fa errstr -parameter is only available starting with -API version 1.15. -A plugin -.Sy must -check the API version specified by the -.Nm sudo -front-end before using -.Fa errstr . -Failure to do so may result in a crash. .El .Pp .Em Policy Plugin Version Macros From a7b200d014b41db9905b8661a03728ddaef93f37 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 11 Sep 2022 19:06:24 -0600 Subject: [PATCH 115/186] Use correct markup of function arguments and struct members. Also remove most uses of the deprecated Li macro which has no effect. --- docs/sudo_plugin.man.in | 712 ++++++++++++++++---------------- docs/sudo_plugin.mdoc.in | 848 ++++++++++++++++++++------------------- 2 files changed, 796 insertions(+), 764 deletions(-) diff --git a/docs/sudo_plugin.man.in b/docs/sudo_plugin.man.in index 450b315c1a..1e5b5844ea 100644 --- a/docs/sudo_plugin.man.in +++ b/docs/sudo_plugin.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDO_PLUGIN" "5" "August 2, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN" "5" "September 10, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -48,12 +48,12 @@ A plugin should be check the version passed to it and make sure that the major version matches. .PP The plugin API is defined by the -\fRsudo_plugin.h\fR +<\fIsudo_plugin.h\fR> header file. .SS "Policy plugin API" A policy plugin must declare and populate a -\fRpolicy_plugin\fR -struct in the global scope. +\fIstruct policy_plugin\fR +in the global scope. This structure contains pointers to the functions that implement the \fBsudo\fR policy checks. @@ -93,16 +93,18 @@ struct policy_plugin { .RE .fi .PP -The policy_plugin struct has the following fields: +A +\fIstruct policy_plugin\fR +has the following fields: .TP 6n -type +\fItype\fR The -\fRtype\fR +\fItype\fR field should always be set to SUDO_POLICY_PLUGIN. .TP 6n -version +\fIversion\fR The -\fRversion\fR +\fIversion\fR field should be set to \fRSUDO_API_VERSION\fR. .sp @@ -111,7 +113,7 @@ This allows to determine the API version the plugin was built against. .TP 6n -open +\fIopen\fR .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, @@ -137,14 +139,14 @@ to present additional error information to the user. .sp The function arguments are as follows: .TP 6n -version +\fIversion\fR The version passed in by \fBsudo\fR allows the plugin to determine the major and minor version number of the plugin API supported by \fBsudo\fR. .TP 6n -conversation +\fIconversation\fR A pointer to the \fBconversation\fR() function that can be used by the plugin to interact with the user (see @@ -152,7 +154,7 @@ function that can be used by the plugin to interact with the user (see for details). Returns 0 on success and \-1 on failure. .TP 6n -plugin_printf +\fIplugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used to display informational or error messages (see @@ -160,7 +162,7 @@ function that may be used to display informational or error messages (see for details). Returns the number of characters printed on success and \-1 on failure. .TP 6n -settings +\fIsettings\fR A vector of user-supplied \fBsudo\fR settings in the form of @@ -182,8 +184,7 @@ equal sign (\(oq=\(cq) since the \fIname\fR -field will never include one -itself but the +field will never include one itself but the \fIvalue\fR might. .sp @@ -463,7 +464,7 @@ function or return \-2 with a usage error if the plugin does not support \fIsudoedit\fR. For more information, see the -\fIcheck_policy\fR +\fBcheck_policy\fR() section. .TP 6n timeout=string @@ -478,7 +479,7 @@ Additional settings may be added in the future so the plugin should silently ignore settings that it does not recognize. .RE .TP 6n -user_info +\fIuser_info\fR A vector of information about the user running the command in the form of \(lqname=value\(rq strings. @@ -685,7 +686,7 @@ The name of the user invoking .RE .PD .TP 6n -user_env +\fIuser_env\fR The user's environment in the form of a \fRNULL\fR-terminated vector of \(lqname=value\(rq @@ -704,7 +705,7 @@ itself but the \fIvalue\fR might. .TP 6n -plugin_options +\fIplugin_options\fR Any (non-comment) strings immediately after the plugin path are passed as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -731,7 +732,7 @@ front-end before using \fIplugin_options\fR. Failure to do so may result in a crash. .TP 6n -errstr +\fIerrstr\fR If the \fBopen\fR() function returns a value other than 1, the plugin may @@ -762,7 +763,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -792,20 +793,20 @@ function returned successfully. .sp The function arguments are as follows: .TP 6n -exit_status +\fIexit_status\fR The command's exit status, as returned by the wait(2) system call, or zero if no command was run. The value of -\fRexit_status\fR +\fIexit_status\fR is undefined if -\fRerror\fR +\fIerror\fR is non-zero. .TP 6n -error +\fIerror\fR .br If the command could not be executed, this is set to the value of -\fRerrno\fR +\fIerrno\fR set by the execve(2) system call. @@ -815,7 +816,7 @@ or \fBplugin_printf\fR() function. If the command was successfully executed, the value of -\fRerror\fR +\fIerror\fR is zero. .PP If no @@ -823,17 +824,17 @@ If no function is defined, no I/O logging plugins are loaded, and neither the \fItimeout\fR -not +nor \fIuse_pty\fR options are set in the -\fRcommand_info\fR +\fIcommand_info\fR list, the \fBsudo\fR front-end may execute the command directly instead of running it as a child process. .RE .TP 6n -show_version +\fIshow_version\fR .nf .RS 6n int (*show_version)(int verbose); @@ -845,8 +846,7 @@ The \fBshow_version\fR() function is called by \fBsudo\fR -when the user specifies -the +when the user specifies the \fB\-V\fR option. The plugin may display its version information to the user via the @@ -855,14 +855,16 @@ or \fBplugin_printf\fR() function using \fRSUDO_CONV_INFO_MSG\fR. -If the user requests detailed version information, the verbose flag will be set. +If the user requests detailed version information, the +\fIverbose\fR +flag will be non-zero. .sp Returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error, although the return value is currently ignored. .RE .TP 6n -check_policy +\fIcheck_policy\fR .nf .RS 6n int (*check_policy)(int argc, char * const argv[], char *env_add[], @@ -883,8 +885,7 @@ If the \fIsudoedit\fR option was enabled in the \fIsettings\fR -array -passed to the +array passed to the \fBopen\fR() function, the user has requested \fIsudoedit\fR @@ -915,8 +916,7 @@ editor and its arguments by a element. The \(lq\fR--\fR\(rq -will -be removed by +will be removed by \fBsudo\fR before the editor is executed. The plugin should also set @@ -946,14 +946,14 @@ to present additional error information to the user. .sp The function arguments are as follows: .TP 6n -argc +\fIargc\fR The number of elements in \fIargv\fR, not counting the final \fRNULL\fR pointer. .TP 6n -argv +\fIargv\fR The argument vector describing the command the user wishes to run, in the same form as what would be passed to the execve(2) @@ -962,7 +962,7 @@ The vector is terminated by a \fRNULL\fR pointer. .TP 6n -env_add +\fIenv_add\fR Additional environment variables specified by the user on the command line in the form of a \fRNULL\fR-terminated @@ -980,19 +980,17 @@ equal sign (\(oq=\(cq) since the \fIname\fR -field will never include one -itself but the +field will never include one itself but the \fIvalue\fR might. .TP 6n -command_info +\fIcommand_info\fR Information about the command being run in the form of \(lqname=value\(rq strings. These values are used by \fBsudo\fR -to set the execution -environment when running a command. +to set the execution environment when running a command. The plugin is responsible for creating and populating the vector, which must be terminated with a \fRNULL\fR @@ -1065,7 +1063,7 @@ Otherwise, any terminal input must be passed to the command, whether it has required it or not (the kernel buffers terminals so it is not possible to tell whether the command really wants the input). This is different from historic -\fIsudo\fR +\fBsudo\fR behavior or when the command is not being run in a pseudo-terminal. .sp For this to work seamlessly, the operating system must support the @@ -1220,7 +1218,7 @@ If set, \fBsudo\fR will preserve the user's group vector instead of initializing the group vector based on -\fRrunas_user\fR. +\fIrunas_user\fR. .TP 6n rlimit_as=soft,hard The maximum size to which the process's address space may grow (in bytes), @@ -1561,7 +1559,7 @@ the invoking user's existing entry. Unsupported values will be ignored. .RE .TP 6n -argv_out +\fIargv_out\fR The \fRNULL\fR-terminated argument vector to pass to the @@ -1569,13 +1567,13 @@ execve(2) system call when executing the command. The plugin is responsible for allocating and populating the vector. .TP 6n -user_env_out +\fIuser_env_out\fR The \fRNULL\fR-terminated environment vector to use when executing the command. The plugin is responsible for allocating and populating the vector. .TP 6n -errstr +\fIerrstr\fR If the \fBcheck_policy\fR() function returns a value other than 1, the plugin may @@ -1606,7 +1604,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -list +\fIlist\fR .nf .RS 6n int (*list)(int argc, char * const argv[], int verbose, @@ -1635,14 +1633,14 @@ function using .sp The function arguments are as follows: .TP 6n -argc +\fIargc\fR The number of elements in \fIargv\fR, not counting the final \fRNULL\fR pointer. .TP 6n -argv +\fIargv\fR If non-\fRNULL\fR, an argument vector describing a command the user @@ -1653,17 +1651,17 @@ system call. If the command is permitted by the policy, the fully-qualified path to the command should be displayed along with any command line arguments. .TP 6n -verbose +\fIverbose\fR Flag indicating whether to list in verbose mode or not. .TP 6n -list_user +\fIlist_user\fR The name of a different user to list privileges for if the policy allows it. If \fRNULL\fR, the plugin should list the privileges of the invoking user. .TP 6n -errstr +\fIerrstr\fR If the \fBlist\fR() function returns a value other than 1, the plugin may @@ -1694,7 +1692,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -validate +\fIvalidate\fR .nf .RS 6n int (*validate)(const char **errstr); @@ -1733,7 +1731,7 @@ error information to the user. .sp The function arguments are as follows: .TP 6n -errstr +\fIerrstr\fR If the \fBvalidate\fR() function returns a value other than 1, the plugin may @@ -1764,7 +1762,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -invalidate +\fIinvalidate\fR .nf .RS 6n void (*invalidate)(int remove); @@ -1788,7 +1786,7 @@ cache authentication credentials, this function will invalidate the credentials. If the \fIremove\fR -flag is set, the plugin may remove +flag is non-zero, the plugin may remove the credentials instead of simply invalidating them. .sp The @@ -1798,10 +1796,11 @@ function should be if the plugin does not support credential caching. .RE .TP 6n -init_session +\fIinit_session\fR .nf .RS 6n -int (*init_session)(struct passwd *pwd, char **user_env_out[]); +int (*init_session)(struct passwd *pwd, char **user_env[], + const char **errstr); .RE .fi .RS 6n @@ -1814,7 +1813,7 @@ sets up the execution environment for the command. It is run in the parent \fBsudo\fR -process and before any user-ID or group-ID changes. +process before any user-ID or group-ID changes. This can be used to perform session setup that is not supported by \fIcommand_info\fR, such as opening the PAM session. @@ -1822,7 +1821,7 @@ The \fBclose\fR() function can be used to tear down the session that was opened by -\fRinit_session\fR. +\fBinit_session\fR(). .sp Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the @@ -1836,18 +1835,17 @@ error information to the user. .sp The function arguments are as follows: .TP 6n -pwd +\fIpwd\fR If the user-ID the command will run as was found in the password database, \fIpwd\fR will describe that user, otherwise it will be \fRNULL\fR. .TP 6n -user_env_out +\fIuser_env_out\fR The \fRNULL\fR-terminated environment vector to use when executing the command. -This is the same string passed back to the front-end via -the Policy Plugin's +This is the same string passed back to the front-end via the Policy Plugin's \fIuser_env_out\fR parameter. If the @@ -1871,7 +1869,7 @@ front-end before using \fIuser_env_out\fR. Failure to do so may result in a crash. .TP 6n -errstr +\fIerrstr\fR If the \fBinit_session\fR() function returns a value other than 1, the plugin may @@ -1902,7 +1900,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -register_hooks +\fIregister_hooks\fR .nf .RS 6n void (*register_hooks)(int version, @@ -1916,7 +1914,7 @@ The function is called by the sudo front-end to register any hooks the plugin needs. If the plugin does not support hooks, -\fRregister_hooks\fR +\fIregister_hooks\fR should be set to the \fRNULL\fR pointer. @@ -1934,13 +1932,12 @@ function should be used to register any supported hooks the plugin needs. It returns 0 on success, 1 if the hook type is not supported, and \-1 if the major version in -\fRstruct hook\fR +\fIstruct sudo_hook\fR does not match the front-end's major hook API version. .sp See the \fIHook function API\fR -section below for more information -about hooks. +section below for more information about hooks. .sp The \fBregister_hooks\fR() @@ -1950,11 +1947,11 @@ If the \fBsudo\fR front-end doesn't support API version 1.2 or higher, -\fRregister_hooks\fR +\fBregister_hooks\fR() will not be called. .RE .TP 6n -deregister_hooks +\fIderegister_hooks\fR .nf .RS 6n void (*deregister_hooks)(int version, @@ -1968,7 +1965,7 @@ The function is called by the sudo front-end to deregister any hooks the plugin has registered. If the plugin does not support hooks, -\fRderegister_hooks\fR +\fIderegister_hooks\fR should be set to the \fRNULL\fR pointer. @@ -1987,13 +1984,12 @@ hooks that were put in place by the \fBregister_hook\fR() function. If the plugin tries to deregister a hook that the front-end does not support, -\fRderegister_hook\fR +\fBderegister_hook\fR() will return an error. .sp See the \fIHook function API\fR -section below for more information -about hooks. +section below for more information about hooks. .sp The \fBderegister_hooks\fR() @@ -2003,11 +1999,11 @@ If the \fBsudo\fR front-end doesn't support API version 1.2 or higher, -\fRderegister_hooks\fR +\fBderegister_hooks\fR() will not be called. .RE .TP 6n -event_alloc +\fIevent_alloc\fR .nf .RS 6n struct sudo_plugin_event * (*event_alloc)(void); @@ -2018,12 +2014,12 @@ struct sudo_plugin_event * (*event_alloc)(void); The \fBevent_alloc\fR() function is used to allocate a -\fRstruct sudo_plugin_event\fR +\fIstruct sudo_plugin_event\fR which provides access to the main \fBsudo\fR event loop. Unlike the other fields, the -\fBevent_alloc\fR() +\fIevent_alloc\fR pointer is filled in by the \fBsudo\fR front-end, not by the plugin. @@ -2041,7 +2037,7 @@ If the \fBsudo\fR front-end doesn't support API version 1.15 or higher, -\fBevent_alloc\fR() +\fIevent_alloc\fR will not be set. .RE .PP @@ -2111,13 +2107,16 @@ session. If any of the standard input, standard output, or standard error do not correspond to a tty, \fBsudo\fR -will open a pipe to capture -the I/O for logging before passing it on. +will open a pipe to capture the I/O for logging before passing it on. .PP -The log_ttyin function receives the raw user input from the terminal +The +\fBlog_ttyin\fR() +function receives the raw user input from the terminal device (this will include input even when echo is disabled, such as when a password is read). -The log_ttyout function receives output from the pseudo-terminal that is +The +\fBlog_ttyout\fR() +function receives output from the pseudo-terminal that is suitable for replaying the user's session at a later time. The \fBlog_stdin\fR(), @@ -2147,17 +2146,19 @@ If an output logging function rejects the data by returning 0, the command will be terminated and the data will not be written to the terminal, though it will still be sent to any other I/O logging plugins. .PP -The audit_plugin struct has the following fields: +A +\fIstruct audit_plugin\fR +has the following fields: .TP 6n -type +\fItype\fR The -\fRtype\fR +\fItype\fR field should always be set to \fRSUDO_IO_PLUGIN\fR. .TP 6n -version +\fIversion\fR The -\fRversion\fR +\fIversion\fR field should be set to \fRSUDO_API_VERSION\fR. .sp @@ -2166,7 +2167,7 @@ This allows to determine the API version the plugin was built against. .TP 6n -open +\fIopen\fR .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, @@ -2210,18 +2211,18 @@ to present additional error information to the user. .sp The function arguments are as follows: .TP 6n -version +\fIversion\fR The version passed in by \fBsudo\fR allows the plugin to determine the major and minor version number of the plugin API supported by \fBsudo\fR. .TP 6n -conversation +\fIconversation\fR A pointer to the \fBconversation\fR() function that may be used by the -\fBshow_version\fR() +\fBFa\fR(\fIshow_version\fR) function to display version information (see \fBshow_version\fR() below). @@ -2232,7 +2233,7 @@ The \fBconversation\fR() function returns 0 on success and \-1 on failure. .TP 6n -plugin_printf +\fIplugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used by the @@ -2246,7 +2247,7 @@ The \fBplugin_printf\fR() function returns number of characters printed on success and \-1 on failure. .TP 6n -settings +\fIsettings\fR A vector of user-supplied \fBsudo\fR settings in the form of @@ -2277,7 +2278,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible settings. .TP 6n -user_info +\fIuser_info\fR A vector of information about the user running the command in the form of \(lqname=value\(rq strings. @@ -2302,7 +2303,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -command_info +\fIcommand_info\fR A vector of information describing the command being run in the form of \(lqname=value\(rq strings. @@ -2327,18 +2328,19 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -argc +\fIargc\fR The number of elements in \fIargv\fR, not counting the final \fRNULL\fR pointer. -It can be zero, when +It can be zero, such as when \fBsudo\fR -is called with -\fB\-V\fR. +is called with the +\fB\-V\fR +option. .TP 6n -argv +\fIargv\fR If non-\fRNULL\fR, an argument vector describing a command the user @@ -2346,7 +2348,7 @@ wishes to run in the same form as what would be passed to the execve(2) system call. .TP 6n -user_env +\fIuser_env\fR The user's environment in the form of a \fRNULL\fR-terminated vector of @@ -2366,7 +2368,7 @@ itself but the \fIvalue\fR might. .TP 6n -plugin_options +\fIplugin_options\fR Any (non-comment) strings immediately after the plugin path are treated as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -2392,7 +2394,7 @@ front-end before using \fIplugin_options\fR. Failure to do so may result in a crash. .TP 6n -errstr +\fIerrstr\fR If the \fBopen\fR() function returns a value other than 1, the plugin may @@ -2423,7 +2425,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -2440,32 +2442,32 @@ is finished, shortly before it exits. .sp The function arguments are as follows: .TP 6n -exit_status +\fIexit_status\fR The command's exit status, as returned by the wait(2) system call, or zero if no command was run. The value of -\fRexit_status\fR +\fIexit_status\fR is undefined if -\fRerror\fR +\fIerror\fR is non-zero. .TP 6n -error +\fIerror\fR .br If the command could not be executed, this is set to the value of -\fRerrno\fR +\fIerrno\fR set by the execve(2) system call. If the command was successfully executed, the value of -\fRerror\fR +\fIerror\fR is zero. .PD 0 .PP .RE .PD .TP 6n -show_version +\fIshow_version\fR .nf .RS 6n int (*show_version)(int verbose); @@ -2477,8 +2479,7 @@ The \fBshow_version\fR() function is called by \fBsudo\fR -when the user specifies -the +when the user specifies the \fB\-V\fR option. The plugin may display its version information to the user via the @@ -2487,13 +2488,16 @@ or \fBplugin_printf\fR() function using \fRSUDO_CONV_INFO_MSG\fR. +If the user requests detailed version information, the +\fIverbose\fR +flag will be non-zero. .sp Returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error, although the return value is currently ignored. .RE .TP 6n -log_ttyin +\fIlog_ttyin\fR .nf .RS 6n int (*log_ttyin)(const char *buf, unsigned int len, @@ -2514,15 +2518,15 @@ error occurred. .sp The function arguments are as follows: .TP 6n -buf +\fIbuf\fR The buffer containing user input. .TP 6n -len +\fIlen\fR The length of \fIbuf\fR in bytes. .TP 6n -errstr +\fIerrstr\fR If the \fBlog_ttyin\fR() function returns a value other than 1, the plugin may @@ -2553,7 +2557,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -log_ttyout +\fIlog_ttyout\fR .nf .RS 6n int (*log_ttyout)(const char *buf, unsigned int len, @@ -2573,15 +2577,15 @@ Returns 1 if the data should be passed to the user, 0 if the data is rejected .sp The function arguments are as follows: .TP 6n -buf +\fIbuf\fR The buffer containing command output. .TP 6n -len +\fIlen\fR The length of \fIbuf\fR in bytes. .TP 6n -errstr +\fIerrstr\fR If the \fBlog_ttyout\fR() function returns a value other than 1, the plugin may @@ -2612,7 +2616,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -log_stdin +\fIlog_stdin\fR .nf .RS 6n int (*log_stdin)(const char *buf, unsigned int len, @@ -2635,15 +2639,15 @@ if an error occurred. .sp The function arguments are as follows: .TP 6n -buf +\fIbuf\fR The buffer containing user input. .TP 6n -len +\fIlen\fR The length of \fIbuf\fR in bytes. .TP 6n -errstr +\fIerrstr\fR If the \fBlog_stdin\fR() function returns a value other than 1, the plugin may @@ -2674,7 +2678,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -log_stdout +\fIlog_stdout\fR .nf .RS 6n int (*log_stdout)(const char *buf, unsigned int len, @@ -2697,15 +2701,15 @@ an error occurred. .sp The function arguments are as follows: .TP 6n -buf +\fIbuf\fR The buffer containing command output. .TP 6n -len +\fIlen\fR The length of \fIbuf\fR in bytes. .TP 6n -errstr +\fIerrstr\fR If the \fBlog_stdout\fR() function returns a value other than 1, the plugin may @@ -2736,7 +2740,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -log_stderr +\fIlog_stderr\fR .nf .RS 6n int (*log_stderr)(const char *buf, unsigned int len, @@ -2759,15 +2763,15 @@ an error occurred. .sp The function arguments are as follows: .TP 6n -buf +\fIbuf\fR The buffer containing command output. .TP 6n -len +\fIlen\fR The length of \fIbuf\fR in bytes. .TP 6n -errstr +\fIerrstr\fR If the \fBlog_stderr\fR() function returns a value other than 1, the plugin may @@ -2798,19 +2802,19 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -register_hooks +\fIregister_hooks\fR See the \fIPolicy plugin API\fR section for a description of -\fRregister_hooks\fR. +\fBregister_hooks\fR(). .TP 6n -deregister_hooks +\fIderegister_hooks\fR See the \fIPolicy plugin API\fR section for a description of -\fRderegister_hooks\fR. +\fBderegister_hooks\fR(). .TP 6n -change_winsize +\fIchange_winsize\fR .nf .RS 6n int (*change_winsize)(unsigned int lines, unsigned int cols, @@ -2823,7 +2827,7 @@ The \fBchange_winsize\fR() function is called whenever the window size of the terminal changes from the initial values specified in the -\fRuser_info\fR +\fIuser_info\fR list. Returns \-1 if an error occurred, in which case no further calls to \fBchange_winsize\fR() @@ -2831,14 +2835,14 @@ will be made, .sp The function arguments are as follows: .TP 6n -lines +\fIlines\fR .br The number of lines (rows) in the re-sized terminal. .TP 6n -cols +\fIcols\fR The number of columns in the re-sized terminal. .TP 6n -errstr +\fIerrstr\fR If the \fBchange_winsize\fR() function returns a value other than 1, the plugin may @@ -2869,7 +2873,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -log_suspend +\fIlog_suspend\fR .nf .RS 6n int (*log_suspend)(int signo, const char **errstr); @@ -2888,13 +2892,13 @@ will be made, .sp The function arguments are as follows: .TP 6n -signo +\fIsigno\fR .br The signal that caused the command to be suspended, or \fRSIGCONT\fR if the command was resumed. .TP 6n -errstr +\fIerrstr\fR If the \fBlog_suspend\fR() function returns a value other than 1, the plugin may @@ -2921,7 +2925,7 @@ front-end before using \fIerrstr\fR. Failure to do so may result in a crash. .TP 6n -event_alloc +\fIevent_alloc\fR .nf .RS 6n struct sudo_plugin_event * (*event_alloc)(void); @@ -2932,7 +2936,7 @@ struct sudo_plugin_event * (*event_alloc)(void); The \fBevent_alloc\fR() function is used to allocate a -\fRstruct sudo_plugin_event\fR +\fIstruct sudo_plugin_event\fR which provides access to the main \fBsudo\fR event loop. @@ -3010,17 +3014,19 @@ independent of the policy or any I/O plugins. Multiple audit plugins may be specified in sudo.conf(@mansectform@). .PP -The audit_plugin struct has the following fields: +A +\fIstruct audit_plugin\fR +has the following fields: .TP 6n -type +\fItype\fR The -\fRtype\fR +\fItype\fR field should always be set to \fRSUDO_AUDIT_PLUGIN\fR. .TP 6n -version +\fIversion\fR The -\fRversion\fR +\fIversion\fR field should be set to \fRSUDO_API_VERSION\fR. .sp @@ -3029,7 +3035,7 @@ This allows to determine the API version the plugin was built against. .TP 6n -open +\fIopen\fR .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, @@ -3062,14 +3068,14 @@ to present additional error information to the user. .sp The function arguments are as follows: .TP 6n -version +\fIversion\fR The version passed in by \fBsudo\fR allows the plugin to determine the major and minor version number of the plugin API supported by \fBsudo\fR. .TP 6n -conversation +\fIconversation\fR A pointer to the \fBconversation\fR() function that may be used by the @@ -3084,7 +3090,7 @@ The \fBconversation\fR() function returns 0 on success, and \-1 on failure. .TP 6n -plugin_printf +\fIplugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used by the @@ -3098,7 +3104,7 @@ The \fBplugin_printf\fR() function returns number of characters printed on success and \-1 on failure. .TP 6n -settings +\fIsettings\fR A vector of user-supplied \fBsudo\fR settings in the form of @@ -3129,7 +3135,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible settings. .TP 6n -user_info +\fIuser_info\fR A vector of information about the user running the command in the form of \(lqname=value\(rq strings. @@ -3154,7 +3160,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -submit_optind +\fIsubmit_optind\fR The index into \fIsubmit_argv\fR that corresponds to the first entry that is not a command line option. @@ -3165,10 +3171,10 @@ only consists of options, which may be the case with the or \fB\-v\fR options, -\fRsubmit_argv[submit_optind]\fR +\fIsubmit_argv\fR[\fIsubmit_optind\fR] will evaluate to the NULL pointer. .TP 6n -submit_argv +\fIsubmit_argv\fR The argument vector \fBsudo\fR was invoked with, including all command line options. @@ -3176,7 +3182,7 @@ The \fIsubmit_optind\fR argument can be used to determine the end of the command line options. .TP 6n -submit_envp +\fIsubmit_envp\fR The invoking user's environment in the form of a \fRNULL\fR-terminated vector of @@ -3196,7 +3202,7 @@ itself but the \fIvalue\fR might. .TP 6n -plugin_options +\fIplugin_options\fR Any (non-comment) strings immediately after the plugin path are treated as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -3209,7 +3215,7 @@ will be the \fRNULL\fR pointer. .TP 6n -errstr +\fIerrstr\fR If the \fBopen\fR() function returns a value other than 1, the plugin may @@ -3228,7 +3234,7 @@ function is called. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -3245,7 +3251,7 @@ is finished, shortly before it exits. .sp The function arguments are as follows: .TP 6n -status_type +\fIstatus_type\fR The type of status being passed. One of \fRSUDO_PLUGIN_NO_STATUS\fR, @@ -3254,18 +3260,18 @@ One of or \fRSUDO_PLUGIN_SUDO_ERROR\fR. .TP 6n -status +\fIstatus\fR Depending on the value of \fIstatus_type\fR, this value is either ignored, the command's exit status as returned by the wait(2) system call, the value of -\fRerrno\fR +\fIerrno\fR set by the execve(2) system call, or the value of -\fRerrno\fR +\fIerrno\fR resulting from an error in the \fBsudo\fR front-end. @@ -3274,7 +3280,7 @@ front-end. .RE .PD .TP 6n -accept +\fIaccept\fR .nf .RS 6n int (*accept)(const char *plugin_name, unsigned int plugin_type, @@ -3290,14 +3296,14 @@ function is called when a command or action is accepted by a policy or approval plugin. The function arguments are as follows: .TP 6n -plugin_name +\fIplugin_name\fR The name of the plugin that accepted the command or \(lqsudo\(rq for the \fBsudo\fR front-end. .TP 6n -plugin_type +\fIplugin_type\fR The type of plugin that accepted the command, currently either \fRSUDO_POLICY_PLUGIN\fR, \fRSUDO_POLICY_APPROVAL\fR, @@ -3325,7 +3331,7 @@ functions will \fIboth\fR be called. .TP 6n -command_info +\fIcommand_info\fR An optional vector of information describing the command being run in the form of \(lqname=value\(rq @@ -3351,7 +3357,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -run_argv +\fIrun_argv\fR A \fRNULL\fR-terminated argument vector describing a command that will be run in the @@ -3359,7 +3365,7 @@ same form as what would be passed to the execve(2) system call. .TP 6n -run_envp +\fIrun_envp\fR The environment the command will be run with in the form of a \fRNULL\fR-terminated vector of @@ -3379,7 +3385,7 @@ itself but the \fIvalue\fR might. .TP 6n -errstr +\fIerrstr\fR If the \fBaccept\fR() function returns a value other than 1, the plugin may @@ -3398,7 +3404,7 @@ function is called. .RE .PD .TP 6n -reject +\fIreject\fR .nf .RS 6n int (*reject)(const char *plugin_name, unsigned int plugin_type, @@ -3413,10 +3419,10 @@ The function is called when a command or action is rejected by a plugin. The function arguments are as follows: .TP 6n -plugin_name +\fIplugin_name\fR The name of the plugin that rejected the command. .TP 6n -plugin_type +\fIplugin_type\fR The type of plugin that rejected the command, currently either \fRSUDO_POLICY_PLUGIN\fR, \fRSUDO_APPROVAL_PLUGIN\fR, @@ -3431,7 +3437,7 @@ function is not called on behalf of the \fBsudo\fR front-end. .TP 6n -audit_msg +\fIaudit_msg\fR An optional string describing the reason the command was rejected by the plugin. If the plugin did not provide a reason, @@ -3440,7 +3446,7 @@ will be the \fRNULL\fR pointer. .TP 6n -command_info +\fIcommand_info\fR An optional vector of information describing the command being run in the form of \(lqname=value\(rq @@ -3466,7 +3472,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -errstr +\fIerrstr\fR If the \fBreject\fR() function returns a value other than 1, the plugin may @@ -3485,7 +3491,7 @@ function is called. .RE .PD .TP 6n -error +\fIerror\fR .br .nf .RS 6n @@ -3503,21 +3509,21 @@ function is called when a plugin or the front-end returns an error. The function arguments are as follows: .TP 6n -plugin_name +\fIplugin_name\fR The name of the plugin that generated the error or \(lqsudo\(rq for the \fBsudo\fR front-end. .TP 6n -plugin_type +\fIplugin_type\fR The type of plugin that generated the error, or \fRSUDO_FRONT_END\fR for the \fBsudo\fR front-end. .TP 6n -audit_msg +\fIaudit_msg\fR An optional string describing the plugin error. If the plugin did not provide a description, \fIaudit_msg\fR @@ -3525,7 +3531,7 @@ will be the \fRNULL\fR pointer. .TP 6n -command_info +\fIcommand_info\fR An optional vector of information describing the command being run in the form of \(lqname=value\(rq @@ -3551,7 +3557,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -errstr +\fIerrstr\fR If the \fBerror\fR() function returns a value other than 1, the plugin may @@ -3570,7 +3576,7 @@ function is called. .RE .PD .TP 6n -show_version +\fIshow_version\fR .nf .RS 6n int (*show_version)(int verbose); @@ -3582,8 +3588,7 @@ The \fBshow_version\fR() function is called by \fBsudo\fR -when the user specifies -the +when the user specifies the \fB\-V\fR option. The plugin may display its version information to the user via the @@ -3599,19 +3604,19 @@ or \-2 if there was a usage error, although the return value is currently ignored. .RE .TP 6n -register_hooks +\fIregister_hooks\fR See the \fIPolicy plugin API\fR section for a description of -\fRregister_hooks\fR. +\fBregister_hooks\fR(). .TP 6n -deregister_hooks +\fIderegister_hooks\fR See the \fIPolicy plugin API\fR section for a description of -\fRderegister_hooks\fR. +\fBderegister_hooks\fR(). .TP 6n -event_alloc +\fIevent_alloc\fR .nf .RS 6n struct sudo_plugin_event * (*event_alloc)(void); @@ -3622,12 +3627,12 @@ struct sudo_plugin_event * (*event_alloc)(void); The \fBevent_alloc\fR() function is used to allocate a -\fRstruct sudo_plugin_event\fR +\fIstruct sudo_plugin_event\fR which provides access to the main \fBsudo\fR event loop. Unlike the other fields, the -\fBevent_alloc\fR() +\fIevent_alloc\fR pointer is filled in by the \fBsudo\fR front-end, not by the plugin. @@ -3681,17 +3686,19 @@ before the plugin is closed). Multiple approval plugins may be specified in sudo.conf(@mansectform@). .PP -The approval_plugin struct has the following fields: +A +\fIstruct approval_plugin\fR +has the following fields: .TP 6n -type +\fItype\fR The -\fRtype\fR +\fItype\fR field should always be set to \fRSUDO_APPROVAL_PLUGIN\fR. .TP 6n -version +\fIversion\fR The -\fRversion\fR +\fIversion\fR field should be set to \fRSUDO_API_VERSION\fR. .sp @@ -3700,7 +3707,7 @@ This allows to determine the API version the plugin was built against. .TP 6n -open +\fIopen\fR .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, @@ -3738,14 +3745,14 @@ to present additional error information to the user. .sp The function arguments are as follows: .TP 6n -version +\fIversion\fR The version passed in by \fBsudo\fR allows the plugin to determine the major and minor version number of the plugin API supported by \fBsudo\fR. .TP 6n -conversation +\fIconversation\fR A pointer to the \fBconversation\fR() function that can be used by the plugin to interact with the user (see @@ -3753,7 +3760,7 @@ function that can be used by the plugin to interact with the user (see for details). Returns 0 on success and \-1 on failure. .TP 6n -plugin_printf +\fIplugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used to display informational or error messages (see @@ -3761,7 +3768,7 @@ function that may be used to display informational or error messages (see for details). Returns the number of characters printed on success and \-1 on failure. .TP 6n -settings +\fIsettings\fR A vector of user-supplied \fBsudo\fR settings in the form of @@ -3792,7 +3799,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible settings. .TP 6n -user_info +\fIuser_info\fR A vector of information about the user running the command in the form of \(lqname=value\(rq strings. @@ -3817,7 +3824,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -submit_optind +\fIsubmit_optind\fR The index into \fIsubmit_argv\fR that corresponds to the first entry that is not a command line option. @@ -3828,10 +3835,10 @@ only consists of options, which may be the case with the or \fB\-v\fR options, -\fRsubmit_argv[submit_optind]\fR +\fIsubmit_argv\fR[\fIsubmit_optind\fR] will evaluate to the NULL pointer. .TP 6n -submit_argv +\fIsubmit_argv\fR The argument vector \fBsudo\fR was invoked with, including all command line options. @@ -3839,7 +3846,7 @@ The \fIsubmit_optind\fR argument can be used to determine the end of the command line options. .TP 6n -submit_envp +\fIsubmit_envp\fR The invoking user's environment in the form of a \fRNULL\fR-terminated vector of @@ -3859,7 +3866,7 @@ itself but the \fIvalue\fR might. .TP 6n -plugin_options +\fIplugin_options\fR Any (non-comment) strings immediately after the plugin path are treated as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -3872,7 +3879,7 @@ will be the \fRNULL\fR pointer. .TP 6n -errstr +\fIerrstr\fR If the \fBopen\fR() function returns a value other than 1, the plugin may @@ -3891,7 +3898,7 @@ function is called. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -3919,7 +3926,7 @@ may be set to the pointer. .RE .TP 6n -check +\fIcheck\fR .br .nf .RS 6n @@ -3951,7 +3958,7 @@ to present additional error information to the user. .sp The function arguments are as follows: .TP 6n -command_info +\fIcommand_info\fR A vector of information describing the command being run in the form of \(lqname=value\(rq strings. @@ -3976,7 +3983,7 @@ See the \fIPolicy plugin API\fR section for a list of all possible strings. .TP 6n -run_argv +\fIrun_argv\fR A \fRNULL\fR-terminated argument vector describing a command that will be run in the @@ -3984,7 +3991,7 @@ same form as what would be passed to the execve(2) system call. .TP 6n -run_envp +\fIrun_envp\fR The environment the command will be run with in the form of a \fRNULL\fR-terminated vector of @@ -4004,7 +4011,7 @@ itself but the \fIvalue\fR might. .TP 6n -errstr +\fIerrstr\fR If the \fBopen\fR() function returns a value other than 1, the plugin may @@ -4023,7 +4030,7 @@ function is called. .RE .PD .TP 6n -show_version +\fIshow_version\fR .nf .RS 6n int (*show_version)(int verbose); @@ -4035,8 +4042,7 @@ The \fBshow_version\fR() function is called by \fBsudo\fR -when the user specifies -the +when the user specifies the \fB\-V\fR option. The plugin may display its version information to the user via the @@ -4138,19 +4144,19 @@ struct sudo_hook { .RE .fi .PP -The -\fRsudo_hook\fR -structure has the following fields: +A +\fIstruct sudo_hook\fR +has the following fields: .TP 6n -hook_version +\fIhook_version\fR The -\fRhook_version\fR +\fIhook_version\fR field should be set to \fRSUDO_HOOK_VERSION\fR. .TP 6n -hook_type +\fIhook_type\fR The -\fRhook_type\fR +\fIhook_type\fR field may be one of the following supported hook types: .PP .RS 6n @@ -4162,7 +4168,7 @@ setenv(3) function. Any registered hooks will run before the C library implementation. The -\fRhook_fn\fR +\fIhook_fn\fR field should be a function that matches the following typedef: .nf @@ -4185,7 +4191,7 @@ unsetenv(3) function. Any registered hooks will run before the C library implementation. The -\fRhook_fn\fR +\fIhook_fn\fR field should be a function that matches the following typedef: .nf @@ -4202,7 +4208,7 @@ getenv(3) function. Any registered hooks will run before the C library implementation. The -\fRhook_fn\fR +\fIhook_fn\fR field should be a function that matches the following typedef: .nf @@ -4224,7 +4230,7 @@ putenv(3) function. Any registered hooks will run before the C library implementation. The -\fRhook_fn\fR +\fIhook_fn\fR field should be a function that matches the following typedef: .nf @@ -4244,32 +4250,33 @@ unspecified. .RE .PD .TP 6n -hook_fn +\fIhook_fn\fR +.nf +.RS 6n sudo_hook_fn_t hook_fn; +.RE +.fi +.RS 6n .sp The -\fRhook_fn\fR +\fIhook_fn\fR field should be set to the plugin's hook implementation. The actual function arguments will vary depending on the -\fRhook_type\fR +\fIhook_type\fR (see -\fRhook_type\fR +\fIhook_type\fR above). In all cases, the -\fRclosure\fR +\fIclosure\fR field of -\fRstruct sudo_hook\fR +\fIstruct sudo_hook\fR is passed as the last function parameter. This can be used to pass arbitrary data to the plugin's hook implementation. .sp The function return value may be one of the following: -.PP -.RS 6n -.PD 0 .TP 6n \fRSUDO_HOOK_RET_ERROR\fR The hook function encountered an error. -.PD .TP 6n \fRSUDO_HOOK_RET_NEXT\fR The hook completed without error, go on to the next hook (including @@ -4284,10 +4291,10 @@ if the specified variable was not found in the private copy of the environment. The hook completed without error, stop processing hooks for this invocation. This can be used to replace the system implementation. For example, a -\fRsetenv\fR +\fIsetenv\fR hook that operates on a private copy of the environment but leaves -\fRenviron\fR +\fIenviron\fR unchanged. .PD 0 .PP @@ -4310,7 +4317,7 @@ function to guard against nested calls. For example: .nf .sp -.RS 0n +.RS 6n static int in_progress = 0; /* avoid recursion */ if (in_progress) return SUDO_HOOK_RET_NEXT; @@ -4368,10 +4375,11 @@ struct sudo_plugin_event { .RE .fi .PP -The sudo_plugin_event struct contains the following function pointers: +A +\fIstruct sudo_plugin_event\fR +contains the following function pointers: .TP 6n -\fBset\fR() -.br +\fIset\fR .nf .RS 6n int (*set)(struct sudo_plugin_event *pev, int fd, int events, @@ -4384,8 +4392,10 @@ The \fBset\fR() function takes the following arguments: .TP 6n -struct sudo_plugin_event *\fIpev\fR -A pointer to the struct sudo_plugin_event itself. +\fIstruct sudo_plugin_event *\fR\fIpev\fR +A pointer to the +\fIstruct sudo_plugin_event\fR +itself. .TP 6n \fIfd\fR The file or socket descriptor for I/O-based events or the signal @@ -4400,20 +4410,20 @@ The following values determine what will trigger the event callback: .RS 6n .PD 0 .TP 6n -SUDO_PLUGIN_EV_TIMEOUT +\fRSUDO_PLUGIN_EV_TIMEOUT\fR callback is run after the specified timeout expires .PD .TP 6n -SUDO_PLUGIN_EV_READ +\fRSUDO_PLUGIN_EV_READ\fR callback is run when the file descriptor is readable .TP 6n -SUDO_PLUGIN_EV_WRITE +\fRSUDO_PLUGIN_EV_WRITE\fR callback is run when the file descriptor is writable .TP 6n -SUDO_PLUGIN_EV_PERSIST +\fRSUDO_PLUGIN_EV_PERSIST\fR event is persistent and remains enabled until explicitly deleted .TP 6n -SUDO_PLUGIN_EV_SIGNAL +\fRSUDO_PLUGIN_EV_SIGNAL\fR callback is run when the specified signal is received .PP The @@ -4428,7 +4438,7 @@ either read from or written to. All other event values are mutually exclusive. .RE .TP 6n -sudo_plugin_ev_callback_t \fIcallback\fR +\fIsudo_plugin_ev_callback_t\fR \fIcallback\fR .nf .RS 6n typedef void (*sudo_plugin_ev_callback_t)(int fd, int what, @@ -4465,7 +4475,7 @@ function. .RE .PD .TP 6n -closure +\fIclosure\fR A generic pointer that will be passed to the callback function. .PP The @@ -4473,8 +4483,7 @@ The function returns 1 on success, and \-1 if a error occurred. .RE .TP 6n -\fBadd\fR() -.br +\fIadd\fR .nf .RS 6n int (*add)(struct sudo_plugin_event *pev, struct timespec *timeout); @@ -4509,8 +4518,7 @@ The function returns 1 on success, and \-1 if a error occurred. .RE .TP 6n -\fBdel\fR() -.br +\fIdel\fR .nf .RS 6n int (*del)(struct sudo_plugin_event *pev); @@ -4534,7 +4542,7 @@ The function returns 1 on success, and \-1 if a error occurred. .RE .TP 6n -\fBpending\fR() +\fIpending\fR .nf .RS 6n int (*pending)(struct sudo_plugin_event *pev, int events, @@ -4555,13 +4563,13 @@ function for a list of valid event types. If \fRSUDO_PLUGIN_EV_TIMEOUT\fR is specified in -\fRevents\fR, +\fIevents\fR, the event has an associated timeout and the \fIts\fR pointer is non-NULL, it will be filled in with the remaining time. .RE .TP 6n -\fBfd\fR() +\fIfd\fR .nf .RS 6n int (*fd)(struct sudo_plugin_event *pev); @@ -4576,7 +4584,7 @@ the event \fIpev\fR. .RE .TP 6n -\fBsetbase\fR() +\fIsetbase\fR .nf .RS 6n void (*setbase)(struct sudo_plugin_event *pev, void *base); @@ -4609,7 +4617,7 @@ It is unlikely to be used outside of the plugin. .RE .TP 6n -\fBloopbreak\fR() +\fIloopbreak\fR .nf .RS 6n void (*loopbreak)(struct sudo_plugin_event *pev); @@ -4624,7 +4632,7 @@ function causes event loop to exit immediately and the running command to be terminated. .RE .TP 6n -\fBfree\fR() +\fIfree\fR .nf .RS 6n void (*free)(struct sudo_plugin_event *pev); @@ -4684,9 +4692,9 @@ If the plugin needs to interact with the user, it may do so via the \fBconversation\fR() function. A plugin should not attempt to read directly from the standard input -or the user's tty (neither of which are guaranteed to exist). +or the user's terminal (neither of which are guaranteed to exist). The caller must include a trailing newline in -\fRmsg\fR +\fImsg\fR if one is to be printed. .PP A @@ -4756,25 +4764,23 @@ typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); To use the \fBconversation\fR() function, the plugin must pass an array of -\fRsudo_conv_message\fR +\fIstruct sudo_conv_message\fR and -\fRsudo_conv_reply\fR -structures. +\fIstruct sudo_conv_reply\fR. There must be a -\fRstruct sudo_conv_message\fR +\fIstruct sudo_conv_message\fR and -\fRstruct sudo_conv_reply\fR -for -each message in the conversation, that is, both arrays must have the same -number of elements. +\fIstruct sudo_conv_reply\fR +for each message in the conversation, that is, both arrays must +have the same number of elements. Each -\fRstruct sudo_conv_reply\fR +\fIstruct sudo_conv_reply\fR must have its \fIreply\fR member initialized to \fRNULL\fR. The -\fRstruct sudo_conv_callback\fR +\fIstruct sudo_conv_callback\fR pointer, if not \fRNULL\fR, should contain function pointers to be called when the @@ -4789,7 +4795,7 @@ functions are called with the signal that caused to be suspended and the \fIclosure\fR pointer from the -\fRstruct sudo_conv_callback\fR. +\fIstruct sudo_conv_callback\fR. These functions should return 0 on success and \-1 on error. On error, the conversation will end and the conversation function will return a value of \-1. @@ -4802,7 +4808,7 @@ The \fImsg_type\fR must be set to one of the following values: .TP 6n -SUDO_CONV_PROMPT_ECHO_OFF +\fRSUDO_CONV_PROMPT_ECHO_OFF\fR Prompt the user for input with echo disabled; this is generally used for passwords. The reply will be stored in the @@ -4810,26 +4816,26 @@ The reply will be stored in the array, and it will never be \fRNULL\fR. .TP 6n -SUDO_CONV_PROMPT_ECHO_ON +\fRSUDO_CONV_PROMPT_ECHO_ON\fR Prompt the user for input with echo enabled. The reply will be stored in the \fIreplies\fR array, and it will never be \fRNULL\fR. .TP 6n -SUDO_CONV_ERROR_MSG +\fRSUDO_CONV_ERROR_MSG\fR Display an error message. The message is written to the standard error unless the \fRSUDO_CONV_PREFER_TTY\fR flag is set, in which case it is written to the user's terminal if possible. .TP 6n -SUDO_CONV_INFO_MSG +\fRSUDO_CONV_INFO_MSG\fR Display a message. The message is written to the standard output unless the \fRSUDO_CONV_PREFER_TTY\fR flag is set, in which case it is written to the user's terminal if possible. .TP 6n -SUDO_CONV_PROMPT_MASK +\fRSUDO_CONV_PROMPT_MASK\fR Prompt the user for input but echo an asterisk character for each character read. The reply will be stored in the @@ -4841,7 +4847,7 @@ sensitive information that should not be displayed. .PP In addition to the above values, the following flag bits may also be set: .TP 6n -SUDO_CONV_PROMPT_ECHO_OK +\fRSUDO_CONV_PROMPT_ECHO_OK\fR Allow input to be read when echo cannot be disabled when the message type is \fRSUDO_CONV_PROMPT_ECHO_OFF\fR @@ -4852,7 +4858,7 @@ By default, will refuse to read input if the echo cannot be disabled for those message types. .TP 6n -SUDO_CONV_PREFER_TTY +\fRSUDO_CONV_PREFER_TTY\fR When displaying a message via \fRSUDO_CONV_ERROR_MSG\fR or @@ -4873,7 +4879,7 @@ in seconds until the prompt will wait for no more input. A zero value implies an infinite timeout. .PP The plugin is responsible for freeing the reply buffer located in each -\fRstruct sudo_conv_reply\fR, +\fIstruct sudo_conv_reply\fR, if it is not \fRNULL\fR. \fRSUDO_CONV_REPL_MAX\fR @@ -4972,8 +4978,8 @@ sudoers(@mansectform@). Third party group plugins include a QAS AD plugin available from Quest Software. .PP A group plugin must declare and populate a -\fRsudoers_group_plugin\fR -struct in the global scope. +\fIstruct sudoers_group_plugin\fR +in the global scope. This structure contains pointers to the functions that implement plugin initialization, cleanup, and group lookup. .nf @@ -4990,13 +4996,13 @@ struct sudoers_group_plugin { .RE .fi .PP -The -\fRsudoers_group_plugin\fR -struct has the following fields: +A +\fIstruct sudoers_group_plugin\fR +has the following fields: .TP 6n -version +\fIversion\fR The -\fRversion\fR +\fIversion\fR field should be set to GROUP_API_VERSION. .sp This allows @@ -5004,7 +5010,7 @@ This allows to determine the API version the group plugin was built against. .TP 6n -init +\fIinit\fR .nf .RS 6n int (*init)(int version, sudo_printf_t plugin_printf, @@ -5029,20 +5035,20 @@ to present additional error information to the user. .sp The function arguments are as follows: .TP 6n -version +\fIversion\fR The version passed in by \fBsudoers\fR allows the plugin to determine the major and minor version number of the group plugin API supported by \fBsudoers\fR. .TP 6n -plugin_printf +\fIplugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used to display informational or error message to the user. Returns the number of characters printed on success and \-1 on failure. .TP 6n -argv +\fIargv\fR A \fRNULL\fR-terminated array of arguments generated from the @@ -5058,7 +5064,7 @@ will be .RE .PD .TP 6n -cleanup +\fIcleanup\fR .nf .RS 6n void (*cleanup)(); @@ -5075,7 +5081,7 @@ group checks. The plugin should free any memory it has allocated and close open file handles. .RE .TP 6n -query +\fIquery\fR .br .nf .RS 6n @@ -5094,14 +5100,14 @@ is a member of .sp The function arguments are as follows: .TP 6n -user +\fIuser\fR The name of the user being looked up in the external group database. .TP 6n -group +\fIgroup\fR .br The name of the group being queried. .TP 6n -pwd +\fIpwd\fR The password database entry for \fIuser\fR, if any. @@ -5140,7 +5146,7 @@ Version 1.1 (sudo 1.8.0) The I/O logging plugin's \fBopen\fR() function was modified to take the -\fRcommand_info\fR +\fIcommand_info\fR list as an argument. .TP 6n Version 1.2 (sudo 1.8.5) @@ -5154,7 +5160,7 @@ A simple hooks API has been introduced to allow plugins to hook in to the system's environment handling functions. .sp The -\fRinit_session\fR +\fBinit_session\fR() Policy plugin function is now passed a pointer to the user environment which can be updated as needed. This can be used to merge in environment variables stored in the PAM @@ -5164,7 +5170,7 @@ Version 1.3 (sudo 1.8.7) Support for the \fIexec_background\fR entry has been added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .sp The @@ -5172,7 +5178,7 @@ The and \fIplugin_dir\fR entries were added to the -\fRsettings\fR +\fIsettings\fR list. .sp The @@ -5203,14 +5209,14 @@ Version 1.4 (sudo 1.8.8) The \fIremote_host\fR entry was added to the -\fRsettings\fR +\fIsettings\fR list. .TP 6n Version 1.5 (sudo 1.8.9) The \fIpreserve_fds\fR entry was added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .TP 6n Version 1.6 (sudo 1.8.11) @@ -5236,7 +5242,7 @@ Version 1.7 (sudo 1.8.12) The \fIplugin_path\fR entry was added to the -\fRsettings\fR +\fIsettings\fR list. .sp The @@ -5251,19 +5257,19 @@ The and \fIsudoedit_follow\fR entries were added to the -\fRcommand_info\fR +\fIcommand_info\fR list. The default value of \fIsudoedit_checkdir\fR was changed to true in sudo 1.8.16. .sp The sudo -\fIconversation\fR +\fBconversation\fR() function now takes a pointer to a -\fRstruct sudo_conv_callback\fR +\fIstruct sudo_conv_callback\fR as its fourth argument. The -\fRsudo_conv_t\fR +\fIsudo_conv_t\fR definition has been updated to match. The plugin must specify that it supports plugin API version 1.8 or higher to receive a conversation function pointer that supports this argument. @@ -5272,14 +5278,14 @@ Version 1.9 (sudo 1.8.16) The \fIexecfd\fR entry was added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .TP 6n Version 1.10 (sudo 1.8.19) The \fIumask\fR entry was added to the -\fRuser_info\fR +\fIuser_info\fR list. The \fIiolog_group\fR, @@ -5287,43 +5293,48 @@ The and \fIiolog_user\fR entries were added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .TP 6n Version 1.11 (sudo 1.8.20) The \fItimeout\fR entry was added to the -\fRsettings\fR +\fIsettings\fR list. .TP 6n Version 1.12 (sudo 1.8.21) The -\fRchange_winsize\fR -field was added to the io_plugin struct. +\fBchange_winsize\fR() +function was added to +\fIstruct io_plugin\fR. .TP 6n Version 1.13 (sudo 1.8.26) The -\fRlog_suspend\fR -field was added to the io_plugin struct. +\fBlog_suspend\fR() +function was added to +\fIstruct io_plugin\fR. .TP 6n Version 1.14 (sudo 1.8.29) The \fIumask_override\fR entry was added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .TP 6n Version 1.15 (sudo 1.9.0) The \fIcwd_optional\fR entry was added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .sp The -\fIevent_alloc\fR -field was added to the policy_plugin and io_plugin structs. +\fBevent_alloc\fR() +function was added to +\fIstruct policy_plugin\fR +and +\fIstruct io_plugin\fR. .sp The \fIerrstr\fR @@ -5346,7 +5357,7 @@ Support for audit and approval plugins was added. .TP 6n Version 1.16 (sudo 1.9.3) Initial resource limit values were added to the -\fRuser_info\fR +\fIuser_info\fR list. .sp The @@ -5354,24 +5365,27 @@ The and \fIcmnd_cwd\fR entries were added to the -\fRsettings\fR +\fIsettings\fR list. .TP 6n Version 1.17 (sudo 1.9.4) The -\fIevent_alloc\fR -field was added to the audit_plugin and approval_plugin structs. +\fBevent_alloc\fR() +function was added to +\fIstruct audit_plugin\fR +and +\fIstruct approval_plugin\fR. .TP 6n Version 1.18 (sudo 1.9.9) The policy may now set resource limit values in the -\fRcommand_info\fR +\fIcommand_info\fR list. The \fIintercept\fR and \fIlog_subcmds\fR entries were added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .TP 6n Version 1.19 (sudo 1.9.11) @@ -5380,26 +5394,26 @@ The and \fIintercept_setid\fR entries were added to the -\fRsettings\fR +\fIsettings\fR list. The \fIapparmor_profile\fR and \fIuse_ptrace\fR entries were added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .TP 6n Version 1.20 (sudo 1.9.12) The \fIupdate_ticket\fR entry was added to the -\fRsettings\fR +\fIsettings\fR list. The \fIintercept_verify\fR entry was added to the -\fRcommand_info\fR +\fIcommand_info\fR list. .SH "SEE ALSO" sudo.conf(@mansectform@), diff --git a/docs/sudo_plugin.mdoc.in b/docs/sudo_plugin.mdoc.in index eca7f9a338..275e990e72 100644 --- a/docs/sudo_plugin.mdoc.in +++ b/docs/sudo_plugin.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd August 2, 2022 +.Dd September 10, 2022 .Dt SUDO_PLUGIN @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -47,12 +47,12 @@ A plugin should be check the version passed to it and make sure that the major version matches. .Pp The plugin API is defined by the -.Li sudo_plugin.h +.In sudo_plugin.h header file. .Ss Policy plugin API A policy plugin must declare and populate a -.Li policy_plugin -struct in the global scope. +.Vt struct policy_plugin +in the global scope. This structure contains pointers to the functions that implement the .Nm sudo policy checks. @@ -89,15 +89,17 @@ struct policy_plugin { }; .Ed .Pp -The policy_plugin struct has the following fields: +A +.Vt struct policy_plugin +has the following fields: .Bl -tag -width 4n -.It type +.It Fa type The -.Li type +.Fa type field should always be set to SUDO_POLICY_PLUGIN. -.It version +.It Fa version The -.Li version +.Fa version field should be set to .Dv SUDO_API_VERSION . .Pp @@ -105,7 +107,7 @@ This allows .Nm sudo to determine the API version the plugin was built against. -.It open +.It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t plugin_printf, char * const settings[], @@ -128,27 +130,27 @@ to present additional error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It version +.It Fa version The version passed in by .Nm sudo allows the plugin to determine the major and minor version number of the plugin API supported by .Nm sudo . -.It conversation +.It Fa conversation A pointer to the .Fn conversation function that can be used by the plugin to interact with the user (see .Sx Conversation API for details). Returns 0 on success and \-1 on failure. -.It plugin_printf +.It Fa plugin_printf A pointer to a .Fn printf Ns -style function that may be used to display informational or error messages (see .Sx Conversation API for details). Returns the number of characters printed on success and \-1 on failure. -.It settings +.It Fa settings A vector of user-supplied .Nm sudo settings in the form of @@ -163,15 +165,14 @@ As such, they will only be present when the corresponding option has been specified on the command line. .Pp When parsing -.Em settings , +.Fa settings , the plugin should split on the .Sy first equal sign .Pq Ql = since the .Em name -field will never include one -itself but the +field will never include one itself but the .Em value might. .Pp @@ -194,7 +195,7 @@ close all files descriptors with a value of .Em number or higher. The plugin may optionally pass this, or another value, back in the -.Em command_info +.Fa command_info list. .It cmnd_chroot=string The root directory (see @@ -405,7 +406,7 @@ Set to true if the user specified the .Fl H option. If true, set the -.Li HOME +.Ev HOME environment variable to the target user's home directory. .It sudoedit=bool Set to true when the @@ -413,14 +414,14 @@ Set to true when the option is specified or if invoked as .Nm sudoedit . The plugin shall substitute an editor into -.Em argv +.Fa argv in the .Fn check_policy function or return \-2 with a usage error if the plugin does not support .Em sudoedit . For more information, see the -.Em check_policy +.Fn check_policy section. .It timeout=string Command timeout specified by the user via the @@ -433,7 +434,7 @@ The format of the timeout string is plugin-specific. .Pp Additional settings may be added in the future so the plugin should silently ignore settings that it does not recognize. -.It user_info +.It Fa user_info A vector of information about the user running the command in the form of .Dq name=value strings. @@ -442,7 +443,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em user_info , +.Fa user_info , the plugin should split on the .Sy first equal sign @@ -605,14 +606,14 @@ Only available starting with API version 1.10. The name of the user invoking .Nm sudo . .El -.It user_env +.It Fa user_env The user's environment in the form of a .Dv NULL Ns -terminated vector of .Dq name=value strings. .Pp When parsing -.Em user_env , +.Fa user_env , the plugin should split on the .Sy first equal sign @@ -623,7 +624,7 @@ field will never include one itself but the .Em value might. -.It plugin_options +.It Fa plugin_options Any (non-comment) strings immediately after the plugin path are passed as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -632,13 +633,13 @@ the plugin in the form of a array of strings. If no arguments were specified, -.Em plugin_options +.Fa plugin_options will be the .Dv NULL pointer. .Pp The -.Em plugin_options +.Fa plugin_options parameter is only available starting with API version 1.2. A plugin @@ -647,9 +648,9 @@ check the API version specified by the .Nm sudo front-end before using -.Em plugin_options . +.Fa plugin_options . Failure to do so may result in a crash. -.It errstr +.It Fa errstr If the .Fn open function returns a value other than 1, the plugin may @@ -676,7 +677,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It close +.It Fa close .Bd -literal -compact void (*close)(int exit_status, int error); .Ed @@ -702,18 +703,18 @@ function returned successfully. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It exit_status +.It Fa exit_status The command's exit status, as returned by the .Xr wait 2 system call, or zero if no command was run. The value of -.Li exit_status +.Fa exit_status is undefined if -.Li error +.Fa error is non-zero. -.It error +.It Fa error If the command could not be executed, this is set to the value of -.Li errno +.Va errno set by the .Xr execve 2 system call. @@ -723,7 +724,7 @@ or .Fn plugin_printf function. If the command was successfully executed, the value of -.Li error +.Fa error is zero. .El .Pp @@ -732,15 +733,15 @@ If no function is defined, no I/O logging plugins are loaded, and neither the .Em timeout -not +nor .Em use_pty options are set in the -.Li command_info +.Fa command_info list, the .Nm sudo front-end may execute the command directly instead of running it as a child process. -.It show_version +.It Fa show_version .Bd -literal -compact int (*show_version)(int verbose); .Ed @@ -749,8 +750,7 @@ The .Fn show_version function is called by .Nm sudo -when the user specifies -the +when the user specifies the .Fl V option. The plugin may display its version information to the user via the @@ -759,12 +759,14 @@ or .Fn plugin_printf function using .Dv SUDO_CONV_INFO_MSG . -If the user requests detailed version information, the verbose flag will be set. +If the user requests detailed version information, the +.Fa verbose +flag will be non-zero. .Pp Returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error, although the return value is currently ignored. -.It check_policy +.It Fa check_policy .Bd -literal -compact int (*check_policy)(int argc, char * const argv[], char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[], @@ -781,9 +783,8 @@ whether the user is allowed to run the specified commands. If the .Em sudoedit option was enabled in the -.Em settings -array -passed to the +.Fa settings +array passed to the .Fn open function, the user has requested .Em sudoedit @@ -800,28 +801,27 @@ If the plugin supports .Em sudoedit , it should choose the editor to be used, potentially from a variable in the user's environment, such as -.Li EDITOR , +.Ev EDITOR , and include it in -.Em argv_out +.Fa argv_out (environment variables may include command line options). The files to be edited should be copied from -.Em argv +.Fa argv into -.Em argv_out , +.Fa argv_out , separated from the editor and its arguments by a .Dq Li -- element. The .Dq Li -- -will -be removed by +will be removed by .Nm sudo before the editor is executed. The plugin should also set .Em sudoedit=true in the -.Em command_info +.Fa command_info list. .Pp The @@ -845,13 +845,13 @@ to present additional error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It argc +.It Fa argc The number of elements in -.Em argv , +.Fa argv , not counting the final .Dv NULL pointer. -.It argv +.It Fa argv The argument vector describing the command the user wishes to run, in the same form as what would be passed to the .Xr execve 2 @@ -859,7 +859,7 @@ system call. The vector is terminated by a .Dv NULL pointer. -.It env_add +.It Fa env_add Additional environment variables specified by the user on the command line in the form of a .Dv NULL Ns -terminated @@ -870,25 +870,23 @@ The plugin may reject the command if one or more variables are not allowed to be set, or it may silently ignore such variables. .Pp When parsing -.Em env_add , +.Fa env_add , the plugin should split on the .Sy first equal sign .Pq Ql = since the .Em name -field will never include one -itself but the +field will never include one itself but the .Em value might. -.It command_info +.It Fa command_info Information about the command being run in the form of .Dq name=value strings. These values are used by .Nm sudo -to set the execution -environment when running a command. +to set the execution environment when running a command. The plugin is responsible for creating and populating the vector, which must be terminated with a .Dv NULL @@ -952,7 +950,7 @@ Otherwise, any terminal input must be passed to the command, whether it has required it or not (the kernel buffers terminals so it is not possible to tell whether the command really wants the input). This is different from historic -.Em sudo +.Nm sudo behavior or when the command is not being run in a pseudo-terminal. .Pp For this to work seamlessly, the operating system must support the @@ -1089,7 +1087,7 @@ If set, .Nm sudo will preserve the user's group vector instead of initializing the group vector based on -.Li runas_user . +.Em runas_user . .It rlimit_as=soft,hard The maximum size to which the process's address space may grow (in bytes), if supported by the operating system. @@ -1399,19 +1397,19 @@ the invoking user's existing entry. .El .Pp Unsupported values will be ignored. -.It argv_out +.It Fa argv_out The .Dv NULL Ns -terminated argument vector to pass to the .Xr execve 2 system call when executing the command. The plugin is responsible for allocating and populating the vector. -.It user_env_out +.It Fa user_env_out The .Dv NULL Ns -terminated environment vector to use when executing the command. The plugin is responsible for allocating and populating the vector. -.It errstr +.It Fa errstr If the .Fn check_policy function returns a value other than 1, the plugin may @@ -1438,7 +1436,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It list +.It Fa list .Bd -literal -compact int (*list)(int argc, char * const argv[], int verbose, const char *list_user, const char **errstr); @@ -1464,13 +1462,13 @@ function using .Pp The function arguments are as follows: .Bl -tag -width 4n -.It argc +.It Fa argc The number of elements in -.Em argv , +.Fa argv , not counting the final .Dv NULL pointer. -.It argv +.It Fa argv If .No non- Ns Dv NULL , an argument vector describing a command the user @@ -1480,15 +1478,15 @@ be passed to the system call. If the command is permitted by the policy, the fully-qualified path to the command should be displayed along with any command line arguments. -.It verbose +.It Fa verbose Flag indicating whether to list in verbose mode or not. -.It list_user +.It Fa list_user The name of a different user to list privileges for if the policy allows it. If .Dv NULL , the plugin should list the privileges of the invoking user. -.It errstr +.It Fa errstr If the .Fn list function returns a value other than 1, the plugin may @@ -1515,7 +1513,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It validate +.It Fa validate .Bd -literal -compact int (*validate)(const char **errstr); .Ed @@ -1551,7 +1549,7 @@ error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It errstr +.It Va errstr If the .Fn validate function returns a value other than 1, the plugin may @@ -1578,7 +1576,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It invalidate +.It Fa invalidate .Bd -literal -compact void (*invalidate)(int remove); .Ed @@ -1598,8 +1596,8 @@ that cache authentication credentials, this function will invalidate the credentials. If the -.Em remove -flag is set, the plugin may remove +.Fa remove +flag is non-zero, the plugin may remove the credentials instead of simply invalidating them. .Pp The @@ -1607,9 +1605,10 @@ The function should be .Dv NULL if the plugin does not support credential caching. -.It init_session +.It Fa init_session .Bd -literal -compact -int (*init_session)(struct passwd *pwd, char **user_env_out[]); +int (*init_session)(struct passwd *pwd, char **user_env[], + const char **errstr); .Ed .Pp The @@ -1620,15 +1619,15 @@ sets up the execution environment for the command. It is run in the parent .Nm sudo -process and before any user-ID or group-ID changes. +process before any user-ID or group-ID changes. This can be used to perform session setup that is not supported by -.Em command_info , +.Fa command_info , such as opening the PAM session. The .Fn close function can be used to tear down the session that was opened by -.Li init_session . +.Fn init_session . .Pp Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the @@ -1642,29 +1641,28 @@ error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It pwd +.It Fa pwd If the user-ID the command will run as was found in the password database, .Fa pwd will describe that user, otherwise it will be .Dv NULL . -.It user_env_out +.It Fa user_env_out The .Dv NULL Ns -terminated environment vector to use when executing the command. -This is the same string passed back to the front-end via -the Policy Plugin's -.Em user_env_out +This is the same string passed back to the front-end via the Policy Plugin's +.Fa user_env_out parameter. If the .Fn init_session function needs to modify the user environment, it should update the pointer stored in -.Em user_env_out . +.Fa user_env_out . The expected use case is to merge the contents of the PAM environment (if any) with the contents of -.Em user_env_out . +.Fa user_env_out . The -.Em user_env_out +.Fa user_env_out parameter is only available starting with API version 1.2. A plugin @@ -1673,9 +1671,9 @@ check the API version specified by the .Nm sudo front-end before using -.Em user_env_out . +.Fa user_env_out . Failure to do so may result in a crash. -.It errstr +.It Fa errstr If the .Fn init_session function returns a value other than 1, the plugin may @@ -1702,7 +1700,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It register_hooks +.It Fa register_hooks .Bd -literal -compact void (*register_hooks)(int version, int (*register_hook)(struct sudo_hook *hook)); @@ -1713,13 +1711,13 @@ The function is called by the sudo front-end to register any hooks the plugin needs. If the plugin does not support hooks, -.Li register_hooks +.Fa register_hooks should be set to the .Dv NULL pointer. .Pp The -.Em version +.Fa version argument describes the version of the hooks API supported by the .Nm sudo @@ -1731,13 +1729,12 @@ function should be used to register any supported hooks the plugin needs. It returns 0 on success, 1 if the hook type is not supported, and \-1 if the major version in -.Li struct hook +.Vt struct sudo_hook does not match the front-end's major hook API version. .Pp See the .Sx Hook function API -section below for more information -about hooks. +section below for more information about hooks. .Pp The .Fn register_hooks @@ -1747,9 +1744,9 @@ If the .Nm sudo front-end doesn't support API version 1.2 or higher, -.Li register_hooks +.Fn register_hooks will not be called. -.It deregister_hooks +.It Fa deregister_hooks .Bd -literal -compact void (*deregister_hooks)(int version, int (*deregister_hook)(struct sudo_hook *hook)); @@ -1760,13 +1757,13 @@ The function is called by the sudo front-end to deregister any hooks the plugin has registered. If the plugin does not support hooks, -.Li deregister_hooks +.Fa deregister_hooks should be set to the .Dv NULL pointer. .Pp The -.Em version +.Fa version argument describes the version of the hooks API supported by the .Nm sudo @@ -1779,13 +1776,12 @@ hooks that were put in place by the .Fn register_hook function. If the plugin tries to deregister a hook that the front-end does not support, -.Li deregister_hook +.Fn deregister_hook will return an error. .Pp See the .Sx Hook function API -section below for more information -about hooks. +section below for more information about hooks. .Pp The .Fn deregister_hooks @@ -1795,9 +1791,9 @@ If the .Nm sudo front-end doesn't support API version 1.2 or higher, -.Li deregister_hooks +.Fn deregister_hooks will not be called. -.It event_alloc +.It Fa event_alloc .Bd -literal -compact struct sudo_plugin_event * (*event_alloc)(void); .Ed @@ -1805,12 +1801,12 @@ struct sudo_plugin_event * (*event_alloc)(void); The .Fn event_alloc function is used to allocate a -.Li struct sudo_plugin_event +.Vt struct sudo_plugin_event which provides access to the main .Nm sudo event loop. Unlike the other fields, the -.Fn event_alloc +.Fa event_alloc pointer is filled in by the .Nm sudo front-end, not by the plugin. @@ -1828,7 +1824,7 @@ If the .Nm sudo front-end doesn't support API version 1.15 or higher, -.Fn event_alloc +.Fa event_alloc will not be set. .El .Pp @@ -1893,13 +1889,16 @@ session. If any of the standard input, standard output, or standard error do not correspond to a tty, .Nm sudo -will open a pipe to capture -the I/O for logging before passing it on. +will open a pipe to capture the I/O for logging before passing it on. .Pp -The log_ttyin function receives the raw user input from the terminal +The +.Fn log_ttyin +function receives the raw user input from the terminal device (this will include input even when echo is disabled, such as when a password is read). -The log_ttyout function receives output from the pseudo-terminal that is +The +.Fn log_ttyout +function receives output from the pseudo-terminal that is suitable for replaying the user's session at a later time. The .Fn log_stdin , @@ -1929,16 +1928,18 @@ If an output logging function rejects the data by returning 0, the command will be terminated and the data will not be written to the terminal, though it will still be sent to any other I/O logging plugins. .Pp -The audit_plugin struct has the following fields: +A +.Vt struct audit_plugin +has the following fields: .Bl -tag -width 4n -.It type +.It Fa type The -.Li type +.Fa type field should always be set to .Dv SUDO_IO_PLUGIN . -.It version +.It Fa version The -.Li version +.Fa version field should be set to .Dv SUDO_API_VERSION . .Pp @@ -1946,7 +1947,7 @@ This allows .Nm sudo to determine the API version the plugin was built against. -.It open +.It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t plugin_printf, char * const settings[], @@ -1987,17 +1988,17 @@ to present additional error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It version +.It Fa version The version passed in by .Nm sudo allows the plugin to determine the major and minor version number of the plugin API supported by .Nm sudo . -.It conversation +.It Fa conversation A pointer to the .Fn conversation function that may be used by the -.Fn show_version +.Fn Fa show_version function to display version information (see .Fn show_version below). @@ -2007,7 +2008,7 @@ function may also be used to display additional error message to the user. The .Fn conversation function returns 0 on success and \-1 on failure. -.It plugin_printf +.It Fa plugin_printf A pointer to a .Fn printf Ns -style function that may be used by the @@ -2020,7 +2021,7 @@ function may also be used to display additional error message to the user. The .Fn plugin_printf function returns number of characters printed on success and \-1 on failure. -.It settings +.It Fa settings A vector of user-supplied .Nm sudo settings in the form of @@ -2035,7 +2036,7 @@ As such, they will only be present when the corresponding option has been specified on the command line. .Pp When parsing -.Em settings , +.Fa settings , the plugin should split on the .Sy first equal sign @@ -2050,7 +2051,7 @@ might. See the .Sx Policy plugin API section for a list of all possible settings. -.It user_info +.It Fa user_info A vector of information about the user running the command in the form of .Dq name=value strings. @@ -2059,7 +2060,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em user_info , +.Fa user_info , the plugin should split on the .Sy first equal sign @@ -2074,7 +2075,7 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It command_info +.It Fa command_info A vector of information describing the command being run in the form of .Dq name=value strings. @@ -2083,7 +2084,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em command_info , +.Fa command_info , the plugin should split on the .Sy first equal sign @@ -2098,24 +2099,25 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It argc +.It Fa argc The number of elements in -.Em argv , +.Fa argv , not counting the final .Dv NULL pointer. -It can be zero, when +It can be zero, such as when .Nm sudo -is called with -.Fl V . -.It argv +is called with the +.Fl V +option. +.It Fa argv If .No non- Ns Dv NULL , an argument vector describing a command the user wishes to run in the same form as what would be passed to the .Xr execve 2 system call. -.It user_env +.It Fa user_env The user's environment in the form of a .Dv NULL Ns -terminated vector of @@ -2123,7 +2125,7 @@ vector of strings. .Pp When parsing -.Em user_env , +.Fa user_env , the plugin should split on the .Sy first equal sign @@ -2134,7 +2136,7 @@ field will never include one itself but the .Em value might. -.It plugin_options +.It Fa plugin_options Any (non-comment) strings immediately after the plugin path are treated as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -2142,13 +2144,13 @@ the plugin in the form of a .Dv NULL Ns -terminated array of strings. If no arguments were specified, -.Em plugin_options +.Fa plugin_options will be the .Dv NULL pointer. .Pp The -.Em plugin_options +.Fa plugin_options parameter is only available starting with API version 1.2. A plugin @@ -2157,9 +2159,9 @@ check the API version specified by the .Nm sudo front-end before using -.Em plugin_options . +.Fa plugin_options . Failure to do so may result in a crash. -.It errstr +.It Fa errstr If the .Fn open function returns a value other than 1, the plugin may @@ -2186,7 +2188,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It close +.It Fa close .Bd -literal -compact void (*close)(int exit_status, int error); .Ed @@ -2199,26 +2201,26 @@ is finished, shortly before it exits. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It exit_status +.It Fa exit_status The command's exit status, as returned by the .Xr wait 2 system call, or zero if no command was run. The value of -.Li exit_status +.Fa exit_status is undefined if -.Li error +.Fa error is non-zero. -.It error +.It Fa error If the command could not be executed, this is set to the value of -.Li errno +.Va errno set by the .Xr execve 2 system call. If the command was successfully executed, the value of -.Li error +.Fa error is zero. .El -.It show_version +.It Fa show_version .Bd -literal -compact int (*show_version)(int verbose); .Ed @@ -2227,8 +2229,7 @@ The .Fn show_version function is called by .Nm sudo -when the user specifies -the +when the user specifies the .Fl V option. The plugin may display its version information to the user via the @@ -2237,11 +2238,14 @@ or .Fn plugin_printf function using .Dv SUDO_CONV_INFO_MSG . +If the user requests detailed version information, the +.Fa verbose +flag will be non-zero. .Pp Returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error, although the return value is currently ignored. -.It log_ttyin +.It Fa log_ttyin .Bd -literal -compact int (*log_ttyin)(const char *buf, unsigned int len, const char **errstr); @@ -2259,13 +2263,13 @@ error occurred. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It buf +.It Fa buf The buffer containing user input. -.It len +.It Fa len The length of -.Em buf +.Fa buf in bytes. -.It errstr +.It Fa errstr If the .Fn log_ttyin function returns a value other than 1, the plugin may @@ -2292,7 +2296,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It log_ttyout +.It Fa log_ttyout .Bd -literal -compact int (*log_ttyout)(const char *buf, unsigned int len, const char **errstr); @@ -2309,13 +2313,13 @@ Returns 1 if the data should be passed to the user, 0 if the data is rejected .Pp The function arguments are as follows: .Bl -tag -width 4n -.It buf +.It Fa buf The buffer containing command output. -.It len +.It Fa len The length of -.Em buf +.Fa buf in bytes. -.It errstr +.It Fa errstr If the .Fn log_ttyout function returns a value other than 1, the plugin may @@ -2342,7 +2346,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It log_stdin +.It Fa log_stdin .Bd -literal -compact int (*log_stdin)(const char *buf, unsigned int len, const char **errstr); @@ -2362,13 +2366,13 @@ if an error occurred. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It buf +.It Fa buf The buffer containing user input. -.It len +.It Fa len The length of -.Em buf +.Fa buf in bytes. -.It errstr +.It Fa errstr If the .Fn log_stdin function returns a value other than 1, the plugin may @@ -2395,7 +2399,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It log_stdout +.It Fa log_stdout .Bd -literal -compact int (*log_stdout)(const char *buf, unsigned int len, const char **errstr); @@ -2415,13 +2419,13 @@ an error occurred. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It buf +.It Fa buf The buffer containing command output. -.It len +.It Fa len The length of -.Em buf +.Fa buf in bytes. -.It errstr +.It Fa errstr If the .Fn log_stdout function returns a value other than 1, the plugin may @@ -2448,7 +2452,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It log_stderr +.It Fa log_stderr .Bd -literal -compact int (*log_stderr)(const char *buf, unsigned int len, const char **errstr); @@ -2468,13 +2472,13 @@ an error occurred. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It buf +.It Fa buf The buffer containing command output. -.It len +.It Fa len The length of -.Em buf +.Fa buf in bytes. -.It errstr +.It Fa errstr If the .Fn log_stderr function returns a value other than 1, the plugin may @@ -2501,17 +2505,17 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It register_hooks +.It Fa register_hooks See the .Sx Policy plugin API section for a description of -.Li register_hooks . -.It deregister_hooks +.Fn register_hooks . +.It Fa deregister_hooks See the .Sx Policy plugin API section for a description of -.Li deregister_hooks . -.It change_winsize +.Fn deregister_hooks . +.It Fa change_winsize .Bd -literal -compact int (*change_winsize)(unsigned int lines, unsigned int cols, const char **errstr); @@ -2521,7 +2525,7 @@ The .Fn change_winsize function is called whenever the window size of the terminal changes from the initial values specified in the -.Li user_info +.Fa user_info list. Returns \-1 if an error occurred, in which case no further calls to .Fn change_winsize @@ -2529,11 +2533,11 @@ will be made, .Pp The function arguments are as follows: .Bl -tag -width 4n -.It lines +.It Fa lines The number of lines (rows) in the re-sized terminal. -.It cols +.It Fa cols The number of columns in the re-sized terminal. -.It errstr +.It Fa errstr If the .Fn change_winsize function returns a value other than 1, the plugin may @@ -2560,7 +2564,7 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El -.It log_suspend +.It Fa log_suspend .Bd -literal -compact int (*log_suspend)(int signo, const char **errstr); .Ed @@ -2576,11 +2580,11 @@ will be made, .Pp The function arguments are as follows: .Bl -tag -width 4n -.It signo +.It Fa signo The signal that caused the command to be suspended, or .Dv SIGCONT if the command was resumed. -.It errstr +.It Fa errstr If the .Fn log_suspend function returns a value other than 1, the plugin may @@ -2606,7 +2610,7 @@ check the API version specified by the front-end before using .Fa errstr . Failure to do so may result in a crash. -.It event_alloc +.It Fa event_alloc .Bd -literal -compact struct sudo_plugin_event * (*event_alloc)(void); .Ed @@ -2614,7 +2618,7 @@ struct sudo_plugin_event * (*event_alloc)(void); The .Fn event_alloc function is used to allocate a -.Li struct sudo_plugin_event +.Vt struct sudo_plugin_event which provides access to the main .Nm sudo event loop. @@ -2690,16 +2694,18 @@ independent of the policy or any I/O plugins. Multiple audit plugins may be specified in .Xr sudo.conf @mansectform@ . .Pp -The audit_plugin struct has the following fields: +A +.Vt struct audit_plugin +has the following fields: .Bl -tag -width 4n -.It type +.It Fa type The -.Li type +.Fa type field should always be set to .Dv SUDO_AUDIT_PLUGIN . -.It version +.It Fa version The -.Li version +.Fa version field should be set to .Dv SUDO_API_VERSION . .Pp @@ -2707,7 +2713,7 @@ This allows .Nm sudo to determine the API version the plugin was built against. -.It open +.It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], @@ -2737,13 +2743,13 @@ to present additional error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It version +.It Fa version The version passed in by .Nm sudo allows the plugin to determine the major and minor version number of the plugin API supported by .Nm sudo . -.It conversation +.It Fa conversation A pointer to the .Fn conversation function that may be used by the @@ -2757,7 +2763,7 @@ function may also be used to display additional error message to the user. The .Fn conversation function returns 0 on success, and \-1 on failure. -.It plugin_printf +.It Fa plugin_printf A pointer to a .Fn printf Ns -style function that may be used by the @@ -2770,7 +2776,7 @@ function may also be used to display additional error message to the user. The .Fn plugin_printf function returns number of characters printed on success and \-1 on failure. -.It settings +.It Fa settings A vector of user-supplied .Nm sudo settings in the form of @@ -2785,7 +2791,7 @@ As such, they will only be present when the corresponding option has been specified on the command line. .Pp When parsing -.Em settings , +.Fa settings , the plugin should split on the .Sy first equal sign @@ -2800,7 +2806,7 @@ might. See the .Sx Policy plugin API section for a list of all possible settings. -.It user_info +.It Fa user_info A vector of information about the user running the command in the form of .Dq name=value strings. @@ -2809,7 +2815,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em user_info , +.Fa user_info , the plugin should split on the .Sy first equal sign @@ -2824,7 +2830,7 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It submit_optind +.It Fa submit_optind The index into .Fa submit_argv that corresponds to the first entry that is not a command line option. @@ -2835,16 +2841,16 @@ only consists of options, which may be the case with the or .Fl v options, -.Li submit_argv[submit_optind] +.Fa submit_argv Ns [ Fa submit_optind ] will evaluate to the NULL pointer. -.It submit_argv +.It Fa submit_argv The argument vector .Nm sudo was invoked with, including all command line options. The .Fa submit_optind argument can be used to determine the end of the command line options. -.It submit_envp +.It Fa submit_envp The invoking user's environment in the form of a .Dv NULL Ns -terminated vector of @@ -2852,7 +2858,7 @@ vector of strings. .Pp When parsing -.Em submit_envp , +.Fa submit_envp , the plugin should split on the .Sy first equal sign @@ -2863,7 +2869,7 @@ field will never include one itself but the .Em value might. -.It plugin_options +.It Fa plugin_options Any (non-comment) strings immediately after the plugin path are treated as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -2871,11 +2877,11 @@ the plugin in the form of a .Dv NULL Ns -terminated array of strings. If no arguments were specified, -.Em plugin_options +.Fa plugin_options will be the .Dv NULL pointer. -.It errstr +.It Fa errstr If the .Fn open function returns a value other than 1, the plugin may @@ -2890,7 +2896,7 @@ must remain valid until the plugin's .Fn close function is called. .El -.It close +.It Fa close .Bd -literal -compact void (*close)(int status_type, int status); .Ed @@ -2903,7 +2909,7 @@ is finished, shortly before it exits. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It status_type +.It Fa status_type The type of status being passed. One of .Dv SUDO_PLUGIN_NO_STATUS , @@ -2911,23 +2917,23 @@ One of .Dv SUDO_PLUGIN_EXEC_ERROR or .Dv SUDO_PLUGIN_SUDO_ERROR . -.It status +.It Fa status Depending on the value of .Fa status_type , this value is either ignored, the command's exit status as returned by the .Xr wait 2 system call, the value of -.Li errno +.Va errno set by the .Xr execve 2 system call, or the value of -.Li errno +.Va errno resulting from an error in the .Nm sudo front-end. .El -.It accept +.It Fa accept .Bd -literal -compact int (*accept)(const char *plugin_name, unsigned int plugin_type, char * const command_info[], char * const run_argv[], @@ -2940,13 +2946,13 @@ function is called when a command or action is accepted by a policy or approval plugin. The function arguments are as follows: .Bl -tag -width 4n -.It plugin_name +.It Fa plugin_name The name of the plugin that accepted the command or .Dq sudo for the .Nm sudo front-end. -.It plugin_type +.It Fa plugin_type The type of plugin that accepted the command, currently either .Dv SUDO_POLICY_PLUGIN , .Dv SUDO_POLICY_APPROVAL , @@ -2973,7 +2979,7 @@ and functions will .Em both be called. -.It command_info +.It Fa command_info An optional vector of information describing the command being run in the form of .Dq name=value @@ -2983,7 +2989,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em command_info , +.Fa command_info , the plugin should split on the .Sy first equal sign @@ -2998,14 +3004,14 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It run_argv +.It Fa run_argv A .Dv NULL Ns -terminated argument vector describing a command that will be run in the same form as what would be passed to the .Xr execve 2 system call. -.It run_envp +.It Fa run_envp The environment the command will be run with in the form of a .Dv NULL Ns -terminated vector of @@ -3013,7 +3019,7 @@ vector of strings. .Pp When parsing -.Em run_envp , +.Fa run_envp , the plugin should split on the .Sy first equal sign @@ -3024,7 +3030,7 @@ field will never include one itself but the .Em value might. -.It errstr +.It Fa errstr If the .Fn accept function returns a value other than 1, the plugin may @@ -3039,7 +3045,7 @@ must remain valid until the plugin's .Fn close function is called. .El -.It reject +.It Fa reject .Bd -literal -compact int (*reject)(const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], @@ -3051,9 +3057,9 @@ The function is called when a command or action is rejected by a plugin. The function arguments are as follows: .Bl -tag -width 4n -.It plugin_name +.It Fa plugin_name The name of the plugin that rejected the command. -.It plugin_type +.It Fa plugin_type The type of plugin that rejected the command, currently either .Dv SUDO_POLICY_PLUGIN , .Dv SUDO_APPROVAL_PLUGIN , @@ -3067,7 +3073,7 @@ function, the function is not called on behalf of the .Nm sudo front-end. -.It audit_msg +.It Fa audit_msg An optional string describing the reason the command was rejected by the plugin. If the plugin did not provide a reason, @@ -3075,7 +3081,7 @@ If the plugin did not provide a reason, will be the .Dv NULL pointer. -.It command_info +.It Fa command_info An optional vector of information describing the command being run in the form of .Dq name=value @@ -3085,7 +3091,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em command_info , +.Fa command_info , the plugin should split on the .Sy first equal sign @@ -3100,7 +3106,7 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It errstr +.It Fa errstr If the .Fn reject function returns a value other than 1, the plugin may @@ -3115,7 +3121,7 @@ must remain valid until the plugin's .Fn close function is called. .El -.It error +.It Fa error .Bd -literal -compact int (*error)(const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], @@ -3129,26 +3135,26 @@ function is called when a plugin or the front-end returns an error. The function arguments are as follows: .Bl -tag -width 4n -.It plugin_name +.It Fa plugin_name The name of the plugin that generated the error or .Dq sudo for the .Nm sudo front-end. -.It plugin_type +.It Fa plugin_type The type of plugin that generated the error, or .Dv SUDO_FRONT_END for the .Nm sudo front-end. -.It audit_msg +.It Fa audit_msg An optional string describing the plugin error. If the plugin did not provide a description, .Fa audit_msg will be the .Dv NULL pointer. -.It command_info +.It Fa command_info An optional vector of information describing the command being run in the form of .Dq name=value @@ -3158,7 +3164,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em command_info , +.Fa command_info , the plugin should split on the .Sy first equal sign @@ -3173,7 +3179,7 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It errstr +.It Fa errstr If the .Fn error function returns a value other than 1, the plugin may @@ -3188,7 +3194,7 @@ must remain valid until the plugin's .Fn close function is called. .El -.It show_version +.It Fa show_version .Bd -literal -compact int (*show_version)(int verbose); .Ed @@ -3197,8 +3203,7 @@ The .Fn show_version function is called by .Nm sudo -when the user specifies -the +when the user specifies the .Fl V option. The plugin may display its version information to the user via the @@ -3212,17 +3217,17 @@ If the user requests detailed version information, the verbose flag will be set. Returns 1 on success, 0 on failure, \-1 if a general error occurred, or \-2 if there was a usage error, although the return value is currently ignored. -.It register_hooks +.It Fa register_hooks See the .Sx Policy plugin API section for a description of -.Li register_hooks . -.It deregister_hooks +.Fn register_hooks . +.It Fa deregister_hooks See the .Sx Policy plugin API section for a description of -.Li deregister_hooks . -.It event_alloc +.Fn deregister_hooks . +.It Fa event_alloc .Bd -literal -compact struct sudo_plugin_event * (*event_alloc)(void); .Ed @@ -3230,12 +3235,12 @@ struct sudo_plugin_event * (*event_alloc)(void); The .Fn event_alloc function is used to allocate a -.Li struct sudo_plugin_event +.Vt struct sudo_plugin_event which provides access to the main .Nm sudo event loop. Unlike the other fields, the -.Fn event_alloc +.Fa event_alloc pointer is filled in by the .Nm sudo front-end, not by the plugin. @@ -3287,16 +3292,18 @@ before the plugin is closed). Multiple approval plugins may be specified in .Xr sudo.conf @mansectform@ . .Pp -The approval_plugin struct has the following fields: +A +.Vt struct approval_plugin +has the following fields: .Bl -tag -width 4n -.It type +.It Fa type The -.Li type +.Fa type field should always be set to .Dv SUDO_APPROVAL_PLUGIN . -.It version +.It Fa version The -.Li version +.Fa version field should be set to .Dv SUDO_API_VERSION . .Pp @@ -3304,7 +3311,7 @@ This allows .Nm sudo to determine the API version the plugin was built against. -.It open +.It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], @@ -3339,27 +3346,27 @@ to present additional error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It version +.It Fa version The version passed in by .Nm sudo allows the plugin to determine the major and minor version number of the plugin API supported by .Nm sudo . -.It conversation +.It Fa conversation A pointer to the .Fn conversation function that can be used by the plugin to interact with the user (see .Sx Conversation API for details). Returns 0 on success and \-1 on failure. -.It plugin_printf +.It Fa plugin_printf A pointer to a .Fn printf Ns -style function that may be used to display informational or error messages (see .Sx Conversation API for details). Returns the number of characters printed on success and \-1 on failure. -.It settings +.It Fa settings A vector of user-supplied .Nm sudo settings in the form of @@ -3374,7 +3381,7 @@ As such, they will only be present when the corresponding option has been specified on the command line. .Pp When parsing -.Em settings , +.Fa settings , the plugin should split on the .Sy first equal sign @@ -3389,7 +3396,7 @@ might. See the .Sx Policy plugin API section for a list of all possible settings. -.It user_info +.It Fa user_info A vector of information about the user running the command in the form of .Dq name=value strings. @@ -3398,7 +3405,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em user_info , +.Fa user_info , the plugin should split on the .Sy first equal sign @@ -3413,7 +3420,7 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It submit_optind +.It Fa submit_optind The index into .Fa submit_argv that corresponds to the first entry that is not a command line option. @@ -3424,16 +3431,16 @@ only consists of options, which may be the case with the or .Fl v options, -.Li submit_argv[submit_optind] +.Fa submit_argv Ns [ Fa submit_optind ] will evaluate to the NULL pointer. -.It submit_argv +.It Fa submit_argv The argument vector .Nm sudo was invoked with, including all command line options. The .Fa submit_optind argument can be used to determine the end of the command line options. -.It submit_envp +.It Fa submit_envp The invoking user's environment in the form of a .Dv NULL Ns -terminated vector of @@ -3441,7 +3448,7 @@ vector of strings. .Pp When parsing -.Em submit_envp , +.Fa submit_envp , the plugin should split on the .Sy first equal sign @@ -3452,7 +3459,7 @@ field will never include one itself but the .Em value might. -.It plugin_options +.It Fa plugin_options Any (non-comment) strings immediately after the plugin path are treated as arguments to the plugin. These arguments are split on a white space boundary and are passed to @@ -3460,11 +3467,11 @@ the plugin in the form of a .Dv NULL Ns -terminated array of strings. If no arguments were specified, -.Em plugin_options +.Fa plugin_options will be the .Dv NULL pointer. -.It errstr +.It Fa errstr If the .Fn open function returns a value other than 1, the plugin may @@ -3479,7 +3486,7 @@ must remain valid until the plugin's .Fn close function is called. .El -.It close +.It Fa close .Bd -literal -compact void (*close)(void); .Ed @@ -3501,7 +3508,7 @@ If the plugin does not need to perform any cleanup, may be set to the .Dv NULL pointer. -.It check +.It Fa check .Bd -literal -compact int (*check)(char * const command_info[], char * const run_argv[], char * const run_envp[], const char **errstr); @@ -3529,7 +3536,7 @@ to present additional error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It command_info +.It Fa command_info A vector of information describing the command being run in the form of .Dq name=value strings. @@ -3538,7 +3545,7 @@ The vector is terminated by a pointer. .Pp When parsing -.Em command_info , +.Fa command_info , the plugin should split on the .Sy first equal sign @@ -3553,14 +3560,14 @@ might. See the .Sx Policy plugin API section for a list of all possible strings. -.It run_argv +.It Fa run_argv A .Dv NULL Ns -terminated argument vector describing a command that will be run in the same form as what would be passed to the .Xr execve 2 system call. -.It run_envp +.It Fa run_envp The environment the command will be run with in the form of a .Dv NULL Ns -terminated vector of @@ -3568,7 +3575,7 @@ vector of strings. .Pp When parsing -.Em run_envp , +.Fa run_envp , the plugin should split on the .Sy first equal sign @@ -3579,7 +3586,7 @@ field will never include one itself but the .Em value might. -.It errstr +.It Fa errstr If the .Fn open function returns a value other than 1, the plugin may @@ -3594,7 +3601,7 @@ must remain valid until the plugin's .Fn close function is called. .El -.It show_version +.It Fa show_version .Bd -literal -compact int (*show_version)(int verbose); .Ed @@ -3603,8 +3610,7 @@ The .Fn show_version function is called by .Nm sudo -when the user specifies -the +when the user specifies the .Fl V option. The plugin may display its version information to the user via the @@ -3659,7 +3665,7 @@ for plugins that log such information in their .Fn close function. An exception to this is -.Ev SIGPIPE , +.Dv SIGPIPE , which is ignored until the command is executed. .Pp A plugin may temporarily install its own signal handlers but must @@ -3695,18 +3701,18 @@ struct sudo_hook { }; .Ed .Pp -The -.Li sudo_hook -structure has the following fields: +A +.Vt struct sudo_hook +has the following fields: .Bl -tag -width 4n -.It hook_version +.It Fa hook_version The -.Li hook_version +.Fa hook_version field should be set to .Dv SUDO_HOOK_VERSION . -.It hook_type +.It Fa hook_type The -.Li hook_type +.Fa hook_type field may be one of the following supported hook types: .Bl -tag -width 4n .It Dv SUDO_HOOK_SETENV @@ -3715,7 +3721,7 @@ The C library function. Any registered hooks will run before the C library implementation. The -.Li hook_fn +.Fa hook_fn field should be a function that matches the following typedef: .Bd -literal @@ -3731,7 +3737,7 @@ The C library function. Any registered hooks will run before the C library implementation. The -.Li hook_fn +.Fa hook_fn field should be a function that matches the following typedef: .Bd -literal @@ -3744,7 +3750,7 @@ The C library function. Any registered hooks will run before the C library implementation. The -.Li hook_fn +.Fa hook_fn field should be a function that matches the following typedef: .Bd -literal @@ -3760,7 +3766,7 @@ The C library function. Any registered hooks will run before the C library implementation. The -.Li hook_fn +.Fa hook_fn field should be a function that matches the following typedef: .Bd -literal @@ -3771,21 +3777,23 @@ typedef int (*sudo_hook_fn_putenv_t)(char *string, If the registered hook does not match the typedef the results are unspecified. .El -.It hook_fn +.It Fa hook_fn +.Bd -literal -compact sudo_hook_fn_t hook_fn; +.Ed .Pp The -.Li hook_fn +.Fa hook_fn field should be set to the plugin's hook implementation. The actual function arguments will vary depending on the -.Li hook_type +.Fa hook_type (see -.Li hook_type +.Fa hook_type above). In all cases, the -.Li closure +.Fa closure field of -.Li struct sudo_hook +.Vt struct sudo_hook is passed as the last function parameter. This can be used to pass arbitrary data to the plugin's hook implementation. .Pp @@ -3805,10 +3813,10 @@ if the specified variable was not found in the private copy of the environment. The hook completed without error, stop processing hooks for this invocation. This can be used to replace the system implementation. For example, a -.Li setenv +.Fa setenv hook that operates on a private copy of the environment but leaves -.Li environ +.Va environ unchanged. .El .El @@ -3827,7 +3835,7 @@ to check the locale. To prevent this, you may wish to use a static variable in the hook function to guard against nested calls. For example: -.Bd -literal +.Bd -literal -offset indent static int in_progress = 0; /* avoid recursion */ if (in_progress) return SUDO_HOOK_RET_NEXT; @@ -3880,9 +3888,11 @@ struct sudo_plugin_event { }; .Ed .Pp -The sudo_plugin_event struct contains the following function pointers: +A +.Vt struct sudo_plugin_event +contains the following function pointers: .Bl -tag -width 4n -.It Fn set +.It Fa set .Bd -literal -compact int (*set)(struct sudo_plugin_event *pev, int fd, int events, sudo_plugin_ev_callback_t callback, void *closure); @@ -3892,8 +3902,10 @@ The .Fn set function takes the following arguments: .Bl -tag -width 4n -.It struct sudo_plugin_event * Ns Fa pev -A pointer to the struct sudo_plugin_event itself. +.It Vt struct sudo_plugin_event * Ns Fa pev +A pointer to the +.Vt struct sudo_plugin_event +itself. .It Fa fd The file or socket descriptor for I/O-based events or the signal number for signal events. @@ -3903,29 +3915,29 @@ must be \-1. .It Fa events The following values determine what will trigger the event callback: .Bl -tag -width 4n -.It SUDO_PLUGIN_EV_TIMEOUT +.It Dv SUDO_PLUGIN_EV_TIMEOUT callback is run after the specified timeout expires -.It SUDO_PLUGIN_EV_READ +.It Dv SUDO_PLUGIN_EV_READ callback is run when the file descriptor is readable -.It SUDO_PLUGIN_EV_WRITE +.It Dv SUDO_PLUGIN_EV_WRITE callback is run when the file descriptor is writable -.It SUDO_PLUGIN_EV_PERSIST +.It Dv SUDO_PLUGIN_EV_PERSIST event is persistent and remains enabled until explicitly deleted -.It SUDO_PLUGIN_EV_SIGNAL +.It Dv SUDO_PLUGIN_EV_SIGNAL callback is run when the specified signal is received .El .Pp The -.Ev SUDO_PLUGIN_EV_PERSIST +.Dv SUDO_PLUGIN_EV_PERSIST flag may be ORed with any of the event types. It is also possible to OR -.Ev SUDO_PLUGIN_EV_READ +.Dv SUDO_PLUGIN_EV_READ and -.Ev SUDO_PLUGIN_EV_WRITE +.Dv SUDO_PLUGIN_EV_WRITE together to run the callback when a descriptor is ready to be either read from or written to. All other event values are mutually exclusive. -.It sudo_plugin_ev_callback_t Fa callback +.It Vt sudo_plugin_ev_callback_t Fa callback .Bd -literal -compact typedef void (*sudo_plugin_ev_callback_t)(int fd, int what, void *closure); @@ -3942,9 +3954,9 @@ number for signal events. .It Fa what The event type that triggered that callback. For events that have multiple event types (for example -.Ev SUDO_PLUGIN_EV_READ +.Dv SUDO_PLUGIN_EV_READ and -.Ev SUDO_PLUGIN_EV_WRITE ) +.Dv SUDO_PLUGIN_EV_WRITE ) or have an associated timeout, .Fa what can be used to determine why the callback was run. @@ -3953,14 +3965,14 @@ The generic pointer that was specified in the .Fn set function. .El -.It closure +.It Fa closure A generic pointer that will be passed to the callback function. .El .Pp The .Fn set function returns 1 on success, and \-1 if a error occurred. -.It Fn add +.It Fa add .Bd -literal -compact int (*add)(struct sudo_plugin_event *pev, struct timespec *timeout); .Ed @@ -3990,7 +4002,7 @@ will be adjusted to match the new value, if any. The .Fn add function returns 1 on success, and \-1 if a error occurred. -.It Fn del +.It Fa del .Bd -literal -compact int (*del)(struct sudo_plugin_event *pev); .Ed @@ -4009,7 +4021,7 @@ function. The .Fn del function returns 1 on success, and \-1 if a error occurred. -.It Fn pending +.It Fa pending .Bd -literal -compact int (*pending)(struct sudo_plugin_event *pev, int events, struct timespec *ts); @@ -4027,11 +4039,11 @@ function for a list of valid event types. If .Dv SUDO_PLUGIN_EV_TIMEOUT is specified in -.Dv events , +.Fa events , the event has an associated timeout and the .Fa ts pointer is non-NULL, it will be filled in with the remaining time. -.It Fn fd +.It Fa fd .Bd -literal -compact int (*fd)(struct sudo_plugin_event *pev); .Ed @@ -4041,7 +4053,7 @@ The function returns the descriptor or signal number associated with the event .Fa pev . -.It Fn setbase +.It Fa setbase .Bd -literal -compact void (*setbase)(struct sudo_plugin_event *pev, void *base); .Ed @@ -4069,7 +4081,7 @@ library. It is unlikely to be used outside of the .Nm sudoers plugin. -.It Fn loopbreak +.It Fa loopbreak .Bd -literal -compact void (*loopbreak)(struct sudo_plugin_event *pev); .Ed @@ -4079,7 +4091,7 @@ The function causes .Nm sudo Ns No 's event loop to exit immediately and the running command to be terminated. -.It Fn free +.It Fa free .Bd -literal -compact void (*free)(struct sudo_plugin_event *pev); .Ed @@ -4136,9 +4148,9 @@ If the plugin needs to interact with the user, it may do so via the .Fn conversation function. A plugin should not attempt to read directly from the standard input -or the user's tty (neither of which are guaranteed to exist). +or the user's terminal (neither of which are guaranteed to exist). The caller must include a trailing newline in -.Li msg +.Fa msg if one is to be printed. .Pp A @@ -4202,25 +4214,23 @@ typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); To use the .Fn conversation function, the plugin must pass an array of -.Li sudo_conv_message +.Vt struct sudo_conv_message and -.Li sudo_conv_reply -structures. +.Vt struct sudo_conv_reply . There must be a -.Li struct sudo_conv_message +.Vt struct sudo_conv_message and -.Li struct sudo_conv_reply -for -each message in the conversation, that is, both arrays must have the same -number of elements. +.Vt struct sudo_conv_reply +for each message in the conversation, that is, both arrays must +have the same number of elements. Each -.Li struct sudo_conv_reply +.Vt struct sudo_conv_reply must have its -.Em reply +.Fa reply member initialized to .Dv NULL . The -.Li struct sudo_conv_callback +.Vt struct sudo_conv_callback pointer, if not .Dv NULL , should contain function pointers to be called when the @@ -4235,7 +4245,7 @@ functions are called with the signal that caused to be suspended and the .Fa closure pointer from the -.Li struct sudo_conv_callback . +.Vt struct sudo_conv_callback . These functions should return 0 on success and \-1 on error. On error, the conversation will end and the conversation function will return a value of \-1. @@ -4245,37 +4255,37 @@ when the process is resumed. The functions are not actually invoked from within a signal handler. .Pp The -.Em msg_type +.Fa msg_type must be set to one of the following values: .Bl -tag -width 4n -.It SUDO_CONV_PROMPT_ECHO_OFF +.It Dv SUDO_CONV_PROMPT_ECHO_OFF Prompt the user for input with echo disabled; this is generally used for passwords. The reply will be stored in the -.Em replies +.Fa replies array, and it will never be .Dv NULL . -.It SUDO_CONV_PROMPT_ECHO_ON +.It Dv SUDO_CONV_PROMPT_ECHO_ON Prompt the user for input with echo enabled. The reply will be stored in the -.Em replies +.Fa replies array, and it will never be .Dv NULL . -.It SUDO_CONV_ERROR_MSG +.It Dv SUDO_CONV_ERROR_MSG Display an error message. The message is written to the standard error unless the .Dv SUDO_CONV_PREFER_TTY flag is set, in which case it is written to the user's terminal if possible. -.It SUDO_CONV_INFO_MSG +.It Dv SUDO_CONV_INFO_MSG Display a message. The message is written to the standard output unless the .Dv SUDO_CONV_PREFER_TTY flag is set, in which case it is written to the user's terminal if possible. -.It SUDO_CONV_PROMPT_MASK +.It Dv SUDO_CONV_PROMPT_MASK Prompt the user for input but echo an asterisk character for each character read. The reply will be stored in the -.Em replies +.Fa replies array, and it will never be .Dv NULL . This can be used to provide visual feedback to the user while reading @@ -4284,7 +4294,7 @@ sensitive information that should not be displayed. .Pp In addition to the above values, the following flag bits may also be set: .Bl -tag -width 4n -.It SUDO_CONV_PROMPT_ECHO_OK +.It Dv SUDO_CONV_PROMPT_ECHO_OK Allow input to be read when echo cannot be disabled when the message type is .Dv SUDO_CONV_PROMPT_ECHO_OFF @@ -4294,7 +4304,7 @@ By default, .Nm sudo will refuse to read input if the echo cannot be disabled for those message types. -.It SUDO_CONV_PREFER_TTY +.It Dv SUDO_CONV_PREFER_TTY When displaying a message via .Dv SUDO_CONV_ERROR_MSG or @@ -4311,12 +4321,12 @@ this flag is only used for output. .El .Pp The -.Em timeout +.Fa timeout in seconds until the prompt will wait for no more input. A zero value implies an infinite timeout. .Pp The plugin is responsible for freeing the reply buffer located in each -.Li struct sudo_conv_reply , +.Vt struct sudo_conv_reply , if it is not .Dv NULL . .Dv SUDO_CONV_REPL_MAX @@ -4335,7 +4345,7 @@ function but only supports and .Dv SUDO_CONV_ERROR_MSG for the -.Em msg_type +.Fa msg_type parameter. It can be more convenient than using the .Fn conversation @@ -4406,8 +4416,8 @@ are detailed in Third party group plugins include a QAS AD plugin available from Quest Software. .Pp A group plugin must declare and populate a -.Li sudoers_group_plugin -struct in the global scope. +.Vt struct sudoers_group_plugin +in the global scope. This structure contains pointers to the functions that implement plugin initialization, cleanup, and group lookup. .Bd -literal @@ -4421,20 +4431,20 @@ struct sudoers_group_plugin { }; .Ed .Pp -The -.Li sudoers_group_plugin -struct has the following fields: +A +.Vt struct sudoers_group_plugin +has the following fields: .Bl -tag -width 4n -.It version +.It Fa version The -.Li version +.Fa version field should be set to GROUP_API_VERSION. .Pp This allows .Nm sudoers to determine the API version the group plugin was built against. -.It init +.It Fa init .Bd -literal -compact int (*init)(int version, sudo_printf_t plugin_printf, char *const argv[]); @@ -4456,18 +4466,18 @@ to present additional error information to the user. .Pp The function arguments are as follows: .Bl -tag -width 4n -.It version +.It Fa version The version passed in by .Nm sudoers allows the plugin to determine the major and minor version number of the group plugin API supported by .Nm sudoers . -.It plugin_printf +.It Fa plugin_printf A pointer to a .Fn printf Ns -style function that may be used to display informational or error message to the user. Returns the number of characters printed on success and \-1 on failure. -.It argv +.It Fa argv A .Dv NULL Ns -terminated array of arguments generated from the @@ -4475,11 +4485,11 @@ array of arguments generated from the option in .Em sudoers . If no arguments were given, -.Em argv +.Fa argv will be .Dv NULL . .El -.It cleanup +.It Fa cleanup .Bd -literal -compact void (*cleanup)(); .Ed @@ -4491,7 +4501,7 @@ function is called when has finished its group checks. The plugin should free any memory it has allocated and close open file handles. -.It query +.It Fa query .Bd -literal -compact int (*query)(const char *user, const char *group, const struct passwd *pwd); @@ -4500,25 +4510,25 @@ int (*query)(const char *user, const char *group, The .Fn query function is used to ask the group plugin whether -.Em user +.Fa user is a member of -.Em group . +.Fa group . .Pp The function arguments are as follows: .Bl -tag -width 4n -.It user +.It Fa user The name of the user being looked up in the external group database. -.It group +.It Fa group The name of the group being queried. -.It pwd +.It Fa pwd The password database entry for -.Em user , +.Fa user , if any. If -.Em user +.Fa user is not present in the password database, -.Em pwd +.Fa pwd will be .Dv NULL . .El @@ -4543,7 +4553,7 @@ Initial API version. The I/O logging plugin's .Fn open function was modified to take the -.Li command_info +.Fa command_info list as an argument. .It Version 1.2 (sudo 1.8.5) The Policy and I/O logging plugins' @@ -4556,7 +4566,7 @@ A simple hooks API has been introduced to allow plugins to hook in to the system's environment handling functions. .Pp The -.Li init_session +.Fn init_session Policy plugin function is now passed a pointer to the user environment which can be updated as needed. This can be used to merge in environment variables stored in the PAM @@ -4565,7 +4575,7 @@ handle before a command is run. Support for the .Em exec_background entry has been added to the -.Li command_info +.Fa command_info list. .Pp The @@ -4573,7 +4583,7 @@ The and .Em plugin_dir entries were added to the -.Li settings +.Fa settings list. .Pp The @@ -4603,13 +4613,13 @@ while the plugin functions are run. The .Em remote_host entry was added to the -.Li settings +.Fa settings list. .It Version 1.5 (sudo 1.8.9) The .Em preserve_fds entry was added to the -.Li command_info +.Fa command_info list. .It Version 1.6 (sudo 1.8.11) The behavior when an I/O logging plugin returns an error @@ -4633,7 +4643,7 @@ terminal even if an output logging function returned 0. The .Em plugin_path entry was added to the -.Li settings +.Fa settings list. .Pp The @@ -4647,19 +4657,19 @@ The and .Em sudoedit_follow entries were added to the -.Li command_info +.Fa command_info list. The default value of .Em sudoedit_checkdir was changed to true in sudo 1.8.16. .Pp The sudo -.Em conversation +.Fn conversation function now takes a pointer to a -.Li struct sudo_conv_callback +.Vt struct sudo_conv_callback as its fourth argument. The -.Li sudo_conv_t +.Vt sudo_conv_t definition has been updated to match. The plugin must specify that it supports plugin API version 1.8 or higher to receive a conversation function pointer that supports this argument. @@ -4667,13 +4677,13 @@ to receive a conversation function pointer that supports this argument. The .Em execfd entry was added to the -.Li command_info +.Fa command_info list. .It Version 1.10 (sudo 1.8.19) The .Em umask entry was added to the -.Li user_info +.Fa user_info list. The .Em iolog_group , @@ -4681,38 +4691,43 @@ The and .Em iolog_user entries were added to the -.Li command_info +.Fa command_info list. .It Version 1.11 (sudo 1.8.20) The .Em timeout entry was added to the -.Li settings +.Fa settings list. .It Version 1.12 (sudo 1.8.21) The -.Li change_winsize -field was added to the io_plugin struct. +.Fn change_winsize +function was added to +.Vt struct io_plugin . .It Version 1.13 (sudo 1.8.26) The -.Li log_suspend -field was added to the io_plugin struct. +.Fn log_suspend +function was added to +.Vt struct io_plugin . .It Version 1.14 (sudo 1.8.29) The .Em umask_override entry was added to the -.Li command_info +.Fa command_info list. .It Version 1.15 (sudo 1.9.0) The .Em cwd_optional entry was added to the -.Li command_info +.Fa command_info list. .Pp The -.Em event_alloc -field was added to the policy_plugin and io_plugin structs. +.Fn event_alloc +function was added to +.Vt struct policy_plugin +and +.Vt struct io_plugin . .Pp The .Fa errstr @@ -4734,7 +4749,7 @@ has increased from 255 to 1023 bytes. Support for audit and approval plugins was added. .It Version 1.16 (sudo 1.9.3) Initial resource limit values were added to the -.Li user_info +.Fa user_info list. .Pp The @@ -4742,22 +4757,25 @@ The and .Em cmnd_cwd entries were added to the -.Li settings +.Fa settings list. .It Version 1.17 (sudo 1.9.4) The -.Em event_alloc -field was added to the audit_plugin and approval_plugin structs. +.Fn event_alloc +function was added to +.Vt struct audit_plugin +and +.Vt struct approval_plugin . .It Version 1.18 (sudo 1.9.9) The policy may now set resource limit values in the -.Li command_info +.Fa command_info list. The .Em intercept and .Em log_subcmds entries were added to the -.Li command_info +.Fa command_info list. .It Version 1.19 (sudo 1.9.11) The @@ -4765,25 +4783,25 @@ The and .Em intercept_setid entries were added to the -.Li settings +.Fa settings list. The .Em apparmor_profile and .Em use_ptrace entries were added to the -.Li command_info +.Fa command_info list. .It Version 1.20 (sudo 1.9.12) The .Em update_ticket entry was added to the -.Li settings +.Fa settings list. The .Em intercept_verify entry was added to the -.Li command_info +.Fa command_info list. .El .Sh SEE ALSO From 5bcec024422c9a3c0f64fd6d17131bcfe271009a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 11 Sep 2022 19:06:25 -0600 Subject: [PATCH 116/186] Fix some of the markup to be more consistent with sudo_plugin.mdoc.in. Also reword a few awkward phrases. --- docs/sudo_plugin_python.man.in | 213 +++++++++++++++++-------------- docs/sudo_plugin_python.mdoc.in | 217 +++++++++++++++++--------------- 2 files changed, 237 insertions(+), 193 deletions(-) diff --git a/docs/sudo_plugin_python.man.in b/docs/sudo_plugin_python.man.in index 98c0abbfc9..e67f559824 100644 --- a/docs/sudo_plugin_python.man.in +++ b/docs/sudo_plugin_python.man.in @@ -17,7 +17,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDO_PLUGIN_PYTHON" "5" "June 6, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN_PYTHON" "5" "September 11, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -96,9 +96,9 @@ When the plugin loads, will create an instance of this class and call the methods. The actual methods required depent on the type of the plugin, but most return an -\(lqint\(rq +\fIint\fR result code, as documented in -sudo_plugin(@mansectsu@), +sudo_plugin(@mansectform@), that indicates whether or not the method was successful. The Python sudo module defines the following constants to improve readability: .RS 4n @@ -120,12 +120,12 @@ l l. .RE .PP If a function returns -\fINone\fR +\fRNone\fR (for example, if it does not call return), it will be considered to have returned \fRsudo.RC.OK\fR. -If an exception is raised (other than sudo.PluginException), the backtrace will be -shown to the user and the plugin function will return +If an exception is raised (other than sudo.PluginException), the +backtrace will be shown to the user and the plugin function will return \fRsudo.RC.ERROR\fR. If that is not acceptable, you must catch the exception and handle it yourself. .PP @@ -151,7 +151,7 @@ Running the Python interpreter and bridging between C and Python is handled by the \fBsudo\fR plugin -\fRpython_plugin.so\fR. +\fIpython_plugin.so\fR. This shared object can be loaded like any other dynamic \fBsudo\fR plugin and should receive the path and the class name of the Python @@ -219,7 +219,7 @@ sudo.conf(@mansectform@). .PP A policy plugin may have the following member functions: .TP 6n -\fBconstructor\fR +\fIconstructor\fR .nf .RS 6n __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], @@ -235,7 +235,9 @@ as member variables in the object. .sp The constructor matches the \fBopen\fR() -function in the C sudo plugin API. +function in the C +\fBsudo\fR +plugin API. .sp The function arguments are as follows: .TP 6n @@ -279,7 +281,7 @@ documentation in sudo_plugin(@mansectform@). .RE .TP 6n -\fBcheck_policy\fR +\fIcheck_policy\fR .nf .RS 6n check_policy(self, argv: Tuple[str, ...], env_add: Tuple[str, ...]) @@ -367,7 +369,7 @@ format. .RE .PD .TP 6n -\fBinit_session\fR +\fIinit_session\fR .nf .RS 6n init_session(self, user_pwd: Tuple, user_env: Tuple[str, ...]) @@ -387,8 +389,9 @@ The function arguments are as follows: .TP 6n \fIuser_pwd\fR A tuple describing the user's passwd entry. -Convertible to pwd.struct_passwd or -\fINone\fR +Convertible to +\fIpwd.struct_passwd or\fR +\fRNone\fR if the user is not present in the password database. .sp Example conversion: @@ -437,7 +440,7 @@ If this is omitted, no changes will be made to .RE .PD .TP 6n -\fBlist\fR +\fIlist\fR .nf .RS 6n list(self, argv: Tuple[str, ...], is_verbose: int, user: str) @@ -451,7 +454,7 @@ The function arguments are as follows: .TP 6n \fIargv\fR If not set to -\fINone\fR, +\fRNone\fR, an argument vector describing a command the user wishes to check against the policy. .TP 6n @@ -461,14 +464,14 @@ Flag indicating whether to list in verbose mode or not. \fIuser\fR The name of a different user to list privileges for if the policy allows it. If -\fINone\fR, +\fRNone\fR, the plugin should list the privileges of the invoking user. .PD 0 .PP .RE .PD .TP 6n -\fBvalidate\fR +\fIvalidate\fR .nf .RS 6n validate(self) @@ -479,7 +482,7 @@ validate(self) For policy plugins that cache authentication credentials, this function is used to validate and cache the credentials (optional). .RE .TP 6n -\fBinvalidate\fR +\fIinvalidate\fR .nf .RS 6n invalidate(self, remove: int) @@ -499,7 +502,7 @@ invalidating them. .RE .PD .TP 6n -\fBshow_version\fR +\fIshow_version\fR .nf .RS 6n show_version(self, is_verbose: int) @@ -524,7 +527,7 @@ is run as the root user. .RE .PD .TP 6n -\fBclose\fR +\fIclose\fR .br .nf .RS 6n @@ -537,7 +540,9 @@ Called when a command finishes executing. .sp Works the same as the \fBclose\fR() -function in the C sudo plugin API, except that it only gets called if +function in the C +\fBsudo\fR +plugin API, except that it only gets called if \fBsudo\fR attempts to execute the command. .sp @@ -569,8 +574,10 @@ Plugin python_policy python_plugin.so \e .RE .fi .PP -Be aware, however, that you cannot enable the Python policy plugin -in addition to another policy plugin, such as +Only one policy plugin can be enabled at a time so you must disable +any other policy plugin listed in +\fI@sysconfdir@/sudo.conf\fR, +such as sudoers(@mansectform@). .SS "I/O plugin API" I/O plugins must be registered in @@ -588,7 +595,7 @@ Currently only 8 python I/O plugins can be loaded at once. .PP An I/O plugin may have the following member functions: .TP 6n -\fBconstructor\fR +\fIconstructor\fR .nf .RS 6n __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], @@ -604,7 +611,9 @@ as member variables in the object. .sp The constructor matches the \fBopen\fR() -function in the C sudo plugin API. +function in the C +\fBsudo\fR +plugin API. .sp The function arguments are as follows: .TP 6n @@ -648,7 +657,7 @@ documentation in sudo_plugin(@mansectform@). .RE .TP 6n -\fBopen\fR +\fIopen\fR .nf .RS 6n open(self, argv: Tuple[str, ...], @@ -661,13 +670,15 @@ Receives the command the user wishes to run. .sp Works the same as the \fBopen\fR() -function in the C sudo plugin API except that: +function in the C +\fBsudo\fR +plugin API except that: .sp .RS 10n .PD 0 .TP 3n \fB\(bu\fR -It only gets called before the user would execute some command +It only gets called when there is a command to be executed (and not for a version query for example). .TP 3n \fB\(bu\fR @@ -708,7 +719,7 @@ If the function returns no I/O will be sent to the plugin. .RE .TP 6n -\fBlog_ttyin\fR, \fBlog_ttyout\fR, \fBlog_stdin\fR, \fBlog_stdout\fR, \fBlog_stderr\fR +\fIlog_ttyin\fR, \fIlog_ttyout\fR, \fIlog_stdin\fR, \fIlog_stdout\fR, \fIlog_stderr\fR .nf .RS 6n log_ttyin(self, buf: str) -> int @@ -736,8 +747,8 @@ constants. .sp If \fRsudo.RC.ERROR\fR -is returned, the running command will be terminated and all of the plugin's logging -functions will be disabled. +is returned, the running command will be terminated and all of the +plugin's logging functions will be disabled. Other I/O logging plugins will still receive any remaining input or output that has not yet been processed. .sp @@ -751,7 +762,7 @@ the command will be terminated and the data will not be written to the terminal, though it will still be sent to any other I/O logging plugins. .RE .TP 6n -\fBchange_winsize\fR +\fIchange_winsize\fR .nf .RS 6n change_winsize(self, line: int, cols: int) -> int @@ -772,7 +783,7 @@ The number of columns of the terminal. .RE .PD .TP 6n -\fBlog_suspend\fR +\fIlog_suspend\fR .nf .RS 6n log_suspend(self, signo: int) -> int @@ -793,7 +804,7 @@ if the command was resumed. .RE .PD .TP 6n -\fBshow_version\fR +\fIshow_version\fR .nf .RS 6n show_version(self, is_verbose: int) @@ -817,7 +828,7 @@ is run as the root user. .RE .PD .TP 6n -\fBclose\fR +\fIclose\fR .br .nf .RS 6n @@ -825,11 +836,13 @@ close(self, exit_status: int, error: int) -> None .RE .fi .RS 6n -Called when a command execution finished. +Called when a command finishes execution. .sp Works the same as the \fBclose\fR() -function in the C sudo plugin API, except that it only gets called if +function in the C +\fBsudo\fR +plugin API, except that it only gets called if \fBsudo\fR attempts to execute the command. .sp @@ -849,7 +862,7 @@ system call, otherwise 0. .RE .PD .SS "I/O plugin example" -Sudo ships a Python I/O plugin example. +Sudo ships with a Python I/O plugin example. To try it, register it by adding the following lines to \fI@sysconfdir@/sudo.conf\fR: .nf @@ -874,9 +887,9 @@ Plugin python_audit python_plugin.so ModulePath= ClassName= Sudo supports loading multiple audit plugins. Currently only 8 python audit plugins can be loaded at once. .PP -An audit plugin may have the following member functions (all of them are optional): +An audit plugin may have the following member functions (all of which are optional): .TP 6n -\fBconstructor\fR +\fIconstructor\fR .nf .RS 6n __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], @@ -890,7 +903,9 @@ as member variables in the object. .sp The constructor matches the \fBopen\fR() -function in the C sudo plugin API. +function in the C +\fBsudo\fR +plugin API. .sp The function arguments are as follows: .TP 6n @@ -926,7 +941,7 @@ format. .RE .PD .TP 6n -\fBopen\fR +\fIopen\fR .nf .RS 6n open(self, submit_optind: int, @@ -949,7 +964,7 @@ The argument vector sudo was invoked with, including all command line options. .RE .PD .TP 6n -\fBclose\fR +\fIclose\fR .br .nf .RS 6n @@ -964,7 +979,9 @@ The function arguments are as follows: .TP 6n \fIstatus_type\fR The type of status being passed. -One of the sudo.EXIT_REASON.* constants. +One of the +\fRsudo.EXIT_REASON.*\fR +constants. .TP 6n \fIstatus\fR Depending on the value of @@ -973,11 +990,11 @@ this value is either ignored, the command's exit status as returned by the wait(2) system call, the value of -\fRerrno\fR +\fIerrno\fR set by the execve(2) system call, or the value of -\fRerrno\fR +\fIerrno\fR resulting from an error in the \fBsudo\fR front-end. @@ -986,7 +1003,7 @@ front-end. .RE .PD .TP 6n -\fBshow_version\fR +\fIshow_version\fR .nf .RS 6n show_version(self, is_verbose: int) -> int @@ -1011,7 +1028,7 @@ is run as the root user. .RE .PD .TP 6n -\fBaccept\fR +\fIaccept\fR .nf .RS 6n accept(self, plugin_name: str, plugin_type: int, command_info: Tuple[str, ...], @@ -1075,7 +1092,7 @@ The environment the command will be run with. .RE .PD .TP 6n -\fBreject\fR +\fIreject\fR .nf .RS 6n reject(self, plugin_name: str, plugin_type: int, audit_msg: str, @@ -1109,7 +1126,7 @@ front-end. audit_msg An optional string describing the reason the command was rejected by the plugin. If the plugin did not provide a reason, audit_msg will be -\fINone\fR +\fRNone\fR. .TP 6n command_info A vector of information describing the rejected command. @@ -1121,7 +1138,7 @@ manual for possible values. .RE .PD .TP 6n -\fBerror\fR +\fIerror\fR .br .nf .RS 6n @@ -1153,7 +1170,7 @@ front-end. audit_msg An optional string describing the plugin error. If the plugin did not provide a description, it will be -\fINone\fR +\fRNone\fR. .TP 6n command_info A vector of information describing the command. @@ -1165,7 +1182,7 @@ manual for possible values. .RE .PD .SS "Audit plugin example" -Sudo ships a Python Audit plugin example. +Sudo ships with a Python Audit plugin example. To try it, register it by adding the following lines to \fI@sysconfdir@/sudo.conf\fR: .nf @@ -1194,7 +1211,7 @@ Currently only 8 python approval plugins can be loaded at once. .PP An approval plugin may have the following member functions: .TP 6n -\fBconstructor\fR +\fIconstructor\fR .nf .RS 6n __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], @@ -1210,7 +1227,9 @@ as member variables in the object. .sp The constructor matches the \fBopen\fR() -function in the C sudo plugin API. +function in the C +\fBsudo\fR +plugin API. .sp The function arguments are as follows: .TP 6n @@ -1254,7 +1273,7 @@ The argument vector sudo was invoked with, including all command line options. .RE .PD .TP 6n -\fBshow_version\fR +\fIshow_version\fR .nf .RS 6n show_version(self, is_verbose: int) -> int @@ -1262,10 +1281,11 @@ show_version(self, is_verbose: int) -> int .fi .RS 6n .sp -Display the version. (Same as for all the other plugins.) +Display the version. +(Same as for all the other plugins.) .RE .TP 6n -\fBcheck\fR +\fIcheck\fR .br .nf .RS 6n @@ -1306,7 +1326,7 @@ The environment the command will be run with. .RE .PD .SS "Approval plugin example" -Sudo ships a Python Approval plugin example. +Sudo ships with a Python Approval plugin example. To try it, register it by adding the following lines to \fI@sysconfdir@/sudo.conf\fR: .nf @@ -1337,7 +1357,7 @@ Currently, only a single group plugin can be registered in .PP A group provider plugin may have the following member functions: .TP 6n -\fBconstructor\fR +\fIconstructor\fR .nf .RS 6n __init__(self, args: Tuple[str, ...], version: str) @@ -1366,7 +1386,7 @@ The version of the Python Group Plugin API. .RE .PD .TP 6n -\fBquery\fR +\fIquery\fR .br .nf .RS 6n @@ -1402,7 +1422,7 @@ is not present in the password database, will be \fRNULL\fR. .SS "Group plugin example" -Sudo ships a Python group plugin example. +Sudo ships with a Python group plugin example. To try it, register it in the \fIsudoers\fR file by adding the following lines: @@ -1419,7 +1439,7 @@ The example plugin will tell \fBsudo\fR that the user \fItest\fR -is part of the non-unix group +is part of the non-Unix group \fImygroup\fR. If you add a rule that uses this group, it will affect the \fItest\fR @@ -1444,16 +1464,18 @@ written in Python. A Python plugin can interact with the user using the \fBsudo.conv\fR() function which displays one or more messages described by the -\fBsudo.ConvMessage\fR +\fRsudo.ConvMessage\fR class. This is the Python equivalent of the \fBconversation\fR() -function in the C sudo plugin API. +function in the C +\fBsudo\fR +plugin API. A plugin should not attempt to read directly from the standard input or the user's tty (neither of which are guaranteed to exist). .PP The -\fBsudo.ConvMessage\fR +\fRsudo.ConvMessage\fR class specifies how the user interaction should occur: .nf .sp @@ -1462,7 +1484,7 @@ sudo.ConvMessage(msg_type: int, msg: str, timeout: int) .RE .fi .PP -\fBsudo.ConvMessage\fR +\fRsudo.ConvMessage\fR member variables: .TP 6n \fImsg_type\fR @@ -1474,7 +1496,7 @@ constants below. \fImsg\fR The message to display to the user. The caller must include a trailing newline in -\fRmsg\fR +\fImsg\fR if one is to be displayed. .TP 6n \fItimeout\fR @@ -1493,25 +1515,25 @@ To specify the message type, the following constants are available: .PD 0 .TP 3n \fB\(bu\fR -sudo.CONV.PROMPT_ECHO_OFF +\fRsudo.CONV.PROMPT_ECHO_OFF\fR .TP 3n \fB\(bu\fR -sudo.CONV.PROMPT_ECHO_ON +\fRsudo.CONV.PROMPT_ECHO_ON\fR .TP 3n \fB\(bu\fR -sudo.CONV.ERROR_MSG +\fRsudo.CONV.ERROR_MSG\fR .TP 3n \fB\(bu\fR -sudo.CONV.INFO_MSG +\fRsudo.CONV.INFO_MSG\fR .TP 3n \fB\(bu\fR -sudo.CONV.PROMPT_MASK +\fRsudo.CONV.PROMPT_MASK\fR .TP 3n \fB\(bu\fR -sudo.CONV.PROMPT_ECHO_OK +\fRsudo.CONV.PROMPT_ECHO_OK\fR .TP 3n \fB\(bu\fR -sudo.CONV.PREFER_TTY +\fRsudo.CONV.PREFER_TTY\fR .RE .PD .PP @@ -1534,7 +1556,7 @@ The function arguments are as follows: .TP 6n \fImessage(s)\fR One of more messages (of type -\fBsudo.ConvMessage\fR), +\fRsudo.ConvMessage\fR), each describing a conversation. At least one message is required. .TP 6n @@ -1554,11 +1576,11 @@ The \fBsudo.conv\fR() function can raise the following exceptions: .TP 6n -\fBsudo.SudoException\fR +\fRsudo.SudoException\fR If the conversation fails, for example when the conversation function is not available. .TP 6n -\fBsudo.ConversationInterrupted\fR +\fRsudo.ConversationInterrupted\fR If the conversation function returns an error, e.g., the timeout passed or the user interrupted the conversation by pressing control-C. .SS "Conversation example" @@ -1618,7 +1640,7 @@ debug system. \fIEnabling debugging in sudo.conf\fR .PP To enable debug messages, add a -\fRDebug\fR +\fIDebug\fR line to sudo.conf(@mansectform@) with the program set to @@ -1710,21 +1732,21 @@ l l l. .PP \fBsudo.conf name\fR \fBPython constant\fR \fBdescription\fR .PP -crit sudo.DEBUG.CRIT only critical messages +crit \fRsudo.DEBUG.CRIT\fR only critical messages .PP -err sudo.DEBUG.ERROR +err \fRsudo.DEBUG.ERROR\fR .PP -warn sudo.DEBUG.WARN +warn \fRsudo.DEBUG.WARN\fR .PP -notice sudo.DEBUG.NOTICE +notice \fRsudo.DEBUG.NOTICE\fR .PP -diag sudo.DEBUG.DIAG +diag \fRsudo.DEBUG.DIAG\fR .PP -info sudo.DEBUG.INFO +info \fRsudo.DEBUG.INFO\fR .PP -trace sudo.DEBUG.TRACE +trace \fRsudo.DEBUG.TRACE\fR .PP -debug sudo.DEBUG.DEBUG very extreme verbose debugging +debug \fRsudo.DEBUG.DEBUG\fR very extreme verbose debugging .TE .PP \fIUsing the logging module\fR @@ -1737,11 +1759,11 @@ The log handler of sudo will map each Python log level of a message to the appropriate sudo debug level. The sudo debug system will only receive messages that are not filtered out by the Python loggers. -For example, the log level of the python logger will be an additional filter -for the log messages, and is usually very different from what level is set in sudo.conf -for the sudo debug system. +For example, the log level of the python logger will be an additional +filter for the log messages, and is usually very different from +what level is set in sudo.conf for the sudo debug system. .SS "Debug example" -Sudo ships an example debug plugin by default. +Sudo ships with an example debug plugin. To try it, register it by adding the following lines to \fI@sysconfdir@/sudo.conf\fR: .nf @@ -1816,12 +1838,13 @@ This is how the plugin API accepts options and settings. .SH "PLUGIN API CHANGELOG (Python)" None yet .SH "LIMITATIONS" -Only a maximum number of 8 python I/O plugins can be loaded at once. +A maximum of 8 python I/O plugins can be loaded at once. If \fI@sysconfdir@/sudo.conf\fR contains more, those will be rejected with a warning message. .PP -The Event API and the hook function API is currently not accessible for Python plugins. +The Event API and the hook function API is currently not accessible +for Python plugins. .SH "SEE ALSO" sudo.conf(@mansectform@), sudo_plugin(@mansectform@), @@ -1849,7 +1872,7 @@ If you believe you have found a bug in you can submit a bug report at https://bugzilla.sudo.ws/ .SH "SECURITY CONSIDERATIONS" All Python plugin handling is implemented inside the -\fRpython_plugin.so\fR +\fIpython_plugin.so\fR dynamic plugin. Therefore, if no Python plugin is registered in sudo.conf(@mansectform@) @@ -1875,7 +1898,7 @@ accidentally importing such file would make it possible for any user However, during development of a plugin this might not be very convenient. The sudo.conf(@mansectform@) -\fRdeveloper_mode\fR +\fIdeveloper_mode\fR option can be used to disable it. For example: .RS 6n diff --git a/docs/sudo_plugin_python.mdoc.in b/docs/sudo_plugin_python.mdoc.in index 111bed6726..e17e1d2724 100644 --- a/docs/sudo_plugin_python.mdoc.in +++ b/docs/sudo_plugin_python.mdoc.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd June 6, 2022 +.Dd September 11, 2022 .Dt SUDO_PLUGIN_PYTHON @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -85,9 +85,9 @@ When the plugin loads, will create an instance of this class and call the methods. The actual methods required depent on the type of the plugin, but most return an -.Dq int +.Vt int result code, as documented in -.Xr sudo_plugin @mansectsu@ , +.Xr sudo_plugin @mansectform@ , that indicates whether or not the method was successful. The Python sudo module defines the following constants to improve readability: .Bl -column "sudo.RC.USAGE_ERROR" "XXX" -offset 4n @@ -100,12 +100,12 @@ The Python sudo module defines the following constants to improve readability: .El .Pp If a function returns -.Em None +.Dv None (for example, if it does not call return), it will be considered to have returned .Dv sudo.RC.OK . -If an exception is raised (other than sudo.PluginException), the backtrace will be -shown to the user and the plugin function will return +If an exception is raised (other than sudo.PluginException), the +backtrace will be shown to the user and the plugin function will return .Dv sudo.RC.ERROR . If that is not acceptable, you must catch the exception and handle it yourself. .Pp @@ -128,7 +128,7 @@ Running the Python interpreter and bridging between C and Python is handled by the .Nm sudo plugin -.Li python_plugin.so . +.Pa python_plugin.so . This shared object can be loaded like any other dynamic .Nm sudo plugin and should receive the path and the class name of the Python @@ -187,8 +187,8 @@ Currently, only a single policy plugin may be specified in .Pp A policy plugin may have the following member functions: .Bl -tag -width 4n -.It Sy constructor -.Bd -literal +.It Fa constructor +.Bd -literal -compact __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], version: str, user_info: Tuple[str, ...], plugin_options: Tuple[str, ...]) @@ -200,7 +200,9 @@ as member variables in the object. .Pp The constructor matches the .Fn open -function in the C sudo plugin API. +function in the C +.Nm sudo +plugin API. .Pp The function arguments are as follows: .Bl -tag -width 4n @@ -239,7 +241,7 @@ see the policy plugin .Fn open documentation in .Xr sudo_plugin @mansectform@ . -.It Sy check_policy +.It Fa check_policy .Bd -literal -compact check_policy(self, argv: Tuple[str, ...], env_add: Tuple[str, ...]) .Ed @@ -314,7 +316,7 @@ tuple of strings in .Dq key=value format. .El -.It Sy init_session +.It Fa init_session .Bd -literal -compact init_session(self, user_pwd: Tuple, user_env: Tuple[str, ...]) .Ed @@ -331,8 +333,9 @@ The function arguments are as follows: .Bl -tag -width 4n .It Fa user_pwd A tuple describing the user's passwd entry. -Convertible to pwd.struct_passwd or -.Em None +Convertible to +.Vt pwd.struct_passwd or +.Dv None if the user is not present in the password database. .Pp Example conversion: @@ -371,7 +374,7 @@ environment in If this is omitted, no changes will be made to .Fa user_env . .El -.It Sy list +.It Fa list .Bd -literal -compact list(self, argv: Tuple[str, ...], is_verbose: int, user: str) .Ed @@ -382,7 +385,7 @@ The function arguments are as follows: .Bl -tag -width 4n .It Fa argv If not set to -.Em None , +.Dv None , an argument vector describing a command the user wishes to check against the policy. .It Fa is_verbose @@ -390,16 +393,16 @@ Flag indicating whether to list in verbose mode or not. .It Fa user The name of a different user to list privileges for if the policy allows it. If -.Em None , +.Dv None , the plugin should list the privileges of the invoking user. .El -.It Sy validate +.It Fa validate .Bd -literal -compact validate(self) .Ed .Pp For policy plugins that cache authentication credentials, this function is used to validate and cache the credentials (optional). -.It Sy invalidate +.It Fa invalidate .Bd -literal -compact invalidate(self, remove: int) .Ed @@ -412,7 +415,7 @@ The function arguments are as follows: If this flag is set, the plugin may remove the credentials instead of simply invalidating them. .El -.It Sy show_version +.It Fa show_version .Bd -literal -compact show_version(self, is_verbose: int) .Ed @@ -430,7 +433,7 @@ Currently this is 1 if .Ql sudo -V is run as the root user. .El -.It Sy close +.It Fa close .Bd -literal -compact close(self, exit_status: int, error: int) .Ed @@ -439,7 +442,9 @@ Called when a command finishes executing. .Pp Works the same as the .Fn close -function in the C sudo plugin API, except that it only gets called if +function in the C +.Nm sudo +plugin API, except that it only gets called if .Nm sudo attempts to execute the command. .Pp @@ -464,8 +469,10 @@ Plugin python_policy python_plugin.so \e ClassName=SudoPolicyPlugin .Ed .Pp -Be aware, however, that you cannot enable the Python policy plugin -in addition to another policy plugin, such as +Only one policy plugin can be enabled at a time so you must disable +any other policy plugin listed in +.Pa @sysconfdir@/sudo.conf , +such as .Xr sudoers @mansectform@ . .Ss I/O plugin API I/O plugins must be registered in @@ -480,7 +487,7 @@ Currently only 8 python I/O plugins can be loaded at once. .Pp An I/O plugin may have the following member functions: .Bl -tag -width 4n -.It Sy constructor +.It Fa constructor .Bd -literal -compact __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], version: str, user_info: Tuple[str, ...], @@ -493,7 +500,9 @@ as member variables in the object. .Pp The constructor matches the .Fn open -function in the C sudo plugin API. +function in the C +.Nm sudo +plugin API. .Pp The function arguments are as follows: .Bl -tag -width 4n @@ -532,7 +541,7 @@ see the I/O plugin .Fn open documentation in .Xr sudo_plugin @mansectform@ . -.It Sy open +.It Fa open .Bd -literal -compact open(self, argv: Tuple[str, ...], command_info: Tuple[str, ...]) -> int @@ -542,11 +551,13 @@ Receives the command the user wishes to run. .Pp Works the same as the .Fn open -function in the C sudo plugin API except that: +function in the C +.Nm sudo +plugin API except that: .Pp .Bl -bullet -compact -offset 4n -width 1n .It -It only gets called before the user would execute some command +It only gets called when there is a command to be executed (and not for a version query for example). .It Other arguments of the C API @@ -583,7 +594,7 @@ constants. If the function returns .Dv sudo.RC.REJECT , no I/O will be sent to the plugin. -.It Sy log_ttyin , log_ttyout , log_stdin , log_stdout , log_stderr +.It Fa log_ttyin , log_ttyout , log_stdin , log_stdout , log_stderr .Bd -literal -compact log_ttyin(self, buf: str) -> int log_ttyout(self, buf: str) -> int @@ -609,8 +620,8 @@ constants. .Pp If .Dv sudo.RC.ERROR -is returned, the running command will be terminated and all of the plugin's logging -functions will be disabled. +is returned, the running command will be terminated and all of the +plugin's logging functions will be disabled. Other I/O logging plugins will still receive any remaining input or output that has not yet been processed. .Pp @@ -622,7 +633,7 @@ If an output logging function rejects the data by returning .Dv sudo.RC.REJECT , the command will be terminated and the data will not be written to the terminal, though it will still be sent to any other I/O logging plugins. -.It Sy change_winsize +.It Fa change_winsize .Bd -literal -compact change_winsize(self, line: int, cols: int) -> int .Ed @@ -635,7 +646,7 @@ The number of lines of the terminal. .It Fa cols The number of columns of the terminal. .El -.It Sy log_suspend +.It Fa log_suspend .Bd -literal -compact log_suspend(self, signo: int) -> int .Ed @@ -648,7 +659,7 @@ The number of the signal that caused the command to be suspended or .Dv SIGCONT if the command was resumed. .El -.It Sy show_version +.It Fa show_version .Bd -literal -compact show_version(self, is_verbose: int) .Ed @@ -665,15 +676,17 @@ Currently this is 1 if .Ql sudo -V is run as the root user. .El -.It Sy close +.It Fa close .Bd -literal -compact close(self, exit_status: int, error: int) -> None .Ed -Called when a command execution finished. +Called when a command finishes execution. .Pp Works the same as the .Fn close -function in the C sudo plugin API, except that it only gets called if +function in the C +.Nm sudo +plugin API, except that it only gets called if .Nm sudo attempts to execute the command. .Pp @@ -689,7 +702,7 @@ system call, otherwise 0. .El .El .Ss I/O plugin example -Sudo ships a Python I/O plugin example. +Sudo ships with a Python I/O plugin example. To try it, register it by adding the following lines to .Pa @sysconfdir@/sudo.conf : .Bd -literal -offset 4n @@ -708,9 +721,9 @@ Plugin python_audit python_plugin.so ModulePath= ClassName= Sudo supports loading multiple audit plugins. Currently only 8 python audit plugins can be loaded at once. .Pp -An audit plugin may have the following member functions (all of them are optional): +An audit plugin may have the following member functions (all of which are optional): .Bl -tag -width 4n -.It Sy constructor +.It Fa constructor .Bd -literal -compact __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], version: str, user_info: Tuple[str, ...], plugin_options: Tuple[str, ...]) @@ -721,7 +734,9 @@ as member variables in the object. .Pp The constructor matches the .Fn open -function in the C sudo plugin API. +function in the C +.Nm sudo +plugin API. .Pp The function arguments are as follows: .Bl -tag -width 4n @@ -749,7 +764,7 @@ This is a tuple of strings, usually (but not necessarily) in .Dq key=value format. .El -.It Sy open +.It Fa open .Bd -literal -compact open(self, submit_optind: int, submit_argv: Tuple[str, ...]) -> int @@ -764,7 +779,7 @@ that corresponds to the first entry that is not a command line option. .It Fa submit_argv The argument vector sudo was invoked with, including all command line options. .El -.It Sy close +.It Fa close .Bd -literal -compact close(self, status_type: int, status: int) -> None .Ed @@ -775,7 +790,9 @@ The function arguments are as follows: .Bl -tag -width 4n .It Fa status_type The type of status being passed. -One of the sudo.EXIT_REASON.* constants. +One of the +.Dv sudo.EXIT_REASON.* +constants. .It Fa status Depending on the value of .Fa status_type , @@ -783,16 +800,16 @@ this value is either ignored, the command's exit status as returned by the .Xr wait 2 system call, the value of -.Li errno +.Va errno set by the .Xr execve 2 system call, or the value of -.Li errno +.Va errno resulting from an error in the .Nm sudo front-end. .El -.It Sy show_version +.It Fa show_version .Bd -literal -compact show_version(self, is_verbose: int) -> int .Ed @@ -810,7 +827,7 @@ Currently this is 1 if .Ql sudo -V is run as the root user. .El -.It Sy accept +.It Fa accept .Bd -literal -compact accept(self, plugin_name: str, plugin_type: int, command_info: Tuple[str, ...], run_argv: Tuple[str, ...], run_envp: Tuple[str, ...]) -> int @@ -863,7 +880,7 @@ Argument vector describing a command that will be run. .It run_envp The environment the command will be run with. .El -.It Sy reject +.It Fa reject .Bd -literal -compact reject(self, plugin_name: str, plugin_type: int, audit_msg: str, command_info: Tuple[str, ...]) -> int @@ -892,15 +909,14 @@ front-end. .It audit_msg An optional string describing the reason the command was rejected by the plugin. If the plugin did not provide a reason, audit_msg will be -.Em None -. +.Dv None . .It command_info A vector of information describing the rejected command. See the .Xr sudo_plugin @mansectform@ manual for possible values. .El -.It Sy error +.It Fa error .Bd -literal -compact error(self, plugin_name: str, plugin_type: int, audit_msg: str, command_info: Tuple[str, ...]) -> int @@ -926,8 +942,7 @@ front-end. .It audit_msg An optional string describing the plugin error. If the plugin did not provide a description, it will be -.Em None -. +.Dv None . .It command_info A vector of information describing the command. See the @@ -936,7 +951,7 @@ manual for possible values. .El .El .Ss Audit plugin example -Sudo ships a Python Audit plugin example. +Sudo ships with a Python Audit plugin example. To try it, register it by adding the following lines to .Pa @sysconfdir@/sudo.conf : .Bd -literal -offset 4n @@ -959,7 +974,7 @@ Currently only 8 python approval plugins can be loaded at once. .Pp An approval plugin may have the following member functions: .Bl -tag -width 4n -.It Sy constructor +.It Fa constructor .Bd -literal -compact __init__(self, user_env: Tuple[str, ...], settings: Tuple[str, ...], version: str, user_info: Tuple[str, ...], plugin_options: Tuple[str, ...], @@ -972,7 +987,9 @@ as member variables in the object. .Pp The constructor matches the .Fn open -function in the C sudo plugin API. +function in the C +.Nm sudo +plugin API. .Pp The function arguments are as follows: .Bl -tag -width 4n @@ -1006,13 +1023,14 @@ that corresponds to the first entry that is not a command line option. .It Fa submit_argv The argument vector sudo was invoked with, including all command line options. .El -.It Sy show_version +.It Fa show_version .Bd -literal -compact show_version(self, is_verbose: int) -> int .Ed .Pp -Display the version. (Same as for all the other plugins.) -.It Sy check +Display the version. +(Same as for all the other plugins.) +.It Fa check .Bd -literal -compact check(self, command_info: Tuple[str, ...], run_argv: Tuple[str, ...], run_env: Tuple[str, ...]) -> int @@ -1042,7 +1060,7 @@ The environment the command will be run with. .El .El .Ss Approval plugin example -Sudo ships a Python Approval plugin example. +Sudo ships with a Python Approval plugin example. To try it, register it by adding the following lines to .Pa @sysconfdir@/sudo.conf : .Bd -literal -offset 4n @@ -1067,7 +1085,7 @@ Currently, only a single group plugin can be registered in .Pp A group provider plugin may have the following member functions: .Bl -tag -width 4n -.It Sy constructor +.It Fa constructor .Bd -literal -compact __init__(self, args: Tuple[str, ...], version: str) .Ed @@ -1088,7 +1106,7 @@ format). .It Fa version The version of the Python Group Plugin API. .El -.It Sy query +.It Fa query .Bd -literal -compact query(self, user: str, group: str, user_pwd: Tuple) .Ed @@ -1118,7 +1136,7 @@ will be .Dv NULL . .El .Ss Group plugin example -Sudo ships a Python group plugin example. +Sudo ships with a Python group plugin example. To try it, register it in the .Em sudoers file by adding the following lines: @@ -1132,7 +1150,7 @@ The example plugin will tell .Nm sudo that the user .Em test -is part of the non-unix group +is part of the non-Unix group .Em mygroup . If you add a rule that uses this group, it will affect the .Em test @@ -1154,22 +1172,24 @@ written in Python. A Python plugin can interact with the user using the .Fn sudo.conv function which displays one or more messages described by the -.Sy sudo.ConvMessage +.Dv sudo.ConvMessage class. This is the Python equivalent of the .Fn conversation -function in the C sudo plugin API. +function in the C +.Nm sudo +plugin API. A plugin should not attempt to read directly from the standard input or the user's tty (neither of which are guaranteed to exist). .Pp The -.Sy sudo.ConvMessage +.Dv sudo.ConvMessage class specifies how the user interaction should occur: .Bd -literal -offset 4n sudo.ConvMessage(msg_type: int, msg: str, timeout: int) .Ed .Pp -.Sy sudo.ConvMessage +.Dv sudo.ConvMessage member variables: .Bl -tag -width 4n .It Fa msg_type @@ -1180,7 +1200,7 @@ constants below. .It Fa msg The message to display to the user. The caller must include a trailing newline in -.Li msg +.Fa msg if one is to be displayed. .It Fa timeout Optional. @@ -1197,19 +1217,19 @@ To specify the message type, the following constants are available: .Pp .Bl -bullet -compact -offset 4n -width 1n .It -sudo.CONV.PROMPT_ECHO_OFF +.Dv sudo.CONV.PROMPT_ECHO_OFF .It -sudo.CONV.PROMPT_ECHO_ON +.Dv sudo.CONV.PROMPT_ECHO_ON .It -sudo.CONV.ERROR_MSG +.Dv sudo.CONV.ERROR_MSG .It -sudo.CONV.INFO_MSG +.Dv sudo.CONV.INFO_MSG .It -sudo.CONV.PROMPT_MASK +.Dv sudo.CONV.PROMPT_MASK .It -sudo.CONV.PROMPT_ECHO_OK +.Dv sudo.CONV.PROMPT_ECHO_OK .It -sudo.CONV.PREFER_TTY +.Dv sudo.CONV.PREFER_TTY .El .Pp See the @@ -1228,7 +1248,7 @@ The function arguments are as follows: .Bl -tag -width 4n .It Fa message(s) One of more messages (of type -.Sy sudo.ConvMessage ) , +.Dv sudo.ConvMessage ) , each describing a conversation. At least one message is required. .It Fa on_suspend @@ -1247,10 +1267,10 @@ The .Fn sudo.conv function can raise the following exceptions: .Bl -tag -width 4n -.It Sy sudo.SudoException +.It Dv sudo.SudoException If the conversation fails, for example when the conversation function is not available. -.It Sy sudo.ConversationInterrupted +.It Dv sudo.ConversationInterrupted If the conversation function returns an error, e.g., the timeout passed or the user interrupted the conversation by pressing control-C. .El @@ -1305,7 +1325,7 @@ debug system. .Em Enabling debugging in sudo.conf .Pp To enable debug messages, add a -.Li Debug +.Em Debug line to .Xr sudo.conf @mansectform@ with the program set to @@ -1380,14 +1400,14 @@ one or more messages to log .Em Available log levels: .Bl -column "name in sudo.conf" "Python constant" "only critical messages" .It Sy sudo.conf name Ta Sy Python constant Ta Sy description -.It crit Ta sudo.DEBUG.CRIT Ta only critical messages -.It err Ta sudo.DEBUG.ERROR Ta -.It warn Ta sudo.DEBUG.WARN Ta -.It notice Ta sudo.DEBUG.NOTICE Ta -.It diag Ta sudo.DEBUG.DIAG Ta -.It info Ta sudo.DEBUG.INFO Ta -.It trace Ta sudo.DEBUG.TRACE Ta -.It debug Ta sudo.DEBUG.DEBUG Ta very extreme verbose debugging +.It crit Ta Dv sudo.DEBUG.CRIT Ta only critical messages +.It err Ta Dv sudo.DEBUG.ERROR Ta +.It warn Ta Dv sudo.DEBUG.WARN Ta +.It notice Ta Dv sudo.DEBUG.NOTICE Ta +.It diag Ta Dv sudo.DEBUG.DIAG Ta +.It info Ta Dv sudo.DEBUG.INFO Ta +.It trace Ta Dv sudo.DEBUG.TRACE Ta +.It debug Ta Dv sudo.DEBUG.DEBUG Ta very extreme verbose debugging .El .Pp .Em Using the logging module @@ -1400,11 +1420,11 @@ The log handler of sudo will map each Python log level of a message to the appropriate sudo debug level. The sudo debug system will only receive messages that are not filtered out by the Python loggers. -For example, the log level of the python logger will be an additional filter -for the log messages, and is usually very different from what level is set in sudo.conf -for the sudo debug system. +For example, the log level of the python logger will be an additional +filter for the log messages, and is usually very different from +what level is set in sudo.conf for the sudo debug system. .Ss Debug example -Sudo ships an example debug plugin by default. +Sudo ships with an example debug plugin. To try it, register it by adding the following lines to .Pa @sysconfdir@/sudo.conf : .Bd -literal -offset 4n @@ -1470,12 +1490,13 @@ This is how the plugin API accepts options and settings. .Sh PLUGIN API CHANGELOG (Python) None yet .Sh LIMITATIONS -Only a maximum number of 8 python I/O plugins can be loaded at once. +A maximum of 8 python I/O plugins can be loaded at once. If .Pa @sysconfdir@/sudo.conf contains more, those will be rejected with a warning message. .Pp -The Event API and the hook function API is currently not accessible for Python plugins. +The Event API and the hook function API is currently not accessible +for Python plugins. .Sh SEE ALSO .Xr sudo.conf @mansectform@ , .Xr sudo_plugin @mansectform@ , @@ -1502,7 +1523,7 @@ If you believe you have found a bug in you can submit a bug report at https://bugzilla.sudo.ws/ .Sh SECURITY CONSIDERATIONS All Python plugin handling is implemented inside the -.Li python_plugin.so +.Pa python_plugin.so dynamic plugin. Therefore, if no Python plugin is registered in .Xr sudo.conf @mansectform@ @@ -1528,7 +1549,7 @@ accidentally importing such file would make it possible for any user However, during development of a plugin this might not be very convenient. The .Xr sudo.conf @mansectform@ -.Li developer_mode +.Em developer_mode option can be used to disable it. For example: .Dl Set developer_mode true From 3194d16674e6dd5b53ad9f911e126ab945e38009 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 11 Sep 2022 19:06:26 -0600 Subject: [PATCH 117/186] Document apparmor_profile, intercept_verify, and update_ticket. --- docs/sudo_plugin.man.in | 62 ++++++++++++++++++++++++++++------------ docs/sudo_plugin.mdoc.in | 57 +++++++++++++++++++++++++----------- 2 files changed, 84 insertions(+), 35 deletions(-) diff --git a/docs/sudo_plugin.man.in b/docs/sudo_plugin.man.in index 1e5b5844ea..108ac2587b 100644 --- a/docs/sudo_plugin.man.in +++ b/docs/sudo_plugin.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDO_PLUGIN" "5" "September 10, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN" "5" "September 11, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -305,6 +305,7 @@ filtering and the action. Other systems will use a dynamic shared object to implement intercept. +Only available starting with API version 1.19. .TP 6n intercept_setid=bool Indicates whether or not the system supports running set-user-ID @@ -322,6 +323,7 @@ This will disable intercept mode for that program and any other programs that it executes. The policy plugin may refuse to execute a set-user-ID or set-group-ID binary in intercept mode to avoid this. +Only available starting with API version 1.19. .TP 6n login_class=string BSD @@ -474,6 +476,13 @@ option. Not all plugins support command timeouts and the ability of the user to set a timeout may be restricted by policy. The format of the timeout string is plugin-specific. +.TP 6n +update_ticket=bool +Set to false if the user specified the +\fB\-N\fR +option, indicating that the user wishes to avoid updating any cached +authentication credentials. +Only available starting with API version 1.20. .PP Additional settings may be added in the future so the plugin should silently ignore settings that it does not recognize. @@ -1001,9 +1010,13 @@ The following values are recognized by .RS 6n .PD 0 .TP 6n +apparmor_profile=string +AppArmor profile to transition to when executing the command. +Only available starting with API version 1.19. +.PD +.TP 6n chroot=string The root directory to use when running the command. -.PD .TP 6n closefrom=number If specified, @@ -1026,7 +1039,7 @@ not be run unless is also set (see below). .TP 6n cwd_optional=bool -If enabled, +If set, \fBsudo\fR will treat an inability to change to the new working directory as a non-fatal error. @@ -1107,7 +1120,7 @@ The specified must refer to an open file descriptor. .TP 6n intercept=bool -If specified, +If set, \fBsudo\fR will intercept attempts to execute a subsequent command and perform a policy check via the policy plugin's @@ -1120,6 +1133,17 @@ See in sudoers(@mansectform@) for details. +Only available starting with API version 1.18. +.TP 6n +intercept_verify=bool +If set, +\fBsudo\fR +will attempt to verify that a command run in intercept mode has the +expected path name, command line arguments and environment. +This setting has no effect unless +\fIuse_ptrace\fR +is also enabled. +Only available starting with API version 1.20. .TP 6n iolog_compress=bool Set to true if the I/O logging plugins, if any, should compress the @@ -1186,7 +1210,7 @@ BSD systems. .TP 6n log_subcmds=bool -If specified, +If set, \fBsudo\fR will call the audit plugin's \fBaccept\fR() @@ -1202,6 +1226,7 @@ See in sudoers(@mansectform@) for more information. +Only available starting with API version 1.18. .TP 6n noexec=bool If set, prevent the command from executing other programs. @@ -1235,7 +1260,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_core=soft,hard The largest size core dump file that may be created (in bytes). @@ -1251,7 +1276,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_cpu=soft,hard The maximum amount of CPU time that the process may use (in seconds). @@ -1267,7 +1292,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_data=soft,hard The maximum size of the data segment for the process (in bytes). @@ -1283,7 +1308,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_fsize=soft,hard The largest size file that the process may create (in bytes). @@ -1299,7 +1324,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_locks=soft,hard The maximum number of locks that the process may establish, @@ -1316,7 +1341,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_memlock=soft,hard The maximum size that the process may lock in memory (in bytes), @@ -1333,7 +1358,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_nofile=soft,hard The maximum number of files that the process may have open. @@ -1349,7 +1374,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_nproc=soft,hard The maximum number of processes that the user may run simultaneously. @@ -1365,7 +1390,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_rss=soft,hard The maximum size to which the process's resident set size may grow (in bytes). @@ -1381,7 +1406,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n rlimit_stack=soft,hard The maximum size to which the process's stack may grow (in bytes). @@ -1397,7 +1422,7 @@ A value of \(lqdefault\(rq will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .TP 6n runas_egid=gid Effective group-ID to run the command as. @@ -1493,7 +1518,7 @@ These restrictions are not enforced when \fBsudoedit\fR is run by root. The -\fIsudoedit_follow\fR +\fIsudoedit_checkdir\fR option can be set to false to disable this check. Only available starting with API version 1.8. .TP 6n @@ -1528,7 +1553,7 @@ Force the value specified by the option to override any umask set by PAM or login.conf. .TP 6n use_ptrace=bool -If specified, +If set, \fBsudo\fR will use ptrace(2) @@ -1536,6 +1561,7 @@ to implement intercept mode if supported by the system. This setting has no effect unless \fIintercept\fR is also set. +Only available starting with API version 1.19. .TP 6n use_pty=bool Allocate a pseudo-terminal to run the command in, regardless of whether diff --git a/docs/sudo_plugin.mdoc.in b/docs/sudo_plugin.mdoc.in index 275e990e72..9d54941a39 100644 --- a/docs/sudo_plugin.mdoc.in +++ b/docs/sudo_plugin.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd September 10, 2022 +.Dd September 11, 2022 .Dt SUDO_PLUGIN @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -282,6 +282,7 @@ filtering and the action. Other systems will use a dynamic shared object to implement intercept. +Only available starting with API version 1.19. .It intercept_setid=bool Indicates whether or not the system supports running set-user-ID and set-group-ID binaries in intercept mode. @@ -298,6 +299,7 @@ This will disable intercept mode for that program and any other programs that it executes. The policy plugin may refuse to execute a set-user-ID or set-group-ID binary in intercept mode to avoid this. +Only available starting with API version 1.19. .It login_class=string .Bx login class to use when setting resource limits and nice value, @@ -430,6 +432,12 @@ option. Not all plugins support command timeouts and the ability of the user to set a timeout may be restricted by policy. The format of the timeout string is plugin-specific. +.It update_ticket=bool +Set to false if the user specified the +.Fl N +option, indicating that the user wishes to avoid updating any cached +authentication credentials. +Only available starting with API version 1.20. .El .Pp Additional settings may be added in the future so the plugin should @@ -894,6 +902,9 @@ pointer. The following values are recognized by .Nm sudo : .Bl -tag -width 4n +.It apparmor_profile=string +AppArmor profile to transition to when executing the command. +Only available starting with API version 1.19. .It chroot=string The root directory to use when running the command. .It closefrom=number @@ -914,7 +925,7 @@ not be run unless .Em cwd_optional is also set (see below). .It cwd_optional=bool -If enabled, +If set, .Nm sudo will treat an inability to change to the new working directory as a non-fatal error. @@ -992,7 +1003,7 @@ The specified .Em number must refer to an open file descriptor. .It intercept=bool -If specified, +If set, .Nm sudo will intercept attempts to execute a subsequent command and perform a policy check via the policy plugin's @@ -1005,6 +1016,16 @@ See in .Xr sudoers @mansectform@ for details. +Only available starting with API version 1.18. +.It intercept_verify=bool +If set, +.Nm sudo +will attempt to verify that a command run in intercept mode has the +expected path name, command line arguments and environment. +This setting has no effect unless +.Em use_ptrace +is also enabled. +Only available starting with API version 1.20. .It iolog_compress=bool Set to true if the I/O logging plugins, if any, should compress the log data. @@ -1058,7 +1079,7 @@ on .Bx systems. .It log_subcmds=bool -If specified, +If set, .Nm sudo will call the audit plugin's .Fn accept @@ -1074,6 +1095,7 @@ See in .Xr sudoers @mansectform@ for more information. +Only available starting with API version 1.18. .It noexec=bool If set, prevent the command from executing other programs. .It preserve_fds=list @@ -1103,7 +1125,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_core=soft,hard The largest size core dump file that may be created (in bytes). The soft and hard limits are separated by a comma. @@ -1118,7 +1140,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_cpu=soft,hard The maximum amount of CPU time that the process may use (in seconds). The soft and hard limits are separated by a comma. @@ -1133,7 +1155,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_data=soft,hard The maximum size of the data segment for the process (in bytes). The soft and hard limits are separated by a comma. @@ -1148,7 +1170,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_fsize=soft,hard The largest size file that the process may create (in bytes). The soft and hard limits are separated by a comma. @@ -1163,7 +1185,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_locks=soft,hard The maximum number of locks that the process may establish, if supported by the operating system. @@ -1179,7 +1201,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_memlock=soft,hard The maximum size that the process may lock in memory (in bytes), if supported by the operating system. @@ -1195,7 +1217,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_nofile=soft,hard The maximum number of files that the process may have open. The soft and hard limits are separated by a comma. @@ -1210,7 +1232,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_nproc=soft,hard The maximum number of processes that the user may run simultaneously. The soft and hard limits are separated by a comma. @@ -1225,7 +1247,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_rss=soft,hard The maximum size to which the process's resident set size may grow (in bytes). The soft and hard limits are separated by a comma. @@ -1240,7 +1262,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It rlimit_stack=soft,hard The maximum size to which the process's stack may grow (in bytes). The soft and hard limits are separated by a comma. @@ -1255,7 +1277,7 @@ A value of .Dq default will cause the target user's default resource limit to be used on systems that allow per-user resource limits to be configured. -Only available starting with API version 1.17. +Only available starting with API version 1.18. .It runas_egid=gid Effective group-ID to run the command as. If not specified, the value of @@ -1339,7 +1361,7 @@ These restrictions are not enforced when .Nm sudoedit is run by root. The -.Em sudoedit_follow +.Em sudoedit_checkdir option can be set to false to disable this check. Only available starting with API version 1.8. .It sudoedit_follow=bool @@ -1369,7 +1391,7 @@ Force the value specified by the .Em umask option to override any umask set by PAM or login.conf. .It use_ptrace=bool -If specified, +If set, .Nm sudo will use .Xr ptrace 2 @@ -1377,6 +1399,7 @@ to implement intercept mode if supported by the system. This setting has no effect unless .Em intercept is also set. +Only available starting with API version 1.19. .It use_pty=bool Allocate a pseudo-terminal to run the command in, regardless of whether or not I/O logging is in use. From 6fac1f5186fbca903d69525e9c6acd51012c90e0 Mon Sep 17 00:00:00 2001 From: a1346054 <36859588+a1346054@users.noreply.github.com> Date: Mon, 12 Sep 2022 21:52:32 +0000 Subject: [PATCH 118/186] Use `grep -E` instead of `egrep` --- Makefile.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.in b/Makefile.in index 6de746f75b..642788e480 100644 --- a/Makefile.in +++ b/Makefile.in @@ -117,7 +117,7 @@ check check-verbose check-fuzzer fuzz pre-install: config.status done uncrustify.files: Makefile - grep '\.[ch]$$' $(top_srcdir)/MANIFEST | egrep -v '(/zlib/|/(arc4random|arc4random_uniform|chacha_private|charclass|fnmatch|getaddrinfo|getcwd|getdate|getentropy|getopt|getopt_long|glob|gram|inet_ntop|inet_pton|log_server.pb-c|mktemp|pw_dup|reallocarray|mktemp_test|protobuf-c|snprintf|stdbool|strlcat|strlcpy|sudo_queue|toke)\.[ch]$$)' > uncrustify.files + grep '\.[ch]$$' $(top_srcdir)/MANIFEST | grep -E -v '(/zlib/|/(arc4random|arc4random_uniform|chacha_private|charclass|fnmatch|getaddrinfo|getcwd|getdate|getentropy|getopt|getopt_long|glob|gram|inet_ntop|inet_pton|log_server.pb-c|mktemp|pw_dup|reallocarray|mktemp_test|protobuf-c|snprintf|stdbool|strlcat|strlcpy|sudo_queue|toke)\.[ch]$$)' > uncrustify.files reformat: uncrustify.files ( cd $(top_srcdir) && uncrustify -c etc/uncrustify.cfg --replace --no-backup -F $(top_builddir)/uncrustify.files ) @@ -126,7 +126,7 @@ check-format: uncrustify.files ( cd $(top_srcdir) && uncrustify -c etc/uncrustify.cfg --check -F $(top_builddir)/uncrustify.files ) spell: - ( cd $(top_srcdir) && codespell -I etc/codespell.ignore -x etc/codespell.exclude `egrep -v -f etc/codespell.skip MANIFEST` ) + ( cd $(top_srcdir) && codespell -I etc/codespell.ignore -x etc/codespell.exclude `grep -E -v -f etc/codespell.skip MANIFEST` ) cppcheck: config.status rval=0; \ From 5c1c276e2800e0a93101ceabc6e49176cac24f85 Mon Sep 17 00:00:00 2001 From: a1346054 <36859588+a1346054@users.noreply.github.com> Date: Mon, 12 Sep 2022 21:54:53 +0000 Subject: [PATCH 119/186] Fix incorrect makefile target name --- Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.in b/Makefile.in index 642788e480..5ae970a268 100644 --- a/Makefile.in +++ b/Makefile.in @@ -440,4 +440,4 @@ sandwich: fi .PHONY: clean mostlyclean distclean cleandir clobber realclean ChangeLog \ - me a sandwhich check-format reformat + me a sandwich check-format reformat From a326411903047293c01ee7ff10f80d88eb4fc569 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 12 Sep 2022 16:30:52 -0600 Subject: [PATCH 120/186] Use $(GREP) and $(EGREP) variables in Makefile.in files. --- Makefile.in | 6 ++++-- lib/eventlog/Makefile.in | 3 ++- lib/iolog/Makefile.in | 11 ++++++----- lib/util/Makefile.in | 13 +++++++------ logsrvd/Makefile.in | 7 ++++--- plugins/python/Makefile.in | 3 ++- plugins/sudoers/Makefile.in | 11 ++++++----- src/Makefile.in | 3 ++- 8 files changed, 33 insertions(+), 24 deletions(-) diff --git a/Makefile.in b/Makefile.in index 5ae970a268..fb21fdf70f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -70,6 +70,8 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ SHELL = @SHELL@ +EGREP = @EGREP@ +GREP = @GREP@ SED = @SED@ INSTALL = $(SHELL) $(scriptdir)/install-sh -c @@ -117,7 +119,7 @@ check check-verbose check-fuzzer fuzz pre-install: config.status done uncrustify.files: Makefile - grep '\.[ch]$$' $(top_srcdir)/MANIFEST | grep -E -v '(/zlib/|/(arc4random|arc4random_uniform|chacha_private|charclass|fnmatch|getaddrinfo|getcwd|getdate|getentropy|getopt|getopt_long|glob|gram|inet_ntop|inet_pton|log_server.pb-c|mktemp|pw_dup|reallocarray|mktemp_test|protobuf-c|snprintf|stdbool|strlcat|strlcpy|sudo_queue|toke)\.[ch]$$)' > uncrustify.files + $(GREP) '\.[ch]$$' $(top_srcdir)/MANIFEST | $(EGREP) -v '(/zlib/|/(arc4random|arc4random_uniform|chacha_private|charclass|fnmatch|getaddrinfo|getcwd|getdate|getentropy|getopt|getopt_long|glob|gram|inet_ntop|inet_pton|log_server.pb-c|mktemp|pw_dup|reallocarray|mktemp_test|protobuf-c|snprintf|stdbool|strlcat|strlcpy|sudo_queue|toke)\.[ch]$$)' > uncrustify.files reformat: uncrustify.files ( cd $(top_srcdir) && uncrustify -c etc/uncrustify.cfg --replace --no-backup -F $(top_builddir)/uncrustify.files ) @@ -126,7 +128,7 @@ check-format: uncrustify.files ( cd $(top_srcdir) && uncrustify -c etc/uncrustify.cfg --check -F $(top_builddir)/uncrustify.files ) spell: - ( cd $(top_srcdir) && codespell -I etc/codespell.ignore -x etc/codespell.exclude `grep -E -v -f etc/codespell.skip MANIFEST` ) + ( cd $(top_srcdir) && codespell -I etc/codespell.ignore -x etc/codespell.exclude `$(EGREP) -v -f etc/codespell.skip MANIFEST` ) cppcheck: config.status rval=0; \ diff --git a/lib/eventlog/Makefile.in b/lib/eventlog/Makefile.in index 84f8a5441f..45b9ad2e9f 100644 --- a/lib/eventlog/Makefile.in +++ b/lib/eventlog/Makefile.in @@ -33,6 +33,7 @@ incdir = $(top_srcdir)/include # Compiler & tools to use CC = @CC@ LIBTOOL = @LIBTOOL@ +GREP = @GREP@ # C preprocessor flags CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(srcdir) -I$(top_srcdir) @CPPFLAGS@ @@ -151,7 +152,7 @@ check-fuzzer: check: $(TEST_PROGS) check-fuzzer @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ diff --git a/lib/iolog/Makefile.in b/lib/iolog/Makefile.in index 19ca7f3d49..2dde029d0a 100644 --- a/lib/iolog/Makefile.in +++ b/lib/iolog/Makefile.in @@ -35,6 +35,7 @@ cross_compiling = @CROSS_COMPILING@ CC = @CC@ LIBTOOL = @LIBTOOL@ SHA1SUM = @SHA1SUM@ +GREP = @GREP@ SED = @SED@ # Libraries @@ -199,7 +200,7 @@ fuzz_iolog_json_seed_corpus.zip: rm -rf $$tdir run-fuzz_iolog_json: fuzz_iolog_json - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -226,7 +227,7 @@ fuzz_iolog_legacy_seed_corpus.zip: rm -rf $$tdir run-fuzz_iolog_legacy: fuzz_iolog_legacy - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -253,7 +254,7 @@ fuzz_iolog_timing_seed_corpus.zip: rm -rf $$tdir run-fuzz_iolog_timing: fuzz_iolog_timing - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -307,7 +308,7 @@ fuzz: run-fuzz_iolog_json run-fuzz_iolog_legacy run-fuzz_iolog_timing check-fuzzer: $(FUZZ_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -326,7 +327,7 @@ check-fuzzer: $(FUZZ_PROGS) check: $(TEST_PROGS) check-fuzzer @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 67177febd2..ff24c7b966 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -55,6 +55,7 @@ CPP = @CPP@ HOSTCPP = @CPP_FOR_BUILD@ LIBTOOL = @LIBTOOL@ SHA1SUM = @SHA1SUM@ +GREP = @GREP@ SED = @SED@ AWK = @AWK@ @@ -331,7 +332,7 @@ fuzz_sudo_conf_seed_corpus.zip: rm -rf $$tdir run-fuzz_sudo_conf: fuzz_sudo_conf - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -397,7 +398,7 @@ fuzz: run-fuzz_sudo_conf check-fuzzer: $(FUZZ_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -413,7 +414,7 @@ check-fuzzer: $(FUZZ_PROGS) # Note: some regress checks are run from srcdir for consistent error messages check: $(TEST_PROGS) check-fuzzer @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -438,9 +439,9 @@ check: $(TEST_PROGS) check-fuzzer if test -f globtest; then \ mkdir -p `$(SED) 's@/[^/]*$$@@' $(srcdir)/regress/glob/files | sort -u`; \ touch `cat $(srcdir)/regress/glob/files`; \ - chmod 0755 `grep '/r[^/]*$$' $(srcdir)/regress/glob/files`; \ - chmod 0444 `grep '/s[^/]*$$' $(srcdir)/regress/glob/files`; \ - chmod 0711 `grep '/t[^/]*$$' $(srcdir)/regress/glob/files`; \ + chmod 0755 `$(GREP) '/r[^/]*$$' $(srcdir)/regress/glob/files`; \ + chmod 0444 `$(GREP) '/s[^/]*$$' $(srcdir)/regress/glob/files`; \ + chmod 0711 `$(GREP) '/t[^/]*$$' $(srcdir)/regress/glob/files`; \ ./globtest $(srcdir)/regress/glob/globtest.in || rval=`expr $$rval + $$?`; \ rm -rf fake; \ fi; \ diff --git a/logsrvd/Makefile.in b/logsrvd/Makefile.in index fba163ace1..c9ba8658cf 100644 --- a/logsrvd/Makefile.in +++ b/logsrvd/Makefile.in @@ -36,6 +36,7 @@ cross_compiling = @CROSS_COMPILING@ CC = @CC@ LIBTOOL = @LIBTOOL@ SHA1SUM = @SHA1SUM@ +GREP = @GREP@ SED = @SED@ # Our install program supports extra flags... @@ -194,7 +195,7 @@ fuzz_logsrvd_conf_seed_corpus.zip: rm -rf $$tdir run-fuzz_logsrvd_conf: fuzz_logsrvd_conf - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -257,7 +258,7 @@ fuzz: run-fuzz_logsrvd_conf check-fuzzer: $(FUZZ_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -272,7 +273,7 @@ check-fuzzer: $(FUZZ_PROGS) check: $(TEST_PROGS) check-fuzzer @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ diff --git a/plugins/python/Makefile.in b/plugins/python/Makefile.in index a4b71e57a7..997eb479f1 100644 --- a/plugins/python/Makefile.in +++ b/plugins/python/Makefile.in @@ -36,6 +36,7 @@ cross_compiling = @CROSS_COMPILING@ # Compiler & tools to use CC = @CC@ LIBTOOL = @LIBTOOL@ +GREP = @GREP@ SED = @SED@ AWK = @AWK@ @@ -227,7 +228,7 @@ check-fuzzer: check: $(TEST_PROGS) check-fuzzer @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 037a7da843..29110dcfd0 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -47,6 +47,7 @@ LIBTOOL = @LIBTOOL@ SHA1SUM = @SHA1SUM@ FLEX = @FLEX@ YACC = @YACC@ +GREP = @GREP@ SED = @SED@ AWK = @AWK@ @@ -429,7 +430,7 @@ fuzz_policy_seed_corpus.zip: rm -rf $$tdir run-fuzz_policy: fuzz_policy - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -456,7 +457,7 @@ fuzz_sudoers_seed_corpus.zip: rm -rf $$tdir run-fuzz_sudoers: fuzz_sudoers - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -483,7 +484,7 @@ fuzz_sudoers_ldif_seed_corpus.zip: rm -rf $$tdir run-fuzz_sudoers_ldif: fuzz_sudoers_ldif - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -633,7 +634,7 @@ fuzz: run-fuzz_policy run-fuzz_sudoers run-fuzz_sudoers_ldif check-fuzzer: $(FUZZ_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ @@ -652,7 +653,7 @@ check-fuzzer: $(FUZZ_PROGS) check: $(TEST_PROGS) visudo testsudoers cvtsudoers check-fuzzer @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ diff --git a/src/Makefile.in b/src/Makefile.in index f3a411f1be..d7178b75c2 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -35,6 +35,7 @@ cross_compiling = @CROSS_COMPILING@ # Compiler & tools to use CC = @CC@ LIBTOOL = @LIBTOOL@ +GREP = @GREP@ SED = @SED@ AWK = @AWK@ @@ -330,7 +331,7 @@ check-fuzzer: check: $(TEST_PROGS) check-fuzzer @if test X"$(cross_compiling)" != X"yes"; then \ - if locale -a 2>&1 | grep '^C.UTF-8$$' >/dev/null 2>&1; then \ + if locale -a 2>&1 | $(GREP) '^C.UTF-8$$' >/dev/null 2>&1; then \ LC_ALL=C.UTF-8; export LC_ALL; \ else \ LC_ALL=C; export LC_ALL; \ From c341608072a33c74fa3e534e987d6d3513f19b51 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 13 Sep 2022 19:56:45 -0600 Subject: [PATCH 121/186] Remove most uses of the deprecated Li macro which has no effect. Also fix some other incorrect markup. --- docs/cvtsudoers.man.in | 67 ++- docs/cvtsudoers.mdoc.in | 71 ++- docs/sudo.conf.man.in | 100 ++-- docs/sudo.conf.mdoc.in | 100 ++-- docs/sudo.man.in | 49 +- docs/sudo.mdoc.in | 51 +- docs/sudo_logsrv.proto.man.in | 4 +- docs/sudo_logsrv.proto.mdoc.in | 18 +- docs/sudo_logsrvd.conf.man.in | 85 +-- docs/sudo_logsrvd.conf.mdoc.in | 85 +-- docs/sudo_logsrvd.man.in | 2 +- docs/sudo_logsrvd.mdoc.in | 2 +- docs/sudo_plugin.man.in | 10 +- docs/sudo_plugin.mdoc.in | 10 +- docs/sudo_sendlog.man.in | 2 +- docs/sudo_sendlog.mdoc.in | 2 +- docs/sudoers.ldap.man.in | 232 +++++---- docs/sudoers.ldap.mdoc.in | 232 +++++---- docs/sudoers.man.in | 761 +++++++++++++-------------- docs/sudoers.mdoc.in | 911 ++++++++++++++++----------------- docs/sudoers_timestamp.man.in | 4 +- docs/sudoers_timestamp.mdoc.in | 30 +- docs/sudoreplay.man.in | 12 +- docs/sudoreplay.mdoc.in | 12 +- docs/visudo.man.in | 6 +- docs/visudo.mdoc.in | 6 +- 26 files changed, 1398 insertions(+), 1466 deletions(-) diff --git a/docs/cvtsudoers.man.in b/docs/cvtsudoers.man.in index 0a409ade4e..ded8f86ec4 100644 --- a/docs/cvtsudoers.man.in +++ b/docs/cvtsudoers.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "CVTSUDOERS" "1" "September 2, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" +.TH "CVTSUDOERS" "1" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" .nh .if n .ad l .SH "NAME" @@ -67,9 +67,8 @@ The options are as follows: The base DN (distinguished name) that will be used when performing LDAP queries. Typically this is of the form -\fRou=SUDOers,dc=my-domain,dc=com\fR -for the domain -\fRmy-domain.com\fR. +\(lqou=SUDOers,dc=my-domain,dc=com\(rq +for the domain my-domain.com. If this option is not specified, the value of the \fRSUDOERS_BASE\fR environment variable will be used instead. @@ -82,10 +81,10 @@ Defaults to .TP 12n \fB\-d\fR \fIdeftypes\fR, \fB\--defaults\fR=\fIdeftypes\fR Only convert -\fRDefaults\fR +\fIDefaults\fR entries of the specified types. One or more -\fRDefaults\fR +\fIDefaults\fR types may be specified, separated by a comma (\(oq\&,\(cq). The supported types are: @@ -122,7 +121,7 @@ for more information. If the \fB\-d\fR option is not specified, all -\fRDefaults\fR +\fIDefaults\fR entries will be converted. .RE .TP 12n @@ -265,10 +264,10 @@ For example, or \fBhost\fR = \fIwww\fR. An upper-case -\fRCmnd_Alias\fR, -\fRHost_alias\fR, +\fICmnd_Alias\fR, +\fIHost_alias\fR, or -\fRUser_Alias\fR +\fIUser_Alias\fR may be specified as the \(lqcmnd\(rq, \(lqhost\(rq, @@ -441,7 +440,7 @@ Per-user rules are merged and duplicates are removed. If a host name is specified with the input file, \fBcvtsudoers\fR will change rules that specify a host name of -\fRALL\fR +\fBALL\fR to the host name associated with the policy file being merged. The merging of rules is currently fairly simplistic but will be improved in a later release. @@ -676,7 +675,7 @@ and Host_Aliases A JSON object containing one or more \fIsudoers\fR -\fRHost_Alias\fR +\fIHost_Alias\fR entries where each named alias has as its value an array containing one or more objects. Each object contains a @@ -711,7 +710,7 @@ For example: Cmnd_Aliases A JSON object containing one or more \fIsudoers\fR -\fRCmnd_Alias\fR +\fICmnd_Alias\fR entries where each named alias has as its value an array containing one or more objects. Each object contains a @@ -1006,20 +1005,20 @@ defaults_type The type of \fIDefaults\fR setting; one of -\fRdefaults\fR, -\fRdefaults_command\fR, -\fRdefaults_host\fR, -\fRdefaults_runas\fR, +\fIdefaults\fR, +\fIdefaults_command\fR, +\fIdefaults_host\fR, +\fIdefaults_runas\fR, or -\fRdefaults_user\fR. +\fIdefaults_user\fR. .TP 10n binding For -\fRdefaults_command\fR, -\fRdefaults_host\fR, -\fRdefaults_runas\fR, +\fIdefaults_command\fR, +\fIdefaults_host\fR, +\fIdefaults_runas\fR, and -\fRdefaults_user\fR +\fIdefaults_user\fR this is the value that must match for the setting to be applied. .TP 10n name @@ -1051,11 +1050,11 @@ or .TP 6n aliases This section includes any -\fRCmnd_Alias\fR -\fRHost_Alias\fR, -\fRRunas_Alias\fR, +\fICmnd_Alias\fR +\fIHost_Alias\fR, +\fIRunas_Alias\fR, or -\fRUser_Alias\fR, +\fIUser_Alias\fR, entries from \fIsudoers\fR. The @@ -1073,11 +1072,11 @@ The fields are as follows: .TP 10n alias_type The type of alias; one of -\fRCmnd_Alias\fR, -\fRHost_Alias\fR, -\fRRunas_Alias\fR, +\fICmnd_Alias\fR, +\fIHost_Alias\fR, +\fIRunas_Alias\fR, or -\fRUser_Alias\fR. +\fIUser_Alias\fR. .TP 10n alias_name The name of the alias; a string starting with an upper-case letter that @@ -1127,7 +1126,7 @@ or a netgroup (preceded by a \(oq+\(cq character) or a -\fRUser_Alias\fR. +\fIUser_Alias\fR. If set to the special value \fBALL\fR, it will match any user. @@ -1138,14 +1137,14 @@ This may also be a netgroup (preceded by a \(oq+\(cq character) or a -\fRHost_Alias\fR. +\fIHost_Alias\fR. If set to the special value \fBALL\fR, it will match any host. .TP 10n runusers An optional comma-separated list of users (or -\fRRunas_Alias\fRes) +\fIRunas_Alias\fRes) the command may be run as. If it contains more than one member, the value is surrounded by double quotes. @@ -1157,7 +1156,7 @@ If empty, the root user is assumed. rungroups .br An optional comma-separated list of groups (or -\fRRunas_Alias\fRes) +\fIRunas_Alias\fRes) the command may be run as. If it contains more than one member, the value is surrounded by double quotes. diff --git a/docs/cvtsudoers.mdoc.in b/docs/cvtsudoers.mdoc.in index cfcb3f31b9..75cb847845 100644 --- a/docs/cvtsudoers.mdoc.in +++ b/docs/cvtsudoers.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd September 2, 2022 +.Dd September 13, 2022 .Dt CVTSUDOERS 1 .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -65,9 +65,8 @@ The options are as follows: The base DN (distinguished name) that will be used when performing LDAP queries. Typically this is of the form -.Li ou=SUDOers,dc=my-domain,dc=com -for the domain -.Li my-domain.com . +.Dq ou=SUDOers,dc=my-domain,dc=com +for the domain my-domain.com. If this option is not specified, the value of the .Ev SUDOERS_BASE environment variable will be used instead. @@ -78,10 +77,10 @@ Defaults to .Pa @sysconfdir@/cvtsudoers.conf . .It Fl d Ar deftypes , Fl -defaults Ns = Ns Ar deftypes Only convert -.Li Defaults +.Em Defaults entries of the specified types. One or more -.Li Defaults +.Em Defaults types may be specified, separated by a comma .Pq Ql \&, . The supported types are: @@ -110,7 +109,7 @@ for more information. If the .Fl d option is not specified, all -.Li Defaults +.Em Defaults entries will be converted. .It Fl e , Fl -expand-aliases Expand aliases in @@ -218,10 +217,10 @@ For example, or .Sy host No = Ar www . An upper-case -.Li Cmnd_Alias , -.Li Host_alias , +.Em Cmnd_Alias , +.Em Host_alias , or -.Li User_Alias +.Em User_Alias may be specified as the .Dq cmnd , .Dq host , @@ -365,9 +364,9 @@ subsequent aliases of the same name are renamed with a numeric suffix separated with a underscore .Pq Ql _ . For example, if there are two different aliases named -.Li SERVERS , +.Dv SERVERS , the first will be left as-is and the second will be renamed -.Li SERVERS_1 . +.Dv SERVERS_1 . References to the renamed alias are also updated in the policy file. Duplicate aliases (those with identical contents) are pruned. .It @@ -384,7 +383,7 @@ Per-user rules are merged and duplicates are removed. If a host name is specified with the input file, .Nm will change rules that specify a host name of -.Li ALL +.Sy ALL to the host name associated with the policy file being merged. The merging of rules is currently fairly simplistic but will be improved in a later release. @@ -589,7 +588,7 @@ and .It Host_Aliases A JSON object containing one or more .Em sudoers -.Li Host_Alias +.Em Host_Alias entries where each named alias has as its value an array containing one or more objects. Each object contains a @@ -620,7 +619,7 @@ For example: .It Cmnd_Aliases A JSON object containing one or more .Em sudoers -.Li Cmnd_Alias +.Em Cmnd_Alias entries where each named alias has as its value an array containing one or more objects. Each object contains a @@ -893,19 +892,19 @@ The fields are as follows: The type of .Em Defaults setting; one of -.Li defaults , -.Li defaults_command , -.Li defaults_host , -.Li defaults_runas , +.Em defaults , +.Em defaults_command , +.Em defaults_host , +.Em defaults_runas , or -.Li defaults_user . +.Em defaults_user . .It binding For -.Li defaults_command , -.Li defaults_host , -.Li defaults_runas , +.Em defaults_command , +.Em defaults_host , +.Em defaults_runas , and -.Li defaults_user +.Em defaults_user this is the value that must match for the setting to be applied. .It name The name of the @@ -930,11 +929,11 @@ or .El .It aliases This section includes any -.Li Cmnd_Alias -.Li Host_Alias , -.Li Runas_Alias , +.Em Cmnd_Alias +.Em Host_Alias , +.Em Runas_Alias , or -.Li User_Alias , +.Em User_Alias , entries from .Em sudoers . The @@ -948,11 +947,11 @@ The fields are as follows: .Bl -tag -width 8n .It alias_type The type of alias; one of -.Li Cmnd_Alias , -.Li Host_Alias , -.Li Runas_Alias , +.Em Cmnd_Alias , +.Em Host_Alias , +.Em Runas_Alias , or -.Li User_Alias . +.Em User_Alias . .It alias_name The name of the alias; a string starting with an upper-case letter that consists of upper-case letters, digits, or underscores. @@ -990,7 +989,7 @@ or a netgroup (preceded by a .Ql + character) or a -.Li User_Alias . +.Em User_Alias . If set to the special value .Sy ALL , it will match any user. @@ -1000,13 +999,13 @@ This may also be a netgroup (preceded by a .Ql + character) or a -.Li Host_Alias . +.Em Host_Alias . If set to the special value .Sy ALL , it will match any host. .It runusers An optional comma-separated list of users (or -.Li Runas_Alias Ns No es ) +.Em Runas_Alias Ns No es ) the command may be run as. If it contains more than one member, the value is surrounded by double quotes. @@ -1016,7 +1015,7 @@ it will match any user. If empty, the root user is assumed. .It rungroups An optional comma-separated list of groups (or -.Li Runas_Alias Ns No es ) +.Em Runas_Alias Ns No es ) the command may be run as. If it contains more than one member, the value is surrounded by double quotes. diff --git a/docs/sudo.conf.man.in b/docs/sudo.conf.man.in index e5433a1b0c..485c1fd024 100644 --- a/docs/sudo.conf.man.in +++ b/docs/sudo.conf.man.in @@ -70,17 +70,17 @@ Leading white space is removed from the beginning of lines even when a continuation character is used. .PP Non-comment lines that don't begin with -\fRPlugin\fR, -\fRPath\fR, -\fRDebug\fR, +\fIPlugin\fR, +\fIPath\fR, +\fIDebug\fR, or -\fRSet\fR +\fISet\fR are silently ignored. .PP The \fBsudo.conf\fR file is always parsed in the -\(lq\fRC\fR\(rq +\(oqC\(cq locale. .SS "Plugin configuration" \fBsudo\fR @@ -94,9 +94,9 @@ Plugins are dynamically loaded based on the contents of \fBsudo.conf\fR. .PP A -\fRPlugin\fR +\fIPlugin\fR line consists of the -\fRPlugin\fR +\fIPlugin\fR keyword, followed by the \fIsymbol_name\fR and the @@ -105,14 +105,14 @@ to the dynamic shared object that contains the plugin. The \fIsymbol_name\fR is the name of the -\fRapproval_plugin\fR, -\fRaudit_plugin\fR, -\fRio_plugin\fR, +\fIstruct approval_plugin\fR, +\fIstruct audit_plugin\fR, +\fIstruct io_plugin\fR, or -\fRpolicy_plugin\fR -struct contained in the plugin. +\fIstruct policy_plugin\fR +defined by the plugin. If a plugin implements multiple plugin types, there must be a -\fRPlugin\fR +\fIPlugin\fR line for each unique symbol name. The \fIpath\fR @@ -120,7 +120,7 @@ may be fully qualified or relative. If not fully qualified, it is relative to the directory specified by the \fIplugin_dir\fR -\fRPath\fR +\fIPath\fR setting, which defaults to \fI@plugindir@\fR. In other words: @@ -182,7 +182,7 @@ This limitation does not apply to I/O plugins. If no \fBsudo.conf\fR file is present, or if it contains no -\fRPlugin\fR +\fIPlugin\fR lines, the \fBsudoers\fR plugin will be used as the default security policy, for I/O logging @@ -221,9 +221,9 @@ sudo_plugin(@mansectform@) manual. .SS "Path settings" A -\fRPath\fR +\fIPath\fR line consists of the -\fRPath\fR +\fIPath\fR keyword, followed by the name of the path to set and its value. For example: .nf @@ -238,7 +238,7 @@ Path askpass /usr/X11R6/bin/ssh-askpass If no path name is specified, features relying on the specified setting will be disabled. Disabling -\fRPath\fR +\fIPath\fR settings is only supported in \fBsudo\fR version 1.8.16 and higher. @@ -277,7 +277,7 @@ If terminal devices may be located in a sub-directory of that path must be explicitly listed in \fIdevsearch\fR. The default value is -\fR/dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev\fR +\fI/dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev\fR .sp This option is ignored on systems that support either the \fBdevname\fR() @@ -290,15 +290,15 @@ macOS and Solaris. intercept .br The fully-qualified path to a shared library containing a wrappers for the -\fBexecl\fR(), -\fBexecle\fR(), -\fBexeclp\fR(), -\fBexecv\fR(), -\fBexecve\fR(), -\fBexecvp\fR(), -\fBexecvpe\fR(), +execve(2), +execl(3), +execle(3), +execlp(3), +execv(3), +execvp(3), +execvpe(3), and -\fBsystem\fR() +system(3) library functions that intercepts attempts to run further commands and performs a policy check before allowing them to be executed. This is used to implement the @@ -312,23 +312,23 @@ The default value is noexec The fully-qualified path to a shared library containing wrappers for the -\fBexecl\fR(), -\fBexecle\fR(), -\fBexeclp\fR(), -\fBexect\fR(), -\fBexecv\fR(), -\fBexecve\fR(), -\fBexecveat\fR(), -\fBexecvP\fR(), -\fBexecvp\fR(), -\fBexecvpe\fR(), -\fBfexecve\fR(), -\fBpopen\fR(), -\fBposix_spawn\fR(), -\fBposix_spawnp\fR(), -\fBsystem\fR(), +execve(2), +execl(3), +execle(3), +execlp(3), +exect(3), +execv(3), +execveat(3), +execvP(3), +execvp(3), +execvpe(3), +fexecve(3), +popen(3), +posix_spawn(3), +posix_spawnp(3), +system(3), and -\fBwordexp\fR() +wordexp(3) library functions that prevent the execution of further commands. This is used to implement the \fInoexec\fR @@ -569,9 +569,9 @@ that can log what is doing internally if there is a problem. .PP A -\fRDebug\fR +\fIDebug\fR line consists of the -\fRDebug\fR +\fIDebug\fR keyword, followed by the name of the program, plugin, or shared object to debug, the debug file name, and a comma-separated list of debug flags. The debug flag syntax used by @@ -613,25 +613,25 @@ intercept functionality on some systems. As of \fBsudo\fR 1.8.12, multiple -\fRDebug\fR +\fIDebug\fR entries may be specified per program. Older versions of \fBsudo\fR only support a single -\fRDebug\fR +\fIDebug\fR entry per program. Plugin-specific -\fRDebug\fR +\fIDebug\fR entries are also supported starting with \fBsudo\fR 1.8.12 and are matched by either the base name of the plugin that was loaded (for example -\fRsudoers.so\fR) +\fIsudoers.so\fR) or by the plugin's fully-qualified path name. Previously, the \fBsudoers\fR plugin shared the same -\fRDebug\fR +\fIDebug\fR entry as the \fBsudo\fR front-end and could not be configured separately. diff --git a/docs/sudo.conf.mdoc.in b/docs/sudo.conf.mdoc.in index add83a667f..20c898edbf 100644 --- a/docs/sudo.conf.mdoc.in +++ b/docs/sudo.conf.mdoc.in @@ -67,17 +67,17 @@ Leading white space is removed from the beginning of lines even when a continuation character is used. .Pp Non-comment lines that don't begin with -.Li Plugin , -.Li Path , -.Li Debug , +.Em Plugin , +.Em Path , +.Em Debug , or -.Li Set +.Em Set are silently ignored. .Pp The .Nm file is always parsed in the -.Dq Li C +.Ql C locale. .Ss Plugin configuration .Nm sudo @@ -91,9 +91,9 @@ Plugins are dynamically loaded based on the contents of .Nm . .Pp A -.Li Plugin +.Em Plugin line consists of the -.Li Plugin +.Em Plugin keyword, followed by the .Em symbol_name and the @@ -102,14 +102,14 @@ to the dynamic shared object that contains the plugin. The .Em symbol_name is the name of the -.Li approval_plugin , -.Li audit_plugin , -.Li io_plugin , +.Vt struct approval_plugin , +.Vt struct audit_plugin , +.Vt struct io_plugin , or -.Li policy_plugin -struct contained in the plugin. +.Vt struct policy_plugin +defined by the plugin. If a plugin implements multiple plugin types, there must be a -.Li Plugin +.Em Plugin line for each unique symbol name. The .Em path @@ -117,7 +117,7 @@ may be fully qualified or relative. If not fully qualified, it is relative to the directory specified by the .Em plugin_dir -.Li Path +.Em Path setting, which defaults to .Pa @plugindir@ . In other words: @@ -167,7 +167,7 @@ This limitation does not apply to I/O plugins. If no .Nm file is present, or if it contains no -.Li Plugin +.Em Plugin lines, the .Nm sudoers plugin will be used as the default security policy, for I/O logging @@ -203,9 +203,9 @@ plugin architecture, see the manual. .Ss Path settings A -.Li Path +.Em Path line consists of the -.Li Path +.Em Path keyword, followed by the name of the path to set and its value. For example: .Bd -literal -offset 4n @@ -217,7 +217,7 @@ Path askpass /usr/X11R6/bin/ssh-askpass If no path name is specified, features relying on the specified setting will be disabled. Disabling -.Li Path +.Em Path settings is only supported in .Nm sudo version 1.8.16 and higher. @@ -254,7 +254,7 @@ If terminal devices may be located in a sub-directory of that path must be explicitly listed in .Em devsearch . The default value is -.Li /dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev +.Pa /dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev .Pp This option is ignored on systems that support either the .Fn devname @@ -265,15 +265,15 @@ functions, for example macOS and Solaris. .It intercept The fully-qualified path to a shared library containing a wrappers for the -.Fn execl , -.Fn execle , -.Fn execlp , -.Fn execv , -.Fn execve , -.Fn execvp , -.Fn execvpe , +.Xr execve 2 , +.Xr execl 3 , +.Xr execle 3 , +.Xr execlp 3 , +.Xr execv 3 , +.Xr execvp 3 , +.Xr execvpe 3 , and -.Fn system +.Xr system 3 library functions that intercepts attempts to run further commands and performs a policy check before allowing them to be executed. This is used to implement the @@ -286,23 +286,23 @@ The default value is .It noexec The fully-qualified path to a shared library containing wrappers for the -.Fn execl , -.Fn execle , -.Fn execlp , -.Fn exect , -.Fn execv , -.Fn execve , -.Fn execveat , -.Fn execvP , -.Fn execvp , -.Fn execvpe , -.Fn fexecve , -.Fn popen , -.Fn posix_spawn , -.Fn posix_spawnp , -.Fn system , +.Xr execve 2 , +.Xr execl 3 , +.Xr execle 3 , +.Xr execlp 3 , +.Xr exect 3 , +.Xr execv 3 , +.Xr execveat 3 , +.Xr execvP 3 , +.Xr execvp 3 , +.Xr execvpe 3 , +.Xr fexecve 3 , +.Xr popen 3 , +.Xr posix_spawn 3 , +.Xr posix_spawnp 3 , +.Xr system 3 , and -.Fn wordexp +.Xr wordexp 3 library functions that prevent the execution of further commands. This is used to implement the .Em noexec @@ -519,9 +519,9 @@ that can log what is doing internally if there is a problem. .Pp A -.Li Debug +.Em Debug line consists of the -.Li Debug +.Em Debug keyword, followed by the name of the program, plugin, or shared object to debug, the debug file name, and a comma-separated list of debug flags. The debug flag syntax used by @@ -557,25 +557,25 @@ intercept functionality on some systems. As of .Nm sudo 1.8.12, multiple -.Li Debug +.Em Debug entries may be specified per program. Older versions of .Nm sudo only support a single -.Li Debug +.Em Debug entry per program. Plugin-specific -.Li Debug +.Em Debug entries are also supported starting with .Nm sudo 1.8.12 and are matched by either the base name of the plugin that was loaded (for example -.Li sudoers.so ) +.Pa sudoers.so ) or by the plugin's fully-qualified path name. Previously, the .Nm sudoers plugin shared the same -.Li Debug +.Em Debug entry as the .Nm sudo front-end and could not be configured separately. diff --git a/docs/sudo.man.in b/docs/sudo.man.in index 8d4f6e30b4..8b95deefed 100644 --- a/docs/sudo.man.in +++ b/docs/sudo.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDO" "@mansectsu@" "August 2, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "@mansectsu@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -135,9 +135,7 @@ time limit. This limit is policy-specific; the default password prompt timeout for the \fIsudoers\fR -security policy is -\fR@password_timeout@\fR -minutes. +security policy is @password_timeout@ minutes. .PP Security policies may support credential caching to allow the user to run @@ -145,9 +143,7 @@ to run again for a period of time without requiring authentication. By default, the \fIsudoers\fR -policy caches credentials on a per-terminal basis for -\fR@timeout@\fR -minutes. +policy caches credentials on a per-terminal basis for @timeout@ minutes. See the \fItimestamp_type\fR and @@ -399,7 +395,7 @@ may be either a group name or a numeric group-ID prefixed with the \(oq#\(cq character (e.g., -\fR#0\fR +\(oq#0\(cq for GID 0). When running a command as a GID, many shells require that the \(oq#\(cq @@ -574,7 +570,7 @@ policy: .RS 12n .PD 0 .TP 4n -\fR%H\fR +%H expanded to the host name including the domain name (only if the machine's host name is fully qualified or the \fIfqdn\fR @@ -582,10 +578,10 @@ option is set in sudoers(@mansectform@)) .PD .TP 4n -\fR%h\fR +%h expanded to the local host name without the domain name .TP 4n -\fR%p\fR +%p expanded to the name of the user whose password is being requested (respects the \fIrootpw\fR, @@ -595,16 +591,16 @@ and flags in sudoers(@mansectform@)) .TP 4n -\fR\&%U\fR +\&%U expanded to the login name of the user the command will be run as (defaults to root unless the \fB\-u\fR option is also specified) .TP 4n -\fR%u\fR +%u expanded to the invoking user's login name .TP 4n -\fR%%\fR +%% two consecutive \(oq%\(cq characters are collapsed into a single @@ -707,7 +703,7 @@ may be either a user name or a numeric user-ID prefixed with the \(oq#\(cq character (e.g., -\fR#0\fR +\(oq#0\(cq for UID 0). When running commands as a UID, many shells require that the \(oq#\(cq @@ -740,9 +736,7 @@ For the \fIsudoers\fR plugin, this extends the \fBsudo\fR -timeout for another -\fR@timeout@\fR -minutes by default, but does not run a command. +timeout for another @timeout@ minutes by default, but does not run a command. Not all security policies support cached credentials. .TP 12n \fB\--\fR @@ -778,7 +772,7 @@ option is set in the command to be run has the \fRSETENV\fR tag set or the command matched is -\fRALL\fR, +\fBALL\fR, the user may set variables that would otherwise be forbidden. See sudoers(@mansectform@) @@ -986,7 +980,7 @@ run in a new pty, may execute the command directly instead of running it as a child process. .SS "Plugins" Plugins may be specified via -\fRPlugin\fR +\fIPlugin\fR directives in the sudo.conf(@mansectform@) file. @@ -997,7 +991,7 @@ binary. If no sudo.conf(@mansectform@) file is present, or if it doesn't contain any -\fRPlugin\fR +\fIPlugin\fR lines, \fBsudo\fR will use @@ -1086,9 +1080,9 @@ By default, \fBsudo\fR will only log the command it explicitly runs. If a user runs a command such as -\fRsudo su\fR +\(oqsudo su\(cq or -\fRsudo sh\fR, +\(oqsudo sh\(cq, subsequent commands run from that shell are not subject to \fBsudo\fR's security policy. @@ -1176,7 +1170,7 @@ or when is enabled in \fIsudoers\fR and -\fIHOME\fR +\fRHOME\fR is not present in the \fIenv_keep\fR list. @@ -1226,8 +1220,7 @@ Default editor to use in Set to the group-ID of the user who invoked sudo. .TP 17n \fRSUDO_PROMPT\fR -Used as the default password prompt unless -the +Used as the default password prompt unless the \fB\-p\fR option was specified. .TP 17n @@ -1315,7 +1308,7 @@ $ sudo shutdown -r +15 "quick reboot" .PP To make a usage listing of the directories in the /home partition. The commands are run in a sub-shell to allow the -\fRcd\fR +\(oqcd\(cq command and file redirection to work. .nf .sp @@ -1500,7 +1493,7 @@ plugin's functionality. .PP It is not meaningful to run the -\fRcd\fR +\(oqcd\(cq command directly via sudo, e.g., .nf .sp diff --git a/docs/sudo.mdoc.in b/docs/sudo.mdoc.in index f5a687e741..82985f2dab 100644 --- a/docs/sudo.mdoc.in +++ b/docs/sudo.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 2, 2022 +.Dd September 13, 2022 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -139,9 +139,7 @@ time limit. This limit is policy-specific; the default password prompt timeout for the .Em sudoers -security policy is -.Li @password_timeout@ -minutes. +security policy is @password_timeout@ minutes. .Pp Security policies may support credential caching to allow the user to run @@ -149,9 +147,7 @@ to run again for a period of time without requiring authentication. By default, the .Em sudoers -policy caches credentials on a per-terminal basis for -.Li @timeout@ -minutes. +policy caches credentials on a per-terminal basis for @timeout@ minutes. See the .Em timestamp_type and @@ -380,7 +376,7 @@ may be either a group name or a numeric group-ID prefixed with the .Ql # character (e.g., -.Li #0 +.Ql #0 for GID 0). When running a command as a GID, many shells require that the .Ql # @@ -537,15 +533,15 @@ escape sequences are supported by the .Em sudoers policy: .Bl -tag -width 2n -.It Li %H +.It %H expanded to the host name including the domain name (only if the machine's host name is fully qualified or the .Em fqdn option is set in .Xr sudoers @mansectform@ ) -.It Li %h +.It %h expanded to the local host name without the domain name -.It Li %p +.It %p expanded to the name of the user whose password is being requested (respects the .Em rootpw , @@ -554,14 +550,14 @@ and .Em runaspw flags in .Xr sudoers @mansectform@ ) -.It Li \&%U +.It \&%U expanded to the login name of the user the command will be run as (defaults to root unless the .Fl u option is also specified) -.It Li %u +.It %u expanded to the invoking user's login name -.It Li %% +.It %% two consecutive .Ql % characters are collapsed into a single @@ -656,7 +652,7 @@ may be either a user name or a numeric user-ID prefixed with the .Ql # character (e.g., -.Li #0 +.Ql #0 for UID 0). When running commands as a UID, many shells require that the .Ql # @@ -687,9 +683,7 @@ For the .Em sudoers plugin, this extends the .Nm -timeout for another -.Li @timeout@ -minutes by default, but does not run a command. +timeout for another @timeout@ minutes by default, but does not run a command. Not all security policies support cached credentials. .It Fl - The @@ -723,9 +717,9 @@ If the option is set in .Em sudoers , the command to be run has the -.Li SETENV +.Dv SETENV tag set or the command matched is -.Li ALL , +.Sy ALL , the user may set variables that would otherwise be forbidden. See .Xr sudoers @mansectform@ @@ -922,7 +916,7 @@ run in a new pty, may execute the command directly instead of running it as a child process. .Ss Plugins Plugins may be specified via -.Li Plugin +.Em Plugin directives in the .Xr sudo.conf @mansectform@ file. @@ -933,7 +927,7 @@ binary. If no .Xr sudo.conf @mansectform@ file is present, or if it doesn't contain any -.Li Plugin +.Em Plugin lines, .Nm will use @@ -1022,9 +1016,9 @@ By default, .Nm will only log the command it explicitly runs. If a user runs a command such as -.Li sudo su +.Ql sudo su or -.Li sudo sh , +.Ql sudo sh , subsequent commands run from that shell are not subject to .Nm sudo Ns 's security policy. @@ -1107,7 +1101,7 @@ or when is enabled in .Em sudoers and -.Em HOME +.Ev HOME is not present in the .Em env_keep list. @@ -1149,8 +1143,7 @@ Default editor to use in .It Ev SUDO_GID Set to the group-ID of the user who invoked sudo. .It Ev SUDO_PROMPT -Used as the default password prompt unless -the +Used as the default password prompt unless the .Fl p option was specified. .It Ev SUDO_PS1 @@ -1217,7 +1210,7 @@ $ sudo shutdown -r +15 "quick reboot" .Pp To make a usage listing of the directories in the /home partition. The commands are run in a sub-shell to allow the -.Li cd +.Ql cd command and file redirection to work. .Bd -literal -offset 4n $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE" @@ -1385,7 +1378,7 @@ plugin's functionality. .Pp It is not meaningful to run the -.Li cd +.Ql cd command directly via sudo, e.g., .Bd -literal -offset 4n $ sudo cd /usr/local/protected diff --git a/docs/sudo_logsrv.proto.man.in b/docs/sudo_logsrv.proto.man.in index 5e0e1a91e6..fadb8b6ecc 100644 --- a/docs/sudo_logsrv.proto.man.in +++ b/docs/sudo_logsrv.proto.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDO_LOGSRV.PROTO" "@mansectform@" "February 16, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_LOGSRV.PROTO" "@mansectform@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -93,7 +93,7 @@ message TimeSpec { A \fITimeSpec\fR is the equivalent of a POSIX -\fRstruct timespec\fR, +\fIstruct timespec\fR, containing seconds and nanoseconds members. The \fItv_sec\fR diff --git a/docs/sudo_logsrv.proto.mdoc.in b/docs/sudo_logsrv.proto.mdoc.in index af9239c296..daa4a551b2 100644 --- a/docs/sudo_logsrv.proto.mdoc.in +++ b/docs/sudo_logsrv.proto.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd February 16, 2022 +.Dd September 13, 2022 .Dt SUDO_LOGSRV.PROTO @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -87,7 +87,7 @@ message TimeSpec { A .Em TimeSpec is the equivalent of a POSIX -.Li struct timespec , +.Vt struct timespec , containing seconds and nanoseconds members. The .Em tv_sec @@ -237,10 +237,10 @@ If the command was terminated by a signal, this is set to the name of the signal without the leading .Dq SIG . For example, -.Li INT , -.Li TERM , -.Li KILL , -.Li SEGV . +.Dv INT , +.Dv TERM , +.Dv KILL , +.Dv SEGV . .It error A message from the client indicating that the command was terminated unexpectedly due to an error. @@ -397,9 +397,9 @@ should be calculated using a monotonic clock where possible. The signal name without the leading .Dq SIG . For example, -.Li STOP , -.Li TSTP , -.Li CONT . +.Dv STOP , +.Dv TSTP , +.Dv CONT . .El .Sh Server Messages A diff --git a/docs/sudo_logsrvd.conf.man.in b/docs/sudo_logsrvd.conf.man.in index 84b5b03e86..ccdcca4813 100644 --- a/docs/sudo_logsrvd.conf.man.in +++ b/docs/sudo_logsrvd.conf.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDO_LOGSRVD.CONF" "@mansectform@" "February 16, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_LOGSRVD.CONF" "@mansectform@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -168,14 +168,16 @@ will enable the TCP keepalive socket option on the client connection. This enables the periodic transmission of keepalive messages to the client. If the client does not respond to a message in time, the connection will be closed. -Defaults to true. +Defaults to +\fItrue\fR. .TP 10n timeout = number The amount of time, in seconds, \fBsudo_logsrvd\fR will wait for the client to respond. A value of 0 will disable the timeout. -The default value is 30. +The default value is +\fI30\fR. .TP 10n tls_cacert = path The path to a certificate authority bundle file, in PEM format, @@ -202,7 +204,7 @@ authority, the setting must be set to a CA bundle that contains the CA certificate used to generate the client certificate. The default value is -\fRfalse\fR. +\fIfalse\fR. .TP 10n tls_ciphers_v12 = string A list of ciphers to use for connections secured by TLS version 1.2 only, @@ -214,7 +216,7 @@ section in openssl-ciphers(1) for full details. The default value is -\fRHIGH:!aNULL\fR +\(lqHIGH:!aNULL\(rq which consists of encryption cipher suites with key lengths larger than 128 bits, and some cipher suites with 128-bit keys. Cipher suites that offer no authentication are excluded. @@ -241,7 +243,8 @@ TLS_AES_128_CCM_8_SHA256 .RE .RS 10n .sp -The default cipher suite is TLS_AES_256_GCM_SHA384. +The default cipher suite is +\(lqTLS_AES_256_GCM_SHA384\(rq. .RE .PD .TP 10n @@ -274,7 +277,8 @@ configuration is changed. If false, no verification is performed of the server certificate. When using self-signed certificates without a certificate authority, this setting should be set to false. -The default value is true. +The default value is +\fItrue\fR. .SS "relay" The \fIrelay\fR @@ -301,7 +305,8 @@ setting controls the amount of time \fBsudo_logsrvd\fR will wait for the relay to respond. A value of 0 will disable the timeout. -The default value is 30. +The default value is +\fI30\fR. .TP 10n relay_dir = path The directory in which log messages are temporarily stored before they @@ -339,7 +344,8 @@ lines are specified, the first available relay host will be used. retry_interval = number The number of seconds to wait after a connection error before making a new attempt to forward a message to a relay host. -The default value is 30 seconds. +The default value is +\fI30\fR. .TP 10n store_first = boolean If true, @@ -365,7 +371,8 @@ The amount of time, in seconds, \fBsudo_logsrvd\fR will wait for the relay server to respond after a connection has succeeded. A value of 0 will disable the timeout. -The default value is 30. +The default value is +\fI30\fR. .TP 10n tls_cacert = path The path to a certificate authority bundle file, in PEM format, @@ -455,7 +462,7 @@ If set, I/O logs will be compressed using Enabling compression can make it harder to view the logs in real-time as the program is executing due to buffering. The default value is -\fRfalse\fR. +\fIfalse\fR. .TP 10n iolog_dir = path The top-level directory to use when constructing the path @@ -471,30 +478,30 @@ escape sequences are supported: .RS 10n .PD 0 .TP 6n -\fR%{seq}\fR +%{seq} expanded to a monotonically increasing base-36 sequence number, such as 0100A5, where every two digits are used to form a new directory, e.g., \fI01/00/A5\fR .PD .TP 6n -\fR%{user}\fR +%{user} expanded to the invoking user's login name .TP 6n -\fR%{group}\fR +%{group} expanded to the name of the invoking user's real group-ID .TP 6n -\fR%{runas_user}\fR +%{runas_user} expanded to the login name of the user the command will be run as (e.g., root) .TP 6n -\fR%{runas_group}\fR +%{runas_group} expanded to the group name of the user the command will be run as (e.g., wheel) .TP 6n -\fR%{hostname}\fR +%{hostname} expanded to the local host name without the domain name .TP 6n -\fR%{command}\fR +%{command} expanded to the base name of the command being run .PP In addition, any escape sequences supported by the system's @@ -516,7 +523,7 @@ It is possible for \fIiolog_file\fR to contain directory components. The default value is -\fR%{seq}\fR. +\(lq%{seq}\(rq. .sp See the \fIiolog_dir\fR @@ -526,9 +533,9 @@ escape sequences. .sp In addition to the escape sequences, path names that end in six or more -\fRX\fRs +\fIX\fRs will have the -\fRX\fRs +\fIX\fRs replaced with a unique combination of digits and letters, similar to the mktemp(3) function. @@ -542,7 +549,7 @@ overwritten unless \fIiolog_file\fR ends in six or more -\fRX\fRs. +\fIX\fRs. .TP 10n iolog_flush = boolean If set, I/O log data is flushed to disk after each write instead of @@ -553,7 +560,7 @@ of I/O log compression. I/O logs are always flushed before sending a commit point to the client regardless of this setting. The default value is -\fRtrue\fR. +\fItrue\fR. .TP 10n iolog_group = name The group name to look up when setting the group-ID on new I/O log @@ -579,7 +586,7 @@ When creating I/O log directories, search (execute) bits are added to match the read and write bits specified by \fIiolog_mode\fR. The default value is -\fR0600\fR. +\fI0600\fR. .TP 10n iolog_user = name The user name to look up when setting the owner of new @@ -599,7 +606,7 @@ the password will still be present in the I/O log. If \fIlog_passwords\fR is set to -\fRfalse\fR, +\fIfalse\fR, \fBsudo_logsrvd\fR will attempt to prevent passwords from being logged. It does this by using the regular expressions in @@ -617,16 +624,16 @@ when the option is set), only the first character of the password will be replaced in the I/O log. The default value is -\fRtrue\fR. +\fItrue\fR. .TP 10n maxseq = number The maximum sequence number that will be substituted for the -\(lq\fR%{seq}\fR\(rq +\(lq%{seq}\(rq escape in the I/O log file (see the \fIiolog_dir\fR description above for more information). While the value substituted for -\(lq\fR%{seq}\fR\(rq +\(lq%{seq}\(rq is in base 36, \fImaxseq\fR itself should be expressed in decimal. @@ -634,7 +641,8 @@ Values larger than 2176782336 (which corresponds to the base 36 sequence number \(lqZZZZZZ\(rq) will be silently truncated to 2176782336. -The default value is 2176782336. +The default value is +\fI2176782336\fR. .TP 10n passprompt_regex = string One or more POSIX extended regular expressions used to @@ -669,7 +677,8 @@ log_exit = boolean If true, \fBsudo_logsrvd\fR will log an event when a command exits or is terminated by a signal. -Defaults to false. +Defaults to +\fIfalse\fR. .TP 6n log_format = string The event log format. @@ -691,7 +700,7 @@ syslog(3). facility = string Syslog facility if syslog is being used for logging. Defaults to -\fR@logfac@\fR. +\fI@logfac@\fR. .sp The following syslog facilities are supported: \fBauthpriv\fR @@ -714,7 +723,7 @@ accept_priority = string Syslog priority to use when the user is allowed to run a command and authentication is successful. Defaults to -\fR@goodpri@\fR. +\fI@goodpri@\fR. .sp The following syslog priorities are supported: \fBalert\fR, @@ -735,7 +744,7 @@ reject_priority = string Syslog priority to use when the user is not allowed to run a command or when authentication is unsuccessful. Defaults to -\fR@badpri@\fR. +\fI@badpri@\fR. .sp See \fIaccept_priority\fR @@ -744,7 +753,7 @@ for the list of supported syslog priorities. alert_priority = string Syslog priority to use for event log alert messages received from the client. Defaults to -\fR@badpri@\fR. +\fI@badpri@\fR. .sp See \fIaccept_priority\fR @@ -779,7 +788,7 @@ server_facility = string Syslog facility if syslog is being used for server warning messages. See above for a list of supported facilities. Defaults to -\fRdaemon\fR +\fIdaemon\fR .SS "logfile" The \fIlogfile\fR @@ -800,10 +809,12 @@ Formatting is performed via the system's strftime(3) function so any escape sequences supported by that function will be expanded. The default value is -\(lq\fR%h %e %T\fR\(rq +\(lq%h %e %T\(rq which produces dates like \(lqOct 3 07:15:24\(rq -in the C locale. +in the +\(oqC\(cq +locale. .SH "FILES" .TP 26n \fI@sysconfdir@/sudo_logsrvd.conf\fR diff --git a/docs/sudo_logsrvd.conf.mdoc.in b/docs/sudo_logsrvd.conf.mdoc.in index ba017e1a56..d3a388d990 100644 --- a/docs/sudo_logsrvd.conf.mdoc.in +++ b/docs/sudo_logsrvd.conf.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd February 16, 2022 +.Dd September 13, 2022 .Dt SUDO_LOGSRVD.CONF @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -152,13 +152,15 @@ will enable the TCP keepalive socket option on the client connection. This enables the periodic transmission of keepalive messages to the client. If the client does not respond to a message in time, the connection will be closed. -Defaults to true. +Defaults to +.Em true . .It timeout = number The amount of time, in seconds, .Nm sudo_logsrvd will wait for the client to respond. A value of 0 will disable the timeout. -The default value is 30. +The default value is +.Em 30 . .It tls_cacert = path The path to a certificate authority bundle file, in PEM format, to use instead of the system's default certificate authority database @@ -182,7 +184,7 @@ authority, the setting must be set to a CA bundle that contains the CA certificate used to generate the client certificate. The default value is -.Li false . +.Em false . .It tls_ciphers_v12 = string A list of ciphers to use for connections secured by TLS version 1.2 only, separated by a colon @@ -193,7 +195,7 @@ section in .Xr openssl-ciphers 1 for full details. The default value is -.Li HIGH:!aNULL +.Dq HIGH:!aNULL which consists of encryption cipher suites with key lengths larger than 128 bits, and some cipher suites with 128-bit keys. Cipher suites that offer no authentication are excluded. @@ -212,7 +214,8 @@ but should include the following: .It TLS_AES_128_CCM_8_SHA256 .El .Pp -The default cipher suite is TLS_AES_256_GCM_SHA384. +The default cipher suite is +.Dq TLS_AES_256_GCM_SHA384 . .It tls_dhparams = path The path to a file containing custom Diffie-Hellman parameters in PEM format. This file can be created with the following command: @@ -235,7 +238,8 @@ configuration is changed. If false, no verification is performed of the server certificate. When using self-signed certificates without a certificate authority, this setting should be set to false. -The default value is true. +The default value is +.Em true . .El .Ss relay The @@ -263,7 +267,8 @@ setting controls the amount of time .Nm sudo_logsrvd will wait for the relay to respond. A value of 0 will disable the timeout. -The default value is 30. +The default value is +.Em 30 . .It relay_dir = path The directory in which log messages are temporarily stored before they are sent to the relay host. @@ -298,7 +303,8 @@ lines are specified, the first available relay host will be used. .It retry_interval = number The number of seconds to wait after a connection error before making a new attempt to forward a message to a relay host. -The default value is 30 seconds. +The default value is +.Em 30 . .It store_first = boolean If true, .Nm sudo_logsrvd @@ -321,7 +327,8 @@ The amount of time, in seconds, .Nm sudo_logsrvd will wait for the relay server to respond after a connection has succeeded. A value of 0 will disable the timeout. -The default value is 30. +The default value is +.Em 30 . .It tls_cacert = path The path to a certificate authority bundle file, in PEM format, to use instead of the system's default certificate authority database @@ -404,7 +411,7 @@ If set, I/O logs will be compressed using Enabling compression can make it harder to view the logs in real-time as the program is executing due to buffering. The default value is -.Li false . +.Em false . .It iolog_dir = path The top-level directory to use when constructing the path name for the I/O log directory. @@ -416,23 +423,23 @@ The following percent .Pq Ql % escape sequences are supported: .Bl -tag -width 4n -.It Li %{seq} +.It %{seq} expanded to a monotonically increasing base-36 sequence number, such as 0100A5, where every two digits are used to form a new directory, e.g., .Pa 01/00/A5 -.It Li %{user} +.It %{user} expanded to the invoking user's login name -.It Li %{group} +.It %{group} expanded to the name of the invoking user's real group-ID -.It Li %{runas_user} +.It %{runas_user} expanded to the login name of the user the command will be run as (e.g., root) -.It Li %{runas_group} +.It %{runas_group} expanded to the group name of the user the command will be run as (e.g., wheel) -.It Li %{hostname} +.It %{hostname} expanded to the local host name without the domain name -.It Li %{command} +.It %{command} expanded to the base name of the command being run .El .Pp @@ -453,7 +460,7 @@ It is possible for .Em iolog_file to contain directory components. The default value is -.Li %{seq} . +.Dq %{seq} . .Pp See the .Em iolog_dir @@ -463,9 +470,9 @@ escape sequences. .Pp In addition to the escape sequences, path names that end in six or more -.Li X Ns s +.Em X Ns s will have the -.Li X Ns s +.Em X Ns s replaced with a unique combination of digits and letters, similar to the .Xr mktemp 3 function. @@ -479,7 +486,7 @@ overwritten unless .Em iolog_file ends in six or more -.Li X Ns s . +.Em X Ns s . .It iolog_flush = boolean If set, I/O log data is flushed to disk after each write instead of buffering it. @@ -489,7 +496,7 @@ of I/O log compression. I/O logs are always flushed before sending a commit point to the client regardless of this setting. The default value is -.Li true . +.Em true . .It iolog_group = name The group name to look up when setting the group-ID on new I/O log files and directories. @@ -513,7 +520,7 @@ When creating I/O log directories, search (execute) bits are added to match the read and write bits specified by .Em iolog_mode . The default value is -.Li 0600 . +.Em 0600 . .It iolog_user = name The user name to look up when setting the owner of new I/O log files and directories. @@ -531,7 +538,7 @@ the password will still be present in the I/O log. If .Em log_passwords is set to -.Li false , +.Em false , .Nm sudo_logsrvd will attempt to prevent passwords from being logged. It does this by using the regular expressions in @@ -549,15 +556,15 @@ when the option is set), only the first character of the password will be replaced in the I/O log. The default value is -.Li true . +.Em true . .It maxseq = number The maximum sequence number that will be substituted for the -.Dq Li %{seq} +.Dq %{seq} escape in the I/O log file (see the .Em iolog_dir description above for more information). While the value substituted for -.Dq Li %{seq} +.Dq %{seq} is in base 36, .Em maxseq itself should be expressed in decimal. @@ -565,7 +572,8 @@ Values larger than 2176782336 (which corresponds to the base 36 sequence number .Dq ZZZZZZ ) will be silently truncated to 2176782336. -The default value is 2176782336. +The default value is +.Em 2176782336 . .It passprompt_regex = string One or more POSIX extended regular expressions used to match password prompts in the terminal output when @@ -599,7 +607,8 @@ The default value is If true, .Nm sudo_logsrvd will log an event when a command exits or is terminated by a signal. -Defaults to false. +Defaults to +.Em false . .It log_format = string The event log format. Supported log formats are @@ -621,7 +630,7 @@ section configures how events are logged via .It facility = string Syslog facility if syslog is being used for logging. Defaults to -.Li @logfac@ . +.Em @logfac@ . .Pp The following syslog facilities are supported: .Sy authpriv @@ -643,7 +652,7 @@ and Syslog priority to use when the user is allowed to run a command and authentication is successful. Defaults to -.Li @goodpri@ . +.Em @goodpri@ . .Pp The following syslog priorities are supported: .Sy alert , @@ -663,7 +672,7 @@ will disable logging of successful commands. Syslog priority to use when the user is not allowed to run a command or when authentication is unsuccessful. Defaults to -.Li @badpri@ . +.Em @badpri@ . .Pp See .Em accept_priority @@ -671,7 +680,7 @@ for the list of supported syslog priorities. .It alert_priority = string Syslog priority to use for event log alert messages received from the client. Defaults to -.Li @badpri@ . +.Em @badpri@ . .Pp See .Em accept_priority @@ -704,7 +713,7 @@ JSON-format log entries are never split and are not affected by Syslog facility if syslog is being used for server warning messages. See above for a list of supported facilities. Defaults to -.Li daemon +.Em daemon .El .Ss logfile The @@ -725,10 +734,12 @@ Formatting is performed via the system's .Xr strftime 3 function so any escape sequences supported by that function will be expanded. The default value is -.Dq Li "%h %e %T" +.Dq "%h %e %T" which produces dates like .Dq Oct 3 07:15:24 -in the C locale. +in the +.Ql C +locale. .El .Sh FILES .Bl -tag -width 24n diff --git a/docs/sudo_logsrvd.man.in b/docs/sudo_logsrvd.man.in index c0bccf412e..bffa4ecb6a 100644 --- a/docs/sudo_logsrvd.man.in +++ b/docs/sudo_logsrvd.man.in @@ -117,7 +117,7 @@ section. .SS "Debugging sudo_logsrvd" \fBsudo_logsrvd\fR supports a flexible debugging framework that is configured via -\fRDebug\fR +\fIDebug\fR lines in the sudo.conf(@mansectform@) file. diff --git a/docs/sudo_logsrvd.mdoc.in b/docs/sudo_logsrvd.mdoc.in index 8c6a1e59aa..d2d809d7b3 100644 --- a/docs/sudo_logsrvd.mdoc.in +++ b/docs/sudo_logsrvd.mdoc.in @@ -112,7 +112,7 @@ section. .Ss Debugging sudo_logsrvd .Nm supports a flexible debugging framework that is configured via -.Li Debug +.Em Debug lines in the .Xr sudo.conf @mansectform@ file. diff --git a/docs/sudo_plugin.man.in b/docs/sudo_plugin.man.in index 108ac2587b..615cf447a8 100644 --- a/docs/sudo_plugin.man.in +++ b/docs/sudo_plugin.man.in @@ -236,7 +236,7 @@ Only available starting with API version 1.16. debug_flags=string A debug file path name followed by a space and a comma-separated list of debug flags that correspond to the plugin's -\fRDebug\fR +\fIDebug\fR entry in sudo.conf(@mansectform@), if there is one. @@ -265,7 +265,7 @@ will only pass if sudo.conf(@mansectform@) contains a plugin-specific -\fRDebug\fR +\fIDebug\fR entry. .TP 6n ignore_ticket=bool @@ -677,7 +677,7 @@ tty=string The path to the user's terminal device. If the user has no terminal device associated with the session, the value will be empty, as in -\(lq\fRtty=\fR\(rq. +\(oqtty=\(cq. .TP 6n uid=uid_t The real user-ID of the user invoking @@ -921,10 +921,10 @@ into \fIargv_out\fR, separated from the editor and its arguments by a -\(lq\fR--\fR\(rq +\(oq--\(cq element. The -\(lq\fR--\fR\(rq +\(oq--\(cq will be removed by \fBsudo\fR before the editor is executed. diff --git a/docs/sudo_plugin.mdoc.in b/docs/sudo_plugin.mdoc.in index 9d54941a39..7b6c3adda2 100644 --- a/docs/sudo_plugin.mdoc.in +++ b/docs/sudo_plugin.mdoc.in @@ -216,7 +216,7 @@ Only available starting with API version 1.16. .It debug_flags=string A debug file path name followed by a space and a comma-separated list of debug flags that correspond to the plugin's -.Li Debug +.Em Debug entry in .Xr sudo.conf @mansectform@ , if there is one. @@ -245,7 +245,7 @@ will only pass if .Xr sudo.conf @mansectform@ contains a plugin-specific -.Li Debug +.Em Debug entry. .It ignore_ticket=bool Set to true if the user specified the @@ -603,7 +603,7 @@ Only available starting with API version 1.2. The path to the user's terminal device. If the user has no terminal device associated with the session, the value will be empty, as in -.Dq Li tty= . +.Ql tty= . .It uid=uid_t The real user-ID of the user invoking .Nm sudo . @@ -819,10 +819,10 @@ into .Fa argv_out , separated from the editor and its arguments by a -.Dq Li -- +.Ql -- element. The -.Dq Li -- +.Ql -- will be removed by .Nm sudo before the editor is executed. diff --git a/docs/sudo_sendlog.man.in b/docs/sudo_sendlog.man.in index 72e1187257..eea3cca149 100644 --- a/docs/sudo_sendlog.man.in +++ b/docs/sudo_sendlog.man.in @@ -154,7 +154,7 @@ version and exit. .SS "Debugging sendlog" \fBsudo_sendlog\fR supports a flexible debugging framework that is configured via -\fRDebug\fR +\fIDebug\fR lines in the sudo.conf(@mansectform@) file. diff --git a/docs/sudo_sendlog.mdoc.in b/docs/sudo_sendlog.mdoc.in index 42edb553e9..e8c17ae4e8 100644 --- a/docs/sudo_sendlog.mdoc.in +++ b/docs/sudo_sendlog.mdoc.in @@ -139,7 +139,7 @@ version and exit. .Ss Debugging sendlog .Nm supports a flexible debugging framework that is configured via -.Li Debug +.Em Debug lines in the .Xr sudo.conf @mansectform@ file. diff --git a/docs/sudoers.ldap.man.in b/docs/sudoers.ldap.man.in index 3e3bcba880..3fd34f3b04 100644 --- a/docs/sudoers.ldap.man.in +++ b/docs/sudoers.ldap.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDOERS.LDAP" "@mansectform@" "July 25, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS.LDAP" "@mansectform@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -69,16 +69,16 @@ is no need for a specialized tool to check syntax. The \fIsudoers\fR configuration is contained in the -\fRou=SUDOers\fR +\(oqou=SUDOers\(cq LDAP container. .PP Sudo first looks for the -\fRcn=defaults\fR +\(oqcn=defaults\(cq entry in the SUDOers container. If found, the multi-valued -\fRsudoOption\fR +\fIsudoOption\fR attribute is parsed in the same manner as a global -\fRDefaults\fR +\fIDefaults\fR line in \fI@sysconfdir@/sudoers\fR. In the following example, the @@ -97,7 +97,7 @@ sudoOption: env_keep+=SSH_AUTH_SOCK .fi .PP The equivalent of a sudoer in LDAP is a -\fRsudoRole\fR. +\fIsudoRole\fR. It consists of the following attributes: .TP 6n \fBsudoUser\fR @@ -120,36 +120,36 @@ Non-Unix group support is only available when an appropriate \fIgroup_plugin\fR is defined in the global \fIdefaults\fR -\fRsudoRole\fR +\fIsudoRole\fR object. If a -\fRsudoUser\fR +\fIsudoUser\fR entry is preceded by an exclamation point, \(oq\&!\(cq, and the entry matches, the -\fRsudoRole\fR +\fIsudoRole\fR in which it resides will be ignored. Negated -\fRsudoUser\fR +\fIsudoUser\fR entries are only supported by version 1.9.9 or higher. .TP 6n \fBsudoHost\fR A host name, IP address, IP network, or host netgroup (prefixed with a \(oq+\(cq). The special value -\fRALL\fR +\fBALL\fR will match any host. Host netgroups are matched using the host (both qualified and unqualified) and domain members only; the user member is not used when matching. If a -\fRsudoHost\fR +\fIsudoHost\fR entry is preceded by an exclamation point, \(oq\&!\(cq, and the entry matches, the -\fRsudoRole\fR +\fIsudoRole\fR in which it resides will be ignored. Negated -\fRsudoHost\fR +\fIsudoHost\fR entries are only supported by version 1.8.18 or higher. .TP 6n \fBsudoCommand\fR @@ -160,7 +160,7 @@ If a command name is preceded by an exclamation point, the user will be prohibited from running that command. .sp The built-in command -\(lq\fRsudoedit\fR\(rq +\(lqsudoedit\(rq is used to permit a user to run \fBsudo\fR with the @@ -169,13 +169,13 @@ option (or as \fBsudoedit\fR). It may take command line arguments just as a normal command does. Unlike other commands, -\(lq\fRsudoedit\fR\(rq +\(lqsudoedit\(rq is a built into \fBsudo\fR itself and must be specified in without a leading path. .sp The special value -\fRALL\fR +\fBALL\fR will match any command. .sp If a command name is prefixed with a SHA-2 digest, it will @@ -205,7 +205,7 @@ Command digests are only supported by version 1.8.7 or higher. \fBsudoOption\fR Identical in function to the global options described above, but specific to the -\fRsudoRole\fR +\fIsudoRole\fR in which it resides. .TP 6n \fBsudoRunAsUser\fR @@ -217,30 +217,29 @@ or user netgroup (prefixed with a \(oq+\(cq) that contains a list of users that commands may be run as. The special value -\fRALL\fR +\fBALL\fR will match any user. If a -\fRsudoRunAsUser\fR +\fIsudoRunAsUser\fR entry is preceded by an exclamation point, \(oq\&!\(cq, and the entry matches, the -\fRsudoRole\fR +\fIsudoRole\fR in which it resides will be ignored. If -\fRsudoRunAsUser\fR +\fIsudoRunAsUser\fR is specified but empty, it will match the invoking user. If neither -\fRsudoRunAsUser\fR +\fIsudoRunAsUser\fR nor -\fRsudoRunAsGroup\fR +\fIsudoRunAsGroup\fR are present, the value of the \fIrunas_default\fR -\fRsudoOption\fR -is used (defaults to -\fR@runas_default@\fR). +\fIsudoOption\fR +is used (defaults to @runas_default@). .sp The -\fRsudoRunAsUser\fR +\fIsudoRunAsUser\fR attribute is only available in \fBsudo\fR versions @@ -248,10 +247,10 @@ versions Older versions of \fBsudo\fR use the -\fRsudoRunAs\fR +\fIsudoRunAs\fR attribute instead. Negated -\fRsudoRunAsUser\fR +\fIsudoRunAsUser\fR entries are only supported by version 1.8.26 or higher. .TP 6n \fBsudoRunAsGroup\fR @@ -259,34 +258,34 @@ A Unix group or group-ID (prefixed with \(oq#\(cq) that commands may be run as. The special value -\fRALL\fR +\fBALL\fR will match any group. If a -\fRsudoRunAsGroup\fR +\fIsudoRunAsGroup\fR entry is preceded by an exclamation point, \(oq\&!\(cq, and the entry matches, the -\fRsudoRole\fR +\fIsudoRole\fR in which it resides will be ignored. .sp The -\fRsudoRunAsGroup\fR +\fIsudoRunAsGroup\fR attribute is only available in \fBsudo\fR versions 1.7.0 and higher. Negated -\fRsudoRunAsGroup\fR +\fIsudoRunAsGroup\fR entries are only supported by version 1.8.26 or higher. .TP 6n \fBsudoNotBefore\fR A timestamp in the form -\fRyyyymmddHHMMSSZ\fR +\(oqyyyymmddHHMMSSZ\(cq that can be used to provide a start date/time for when the -\fRsudoRole\fR +\fIsudoRole\fR will be valid. If multiple -\fRsudoNotBefore\fR +\fIsudoNotBefore\fR entries are present, the earliest is used. Timestamps must be in Coordinated Universal Time (UTC), not the local timezone. @@ -294,7 +293,7 @@ The minute and seconds portions are optional, but some LDAP servers require that they be present (contrary to the RFC). .sp The -\fRsudoNotBefore\fR +\fIsudoNotBefore\fR attribute is only available in \fBsudo\fR versions 1.7.5 and higher and must be explicitly enabled via the @@ -304,12 +303,12 @@ option in .TP 6n \fBsudoNotAfter\fR A timestamp in the form -\fRyyyymmddHHMMSSZ\fR +\(oqyyyymmddHHMMSSZ\(cq that indicates an expiration date/time, after which the -\fRsudoRole\fR +\fIsudoRole\fR will no longer be valid. If multiple -\fRsudoNotAfter\fR +\fIsudoNotAfter\fR entries are present, the last one is used. Timestamps must be in Coordinated Universal Time (UTC), not the local timezone. @@ -317,7 +316,7 @@ The minute and seconds portions are optional, but some LDAP servers require that they be present (contrary to the RFC). .sp The -\fRsudoNotAfter\fR +\fIsudoNotAfter\fR attribute is only available in \fBsudo\fR versions @@ -328,26 +327,26 @@ option in .TP 6n \fBsudoOrder\fR The -\fRsudoRole\fR +\fIsudoRole\fR entries retrieved from the LDAP directory have no inherent order. The -\fRsudoOrder\fR +\fIsudoOrder\fR attribute is an integer (or floating point value for LDAP servers that support it) that is used to sort the matching entries. This allows LDAP-based sudoers entries to more closely mimic the behavior of the sudoers file, where the order of the entries influences the result. If multiple entries match, the entry with the highest -\fRsudoOrder\fR +\fIsudoOrder\fR attribute is chosen. This corresponds to the \(lqlast match\(rq behavior of the sudoers file. If the -\fRsudoOrder\fR +\fIsudoOrder\fR attribute is not present, a value of 0 is assumed. .sp The -\fRsudoOrder\fR +\fIsudoOrder\fR attribute is only available in \fBsudo\fR versions 1.7.5 and higher. @@ -355,12 +354,12 @@ versions 1.7.5 and higher. Each attribute listed above should contain a single value, but there may be multiple instances of each attribute type. A -\fRsudoRole\fR +\fIsudoRole\fR must contain at least one -\fRsudoUser\fR, -\fRsudoHost\fR, +\fIsudoUser\fR, +\fIsudoHost\fR, and -\fRsudoCommand\fR. +\fIsudoCommand\fR. .PP The following example allows users in group wheel to run any command on any host via @@ -384,7 +383,7 @@ The first query is to parse the global options. The second is to match against the user's name and the groups that the user belongs to. (The special -\fRALL\fR +\fBALL\fR tag is matched in this query too.) If no match is returned for the user's name and groups, a third query returns all entries containing user netgroups and other @@ -411,12 +410,12 @@ are as follows: .TP 5n 1.\& Match all -\fRnisNetgroup\fR +\fInisNetgroup\fR records with a -\fRnisNetgroupTriple\fR +\fInisNetgroupTriple\fR containing the user, host, and NIS domain. The query will match -\fRnisNetgroupTriple\fR +\fInisNetgroupTriple\fR entries with either the short or long form of the host name or no host name specified in the tuple. If the NIS domain is set, the query will match only match entries @@ -425,13 +424,13 @@ If the NIS domain is \fInot\fR set, a wildcard is used to match any domain name but be aware that the NIS schema used by some LDAP servers may not support wild cards for -\fRnisNetgroupTriple\fR. +\fInisNetgroupTriple\fR. .TP 5n 2.\& Repeated queries are performed to find any nested -\fRnisNetgroup\fR +\fInisNetgroup\fR records with a -\fRmemberNisNetgroup\fR +\fImemberNisNetgroup\fR entry that refers to an already-matched record. .PP For sites with a large number of netgroups, using @@ -465,7 +464,7 @@ returned in any specific order. .PP The order in which different entries are applied can be controlled using the -\fRsudoOrder\fR +\fIsudoOrder\fR attribute, but there is no way to guarantee the order of attributes within a specific entry. If there are conflicting command rules in an entry, the negative @@ -519,18 +518,18 @@ These cannot be converted automatically. For example, a Cmnd_Alias in a \fIsudoers\fR file may be converted to a -\fRsudoRole\fR +\fIsudoRole\fR that contains multiple commands. Multiple users and/or groups may be assigned to the -\fRsudoRole\fR. +\fIsudoRole\fR. .PP Also, host, user, runas, and command-based -\fRDefaults\fR +\fIDefaults\fR entries are not supported. However, a -\fRsudoRole\fR +\fIsudoRole\fR may contain one or more -\fRsudoOption\fR +\fIsudoOption\fR attributes which can often serve the same purpose. .PP Consider the following @@ -590,7 +589,7 @@ Using a Unix group or netgroup in PAGERS rather than listing each user would make this easier to maintain. .PP Per-user -\fRDefaults\fR +\fIDefaults\fR entries can be emulated by using one or more sudoOption attributes in a sudoRole. Consider the following @@ -637,7 +636,7 @@ LDAP support, the schema must be installed on your LDAP server. In addition, be sure to index the -\fRsudoUser\fR +\fIsudoUser\fR attribute. .PP The @@ -797,31 +796,30 @@ The default value is protocol version 3. \fBNETGROUP_BASE\fR \fIbase\fR The base DN to use when performing LDAP netgroup queries. Typically this is of the form -\fRou=netgroup,dc=my-domain,dc=com\fR -for the domain -\fRmy-domain.com\fR. +\(oqou=netgroup,dc=my-domain,dc=com\(cq +for the domain my-domain.com. Multiple \fBNETGROUP_BASE\fR lines may be specified, in which case they are queried in the order specified. .sp This option can be used to query a user's netgroups directly via LDAP which is usually faster than fetching every -\fRsudoRole\fR +\fIsudoRole\fR object containing a -\fRsudoUser\fR +\fIsudoUser\fR that begins with a \(oq+\(cq prefix. The NIS schema used by some LDAP servers need a modification to support querying the -\fRnisNetgroup\fR +\fInisNetgroup\fR object by its -\fRnisNetgroupTriple\fR +\fInisNetgroupTriple\fR member. OpenLDAP's \fBslapd\fR requires the following change to the -\fRnisNetgroupTriple\fR +\fInisNetgroupTriple\fR attribute: .nf .sp @@ -837,13 +835,12 @@ attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' \fBNETGROUP_SEARCH_FILTER\fR \fIldap_filter\fR An LDAP filter which is used to restrict the set of records returned when performing an LDAP netgroup query. -Typically, this is of the -form -\fRattribute=value\fR +Typically, this is of the form +\(oqattribute=value\(cq or -\fR(&(attribute=value)(attribute2=value2))\fR. +\(oq(&(attribute=value)(attribute2=value2))\(cq. The default search filter is: -\fRobjectClass=nisNetgroup\fR. +\(oqobjectClass=nisNetgroup\(cq. If \fIldap_filter\fR is omitted, no search filter will be used. @@ -928,10 +925,10 @@ This option is only relevant when using SASL authentication. If the \fBSSL\fR parameter is set to -\fRon\fR, -\fRtrue\fR, +\fIon\fR, +\fItrue\fR, or -\fRyes\fR +\fIyes\fR TLS (SSL) encryption is always used when communicating with the LDAP server. Typically, this involves connecting to the server on port 636 (ldaps). .TP 6n @@ -939,7 +936,7 @@ Typically, this involves connecting to the server on port 636 (ldaps). If the \fBSSL\fR parameter is set to -\fRstart_tls\fR, +\fIstart_tls\fR, the LDAP server connection is initiated normally and TLS encryption is begun before the bind credentials are sent. This has the advantage of not requiring a dedicated port for encrypted @@ -953,9 +950,8 @@ The base DN to use when performing \fBsudo\fR LDAP queries. Typically this is of the form -\fRou=SUDOers,dc=my-domain,dc=com\fR -for the domain -\fRmy-domain.com\fR. +\(oqou=SUDOers,dc=my-domain,dc=com\(cq +for the domain my-domain.com. Multiple \fBSUDOERS_BASE\fR lines may be specified, in which case they are queried in the order specified. @@ -997,20 +993,20 @@ when performing a LDAP query. Typically, this is of the form -\fRattribute=value\fR +\(oqattribute=value\(cq or -\fR(&(attribute=value)(attribute2=value2))\fR. +\(oq(&(attribute=value)(attribute2=value2))\(cq. The default search filter is: -\fRobjectClass=sudoRole\fR. +\(oqobjectClass=sudoRole\(cq. If \fIldap_filter\fR is omitted, no search filter will be used. .TP 6n \fBSUDOERS_TIMED\fR \fIon/true/yes/off/false/no\fR Whether or not to evaluate the -\fRsudoNotBefore\fR +\fIsudoNotBefore\fR and -\fRsudoNotAfter\fR +\fIsudoNotAfter\fR attributes that implement time-dependent sudoers entries. .TP 6n \fBTIMELIMIT\fR \fIseconds\fR @@ -1062,11 +1058,11 @@ The certificate type depends on the LDAP libraries used. .PD 0 .TP 6n OpenLDAP: -\fRtls_cert /etc/ssl/client_cert.pem\fR +\(oqtls_cert /etc/ssl/client_cert.pem\(cq .PD .TP 6n Netscape-derived: -\fRtls_cert /var/ldap/cert7.db\fR +\(oqtls_cert /var/ldap/cert7.db\(cq .TP 6n IBM LDAP: Unused, the key database specified by @@ -1106,14 +1102,14 @@ The key type depends on the LDAP libraries used. .PD 0 .TP 6n OpenLDAP: -\fRtls_key /etc/ssl/client_key.pem\fR +\(oqtls_key /etc/ssl/client_key.pem\(cq .PD .TP 6n Netscape-derived: -\fRtls_key /var/ldap/key3.db\fR +\(oqtls_key /var/ldap/key3.db\(cq .TP 6n IBM LDAP: -\fRtls_key /usr/ldap/ldapkey.kdb\fR +\(oqtls_key /usr/ldap/ldapkey.kdb\(cq .PP When using IBM LDAP libraries, this file may also contain Certificate Authority and client certificates and may be encrypted. @@ -1171,15 +1167,15 @@ The must have the same path as the file specified by \fBTLS_KEY\fR, but use a -\fR.sth\fR +\(oq.sth\(cq file extension instead of -\fR.kdb\fR, -e.g., -\fRldapkey.sth\fR. +\(oq.kdb\(cq, +for example +\(oqldapkey.sth\(cq. The default -\fRldapkey.kdb\fR +\(oqldapkey.kdb\(cq that ships with the IBM Tivoli Directory Server is encrypted with the password -\fRssl_password\fR. +\(oqssl_password\(cq. The \fIgsk8capicmd\fR utility can be used to manage the key database and create a @@ -1251,9 +1247,9 @@ the latter being for servers that support TLS (SSL) encryption. If no \fIport\fR is specified, the default is port 389 for -\fRldap://\fR +\(oqldap://\(cq or port 636 for -\fRldaps://\fR. +\(oqldaps://\(cq. If no \fIhostname\fR is specified, @@ -1266,9 +1262,9 @@ lines are treated identically to a \fBURI\fR line containing multiple entries. Only systems using the OpenSSL libraries support the mixing of -\fRldap://\fR +\(oqldap://\(cq and -\fRldaps://\fR +\(oqldaps://\(cq URIs. Both the Netscape-derived and IBM LDAP libraries used on most commercial versions of Unix are only capable of supporting one or the other. @@ -1297,13 +1293,13 @@ to specify the \fIsudoers\fR search order. Sudo looks for a line beginning with -\fRsudoers\fR: +\fIsudoers\fR: and uses this to determine the search order. By default, \fBsudo\fR does not stop searching after the first match and later matches take precedence over earlier ones (unless -\fR[SUCCESS=return]\fR +\(oq[SUCCESS=return]\(cq is used, see below). The following sources are recognized: .PP @@ -1322,14 +1318,14 @@ read sudoers from LDAP In addition, a subset of \fInsswitch.conf\fR-style action statements is supported, specifically -\fR[SUCCESS=return]\fR +\(oq[SUCCESS=return]\(cq and -\fR[NOTFOUND=return]\fR. +\(oq[NOTFOUND=return]\(cq. These will unconditionally terminate the search if the user was either found -(\fR[SUCCESS=return]\fR) +\(oq[SUCCESS=return]\(cq or not found -(\fR[NOTFOUND=return]\fR) +\(oq[NOTFOUND=return]\(cq in the immediately preceding source. Other action statements tokens are not supported, nor is test negation with @@ -1420,11 +1416,11 @@ sudoers = ldap = auth, files .fi .PP In the above example, the -\fRauth\fR +\fIauth\fR qualifier only affects user lookups; both LDAP and \fIsudoers\fR will be queried for -\fRDefaults\fR +\fIDefaults\fR entries. .PP If the @@ -1449,9 +1445,9 @@ rules. To use SSSD as the \fIsudoers\fR source, you should use -\fRsss\fR +\fIsss\fR instead of -\fRldap\fR +\fIldap\fR for the sudoers entry in \fI@nsswitch_conf@\fR. The @@ -1595,7 +1591,7 @@ Simply copy it to the schema directory (e.g., \fI/etc/openldap/schema\fR), add the proper -\fRinclude\fR +\fIinclude\fR line in \fIslapd.conf\fR and restart diff --git a/docs/sudoers.ldap.mdoc.in b/docs/sudoers.ldap.mdoc.in index ec265f6919..39230c2435 100644 --- a/docs/sudoers.ldap.mdoc.in +++ b/docs/sudoers.ldap.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd July 25, 2022 +.Dd September 13, 2022 .Dt SUDOERS.LDAP @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -67,16 +67,16 @@ is no need for a specialized tool to check syntax. The .Em sudoers configuration is contained in the -.Li ou=SUDOers +.Ql ou=SUDOers LDAP container. .Pp Sudo first looks for the -.Li cn=defaults +.Ql cn=defaults entry in the SUDOers container. If found, the multi-valued -.Li sudoOption +.Em sudoOption attribute is parsed in the same manner as a global -.Li Defaults +.Em Defaults line in .Pa @sysconfdir@/sudoers . In the following example, the @@ -92,7 +92,7 @@ sudoOption: env_keep+=SSH_AUTH_SOCK .Ed .Pp The equivalent of a sudoer in LDAP is a -.Li sudoRole . +.Em sudoRole . It consists of the following attributes: .Bl -tag -width 4n .It Sy sudoUser @@ -115,35 +115,35 @@ Non-Unix group support is only available when an appropriate .Em group_plugin is defined in the global .Em defaults -.Li sudoRole +.Em sudoRole object. If a -.Li sudoUser +.Em sudoUser entry is preceded by an exclamation point, .Ql \&! , and the entry matches, the -.Li sudoRole +.Em sudoRole in which it resides will be ignored. Negated -.Li sudoUser +.Em sudoUser entries are only supported by version 1.9.9 or higher. .It Sy sudoHost A host name, IP address, IP network, or host netgroup (prefixed with a .Ql + ) . The special value -.Li ALL +.Sy ALL will match any host. Host netgroups are matched using the host (both qualified and unqualified) and domain members only; the user member is not used when matching. If a -.Li sudoHost +.Em sudoHost entry is preceded by an exclamation point, .Ql \&! , and the entry matches, the -.Li sudoRole +.Em sudoRole in which it resides will be ignored. Negated -.Li sudoHost +.Em sudoHost entries are only supported by version 1.8.18 or higher. .It Sy sudoCommand A fully-qualified Unix command name with optional command line arguments, @@ -153,7 +153,7 @@ If a command name is preceded by an exclamation point, the user will be prohibited from running that command. .Pp The built-in command -.Dq Li sudoedit +.Dq sudoedit is used to permit a user to run .Nm sudo with the @@ -162,13 +162,13 @@ option (or as .Nm sudoedit ) . It may take command line arguments just as a normal command does. Unlike other commands, -.Dq Li sudoedit +.Dq sudoedit is a built into .Nm sudo itself and must be specified in without a leading path. .Pp The special value -.Li ALL +.Sy ALL will match any command. .Pp If a command name is prefixed with a SHA-2 digest, it will @@ -192,7 +192,7 @@ Command digests are only supported by version 1.8.7 or higher. .It Sy sudoOption Identical in function to the global options described above, but specific to the -.Li sudoRole +.Em sudoRole in which it resides. .It Sy sudoRunAsUser A user name or user-ID (prefixed with @@ -203,30 +203,29 @@ or user netgroup (prefixed with a .Ql + ) that contains a list of users that commands may be run as. The special value -.Li ALL +.Sy ALL will match any user. If a -.Li sudoRunAsUser +.Em sudoRunAsUser entry is preceded by an exclamation point, .Ql \&! , and the entry matches, the -.Li sudoRole +.Em sudoRole in which it resides will be ignored. If -.Li sudoRunAsUser +.Em sudoRunAsUser is specified but empty, it will match the invoking user. If neither -.Li sudoRunAsUser +.Em sudoRunAsUser nor -.Li sudoRunAsGroup +.Em sudoRunAsGroup are present, the value of the .Em runas_default -.Li sudoOption -is used (defaults to -.Li @runas_default@ ) . +.Em sudoOption +is used (defaults to @runas_default@). .Pp The -.Li sudoRunAsUser +.Em sudoRunAsUser attribute is only available in .Nm sudo versions @@ -234,43 +233,43 @@ versions Older versions of .Nm sudo use the -.Li sudoRunAs +.Em sudoRunAs attribute instead. Negated -.Li sudoRunAsUser +.Em sudoRunAsUser entries are only supported by version 1.8.26 or higher. .It Sy sudoRunAsGroup A Unix group or group-ID (prefixed with .Ql # ) that commands may be run as. The special value -.Li ALL +.Sy ALL will match any group. If a -.Li sudoRunAsGroup +.Em sudoRunAsGroup entry is preceded by an exclamation point, .Ql \&! , and the entry matches, the -.Li sudoRole +.Em sudoRole in which it resides will be ignored. .Pp The -.Li sudoRunAsGroup +.Em sudoRunAsGroup attribute is only available in .Nm sudo versions 1.7.0 and higher. Negated -.Li sudoRunAsGroup +.Em sudoRunAsGroup entries are only supported by version 1.8.26 or higher. .It Sy sudoNotBefore A timestamp in the form -.Li yyyymmddHHMMSSZ +.Ql yyyymmddHHMMSSZ that can be used to provide a start date/time for when the -.Li sudoRole +.Em sudoRole will be valid. If multiple -.Li sudoNotBefore +.Em sudoNotBefore entries are present, the earliest is used. Timestamps must be in Coordinated Universal Time (UTC), not the local timezone. @@ -278,7 +277,7 @@ The minute and seconds portions are optional, but some LDAP servers require that they be present (contrary to the RFC). .Pp The -.Li sudoNotBefore +.Em sudoNotBefore attribute is only available in .Nm sudo versions 1.7.5 and higher and must be explicitly enabled via the @@ -287,12 +286,12 @@ option in .Pa @ldap_conf@ . .It Sy sudoNotAfter A timestamp in the form -.Li yyyymmddHHMMSSZ +.Ql yyyymmddHHMMSSZ that indicates an expiration date/time, after which the -.Li sudoRole +.Em sudoRole will no longer be valid. If multiple -.Li sudoNotAfter +.Em sudoNotAfter entries are present, the last one is used. Timestamps must be in Coordinated Universal Time (UTC), not the local timezone. @@ -300,7 +299,7 @@ The minute and seconds portions are optional, but some LDAP servers require that they be present (contrary to the RFC). .Pp The -.Li sudoNotAfter +.Em sudoNotAfter attribute is only available in .Nm sudo versions @@ -310,26 +309,26 @@ option in .Pa @ldap_conf@ . .It Sy sudoOrder The -.Li sudoRole +.Em sudoRole entries retrieved from the LDAP directory have no inherent order. The -.Li sudoOrder +.Em sudoOrder attribute is an integer (or floating point value for LDAP servers that support it) that is used to sort the matching entries. This allows LDAP-based sudoers entries to more closely mimic the behavior of the sudoers file, where the order of the entries influences the result. If multiple entries match, the entry with the highest -.Li sudoOrder +.Em sudoOrder attribute is chosen. This corresponds to the .Dq last match behavior of the sudoers file. If the -.Li sudoOrder +.Em sudoOrder attribute is not present, a value of 0 is assumed. .Pp The -.Li sudoOrder +.Em sudoOrder attribute is only available in .Nm sudo versions 1.7.5 and higher. @@ -338,12 +337,12 @@ versions 1.7.5 and higher. Each attribute listed above should contain a single value, but there may be multiple instances of each attribute type. A -.Li sudoRole +.Em sudoRole must contain at least one -.Li sudoUser , -.Li sudoHost , +.Em sudoUser , +.Em sudoHost , and -.Li sudoCommand . +.Em sudoCommand . .Pp The following example allows users in group wheel to run any command on any host via @@ -364,7 +363,7 @@ The first query is to parse the global options. The second is to match against the user's name and the groups that the user belongs to. (The special -.Li ALL +.Sy ALL tag is matched in this query too.) If no match is returned for the user's name and groups, a third query returns all entries containing user netgroups and other @@ -391,12 +390,12 @@ are as follows: .Bl -enum .It Match all -.Li nisNetgroup +.Em nisNetgroup records with a -.Li nisNetgroupTriple +.Em nisNetgroupTriple containing the user, host, and NIS domain. The query will match -.Li nisNetgroupTriple +.Em nisNetgroupTriple entries with either the short or long form of the host name or no host name specified in the tuple. If the NIS domain is set, the query will match only match entries @@ -405,12 +404,12 @@ If the NIS domain is .Em not set, a wildcard is used to match any domain name but be aware that the NIS schema used by some LDAP servers may not support wild cards for -.Li nisNetgroupTriple . +.Em nisNetgroupTriple . .It Repeated queries are performed to find any nested -.Li nisNetgroup +.Em nisNetgroup records with a -.Li memberNisNetgroup +.Em memberNisNetgroup entry that refers to an already-matched record. .El .Pp @@ -445,7 +444,7 @@ returned in any specific order. .Pp The order in which different entries are applied can be controlled using the -.Li sudoOrder +.Em sudoOrder attribute, but there is no way to guarantee the order of attributes within a specific entry. If there are conflicting command rules in an entry, the negative @@ -496,18 +495,18 @@ These cannot be converted automatically. For example, a Cmnd_Alias in a .Em sudoers file may be converted to a -.Li sudoRole +.Em sudoRole that contains multiple commands. Multiple users and/or groups may be assigned to the -.Li sudoRole . +.Em sudoRole . .Pp Also, host, user, runas, and command-based -.Li Defaults +.Em Defaults entries are not supported. However, a -.Li sudoRole +.Em sudoRole may contain one or more -.Li sudoOption +.Em sudoOption attributes which can often serve the same purpose. .Pp Consider the following @@ -561,7 +560,7 @@ Using a Unix group or netgroup in PAGERS rather than listing each user would make this easier to maintain. .Pp Per-user -.Li Defaults +.Em Defaults entries can be emulated by using one or more sudoOption attributes in a sudoRole. Consider the following @@ -602,7 +601,7 @@ LDAP support, the schema must be installed on your LDAP server. In addition, be sure to index the -.Li sudoUser +.Em sudoUser attribute. .Pp The @@ -748,31 +747,30 @@ The default value is protocol version 3. .It Sy NETGROUP_BASE Ar base The base DN to use when performing LDAP netgroup queries. Typically this is of the form -.Li ou=netgroup,dc=my-domain,dc=com -for the domain -.Li my-domain.com . +.Ql ou=netgroup,dc=my-domain,dc=com +for the domain my-domain.com. Multiple .Sy NETGROUP_BASE lines may be specified, in which case they are queried in the order specified. .Pp This option can be used to query a user's netgroups directly via LDAP which is usually faster than fetching every -.Li sudoRole +.Em sudoRole object containing a -.Li sudoUser +.Em sudoUser that begins with a .Ql + prefix. The NIS schema used by some LDAP servers need a modification to support querying the -.Li nisNetgroup +.Em nisNetgroup object by its -.Li nisNetgroupTriple +.Em nisNetgroupTriple member. OpenLDAP's .Sy slapd requires the following change to the -.Li nisNetgroupTriple +.Em nisNetgroupTriple attribute: .Bd -literal -offset 4n attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' @@ -784,13 +782,12 @@ attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple' .It Sy NETGROUP_SEARCH_FILTER Ar ldap_filter An LDAP filter which is used to restrict the set of records returned when performing an LDAP netgroup query. -Typically, this is of the -form -.Li attribute=value +Typically, this is of the form +.Ql attribute=value or -.Li (&(attribute=value)(attribute2=value2)) . +.Ql (&(attribute=value)(attribute2=value2)) . The default search filter is: -.Li objectClass=nisNetgroup . +.Ql objectClass=nisNetgroup . If .Ar ldap_filter is omitted, no search filter will be used. @@ -867,17 +864,17 @@ This option is only relevant when using SASL authentication. If the .Sy SSL parameter is set to -.Li on , -.Li true , +.Em on , +.Em true , or -.Li yes +.Em yes TLS (SSL) encryption is always used when communicating with the LDAP server. Typically, this involves connecting to the server on port 636 (ldaps). .It Sy SSL Ar start_tls If the .Sy SSL parameter is set to -.Li start_tls , +.Em start_tls , the LDAP server connection is initiated normally and TLS encryption is begun before the bind credentials are sent. This has the advantage of not requiring a dedicated port for encrypted @@ -890,9 +887,8 @@ The base DN to use when performing .Nm sudo LDAP queries. Typically this is of the form -.Li ou=SUDOers,dc=my-domain,dc=com -for the domain -.Li my-domain.com . +.Ql ou=SUDOers,dc=my-domain,dc=com +for the domain my-domain.com. Multiple .Sy SUDOERS_BASE lines may be specified, in which case they are queried in the order specified. @@ -932,19 +928,19 @@ when performing a LDAP query. Typically, this is of the form -.Li attribute=value +.Ql attribute=value or -.Li (&(attribute=value)(attribute2=value2)) . +.Ql (&(attribute=value)(attribute2=value2)) . The default search filter is: -.Li objectClass=sudoRole . +.Ql objectClass=sudoRole . If .Ar ldap_filter is omitted, no search filter will be used. .It Sy SUDOERS_TIMED Ar on/true/yes/off/false/no Whether or not to evaluate the -.Li sudoNotBefore +.Em sudoNotBefore and -.Li sudoNotAfter +.Em sudoNotAfter attributes that implement time-dependent sudoers entries. .It Sy TIMELIMIT Ar seconds The @@ -987,9 +983,9 @@ be used to authenticate the client to the LDAP server. The certificate type depends on the LDAP libraries used. .Bl -tag -width 4n .It OpenLDAP: -.Li tls_cert /etc/ssl/client_cert.pem +.Ql tls_cert /etc/ssl/client_cert.pem .It Netscape-derived: -.Li tls_cert /var/ldap/cert7.db +.Ql tls_cert /var/ldap/cert7.db .It IBM LDAP: Unused, the key database specified by .Sy TLS_KEY @@ -1023,11 +1019,11 @@ The private key must not be password-protected. The key type depends on the LDAP libraries used. .Bl -tag -width 4n .It OpenLDAP: -.Li tls_key /etc/ssl/client_key.pem +.Ql tls_key /etc/ssl/client_key.pem .It Netscape-derived: -.Li tls_key /var/ldap/key3.db +.Ql tls_key /var/ldap/key3.db .It IBM LDAP: -.Li tls_key /usr/ldap/ldapkey.kdb +.Ql tls_key /usr/ldap/ldapkey.kdb .El .Pp When using IBM LDAP libraries, this file may also contain @@ -1079,15 +1075,15 @@ The must have the same path as the file specified by .Sy TLS_KEY , but use a -.Li .sth +.Ql .sth file extension instead of -.Li .kdb , -e.g., -.Li ldapkey.sth . +.Ql .kdb , +for example +.Ql ldapkey.sth . The default -.Li ldapkey.kdb +.Ql ldapkey.kdb that ships with the IBM Tivoli Directory Server is encrypted with the password -.Li ssl_password . +.Ql ssl_password . The .Em gsk8capicmd utility can be used to manage the key database and create a @@ -1149,9 +1145,9 @@ the latter being for servers that support TLS (SSL) encryption. If no .Em port is specified, the default is port 389 for -.Li ldap:// +.Ql ldap:// or port 636 for -.Li ldaps:// . +.Ql ldaps:// . If no .Em hostname is specified, @@ -1164,9 +1160,9 @@ lines are treated identically to a .Sy URI line containing multiple entries. Only systems using the OpenSSL libraries support the mixing of -.Li ldap:// +.Ql ldap:// and -.Li ldaps:// +.Ql ldaps:// URIs. Both the Netscape-derived and IBM LDAP libraries used on most commercial versions of Unix are only capable of supporting one or the other. @@ -1194,13 +1190,13 @@ to specify the .Em sudoers search order. Sudo looks for a line beginning with -.Li sudoers : +.Em sudoers : and uses this to determine the search order. By default, .Nm sudo does not stop searching after the first match and later matches take precedence over earlier ones (unless -.Li [SUCCESS=return] +.Ql [SUCCESS=return] is used, see below). The following sources are recognized: .Pp @@ -1215,14 +1211,14 @@ read sudoers from LDAP In addition, a subset of .Pa nsswitch.conf Ns -style action statements is supported, specifically -.Li [SUCCESS=return] +.Ql [SUCCESS=return] and -.Li [NOTFOUND=return] . +.Ql [NOTFOUND=return] . These will unconditionally terminate the search if the user was either found -.Pq Li [SUCCESS=return] +.Ql [SUCCESS=return] or not found -.Pq Li [NOTFOUND=return] +.Ql [NOTFOUND=return] in the immediately preceding source. Other action statements tokens are not supported, nor is test negation with @@ -1292,11 +1288,11 @@ sudoers = ldap = auth, files .Ed .Pp In the above example, the -.Li auth +.Em auth qualifier only affects user lookups; both LDAP and .Em sudoers will be queried for -.Li Defaults +.Em Defaults entries. .Pp If the @@ -1318,9 +1314,9 @@ rules. To use SSSD as the .Em sudoers source, you should use -.Li sss +.Em sss instead of -.Li ldap +.Em ldap for the sudoers entry in .Pa @nsswitch_conf@ . The @@ -1461,7 +1457,7 @@ Simply copy it to the schema directory (e.g., .Pa /etc/openldap/schema ) , add the proper -.Li include +.Em include line in .Pa slapd.conf and restart diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index ab16a3a172..9f68c5c861 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "August 25, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -60,7 +60,7 @@ file to determine which plugins to load. If no sudo.conf(@mansectform@) file is present, or if it contains no -\fRPlugin\fR +\fIPlugin\fR lines, \fBsudoers\fR will be used for auditing, policy decisions and I/O logging. @@ -206,7 +206,7 @@ used for such mail is configurable via the \fImailto\fR Defaults entry (described later) and defaults to -\fR@mailto@\fR. +\fI@mailto@\fR. .PP No mail will be sent if an unauthorized user tries to run \fBsudo\fR @@ -258,12 +258,10 @@ terminal session ID, the start time of the session leader (using a monotonic clock if one is available). The user may then use \fBsudo\fR -without a password for a short period of time -(\fR@timeout@\fR -minutes unless overridden by the +without a password for a short period of time (@timeout@ minutes +unless overridden by the \fItimestamp_timeout\fR -option) -\&. +option). By default, \fBsudoers\fR uses a separate record for each terminal, which means that @@ -400,7 +398,7 @@ This avoids an inconsistent environment where one of the variables describing the user name is set to the invoking user and one is set to the target user. Environment variables with a value beginning with -\fR()\fR +\(oq()\(cq are removed unless both the name and value parts are matched by \fIenv_keep\fR or @@ -420,7 +418,7 @@ and options are allowed and their values are inherited from the invoking process. Prior to version 1.8.21, environment variables with a value beginning with -\fR()\fR +\(oq()\(cq were always removed. Beginning with version 1.8.21, a pattern in \fIenv_delete\fR @@ -458,7 +456,7 @@ env_keep += "BASH_FUNC_my_func%%=()*" .fi .PP Without the -\(lq\fR=()*\fR\(rq +\(oq=()*\(cq suffix, this would not match, as \fBbash\fR shell functions are not preserved by default. @@ -613,7 +611,7 @@ By default, uses the operating system's native method of setting resource limits for the target user. On Linux systems, resource limits are usually set by the -\fRpam_limits.so\fR +\fIpam_limits.so\fR PAM module. On some BSD systems, the \fI/etc/login.conf\fR @@ -691,9 +689,13 @@ are only supported by version 1.8.7 or higher. EBNF is a concise and exact way of describing the grammar of a language. Each EBNF definition is made up of \fIproduction rules\fR. -E.g., -.PP -\fRsymbol ::= definition\fR | \fRalternate1\fR | \fRalternate2 ...\fR +For example: +.nf +.sp +.RS 4n +symbol ::= definition | alternate1 | alternate2 ... +.RE +.fi .PP Each \fIproduction rule\fR @@ -706,15 +708,15 @@ Do not, however, confuse them with \(lqwildcard\(rq characters, which have different meanings. .TP 6n -\fR\&?\fR +\&? Means that the preceding symbol (or group of symbols) is optional. That is, it may appear once or not at all. .TP 6n -\fR*\fR +* Means that the preceding symbol (or group of symbols) may appear zero or more times. .TP 6n -\fR+\fR ++ Means that the preceding symbol (or group of symbols) may appear one or more times. .PP @@ -725,17 +727,17 @@ we will use single quotes to designate what is a verbatim character string (as opposed to a symbol name). .SS "Aliases" There are four kinds of aliases: -\fRUser_Alias\fR, -\fRRunas_Alias\fR, -\fRHost_Alias\fR +\fIUser_Alias\fR, +\fIRunas_Alias\fR, +\fIHost_Alias\fR and -\fRCmnd_Alias\fR. +\fICmnd_Alias\fR. Beginning with \fBsudo\fR 1.9.0, -\fRCmd_Alias\fR +\fICmd_Alias\fR may be used in place of -\fRCmnd_Alias\fR +\fICmnd_Alias\fR if desired. .nf .sp @@ -779,11 +781,11 @@ Alias_Type NAME = item1, item2, ... where \fIAlias_Type\fR is one of -\fRUser_Alias\fR, -\fRRunas_Alias\fR, -\fRHost_Alias\fR, +\fIUser_Alias\fR, +\fIRunas_Alias\fR, +\fIHost_Alias\fR, or -\fRCmnd_Alias\fR. +\fICmnd_Alias\fR. A \fRNAME\fR is a string of uppercase letters, numbers, @@ -797,7 +799,7 @@ uppercase letter. It is possible to put several alias definitions of the same type on a single line, joined by a colon (\(oq:\&\(cq). -E.g., +For example: .nf .sp .RS 0n @@ -832,7 +834,7 @@ User ::= '!'* user name | .fi .PP A -\fRUser_List\fR +\fIUser_List\fR is made up of one or more user names, user-IDs (prefixed with \(oq#\(cq), @@ -847,7 +849,7 @@ non-Unix group names and IDs (prefixed with and \(oq%:#\(cq respectively), and -\fRUser_Alias\fRes. +\fIUser_Alias\fRes. Each list item may be prefixed with zero or more \(oq\&!\(cq operators. @@ -859,14 +861,14 @@ User netgroups are matched using the user and domain members only; the host member is not used when matching. .PP A -\fRuser name\fR, -\fRuser-ID\fR, -\fRgroup\fR, -\fRgroup-ID\fR, -\fRnetgroup\fR, -\fRnonunix_group\fR +\fIuser name\fR, +\fIuser-ID\fR, +\fIgroup\fR, +\fIgroup-ID\fR, +\fInetgroup\fR, +\fInonunix_group\fR or -\fRnonunix_gid\fR +\fInonunix_gid\fR may be enclosed in double quotes to avoid the need for escaping special characters. Alternately, special characters @@ -876,9 +878,9 @@ using double quotes, any prefix characters must be included inside the quotes. .PP The actual -\fRnonunix_group\fR +\fInonunix_group\fR and -\fRnonunix_gid\fR +\fInonunix_gid\fR syntax depends on the underlying group provider plugin. For instance, the QAS AD plugin supports the following formats: @@ -923,21 +925,21 @@ Runas_Member ::= '!'* user name | .fi .PP A -\fRRunas_List\fR +\fIRunas_List\fR is similar to a -\fRUser_List\fR +\fIUser_List\fR except that instead of -\fRUser_Alias\fRes +\fIUser_Alias\fRes it can contain -\fRRunas_Alias\fRes. +\fIRunas_Alias\fRes. User names and groups are matched as strings. In other words, two users (groups) with the same user (group) ID are considered to be distinct. If you wish to match all user names with the same user-ID (e.g., root and toor), you can use a user-ID instead of a name (#0 in the example given). The user-ID or group-ID specified in a -\fRRunas_Member\fR +\fIRunas_Member\fR need not be listed in the password or group database. .nf .sp @@ -955,7 +957,7 @@ Host ::= '!'* host name | .fi .PP A -\fRHost_List\fR +\fIHost_List\fR is made up of one or more host names, IP addresses, network numbers, netgroups (prefixed with \(oq+\(cq), @@ -977,7 +979,7 @@ A host name may include shell-style wildcards (see the \fIWildcards\fR section below), but unless the -\fRhost name\fR +\fIhostname\fR command on your machine returns the fully qualified host name, you'll need to use the \fIfqdn\fR @@ -1027,7 +1029,7 @@ Cmnd ::= Digest_List? '!'* command | .fi .PP A -\fRCmnd_List\fR +\fICmnd_List\fR is a list of one or more commands, directories, or aliases. A command is a fully qualified file name, which may include shell-style wildcards (see the @@ -1044,7 +1046,7 @@ A directory is a fully qualified path name ending in a \(oq/\(cq. When you specify a directory in a -\fRCmnd_List\fR, +\fICmnd_List\fR, the user will be able to run any file within that directory (but not in any sub-directories therein). If no command line arguments are specified, the user may run the @@ -1055,19 +1057,19 @@ expression that starts with and ends with \(oq$\(cq. If the command line arguments consist of -\fR\&""\fR, +\(oq\&""\(cq, the command may only be run with \fIno\fR arguments. .PP If a -\fRCmnd\fR +\fICmnd\fR has associated command line arguments, the arguments in the -\fRCmnd\fR +\fICmnd\fR must match those given by the user on the command line. If the arguments in a -\fRCmnd\fR +\fICmnd\fR begin with the \(oq^\(cq character, they will be interpreted as a regular expression @@ -1082,7 +1084,7 @@ if they are used in command arguments: \(oq=\&\(cq, \(oq\e\(cq. To prevent arguments in a -\fRCmnd\fR +\fICmnd\fR that begin with a \(oq^\(cq character from being interpreted as a regular expression, the @@ -1091,7 +1093,7 @@ must be escaped with a \(oq\e\(cq. .PP The built-in command -\(lq\fRsudoedit\fR\(rq +\(lqsudoedit\(rq is used to permit a user to run \fBsudo\fR with the @@ -1100,7 +1102,7 @@ option (or as \fBsudoedit\fR). It may take command line arguments just as a normal command does. Unlike other commands, -\(lq\fRsudoedit\fR\(rq +\(lqsudoedit\(rq is built into \fBsudo\fR itself and must be specified in the @@ -1111,27 +1113,27 @@ a leading path. If a leading path is present, for example \fI/usr/bin/sudoedit\fR, the path name will be silently converted to -\(lq\fRsudoedit\fR\(rq. +\(lqsudoedit\(rq. A fully-qualified path for \fBsudoedit\fR is treated as an error by \fBvisudo\fR. .PP A -\fRcommand\fR +\fIcommand\fR may be preceded by a -\fRDigest_List\fR, +\fIDigest_List\fR, a comma-separated list of one or more -\fRDigest_Spec\fR +\fIDigest_Spec\fR entries. If a -\fRDigest_List\fR +\fIDigest_List\fR is present, the command will only match successfully if it can be verified using one of the SHA-2 digests in the list. Starting with version 1.9.0, the \fBALL\fR reserved word can be used in conjunction with a -\fRDigest_List\fR. +\fIDigest_List\fR. The following digest formats are supported: sha224, sha256, sha384, and sha512. The string may be specified in either hex or base64 format (base64 is more compact). @@ -1161,7 +1163,7 @@ Warning, if the user has write access to the command itself (directly or via a command), it may be possible for the user to replace the command after the digest check has been performed but before the command is executed. A similar race condition exists on systems that lack the -\fBfexecve\fR() +fexecve(2) system call when the directory in which the command is located is writable by the user. See the description of the @@ -1174,13 +1176,13 @@ Command digests are only supported by version 1.8.7 or higher. .SS "Defaults" Certain configuration options may be changed from their default values at run-time via one or more -\fRDefault_Entry\fR +\fIDefault_Entry\fR lines. These may affect all users on any host, all users on a specific host, a specific user, a specific command, or commands being run as a specific user. Per-command entries may not include command line arguments. If you need to specify arguments, define a -\fRCmnd_Alias\fR +\fICmnd_Alias\fR and reference that instead. .nf @@ -1241,16 +1243,16 @@ regexec(3) function. .PP Lists have two additional assignment operators, -\fR+=\fR +\(oq+=\(cq and -\fR-=\fR. +\(oq-=\(cq. These operators are used to add to and delete from a list respectively. It is not an error to use the -\fR-=\fR +\(oq-=\(cq operator to remove an element that does not exist in a list. .PP -Defaults entries are parsed in the following order: generic, host, +Defaults entries are parsed in the following order: global, host, user, and runas Defaults first, then command defaults. If there are multiple Defaults settings of the same type, the last matching setting is used. @@ -1326,18 +1328,18 @@ The basic structure of a user specification is Let's break that down into its constituent parts: .SS "Runas_Spec" A -\fRRunas_Spec\fR +\fIRunas_Spec\fR determines the user and/or the group that a command may be run as. A fully-specified -\fRRunas_Spec\fR +\fIRunas_Spec\fR consists of two -\fRRunas_List\fRs +\fIRunas_List\fRs (as defined above) separated by a colon (\(oq:\&\(cq) and enclosed in a set of parentheses. The first -\fRRunas_List\fR +\fIRunas_List\fR indicates which users the command may be run as via the \fB\-u\fR option. @@ -1345,24 +1347,24 @@ The second defines a list of groups that may be specified via the \fB\-g\fR option (in addition to any of the target user's groups). If both -\fRRunas_List\fRs +\fIRunas_List\fRs are specified, the command may be run with any combination of users and groups listed in their respective -\fRRunas_List\fRs. +\fIRunas_List\fRs. If only the first is specified, the command may be run as any user in the list and, optionally, with any group the target user belongs to. If the first -\fRRunas_List\fR +\fIRunas_List\fR is empty but the second is specified, the command may be run as the invoking user with the group set to any listed in the -\fRRunas_List\fR. +\fIRunas_List\fR. If both -\fRRunas_List\fRs +\fIRunas_List\fRs are empty, the command may only be run as the invoking user and the group, if specified, must be one that the invoking user is a member of. If no -\fRRunas_Spec\fR +\fIRunas_Spec\fR is specified, the command may only be run as \fBroot\fR and the group, if specified, must be one that @@ -1370,7 +1372,7 @@ and the group, if specified, must be one that is a member of. .PP A -\fRRunas_Spec\fR +\fIRunas_Spec\fR sets the default for the commands that follow it. What this means is that for the entry: .nf @@ -1391,7 +1393,7 @@ on the host boulder\(embut only as \fBoperator\fR. -E.g., +For example: .nf .sp .RS 0n @@ -1400,7 +1402,7 @@ $ sudo -u operator /bin/ls .fi .PP It is also possible to override a -\fRRunas_Spec\fR +\fIRunas_Spec\fR later on in an entry. If we modify the entry like so: .nf @@ -1426,7 +1428,7 @@ as We can extend this to allow \fBdgb\fR to run -\fR/bin/ls\fR +\fI/bin/ls\fR with either the user or group set to \fBoperator\fR: @@ -1439,7 +1441,7 @@ dgb boulder = (operator : operator) /bin/ls, (root) /bin/kill,\e .fi .PP While the group portion of the -\fRRunas_Spec\fR +\fIRunas_Spec\fR permits the user to run as command with that group, it does not force the user to do so. @@ -1470,7 +1472,7 @@ tcm boulder = (:dialer) /usr/bin/tip, /usr/bin/cu,\e .PP In this example only the group will be set, the command still runs as user \fBtcm\fR. -E.g.\& +For example: .nf .sp .RS 0n @@ -1479,7 +1481,7 @@ $ sudo -g dialer /usr/bin/cu .fi .PP Multiple users and groups may be present in a -\fRRunas_Spec\fR, +\fIRunas_Spec\fR, in which case the user may select any combination of users and groups via the \fB\-u\fR and @@ -1499,7 +1501,7 @@ may run any command as either user root or bin, optionally setting the group to operator or system. .SS "Option_Spec" A -\fRCmnd\fR +\fICmnd\fR may have zero or more options associated with it. Options may consist of .if \n(SL \{\ @@ -1511,11 +1513,11 @@ Solaris privileges sets, .\} start and/or end dates and command timeouts. Once an option is set for a -\fRCmnd\fR, +\fICmnd\fR, subsequent -\fRCmnd\fRs +\fICmnd\fRs in the -\fRCmnd_Spec_List\fR, +\fICmnd_Spec_List\fR, inherit that option unless it is overridden by another option. Option names are reserved words in \fIsudoers\fR. @@ -1565,7 +1567,8 @@ the user may run any command as root under confinement by the profile \(oqmy-profile\(cq. You can also stack profiles, or allow a user to run commands unconfined by -any profile. E.g., +any profile. +For example: .nf .sp .RS 0n @@ -1642,10 +1645,10 @@ and \fRNOTAFTER\fR settings. The time stamp must be specified in -\fIGeneralized Time\fR +\(lqGeneralized Time\(rq as defined by RFC 4517. The format is effectively -\fRyyyymmddHHMMSSZ\fR +\(oqyyyymmddHHMMSSZ\(cq where the minutes and seconds are optional. The \(oqZ\(cq @@ -1679,7 +1682,7 @@ minutes, and seconds with a single-letter case-insensitive suffix that indicates the unit of time. For example, a timeout of 7 days, 8 hours, 30 minutes, and 10 seconds would be written as -\fR7d8h30m10s\fR. +\(oq7d8h30m10s\(cq. If a number is specified without a unit, seconds are assumed. Any of the days, minutes, hours, or seconds may be omitted. The order must be from largest to smallest unit and a unit @@ -1688,17 +1691,17 @@ may not be specified more than once. The following are all \fIvalid\fR timeout values: -\fR7d8h30m10s\fR, -\fR14d\fR, -\fR8h30m\fR, -\fR600s\fR, -\fR3600\fR. +\(oq7d8h30m10s\(cq, +\(oq14d\(cq, +\(oq8h30m\(cq, +\(oq600s\(cq, +\(oq3600\(cq. The following are \fIinvalid\fR timeout values: -\fR12m2w1d\fR, -\fR30s10m4h\fR, -\fR1d2d3h\fR. +\(oq12m2w1d\(cq, +\(oq30s10m4h\(cq, +\(oq1d2d3h\(cq. .PP This setting is only supported by version 1.8.20 or higher. .SS "Chdir_Spec" @@ -1726,7 +1729,7 @@ directory, unless the \fB\-i\fR option is given. Path names of the form -\fR~user/path/name\fR +\fI~user/path/name\fR are interpreted as being relative to the named user's home directory. If the user name is omitted, the path will be relative to the runas user's home directory. @@ -1759,7 +1762,7 @@ similar to the chroot(@mansectsu@) utility. Path names of the form -\fR~user/path/name\fR +\fI~user/path/name\fR are interpreted as being relative to the named user's home directory. If the user name is omitted, the path will be relative to the runas user's home directory. @@ -1786,11 +1789,11 @@ The following tag values are supported: and \fRNOSETENV\fR. Once a tag is set on a -\fRCmnd\fR, +\fICmnd\fR, subsequent -\fRCmnd\fRs +\fICmnd\fRs in the -\fRCmnd_Spec_List\fR, +\fICmnd_Spec_List\fR, inherit the tag unless it is overridden by the opposite tag (in other words, \fRPASSWD\fR overrides @@ -1800,7 +1803,7 @@ and overrides \fREXEC\fR). .TP 2n -\fIEXEC\fR and \fINOEXEC\fR +\fREXEC\fR and \fRNOEXEC\fR .sp If \fBsudo\fR @@ -1833,16 +1836,17 @@ section below for more details on how works and whether or not it will work on your system. .RE .TP 2n -\fIFOLLOW\fR and \fINOFOLLOW\fR +\fRFOLLOW\fR and \fRNOFOLLOW\fR +.sp Starting with version 1.8.15, \fBsudoedit\fR will not open a file that is a symbolic link unless the \fIsudoedit_follow\fR flag is enabled. The -\fIFOLLOW\fR +\fRFOLLOW\fR and -\fINOFOLLOW\fR +\fRNOFOLLOW\fR tags override the value of \fIsudoedit_follow\fR and can be used to permit (or deny) the editing of symbolic links @@ -1851,7 +1855,7 @@ These tags are only effective for the \fIsudoedit\fR command and are ignored for all other commands. .TP 2n -\fILOG_INPUT\fR and \fINOLOG_INPUT\fR +\fRLOG_INPUT\fR and \fRNOLOG_INPUT\fR .sp These tags override the value of the \fIlog_input\fR @@ -1862,7 +1866,7 @@ in the \fISUDOERS OPTIONS\fR section below. .TP 2n -\fILOG_OUTPUT\fR and \fINOLOG_OUTPUT\fR +\fRLOG_OUTPUT\fR and \fRNOLOG_OUTPUT\fR .sp These tags override the value of the \fIlog_output\fR @@ -1873,7 +1877,7 @@ in the \fISUDOERS OPTIONS\fR section below. .TP 2n -\fIMAIL\fR and \fINOMAIL\fR +\fRMAIL\fR and \fRNOMAIL\fR .sp These tags provide fine-grained control over whether mail will be sent when a user runs a command by @@ -1888,7 +1892,7 @@ or \fB\-v\fR options. A -\fINOMAIL\fR +\fRNOMAIL\fR tag will also override the \fImail_always\fR and @@ -1903,7 +1907,7 @@ in the \fISUDOERS OPTIONS\fR section below. .TP 2n -\fIPASSWD\fR and \fINOPASSWD\fR +\fRPASSWD\fR and \fRNOPASSWD\fR .sp By default, \fBsudo\fR @@ -1913,12 +1917,12 @@ This behavior can be modified via the \fRNOPASSWD\fR tag. Like a -\fRRunas_Spec\fR, +\fIRunas_Spec\fR, the \fRNOPASSWD\fR tag sets a default for the commands that follow it in the -\fRCmnd_Spec_List\fR. +\fICmnd_Spec_List\fR. Conversely, the \fRPASSWD\fR tag can be used to reverse things. @@ -1966,10 +1970,10 @@ By default, if the \fRNOPASSWD\fR tag is applied to any of a user's entries for the current host, the user will be able to run -\(lq\fRsudo -l\fR\(rq +\(oqsudo -l\(cq without a password. Additionally, a user may only run -\(lq\fRsudo -v\fR\(rq +\(oqsudo -v\(cq without a password if all of the user's entries for the current host have the \fRNOPASSWD\fR @@ -1981,7 +1985,7 @@ and options. .RE .TP 2n -\fISETENV\fR and \fINOSETENV\fR +\fRSETENV\fR and \fRNOSETENV\fR .sp These tags override the value of the \fIsetenv\fR @@ -2008,7 +2012,7 @@ tag is implied for that command; this default may be overridden by use of the \fRNOSETENV\fR tag. .TP 2n -\fIINTERCEPT\fR and \fINOINTERCEPT\fR +\fRINTERCEPT\fR and \fRNOINTERCEPT\fR .sp If \fBsudo\fR @@ -2063,21 +2067,21 @@ fnmatch(3) functions as specified by IEEE Std 1003.1 (\(lqPOSIX.1\(rq). .TP 10n -\fR*\fR +* Matches any set of zero or more characters (including white space). .TP 10n -\fR\&?\fR +\&? Matches any single character (including white space). .TP 10n -\fR[...]\fR +[...] Matches any character in the specified range. .TP 10n -\fR[!...]\fR +[!...] Matches any character \fInot\fR in the specified range. .TP 10n -\fR\ex\fR +\ex For any character \(oqx\(cq, evaluates to @@ -2149,9 +2153,9 @@ below. .SS "Exceptions to wildcard rules" The following exceptions apply to the above rules: .TP 10n -\fR\&""\fR +\&"" If the empty string -\fR\&""\fR +\(oq\&""\(cq is the only command line argument in the \fIsudoers\fR file entry it means that command is not allowed to be run with @@ -2279,14 +2283,14 @@ It is possible to include other files from within the \fIsudoers\fR file currently being parsed using the -\fR@include\fR +\fI@include\fR and -\fR@includedir\fR +\fI@includedir\fR directives. For compatibility with sudo versions prior to 1.9.1, -\fR#include\fR +\fI#include\fR and -\fR#includedir\fR +\fI#includedir\fR are also accepted. .PP An include file can be used, for example, to keep a site-wide @@ -2347,7 +2351,7 @@ contains the line: .nf .sp .RS 4n -\fR@include sudoers.local\fR +@include sudoers.local .RE .fi .PP @@ -2355,7 +2359,7 @@ the file that will be included is \fI/etc/sudoers.local\fR. .PP The file name may also include the -\fR%h\fR +\(oq%h\(cq escape, signifying the short form of the host name. In other words, if the machine's host name is \(lqxerxes\(rq, @@ -2373,7 +2377,7 @@ to include the file \fI/etc/sudoers.xerxes\fR. .PP The -\fR@includedir\fR +\fI@includedir\fR directive can be used to create a \fIsudoers.d\fR directory that the system package manager can drop @@ -2396,6 +2400,7 @@ or contain a \(oq.\&\(cq character to avoid causing problems with package manager or editor temporary/backup files. +.PP Files are parsed in sorted lexical order. That is, \fI/etc/sudoers.d/01_first\fR @@ -2410,14 +2415,14 @@ Using a consistent number of leading zeroes in the file names can be used to avoid such problems. After parsing the files in the directory, control returns to the file that contained the -\fR@includedir\fR +\fI@includedir\fR directive. .PP Unlike files included via -\fR@include\fR, +\fI@include\fR, \fBvisudo\fR will not edit the files in a -\fR@includedir\fR +\fI@includedir\fR directory unless one of them contains a syntax error. It is still possible to run \fBvisudo\fR @@ -2443,11 +2448,11 @@ is a built-in \fIalias\fR that always causes a match to succeed. It can be used wherever one might otherwise use a -\fRCmnd_Alias\fR, -\fRUser_Alias\fR, -\fRRunas_Alias\fR, +\fICmnd_Alias\fR, +\fIUser_Alias\fR, +\fIRunas_Alias\fR, or -\fRHost_Alias\fR. +\fIHost_Alias\fR. Attempting to define an \fIalias\fR named @@ -2460,7 +2465,7 @@ can be dangerous since in a command context, it allows the user to run command on the system. .PP The following option names permitted in an -\fROption_Spec\fR +\fIOption_Spec\fR are also considered reserved words: \fRCHROOT\fR, .if \n(PS \{\ @@ -2491,7 +2496,7 @@ can be used as a logical operator in a list or \fIalias\fR as well as in front of a -\fRCmnd\fR. +\fICmnd\fR. This allows one to exclude certain values. For the \(oq\&!\(cq @@ -2500,7 +2505,7 @@ For example, to match all users except for root one would use: .nf .sp .RS 4n -ALL,!root +ALL, !root .RE .fi .PP @@ -2555,7 +2560,7 @@ when used as part of a word (e.g., a user name or host name): .SH "SUDOERS OPTIONS" \fBsudo\fR's behavior can be modified by -\fRDefault_Entry\fR +\fIDefault_Entry\fR lines, as explained earlier. A list of all supported Defaults parameters, grouped by type, are listed below. .PP @@ -2564,9 +2569,12 @@ A list of all supported Defaults parameters, grouped by type, are listed below. always_query_group_plugin If a \fIgroup_plugin\fR -is configured, use it to resolve groups of the form %group as long -as there is not also a system group of the same name. -Normally, only groups of the form %:group are passed to the +is configured, use it to resolve groups of the form +\(oq%group\(cq +as long as there is not also a system group of the same name. +Normally, only groups of the form +\(oq%:group\(cq +are passed to the \fIgroup_plugin\fR. This flag is \fIoff\fR @@ -2683,10 +2691,10 @@ automatic restarting of system calls. Unfortunately, not all operating systems do this by default, and even those that do may have bugs. For example, macOS fails to restart the -\fBtcgetattr\fR() +tcgetattr(3) and -\fBtcsetattr\fR() -system calls (this is a bug in macOS). +tcsetattr(3) +functions (this is a bug in macOS). Furthermore, because this behavior depends on the command stopping with the \fRSIGTTIN\fR or @@ -2770,17 +2778,17 @@ Any variables in the caller's environment or in the file specified by the \fIrestricted_env_file\fR setting that match the -\fRenv_keep\fR +\fIenv_keep\fR and -\fRenv_check\fR +\fIenv_check\fR lists are then added, followed by any variables present in the file specified by the \fIenv_file\fR setting (if any). The contents of the -\fRenv_keep\fR +\fIenv_keep\fR and -\fRenv_check\fR +\fIenv_check\fR lists, as modified by global Defaults parameters in \fIsudoers\fR, are displayed when @@ -2874,16 +2882,16 @@ fqdn Set this flag if you want to put fully qualified host names in the \fIsudoers\fR file when the local host name (as returned by the -\fRhostname\fR +\(oqhostname\(cq command) does not contain the domain name. In other words, instead of myhost you would use myhost.mydomain.edu. You may still use the short form if you wish (and even mix the two). This flag is only effective when the \(lqcanonical\(rq host name, as returned by the -\fBgetaddrinfo\fR() +getaddrinfo(3) or -\fBgethostbyname\fR() +gethostbyname(3) function, is a fully-qualified domain name. This is usually the case when the system is configured to use DNS for host name resolution. @@ -2933,11 +2941,8 @@ from the network). Just like with the hosts file, you must use the \(lqcanonical\(rq name as DNS knows it. -That is, you may not use a host alias -(\fRCNAME\fR -entry) -due to performance issues and the fact that there is no way to get all -aliases from DNS. +That is, you may not use a host alias (CNAME entry) due to performance +issues and the fact that there is no way to get all aliases from DNS. .sp This flag is \fI@fqdn@\fR @@ -2963,7 +2968,7 @@ by default. ignore_dot If set, \fBsudo\fR -will ignore "." or "" (both denoting current directory) in the +will ignore "." or "" (both denoting the current directory) in the \fRPATH\fR environment variable; the \fRPATH\fR @@ -3002,7 +3007,7 @@ ignore_local_sudoers If set via LDAP, parsing of \fI@sysconfdir@/sudoers\fR will be skipped. -This is intended for Enterprises that wish to prevent the usage of local +This is intended for sites that wish to prevent the usage of local sudoers files so that only LDAP is used. This thwarts the efforts of rogue operators who would attempt to add roles to \fI@sysconfdir@/sudoers\fR. @@ -3013,7 +3018,7 @@ Since this flag tells \fBsudo\fR how to behave when no specific LDAP entries have been matched, this sudoOption is only meaningful for the -\fRcn=defaults\fR +\(oqcn=defaults\(cq section. This flag is \fIoff\fR @@ -3150,15 +3155,15 @@ If set, \fBsudoers\fR will log when a command spawns a child process and executes a program using the -\fBexecl\fR(), -\fBexecle\fR(), -\fBexeclp\fR(), -\fBexecv\fR(), -\fBexecve\fR(), -\fBexecvp\fR(), -\fBexecvpe\fR(), +execve(2), +execl(3), +execle(3), +execlp(3), +execv(3), +execvp(3), +execvpe(3), or -\fBsystem\fR() +system(3) library functions. For example, if a shell is run by \fBsudo\fR, @@ -3294,7 +3299,7 @@ This works well on systems where the number of groups listed in the \fIsudoers\fR file is larger than the number of groups a typical user belongs to. On systems where group lookups are slow, where users may belong -to a large number of groups, and where the number of groups listed +to a large number of groups, or where the number of groups listed in the \fIsudoers\fR file is relatively small, it may be prohibitively expensive and @@ -3346,7 +3351,7 @@ tag has been set, unless overridden by an \fRNOINTERCEPT\fR tag. See the description of -\fIINTERCEPT and NOINTERCEPT\fR +\fRINTERCEPT and NOINTERCEPT\fR above as well as the \fIPreventing shell escapes\fR section at the end of this manual. @@ -3373,7 +3378,7 @@ is enable. This flag has no effect unless the \fIintercept\fR flag is enabled or the -\fIINTERCEPT\fR +\fRINTERCEPT\fR tag has been set for the command. This flag is \fIon\fR @@ -3396,7 +3401,7 @@ subsequent commands will need to be authenticated. This flag has no effect unless the \fIintercept\fR flag is enabled or the -\fIINTERCEPT\fR +\fRINTERCEPT\fR tag has been set for the command. This flag is \fIoff\fR @@ -3436,7 +3441,7 @@ file system is available. This flag has no effect unless the \fIintercept\fR flag is enabled or the -\fIINTERCEPT\fR +\fRINTERCEPT\fR tag has been set for the command and the \fIintercept_type\fR option is set to @@ -3453,9 +3458,9 @@ tuple: host name, user name, and domain (if one is set). Historically, \fBsudo\fR only matched the user name and domain for netgroups used in a -\fRUser_List\fR +\fIUser_List\fR and only matched the host name and domain for netgroups used in a -\fRHost_List\fR. +\fIHost_List\fR. This flag is \fIoff\fR by default. @@ -3469,7 +3474,7 @@ tag has been set, unless overridden by an \fREXEC\fR tag. See the description of -\fIEXEC and NOEXEC\fR +\fREXEC and NOEXEC\fR above as well as the \fIPreventing shell escapes\fR section at the end of this manual. @@ -3685,7 +3690,7 @@ Disabling this prevents users from \(lqchaining\(rq \fBsudo\fR commands to get a root shell by doing something like -\(lq\fRsudo sudo /bin/sh\fR\(rq. +\(oqsudo sudo /bin/sh\(cq. Note, however, that turning off \fIroot_sudo\fR will also prevent root from running @@ -3710,7 +3715,7 @@ runas_allow_unknown_id If enabled, allow matching of runas user and group IDs that are not present in the password or group databases. In addition to explicitly matching unknown user or group IDs in a -\fRRunas_List\fR, +\fIRunas_List\fR, this option also allows the \fBALL\fR alias to match unknown IDs. @@ -3730,7 +3735,7 @@ If enabled, will only run commands as a user whose shell appears in the \fI/etc/shells\fR file, even if the invoking user's -\fRRunas_List\fR +\fIRunas_List\fR would otherwise permit it. If no \fI/etc/shells\fR @@ -3750,8 +3755,7 @@ If set, \fBsudo\fR will prompt for the password of the user defined by the \fIrunas_default\fR -option (defaults to -\fR@runas_default@\fR) +option (defaults to @runas_default@) instead of the password of the invoking user when running a command or editing a file. This flag is @@ -3926,9 +3930,9 @@ option can be enabled to allow \fBsudoedit\fR to open symbolic links. It may be overridden on a per-command basis by the -\fIFOLLOW\fR +\fRFOLLOW\fR and -\fINOFOLLOW\fR +\fRNOFOLLOW\fR tags. This flag is \fIoff\fR @@ -3952,8 +3956,7 @@ If set, will prompt for the password of the user specified by the \fB\-u\fR -option (defaults to -\fRroot\fR) +option (defaults to root) instead of the password of the invoking user when running a command or editing a file. This flag precludes the use of a user-ID not listed in the passwd @@ -4058,7 +4061,7 @@ If a timeout is specified both in the \fIsudoers\fR file and on the command line, the smaller of the two timeouts will be used. See the -\fRTimeout_Spec\fR +\fITimeout_Spec\fR section for a description of the timeout syntax. This flag is \fIoff\fR @@ -4088,7 +4091,7 @@ flag is set, \fBsudo\fR will prompt for a password even when it would be visible on the screen. This makes it possible to run things like -\(lq\fRssh somehost sudo ls\fR\(rq +\(oqssh somehost sudo ls\(cq since by default, ssh(1) does @@ -4108,14 +4111,13 @@ The \fIclosefrom\fR option can be used to specify a different file descriptor at which to start closing. -The default is -\fR3\fR. +The default is 3. .TP 18n command_timeout The maximum amount of time a command is allowed to run before it is terminated. See the -\fRTimeout_Spec\fR +\fITimeout_Spec\fR section for a description of the timeout syntax. .sp This setting is only supported by version 1.8.20 or higher. @@ -4124,7 +4126,7 @@ log_server_timeout The maximum amount of time to wait when connecting to a log server or waiting for a server response. See the -\fRTimeout_Spec\fR +\fITimeout_Spec\fR section for a description of the timeout syntax. The default value is 30 seconds. .sp @@ -4132,12 +4134,12 @@ This setting is only supported by version 1.9.0 or higher. .TP 18n maxseq The maximum sequence number that will be substituted for the -\(lq\fR%{seq}\fR\(rq +\(oq%{seq}\(cq escape in the I/O log file (see the \fIiolog_dir\fR description below for more information). While the value substituted for -\(lq\fR%{seq}\fR\(rq +\(oq%{seq}\(cq is in base 36, \fImaxseq\fR itself should be expressed in decimal. @@ -4161,8 +4163,7 @@ passwd_tries The number of tries a user gets to enter his/her password before \fBsudo\fR logs the failure and exits. -The default is -\fR@passwd_tries@\fR. +The default is @passwd_tries@. .TP 18n syslog_maxlen On many systems, @@ -4194,22 +4195,15 @@ loglinelen Number of characters per line for the file log. This value is used to decide when to wrap lines for nicer log files. This has no effect on the syslog log file, only the file log. -The default is -\fR@loglen@\fR -(use 0 or negate the option to disable word wrap). +The default is @loglen@ (use 0 or negate the option to disable word wrap). .TP 18n passwd_timeout Number of minutes before the \fBsudo\fR -password prompt times out, or -\fR0\fR -for no timeout. +password prompt times out, or 0 for no timeout. The timeout may include a fractional component -if minute granularity is insufficient, for example -\fR2.5\fR. -The -default is -\fR@password_timeout@\fR. +if minute granularity is insufficient, for example 2.5. +The default is @password_timeout@. .TP 18n timestamp_timeout .br @@ -4217,20 +4211,15 @@ Number of minutes that can elapse before \fBsudo\fR will ask for a password again. The timeout may include a fractional component if -minute granularity is insufficient, for example -\fR2.5\fR. -The default is -\fR@timeout@\fR. -Set this to -\fR0\fR -to always prompt for a password. -If set to a value less than -\fR0\fR -the user's time stamp will not expire until the system is rebooted. +minute granularity is insufficient, for example 2.5. +The default is @timeout@. +Set this to 0 to always prompt for a password. +If set to a value less than 0 the user's time stamp will not expire +until the system is rebooted. This can be used to allow users to create or delete their own time stamps via -\(lq\fRsudo -v\fR\(rq +\(oqsudo -v\(cq and -\(lq\fRsudo -k\fR\(rq +\(oqsudo -k\(cq respectively. .TP 18n umask @@ -4243,10 +4232,8 @@ Unless the flag is set, the actual umask will be the union of the user's umask and the value of the \fIumask\fR -setting, which defaults to -\fR@sudo_umask@\fR. -This guarantees -that +setting, which defaults to @sudo_umask@. +This guarantees that \fBsudo\fR never lowers the umask when running a command. .sp @@ -4274,7 +4261,7 @@ The default can be overridden for individual \fIsudoers\fR entries by specifying the -\fIAPPARMOR_PROFILE\fR +\fRAPPARMOR_PROFILE\fR option. This option is only available when sudo is built with AppArmor support. @@ -4285,12 +4272,12 @@ The message may include the \(oq%d\(cq escape which will expand to the number of failed password attempts. If set, it overrides the default message, -\fR%d incorrect password attempt(s)\fR. +\(lq%d incorrect password attempt(s)\(rq. .TP 18n badpass_message Message that is displayed if a user enters an incorrect password. The default is -\fR@badpass_message@\fR +\(lq@badpass_message@\(rq unless insults are enabled. .TP 18n editor @@ -4348,15 +4335,15 @@ It has the following possible values: .TP 8n dso Preload a dynamic shared object (shared library) that intercepts the -\fBexecl\fR(), -\fBexecle\fR(), -\fBexeclp\fR(), -\fBexecv\fR(), -\fBexecve\fR(), -\fBexecvp\fR(), -\fBexecvpe\fR(), +execve(2), +execl(3), +execle(3), +execlp(3), +execv(3), +execvp(3), +execvpe(3), and -\fBsystem\fR() +system(3) library functions. A value of \fIdso\fR @@ -4416,30 +4403,30 @@ escape sequences are supported: .RS 18n .PD 0 .TP 6n -\fR%{seq}\fR +%{seq} expanded to a monotonically increasing base-36 sequence number, such as 0100A5, where every two digits are used to form a new directory, e.g., \fI01/00/A5\fR .PD .TP 6n -\fR%{user}\fR +%{user} expanded to the invoking user's login name .TP 6n -\fR%{group}\fR +%{group} expanded to the name of the invoking user's real group-ID .TP 6n -\fR%{runas_user}\fR +%{runas_user} expanded to the login name of the user the command will be run as (e.g., root) .TP 6n -\fR%{runas_group}\fR +%{runas_group} expanded to the group name of the user the command will be run as (e.g., wheel) .TP 6n -\fR%{hostname}\fR +%{hostname} expanded to the local host name without the domain name .TP 6n -\fR%{command}\fR +%{command} expanded to the base name of the command being run .PP In addition, any escape sequences supported by the system's @@ -4468,7 +4455,7 @@ tags are present for a command. \fIiolog_file\fR may contain directory components. The default is -\(lq\fR%{seq}\fR\(rq. +\(oq%{seq}\(cq. .sp See the \fIiolog_dir\fR @@ -4478,9 +4465,9 @@ escape sequences. .sp In addition to the escape sequences, path names that end in six or more -\fRX\fRs +\fIX\fRs will have the -\fRX\fRs +\fIX\fRs replaced with a unique combination of digits and letters, similar to the mktemp(3) function. @@ -4494,7 +4481,7 @@ overwritten unless \fIiolog_file\fR ends in six or more -\fRX\fRs. +\fIX\fRs. .TP 18n iolog_flush If set, @@ -4629,10 +4616,10 @@ Subject of the mail sent to the \fImailto\fR user. The escape -\fR%h\fR +\(oq%h\(cq will expand to the host name of the machine. Default is -\(lq\fR@mailsub@\fR\(rq. +\(lq@mailsub@\(rq. .TP 18n noexec_file As of @@ -4648,9 +4635,9 @@ name used when the \fB\-A\fR option is specified. The default value is either -\(lq\fR@pam_service@\fR\(rq +\(oq@pam_service@\(cq or -\(lq\fR@pam_login_service@\fR\(rq, +\(oq@pam_login_service@\(cq, depending on whether or not the \fB\-i\fR option is also specified. @@ -4667,7 +4654,7 @@ name used when the \fB\-i\fR option is specified. The default value is -\(lq\fR@pam_login_service@\fR\(rq. +\(oq@pam_login_service@\(cq. See the description of \fIpam_service\fR for more information. @@ -4683,7 +4670,7 @@ file or a file in the \fI/etc/pam.d\fR directory. The default value is -\(lq\fRsudo\fR\(rq. +\(oqsudo\(cq. .sp This setting is only supported by version 1.8.8 or higher. .TP 18n @@ -4700,17 +4687,17 @@ escape sequences are supported: .RS 18n .PD 0 .TP 6n -\fR%H\fR +%H expanded to the local host name including the domain name (only if the machine's host name is fully qualified or the \fIfqdn\fR option is set) .PD .TP 6n -\fR%h\fR +%h expanded to the local host name without the domain name .TP 6n -\fR%p\fR +%p expanded to the user whose password is being asked for (respects the \fIrootpw\fR, \fItargetpw\fR @@ -4719,18 +4706,18 @@ and flags in \fIsudoers\fR) .TP 6n -\fR\&%U\fR +\&%U expanded to the login name of the user the command will be run as (defaults to root) .TP 6n -\fR%u\fR +%u expanded to the invoking user's login name .TP 6n -\fR%%\fR +%% two consecutive -\fR%\fR +\(oq%\(cq characters are collapsed into a single -\fR%\fR +\(oq%\(cq character .PP On systems that use PAM for authentication, @@ -4747,7 +4734,7 @@ The flag can be used to change this behavior. .sp The default value is -\(lq\fR@passprompt@\fR\(rq. +\(oq@passprompt@\(cq. .RE .if \n(PS \{\ .TP 18n @@ -4785,15 +4772,14 @@ runas_default The default user to run commands as if the \fB\-u\fR option is not specified on the command line. -This defaults to -\fR@runas_default@\fR. +This defaults to @runas_default@. .TP 18n sudoers_locale Locale to use when parsing the sudoers file, logging commands, and sending email. Changing the locale may affect how sudoers is interpreted. Defaults to -\(lq\fRC\fR\(rq. +\(oqC\(cq. .TP 18n timestamp_type \fBsudoers\fR @@ -4820,10 +4806,7 @@ process ID (usually the shell). Commands run from the same shell (or other common parent process) will not require a password for \fItimestamp_timeout\fR -minutes -(\fR@timeout@\fR -by default) -\&. +minutes (@timeout@ by default). Commands run via \fBsudo\fR with a different parent process ID, for example from a shell script, @@ -4836,10 +4819,7 @@ If no terminal is present, the behavior is the same as \fIppid\fR. Commands run from the same terminal will not require a password for \fItimestamp_timeout\fR -minutes -(\fR@timeout@\fR -by default) -\&. +minutes (@timeout@ by default). .TP 8n kernel The time stamp is stored in the kernel as an attribute of the terminal @@ -4870,8 +4850,7 @@ The default is timestampowner The owner of the lecture status directory, time stamp directory and all files stored therein. -The default is -\fRroot\fR. +The default is root. .if \n(SL \{\ .TP 18n type @@ -4902,7 +4881,7 @@ is configured with the \fR--enable-admin-flag\fR option. The default value is -\fR~/.sudo_as_admin_successful\fR. +\fI~/.sudo_as_admin_successful\fR. .TP 14n env_file The @@ -4910,9 +4889,9 @@ The option specifies the fully qualified path to a file containing variables to be set in the environment of the program being run. Entries in this file should either be of the form -\(lq\fRVARIABLE=value\fR\(rq +\(oqVARIABLE=value\(cq or -\(lq\fRexport VARIABLE=value\fR\(rq. +\(oqexport VARIABLE=value\(cq. The value may optionally be enclosed in single or double quotes. Variables in this file are only added if the variable does not already exist in the environment. @@ -4927,7 +4906,7 @@ and exempt_group Users in this group are exempt from password and PATH requirements. The group name specified should not include a -\fR%\fR +\(oq%\(cq prefix. This is not set by default. .TP 14n @@ -4980,7 +4959,7 @@ alias. .sp This setting is only supported by version 1.8.20 or higher. If the operating system does not support the -\fBfexecve\fR() +fexecve(2) system call, this setting has no effect. .RE .TP 14n @@ -5173,7 +5152,7 @@ The address should be enclosed in double quotes to protect against \fBsudo\fR interpreting the -\fR@\fR +\(oq@\(cq sign. Defaults to the name of the user running \fBsudo\fR. @@ -5187,10 +5166,9 @@ The address should be enclosed in double quotes to protect against \fBsudo\fR interpreting the -\fR@\fR +\(oq@\(cq sign. -Defaults to -\fR@mailto@\fR. +Defaults to @mailto@. .TP 14n rlimit_as The maximum size to which the process's address space may grow (in bytes), @@ -5269,9 +5247,9 @@ The option specifies the fully qualified path to a file containing variables to be set in the environment of the program being run. Entries in this file should either be of the form -\(lq\fRVARIABLE=value\fR\(rq +\(oqVARIABLE=value\(cq or -\(lq\fRexport VARIABLE=value\fR\(rq. +\(oqexport VARIABLE=value\(cq. The value may optionally be enclosed in single or double quotes. Variables in this file are only added if the variable does not already exist in the environment. @@ -5316,7 +5294,7 @@ It is only possible to use \fIrunchroot\fR as a command-specific Defaults setting if the command exists with the same path both inside and outside the chroot jail. -This restriction does not apply to generic, host, or user-based +This restriction does not apply to global, host, or user-based Defaults settings or to a \fICmnd_Spec\fR that includes a @@ -5361,8 +5339,7 @@ This option is @secure_path@ by default. syslog Syslog facility if syslog is being used for logging (negate to disable syslog logging). -Defaults to -\fR@logfac@\fR. +Defaults to @logfac@. .sp The following syslog facilities are supported: \fBauthpriv\fR @@ -5385,8 +5362,7 @@ syslog_badpri .br Syslog priority to use when the user is not allowed to run a command or when authentication is unsuccessful. -Defaults to -\fR@badpri@\fR. +Defaults to @badpri@. .sp The following syslog priorities are supported: \fBalert\fR, @@ -5406,8 +5382,7 @@ will disable logging of unsuccessful commands. syslog_goodpri Syslog priority to use when the user is allowed to run a command and authentication is successful. -Defaults to -\fR@goodpri@\fR. +Defaults to @goodpri@. .sp See \fIsyslog_badpri\fR @@ -5511,16 +5486,16 @@ The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the -\fR=\fR, -\fR+=\fR, -\fR-=\fR, +\(oq=\(cq, +\(oq+=\(cq, +\(oq-=\(cq, and -\fR\&!\fR +\(oq\&!\(cq operators respectively. Regardless of whether the -\fRenv_reset\fR +\fIenv_reset\fR option is enabled or disabled, variables specified by -\fRenv_check\fR +\fIenv_check\fR will be preserved in the environment if they pass the aforementioned check. The global list of environment variables to check is displayed when \fBsudo\fR @@ -5537,11 +5512,11 @@ option is not in effect. The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the -\fR=\fR, -\fR+=\fR, -\fR-=\fR, +\(oq=\(cq, +\(oq+=\(cq, +\(oq-=\(cq, and -\fR\&!\fR +\(oq\&!\(cq operators respectively. The global list of environment variables to remove is displayed when \fBsudo\fR @@ -5562,11 +5537,11 @@ processes will receive. The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the -\fR=\fR, -\fR+=\fR, -\fR-=\fR, +\(oq=\(cq, +\(oq+=\(cq, +\(oq-=\(cq, and -\fR\&!\fR +\(oq\&!\(cq operators respectively. The global list of variables to keep is displayed when @@ -5664,7 +5639,7 @@ plugin supports its own plugin interface to allow non-Unix group lookups which can query a group source other than the standard Unix group database. This can be used to implement support for the -\fRnonunix_group\fR +\fInonunix_group\fR syntax described earlier. .PP Group provider plugins are specified via the @@ -5703,9 +5678,9 @@ system_group The \fIsystem_group\fR plugin supports group lookups via the standard C library functions -\fBgetgrnam\fR() +getgrnam(3) and -\fBgetgrid\fR(). +getgrid(3). This plugin can be used in instances where the user belongs to groups not present in the user's supplemental group vector. This plugin takes no options: @@ -5819,7 +5794,7 @@ The actual command that was executed. Messages are logged using the locale specified by \fIsudoers_locale\fR, which defaults to the -\(lq\fRC\fR\(rq +\(oqC\(cq locale. .SS "Denied command log entries" If the user is not allowed to run the command, the reason for the denial @@ -5909,7 +5884,7 @@ is the user-ID that owns the \fIsudoers\fR file) to the end of the \fBsudoers\fR -\fRPlugin\fR +\fIPlugin\fR line in the sudo.conf(@mansectform@) file. @@ -5938,7 +5913,7 @@ is the user-ID that owns the \fIsudoers\fR file) to the \fBsudoers\fR -\fRPlugin\fR +\fIPlugin\fR line in the sudo.conf(@mansectform@) file. @@ -5955,7 +5930,7 @@ The default mode may be changed via the \(lqsudoers_mode\(rq option to the \fBsudoers\fR -\fRPlugin\fR +\fIPlugin\fR line in the sudo.conf(@mansectform@) file. @@ -5974,7 +5949,7 @@ is the group-ID that owns the \fIsudoers\fR file) to the \fBsudoers\fR -\fRPlugin\fR +\fIPlugin\fR line in the sudo.conf(@mansectform@) file. @@ -6021,7 +5996,7 @@ The and \fIprogname\fR fields are added by the system's -\fBsyslog\fR() +syslog(3) function, not \fBsudoers\fR itself. @@ -6088,7 +6063,7 @@ by default) using a unique session ID that is included in the \fBsudo\fR log line, prefixed with -\(lq\fRTSID=\fR\(rq. +\(oqTSID=\(cq. The \fIiolog_file\fR option may be used to control the format of the session ID. @@ -6155,12 +6130,12 @@ if no terminal was present. .TP 10n runargv A JSON array representing the command's argument vector as passed to the -\fBexecve\fR() +execve(2) system call. .TP 10n runenv A JSON array representing the command's environment as passed to the -\fBexecve\fR() +execve(2) system call. .TP 10n rungid @@ -6414,12 +6389,12 @@ or \fRUSER\fR environment variables when running commands as root. Additionally, on the machines in the -\fISERVERS\fR -\fRHost_Alias\fR, +\fRSERVERS\fR +\fIHost_Alias\fR, we keep an additional local log file and make sure we log the year in each log line since the log entries will be kept around for several years. Lastly, we disable shell escapes for the commands in the PAGERS -\fRCmnd_Alias\fR +\fICmnd_Alias\fR (\fI/usr/bin/more\fR, \fI/usr/bin/pg\fR and @@ -6497,17 +6472,12 @@ jack CSNETS = ALL The user \fBjack\fR may run any command on the machines in the -\fICSNETS\fR -alias (the networks -\fR128.138.243.0\fR, -\fR128.138.204.0\fR, -and -\fR128.138.242.0\fR). -Of those networks, only -\fR128.138.204.0\fR -has an explicit netmask (in CIDR notation) indicating it is a class C network. +\fRCSNETS\fR +alias (the networks 128.138.243.0, 128.138.204.0, and 128.138.242.0). +Of those networks, only 128.138.204.0 has an explicit netmask (in +CIDR notation) indicating it is a class C network. For the other networks in -\fICSNETS\fR, +\fRCSNETS\fR, the local machine's netmask will be used during matching. .nf .sp @@ -6519,9 +6489,8 @@ lisa CUNETS = ALL The user \fBlisa\fR may run any command on any host in the -\fICUNETS\fR -alias (the class B network -\fR128.138.0.0\fR). +\fRCUNETS\fR +alias (the class B network 128.138.0.0). .nf .sp .RS 0n @@ -6573,8 +6542,8 @@ group may run commands in \fI/usr/sbin/\fR as themselves with any group in the -\fIADMINGRP\fR -\fRRunas_Alias\fR +\fRADMINGRP\fR +\fIRunas_Alias\fR (the \fBadm\fR and @@ -6585,7 +6554,7 @@ The user \fBpete\fR is allowed to change anyone's password except for root on the -\fIHPPA\fR +\fRHPPA\fR machines. Because command line arguments are matched as a single, concatenated string, the @@ -6620,12 +6589,12 @@ bob SPARC = (OP) ALL : SGI = (OP) ALL The user \fBbob\fR may run anything on the -\fISPARC\fR +\fRSPARC\fR and -\fISGI\fR +\fRSGI\fR machines as any user listed in the -\fIOP\fR -\fRRunas_Alias\fR +\fROP\fR +\fIRunas_Alias\fR (\fBroot\fR and \fBoperator\fR.) @@ -6668,8 +6637,8 @@ fred ALL = (DB) NOPASSWD: ALL The user \fBfred\fR can run commands as any user in the -\fIDB\fR -\fRRunas_Alias\fR +\fRDB\fR +\fIRunas_Alias\fR (\fBoracle\fR or \fBsybase\fR) @@ -6682,7 +6651,7 @@ john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* .fi .PP On the -\fIALPHA\fR +\fRALPHA\fR machines, user \fBjohn\fR may su to anyone except root but he is not allowed to specify any options @@ -6699,8 +6668,8 @@ jen ALL, !SERVERS = ALL The user \fBjen\fR may run any command on any machine except for those in the -\fISERVERS\fR -\fRHost_Alias\fR +\fRSERVERS\fR +\fIHost_Alias\fR (primary, mail, www, and ns). .nf .sp @@ -6710,21 +6679,21 @@ jill SERVERS = /usr/bin/, !SU, !SHELLS .fi .PP For any machine in the -\fISERVERS\fR -\fRHost_Alias\fR, +\fRSERVERS\fR +\fIHost_Alias\fR, \fBjill\fR may run any commands in the directory \fI/usr/bin/\fR except for those commands belonging to the -\fISU\fR +\fRSU\fR and -\fISHELLS\fR -\fRCmnd_Aliases\fR. +\fRSHELLS\fR +\fICmnd_Aliases\fR. While not specifically mentioned in the rule, the commands in the -\fIPAGERS\fR -\fRCmnd_Alias\fR +\fRPAGERS\fR +\fICmnd_Alias\fR all reside in \fI/usr/bin\fR and have the @@ -6759,8 +6728,8 @@ WEBADMIN www = (www) ALL, (root) /usr/bin/su www .fi .PP On the host www, any user in the -\fIWEBADMIN\fR -\fRUser_Alias\fR +\fRWEBADMIN\fR +\fIUser_Alias\fR (will, wendy, and wim), may run any command as user www (which owns the web pages) or simply su(1) @@ -6774,7 +6743,7 @@ ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e .fi .PP Any user may mount or unmount a CD-ROM on the machines in the CDROM -\fRHost_Alias\fR +\fIHost_Alias\fR (orion, perseus, hercules) without entering a password. This is a bit tedious for users to type, so it is a prime candidate for encapsulating in a shell script. @@ -6800,9 +6769,9 @@ bill ALL = ALL, !SU, !SHELLS Doesn't really prevent \fBbill\fR from running the commands listed in -\fISU\fR +\fRSU\fR or -\fISHELLS\fR +\fRSHELLS\fR since he can simply copy those commands to a different name, or use a shell escape from an editor or other program. Therefore, these kind of restrictions should be considered @@ -6839,13 +6808,13 @@ john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\e User \fBjohn\fR can still run -\fR/usr/bin/passwd root\fR +\(oq/usr/bin/passwd root\(cq if \fIfast_glob\fR is enabled by changing to \fI/usr/bin\fR and running -\fR./passwd root\fR +\(oq./passwd root\(cq instead. .PP Another potential issue is that when @@ -6982,15 +6951,15 @@ It does this by setting an environment variable (usually \fRLD_PRELOAD\fR) to the path of a dynamic shared object, or shared library, containing custom versions of the -\fBexecl\fR(), -\fBexecle\fR(), -\fBexeclp\fR(), -\fBexecv\fR(), -\fBexecve\fR(), -\fBexecvp\fR(), -\fBexecvpe\fR(), +execve(2), +execl(3), +execle(3), +execlp(3), +execv(3), +execvp(3), +execvpe(3), and -\fBsystem\fR() +system(3) library functions that connect back to \fBsudo\fR for a policy decision. @@ -7134,26 +7103,26 @@ The \fInoexec\fR functionality is capable of blocking execution of commands run via the -\fBexecl\fR(), -\fBexecle\fR(), -\fBexeclp\fR(), -\fBexect\fR(), -\fBexecv\fR(), -\fBexecve\fR(), -\fBexecveat\fR(), -\fBexecvP\fR(), -\fBexecvp\fR(), -\fBexecvpe\fR(), -\fBfexecve\fR(), -\fBpopen\fR(), -\fBposix_spawn\fR(), -\fBposix_spawnp\fR(), -\fBsystem\fR(), +execve(2), +execl(3), +execle(3), +execlp(3), +exect(3), +execv(3), +execveat(3), +execvP(3), +execvp(3), +execvpe(3), +fexecve(3), +popen(3), +posix_spawn(3), +posix_spawnp(3), +system(3), and -\fBwordexp\fR() +wordexp(3) functions. On Linux, a -\fBseccomp\fR() +seccomp(2) filter is used to implement \fInoexec\fR. On Solaris 10 and higher, @@ -7396,11 +7365,11 @@ The following subsystems are used by the plugin: .TP 10n \fIalias\fR -\fRUser_Alias\fR, -\fRRunas_Alias\fR, -\fRHost_Alias\fR +\fIUser_Alias\fR, +\fIRunas_Alias\fR, +\fIHost_Alias\fR and -\fRCmnd_Alias\fR +\fICmnd_Alias\fR processing .TP 10n \fIall\fR @@ -7530,7 +7499,7 @@ When using netgroups of machines (as opposed to users), if you store fully qualified host name in the netgroup (as is usually the case), you either need to have the machine's host name be fully qualified as returned by the -\fRhostname\fR +\fIhostname\fR command or use the \fIfqdn\fR option in diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 823bd209a3..5e93a2c77e 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 25, 2022 +.Dd September 13, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -60,7 +60,7 @@ file to determine which plugins to load. If no .Xr sudo.conf @mansectform@ file is present, or if it contains no -.Li Plugin +.Em Plugin lines, .Nm will be used for auditing, policy decisions and I/O logging. @@ -195,7 +195,7 @@ used for such mail is configurable via the .Em mailto Defaults entry (described later) and defaults to -.Li @mailto@ . +.Em @mailto@ . .Pp No mail will be sent if an unauthorized user tries to run .Nm sudo @@ -247,13 +247,10 @@ terminal session ID, the start time of the session leader (using a monotonic clock if one is available). The user may then use .Nm sudo -without a password for a short period of time -.Po -.Li @timeout@ -minutes unless overridden by the +without a password for a short period of time (@timeout@ minutes +unless overridden by the .Em timestamp_timeout -option -.Pc . +option). By default, .Nm uses a separate record for each terminal, which means that @@ -298,9 +295,9 @@ the and .Em log_output options as well as the -.Li LOG_INPUT +.Dv LOG_INPUT and -.Li LOG_OUTPUT +.Dv LOG_OUTPUT command tags. See .Sx "I/O LOG FILES" @@ -390,7 +387,7 @@ This avoids an inconsistent environment where one of the variables describing the user name is set to the invoking user and one is set to the target user. Environment variables with a value beginning with -.Li () +.Ql () are removed unless both the name and value parts are matched by .Em env_keep or @@ -410,7 +407,7 @@ and options are allowed and their values are inherited from the invoking process. Prior to version 1.8.21, environment variables with a value beginning with -.Li () +.Ql () were always removed. Beginning with version 1.8.21, a pattern in .Em env_delete @@ -445,7 +442,7 @@ env_keep += "BASH_FUNC_my_func%%=()*" .Ed .Pp Without the -.Dq Li =()* +.Ql =()* suffix, this would not match, as .Sy bash shell functions are not preserved by default. @@ -600,7 +597,7 @@ By default, uses the operating system's native method of setting resource limits for the target user. On Linux systems, resource limits are usually set by the -.Li pam_limits.so +.Pa pam_limits.so PAM module. On some BSD systems, the .Pa /etc/login.conf @@ -674,9 +671,10 @@ are only supported by version 1.8.7 or higher. EBNF is a concise and exact way of describing the grammar of a language. Each EBNF definition is made up of .Em production rules . -E.g., -.Pp -.Li symbol ::= definition | alternate1 | alternate2 ... +For example: +.Bd -literal -offset 4n +symbol ::= definition | alternate1 | alternate2 ... +.Ed .Pp Each .Em production rule @@ -689,13 +687,13 @@ Do not, however, confuse them with .Dq wildcard characters, which have different meanings. .Bl -tag -width 4n -.It Li \&? +.It \&? Means that the preceding symbol (or group of symbols) is optional. That is, it may appear once or not at all. -.It Li * +.It * Means that the preceding symbol (or group of symbols) may appear zero or more times. -.It Li + +.It + Means that the preceding symbol (or group of symbols) may appear one or more times. .El @@ -707,17 +705,17 @@ we will use single quotes to designate what is a verbatim character string (as opposed to a symbol name). .Ss Aliases There are four kinds of aliases: -.Li User_Alias , -.Li Runas_Alias , -.Li Host_Alias +.Em User_Alias , +.Em Runas_Alias , +.Em Host_Alias and -.Li Cmnd_Alias . +.Em Cmnd_Alias . Beginning with .Nm sudo 1.9.0, -.Li Cmd_Alias +.Em Cmd_Alias may be used in place of -.Li Cmnd_Alias +.Em Cmnd_Alias if desired. .Bd -literal Alias ::= 'User_Alias' User_Alias_Spec (':' User_Alias_Spec)* | @@ -755,25 +753,25 @@ Alias_Type NAME = item1, item2, ... where .Em Alias_Type is one of -.Li User_Alias , -.Li Runas_Alias , -.Li Host_Alias , +.Em User_Alias , +.Em Runas_Alias , +.Em Host_Alias , or -.Li Cmnd_Alias . +.Em Cmnd_Alias . A -.Li NAME +.Dv NAME is a string of uppercase letters, numbers, and underscore characters .Pq Ql _ . A -.Li NAME +.Dv NAME .Sy must start with an uppercase letter. It is possible to put several alias definitions of the same type on a single line, joined by a colon .Pq Ql :\& . -E.g., +For example: .Bd -literal Alias_Type NAME = item1, item2, item3 : NAME = item4, item5 .Ed @@ -802,7 +800,7 @@ User ::= '!'* user name | .Ed .Pp A -.Li User_List +.Em User_List is made up of one or more user names, user-IDs (prefixed with .Ql # ) , @@ -817,7 +815,7 @@ non-Unix group names and IDs (prefixed with and .Ql %:# respectively), and -.Li User_Alias Ns es. +.Em User_Alias Ns es. Each list item may be prefixed with zero or more .Ql \&! operators. @@ -829,14 +827,14 @@ User netgroups are matched using the user and domain members only; the host member is not used when matching. .Pp A -.Li user name , -.Li user-ID , -.Li group , -.Li group-ID , -.Li netgroup , -.Li nonunix_group +.Em user name , +.Em user-ID , +.Em group , +.Em group-ID , +.Em netgroup , +.Em nonunix_group or -.Li nonunix_gid +.Em nonunix_gid may be enclosed in double quotes to avoid the need for escaping special characters. Alternately, special characters @@ -846,9 +844,9 @@ using double quotes, any prefix characters must be included inside the quotes. .Pp The actual -.Li nonunix_group +.Em nonunix_group and -.Li nonunix_gid +.Em nonunix_gid syntax depends on the underlying group provider plugin. For instance, the QAS AD plugin supports the following formats: @@ -889,21 +887,21 @@ Runas_Member ::= '!'* user name | .Ed .Pp A -.Li Runas_List +.Em Runas_List is similar to a -.Li User_List +.Em User_List except that instead of -.Li User_Alias Ns es +.Em User_Alias Ns es it can contain -.Li Runas_Alias Ns es . +.Em Runas_Alias Ns es . User names and groups are matched as strings. In other words, two users (groups) with the same user (group) ID are considered to be distinct. If you wish to match all user names with the same user-ID (e.g., root and toor), you can use a user-ID instead of a name (#0 in the example given). The user-ID or group-ID specified in a -.Li Runas_Member +.Em Runas_Member need not be listed in the password or group database. .Bd -literal Host_List ::= Host | @@ -918,7 +916,7 @@ Host ::= '!'* host name | .Ed .Pp A -.Li Host_List +.Em Host_List is made up of one or more host names, IP addresses, network numbers, netgroups (prefixed with .Ql + ) , @@ -940,7 +938,7 @@ A host name may include shell-style wildcards (see the .Sx Wildcards section below), but unless the -.Li host name +.Em hostname command on your machine returns the fully qualified host name, you'll need to use the .Em fqdn @@ -987,7 +985,7 @@ Cmnd ::= Digest_List? '!'* command | .Ed .Pp A -.Li Cmnd_List +.Em Cmnd_List is a list of one or more commands, directories, or aliases. A command is a fully qualified file name, which may include shell-style wildcards (see the @@ -1004,7 +1002,7 @@ A directory is a fully qualified path name ending in a .Ql / . When you specify a directory in a -.Li Cmnd_List , +.Em Cmnd_List , the user will be able to run any file within that directory (but not in any sub-directories therein). If no command line arguments are specified, the user may run the @@ -1015,19 +1013,19 @@ expression that starts with and ends with .Ql $ . If the command line arguments consist of -.Li \&"" , +.Ql \&"" , the command may only be run with .Em no arguments. .Pp If a -.Li Cmnd +.Em Cmnd has associated command line arguments, the arguments in the -.Li Cmnd +.Em Cmnd must match those given by the user on the command line. If the arguments in a -.Li Cmnd +.Em Cmnd begin with the .Ql ^ character, they will be interpreted as a regular expression @@ -1042,7 +1040,7 @@ if they are used in command arguments: .Ql =\& , .Ql \e . To prevent arguments in a -.Li Cmnd +.Em Cmnd that begin with a .Ql ^ character from being interpreted as a regular expression, the @@ -1051,7 +1049,7 @@ must be escaped with a .Ql \e . .Pp The built-in command -.Dq Li sudoedit +.Dq sudoedit is used to permit a user to run .Nm sudo with the @@ -1060,7 +1058,7 @@ option (or as .Nm sudoedit ) . It may take command line arguments just as a normal command does. Unlike other commands, -.Dq Li sudoedit +.Dq sudoedit is built into .Nm sudo itself and must be specified in the @@ -1071,27 +1069,27 @@ a leading path. If a leading path is present, for example .Pa /usr/bin/sudoedit , the path name will be silently converted to -.Dq Li sudoedit . +.Dq sudoedit . A fully-qualified path for .Nm sudoedit is treated as an error by .Nm visudo . .Pp A -.Li command +.Em command may be preceded by a -.Li Digest_List , +.Em Digest_List , a comma-separated list of one or more -.Li Digest_Spec +.Em Digest_Spec entries. If a -.Li Digest_List +.Em Digest_List is present, the command will only match successfully if it can be verified using one of the SHA-2 digests in the list. Starting with version 1.9.0, the .Sy ALL reserved word can be used in conjunction with a -.Li Digest_List . +.Em Digest_List . The following digest formats are supported: sha224, sha256, sha384, and sha512. The string may be specified in either hex or base64 format (base64 is more compact). @@ -1115,7 +1113,7 @@ Warning, if the user has write access to the command itself (directly or via a command), it may be possible for the user to replace the command after the digest check has been performed but before the command is executed. A similar race condition exists on systems that lack the -.Fn fexecve +.Xr fexecve 2 system call when the directory in which the command is located is writable by the user. See the description of the @@ -1128,13 +1126,13 @@ Command digests are only supported by version 1.8.7 or higher. .Ss Defaults Certain configuration options may be changed from their default values at run-time via one or more -.Li Default_Entry +.Em Default_Entry lines. These may affect all users on any host, all users on a specific host, a specific user, a specific command, or commands being run as a specific user. Per-command entries may not include command line arguments. If you need to specify arguments, define a -.Li Cmnd_Alias +.Em Cmnd_Alias and reference that instead. .Bd -literal @@ -1192,16 +1190,16 @@ or function. .Pp Lists have two additional assignment operators, -.Li += +.Ql += and -.Li -= . +.Ql -= . These operators are used to add to and delete from a list respectively. It is not an error to use the -.Li -= +.Ql -= operator to remove an element that does not exist in a list. .Pp -Defaults entries are parsed in the following order: generic, host, +Defaults entries are parsed in the following order: global, host, user, and runas Defaults first, then command defaults. If there are multiple Defaults settings of the same type, the last matching setting is used. @@ -1283,18 +1281,18 @@ The basic structure of a user specification is Let's break that down into its constituent parts: .Ss Runas_Spec A -.Li Runas_Spec +.Em Runas_Spec determines the user and/or the group that a command may be run as. A fully-specified -.Li Runas_Spec +.Em Runas_Spec consists of two -.Li Runas_List Ns s +.Em Runas_List Ns s (as defined above) separated by a colon .Pq Ql :\& and enclosed in a set of parentheses. The first -.Li Runas_List +.Em Runas_List indicates which users the command may be run as via the .Fl u option. @@ -1302,24 +1300,24 @@ The second defines a list of groups that may be specified via the .Fl g option (in addition to any of the target user's groups). If both -.Li Runas_List Ns s +.Em Runas_List Ns s are specified, the command may be run with any combination of users and groups listed in their respective -.Li Runas_List Ns s. +.Em Runas_List Ns s. If only the first is specified, the command may be run as any user in the list and, optionally, with any group the target user belongs to. If the first -.Li Runas_List +.Em Runas_List is empty but the second is specified, the command may be run as the invoking user with the group set to any listed in the -.Li Runas_List . +.Em Runas_List . If both -.Li Runas_List Ns s +.Em Runas_List Ns s are empty, the command may only be run as the invoking user and the group, if specified, must be one that the invoking user is a member of. If no -.Li Runas_Spec +.Em Runas_Spec is specified, the command may only be run as .Sy root and the group, if specified, must be one that @@ -1327,7 +1325,7 @@ and the group, if specified, must be one that is a member of. .Pp A -.Li Runas_Spec +.Em Runas_Spec sets the default for the commands that follow it. What this means is that for the entry: .Bd -literal @@ -1345,13 +1343,13 @@ on the host .No boulder Ns \(em Ns but only as .Sy operator . -E.g., +For example: .Bd -literal $ sudo -u operator /bin/ls .Ed .Pp It is also possible to override a -.Li Runas_Spec +.Em Runas_Spec later on in an entry. If we modify the entry like so: .Bd -literal @@ -1374,7 +1372,7 @@ as We can extend this to allow .Sy dgb to run -.Li /bin/ls +.Pa /bin/ls with either the user or group set to .Sy operator : @@ -1384,7 +1382,7 @@ dgb boulder = (operator : operator) /bin/ls, (root) /bin/kill,\e .Ed .Pp While the group portion of the -.Li Runas_Spec +.Em Runas_Spec permits the user to run as command with that group, it does not force the user to do so. @@ -1409,13 +1407,13 @@ tcm boulder = (:dialer) /usr/bin/tip, /usr/bin/cu,\e .Pp In this example only the group will be set, the command still runs as user .Sy tcm . -E.g.\& +For example: .Bd -literal $ sudo -g dialer /usr/bin/cu .Ed .Pp Multiple users and groups may be present in a -.Li Runas_Spec , +.Em Runas_Spec , in which case the user may select any combination of users and groups via the .Fl u and @@ -1432,7 +1430,7 @@ may run any command as either user root or bin, optionally setting the group to operator or system. .Ss Option_Spec A -.Li Cmnd +.Em Cmnd may have zero or more options associated with it. Options may consist of .if \n(SL \{\ @@ -1446,11 +1444,11 @@ Solaris privileges sets, .\} start and/or end dates and command timeouts. Once an option is set for a -.Li Cmnd , +.Em Cmnd , subsequent -.Li Cmnd Ns s +.Em Cmnd Ns s in the -.Li Cmnd_Spec_List , +.Em Cmnd_Spec_List , inherit that option unless it is overridden by another option. Option names are reserved words in .Em sudoers . @@ -1498,7 +1496,8 @@ the user may run any command as root under confinement by the profile .Ql my-profile . You can also stack profiles, or allow a user to run commands unconfined by -any profile. E.g., +any profile. +For example: .Bd -literal bob ALL = (root) APPARMOR_PROFILE=foo//&bar /usr/bin/vi cathy ALL = (root) APPARMOR_PROFILE=unconfined /bin/ls @@ -1563,15 +1562,15 @@ character. .Ss Date_Spec .Nm rules can be specified with a start and end date via the -.Li NOTBEFORE +.Dv NOTBEFORE and -.Li NOTAFTER +.Dv NOTAFTER settings. The time stamp must be specified in -.Em Generalized Time +.Dq Generalized Time as defined by RFC 4517. The format is effectively -.Li yyyymmddHHMMSSZ +.Ql yyyymmddHHMMSSZ where the minutes and seconds are optional. The .Ql Z @@ -1602,7 +1601,7 @@ minutes, and seconds with a single-letter case-insensitive suffix that indicates the unit of time. For example, a timeout of 7 days, 8 hours, 30 minutes, and 10 seconds would be written as -.Li 7d8h30m10s . +.Ql 7d8h30m10s . If a number is specified without a unit, seconds are assumed. Any of the days, minutes, hours, or seconds may be omitted. The order must be from largest to smallest unit and a unit @@ -1611,23 +1610,23 @@ may not be specified more than once. The following are all .Em valid timeout values: -.Li 7d8h30m10s , -.Li 14d , -.Li 8h30m , -.Li 600s , -.Li 3600 . +.Ql 7d8h30m10s , +.Ql 14d , +.Ql 8h30m , +.Ql 600s , +.Ql 3600 . The following are .Em invalid timeout values: -.Li 12m2w1d , -.Li 30s10m4h , -.Li 1d2d3h . +.Ql 12m2w1d , +.Ql 30s10m4h , +.Ql 1d2d3h . .Pp This setting is only supported by version 1.8.20 or higher. .Ss Chdir_Spec The working directory that the command will be run in can be specified using the -.Li CWD +.Dv CWD setting. The .Fa directory @@ -1649,7 +1648,7 @@ directory, unless the .Fl i option is given. Path names of the form -.Li ~user/path/name +.Pa ~user/path/name are interpreted as being relative to the named user's home directory. If the user name is omitted, the path will be relative to the runas user's home directory. @@ -1658,7 +1657,7 @@ This setting is only supported by version 1.9.3 or higher. .Ss Chroot_Spec The root directory that the command will be run in can be specified using the -.Li CHROOT +.Dv CHROOT setting. The .Fa directory @@ -1682,7 +1681,7 @@ similar to the .Xr chroot @mansectsu@ utility. Path names of the form -.Li ~user/path/name +.Pa ~user/path/name are interpreted as being relative to the named user's home directory. If the user name is omitted, the path will be relative to the runas user's home directory. @@ -1691,46 +1690,46 @@ This setting is only supported by version 1.9.3 or higher. .Ss Tag_Spec A command may have zero or more tags associated with it. The following tag values are supported: -.Li EXEC , -.Li NOEXEC , -.Li FOLLOW , -.Li NOFOLLOW , -.Li LOG_INPUT , -.Li NOLOG_INPUT , -.Li LOG_OUTPUT , -.Li NOLOG_OUTPUT , -.Li MAIL , -.Li NOMAIL , -.Li INTERCEPT , -.Li NOINTERCEPT , -.Li PASSWD , -.Li NOPASSWD , -.Li SETENV , +.Dv EXEC , +.Dv NOEXEC , +.Dv FOLLOW , +.Dv NOFOLLOW , +.Dv LOG_INPUT , +.Dv NOLOG_INPUT , +.Dv LOG_OUTPUT , +.Dv NOLOG_OUTPUT , +.Dv MAIL , +.Dv NOMAIL , +.Dv INTERCEPT , +.Dv NOINTERCEPT , +.Dv PASSWD , +.Dv NOPASSWD , +.Dv SETENV , and -.Li NOSETENV . +.Dv NOSETENV . Once a tag is set on a -.Li Cmnd , +.Em Cmnd , subsequent -.Li Cmnd Ns s +.Em Cmnd Ns s in the -.Li Cmnd_Spec_List , +.Em Cmnd_Spec_List , inherit the tag unless it is overridden by the opposite tag (in other words, -.Li PASSWD +.Dv PASSWD overrides -.Li NOPASSWD +.Dv NOPASSWD and -.Li NOEXEC +.Dv NOEXEC overrides -.Li EXEC ) . +.Dv EXEC ) . .Bl -hang -width 0n -.It Em EXEC No and Em NOEXEC +.It Dv EXEC No and Dv NOEXEC .sp If .Nm sudo has been compiled with .Em noexec support and the underlying operating system supports it, the -.Li NOEXEC +.Dv NOEXEC tag can be used to prevent a dynamically-linked executable from running further commands itself. .Pp @@ -1748,18 +1747,19 @@ aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi See the .Sx Preventing shell escapes section below for more details on how -.Li NOEXEC +.Dv NOEXEC works and whether or not it will work on your system. -.It Em FOLLOW No and Em NOFOLLOW +.It Dv FOLLOW No and Dv NOFOLLOW +.sp Starting with version 1.8.15, .Nm sudoedit will not open a file that is a symbolic link unless the .Em sudoedit_follow flag is enabled. The -.Em FOLLOW +.Dv FOLLOW and -.Em NOFOLLOW +.Dv NOFOLLOW tags override the value of .Em sudoedit_follow and can be used to permit (or deny) the editing of symbolic links @@ -1767,7 +1767,7 @@ on a per-command basis. These tags are only effective for the .Em sudoedit command and are ignored for all other commands. -.It Em LOG_INPUT No and Em NOLOG_INPUT +.It Dv LOG_INPUT No and Dv NOLOG_INPUT .sp These tags override the value of the .Em log_input @@ -1777,7 +1777,7 @@ For more information, see the description of in the .Sx SUDOERS OPTIONS section below. -.It Em LOG_OUTPUT No and Em NOLOG_OUTPUT +.It Dv LOG_OUTPUT No and Dv NOLOG_OUTPUT .sp These tags override the value of the .Em log_output @@ -1787,7 +1787,7 @@ For more information, see the description of in the .Sx SUDOERS OPTIONS section below. -.It Em MAIL No and Em NOMAIL +.It Dv MAIL No and Dv NOMAIL .sp These tags provide fine-grained control over whether mail will be sent when a user runs a command by @@ -1802,7 +1802,7 @@ or .Fl v options. A -.Em NOMAIL +.Dv NOMAIL tag will also override the .Em mail_always and @@ -1816,24 +1816,24 @@ and in the .Sx SUDOERS OPTIONS section below. -.It Em PASSWD No and Em NOPASSWD +.It Dv PASSWD No and Dv NOPASSWD .sp By default, .Nm sudo requires that a user authenticate before running a command. This behavior can be modified via the -.Li NOPASSWD +.Dv NOPASSWD tag. Like a -.Li Runas_Spec , +.Em Runas_Spec , the -.Li NOPASSWD +.Dv NOPASSWD tag sets a default for the commands that follow it in the -.Li Cmnd_Spec_List . +.Em Cmnd_Spec_List . Conversely, the -.Li PASSWD +.Dv PASSWD tag can be used to reverse things. For example: .Bd -literal @@ -1863,35 +1863,35 @@ ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm .Ed .Pp Note, however, that the -.Li PASSWD +.Dv PASSWD tag has no effect on users who are in the group specified by the .Em exempt_group setting. .Pp By default, if the -.Li NOPASSWD +.Dv NOPASSWD tag is applied to any of a user's entries for the current host, the user will be able to run -.Dq Li sudo -l +.Ql sudo -l without a password. Additionally, a user may only run -.Dq Li sudo -v +.Ql sudo -v without a password if all of the user's entries for the current host have the -.Li NOPASSWD +.Dv NOPASSWD tag. This behavior may be overridden via the .Em verifypw and .Em listpw options. -.It Em SETENV No and Em NOSETENV +.It Dv SETENV No and Dv NOSETENV .sp These tags override the value of the .Em setenv flag on a per-command basis. If -.Li SETENV +.Dv SETENV has been set for a command, the user may disable the .Em env_reset flag from the command line via the @@ -1907,18 +1907,18 @@ As such, only trusted users should be allowed to set variables in this manner. If the command matched is .Sy ALL , the -.Li SETENV +.Dv SETENV tag is implied for that command; this default may be overridden by use of the -.Li NOSETENV +.Dv NOSETENV tag. -.It Em INTERCEPT No and Em NOINTERCEPT +.It Dv INTERCEPT No and Dv NOINTERCEPT .sp If .Nm sudo has been compiled with .Em intercept support and the underlying operating system supports it, the -.Li INTERCEPT +.Dv INTERCEPT tag can be used to cause programs spawned by a command to be validated against .Em sudoers and logged just like they would be if run through @@ -1944,7 +1944,7 @@ chuck research = INTERCEPT: ALL See the .Sx Preventing shell escapes section below for more details on how -.Li INTERCEPT +.Dv INTERCEPT works and whether or not it will work on your system. .El .Ss Wildcards @@ -1962,17 +1962,17 @@ and functions as specified by .St -p1003.1 . .Bl -tag -width 8n -.It Li * +.It * Matches any set of zero or more characters (including white space). -.It Li \&? +.It \&? Matches any single character (including white space). -.It Li [...] +.It [...] Matches any character in the specified range. -.It Li [!...] +.It [!...] Matches any character .Em not in the specified range. -.It Li \ex +.It \ex For any character .Sq x , evaluates to @@ -2043,9 +2043,9 @@ below. .Ss Exceptions to wildcard rules The following exceptions apply to the above rules: .Bl -tag -width 8n -.It Li \&"" +.It \&"" If the empty string -.Li \&"" +.Ql \&"" is the only command line argument in the .Em sudoers file entry it means that command is not allowed to be run with @@ -2164,14 +2164,14 @@ It is possible to include other files from within the .Em sudoers file currently being parsed using the -.Li @include +.Em @include and -.Li @includedir +.Em @includedir directives. For compatibility with sudo versions prior to 1.9.1, -.Li #include +.Em #include and -.Li #includedir +.Em #includedir are also accepted. .Pp An include file can be used, for example, to keep a site-wide @@ -2227,14 +2227,14 @@ For example, if .Pa /etc/sudoers contains the line: .Bd -literal -offset 4n -.Li @include sudoers.local +@include sudoers.local .Ed .Pp the file that will be included is .Pa /etc/sudoers.local . .Pp The file name may also include the -.Li %h +.Ql %h escape, signifying the short form of the host name. In other words, if the machine's host name is .Dq xerxes , @@ -2249,7 +2249,7 @@ to include the file .Pa /etc/sudoers.xerxes . .Pp The -.Li @includedir +.Em @includedir directive can be used to create a .Pa sudoers.d directory that the system package manager can drop @@ -2269,6 +2269,7 @@ or contain a .Ql .\& character to avoid causing problems with package manager or editor temporary/backup files. +.Pp Files are parsed in sorted lexical order. That is, .Pa /etc/sudoers.d/01_first @@ -2283,14 +2284,14 @@ Using a consistent number of leading zeroes in the file names can be used to avoid such problems. After parsing the files in the directory, control returns to the file that contained the -.Li @includedir +.Em @includedir directive. .Pp Unlike files included via -.Li @include , +.Em @include , .Nm visudo will not edit the files in a -.Li @includedir +.Em @includedir directory unless one of them contains a syntax error. It is still possible to run .Nm visudo @@ -2316,11 +2317,11 @@ is a built-in .Em alias that always causes a match to succeed. It can be used wherever one might otherwise use a -.Li Cmnd_Alias , -.Li User_Alias , -.Li Runas_Alias , +.Em Cmnd_Alias , +.Em User_Alias , +.Em Runas_Alias , or -.Li Host_Alias . +.Em Host_Alias . Attempting to define an .Em alias named @@ -2333,22 +2334,22 @@ can be dangerous since in a command context, it allows the user to run command on the system. .Pp The following option names permitted in an -.Li Option_Spec +.Em Option_Spec are also considered reserved words: -.Li CHROOT , +.Dv CHROOT , .if \n(PS \{\ -.Li PRIVS , -.Li LIMITPRIVS , +.Dv PRIVS , +.Dv LIMITPRIVS , .\} .if \n(SL \{\ -.Li ROLE , -.Li TYPE , +.Dv ROLE , +.Dv TYPE , .\} -.Li TIMEOUT , -.Li CWD , -.Li NOTBEFORE +.Dv TIMEOUT , +.Dv CWD , +.Dv NOTBEFORE and -.Li NOTAFTER . +.Dv NOTAFTER . Attempting to define an .Em alias with the same name as one of the options will result in a syntax error. @@ -2360,14 +2361,14 @@ can be used as a logical operator in a list or .Em alias as well as in front of a -.Li Cmnd . +.Em Cmnd . This allows one to exclude certain values. For the .Ql \&! operator to be effective, there must be something for it to exclude. For example, to match all users except for root one would use: .Bd -literal -offset 4n -ALL,!root +ALL, !root .Ed .Pp If the @@ -2420,7 +2421,7 @@ when used as part of a word (e.g., a user name or host name): .Sh SUDOERS OPTIONS .Nm sudo Ns 's behavior can be modified by -.Li Default_Entry +.Em Default_Entry lines, as explained earlier. A list of all supported Defaults parameters, grouped by type, are listed below. .Pp @@ -2429,9 +2430,12 @@ A list of all supported Defaults parameters, grouped by type, are listed below. .It always_query_group_plugin If a .Em group_plugin -is configured, use it to resolve groups of the form %group as long -as there is not also a system group of the same name. -Normally, only groups of the form %:group are passed to the +is configured, use it to resolve groups of the form +.Ql %group +as long as there is not also a system group of the same name. +Normally, only groups of the form +.Ql %:group +are passed to the .Em group_plugin . This flag is .Em off @@ -2459,9 +2463,9 @@ by default. If set, users must authenticate themselves via a password (or other means of authentication) before they may run commands. This default may be overridden via the -.Li PASSWD +.Dv PASSWD and -.Li NOPASSWD +.Dv NOPASSWD tags. This flag is .Em on @@ -2541,10 +2545,10 @@ automatic restarting of system calls. Unfortunately, not all operating systems do this by default, and even those that do may have bugs. For example, macOS fails to restart the -.Fn tcgetattr +.Xr tcgetattr 3 and -.Fn tcsetattr -system calls (this is a bug in macOS). +.Xr tcsetattr 3 +functions (this is a bug in macOS). Furthermore, because this behavior depends on the command stopping with the .Dv SIGTTIN or @@ -2626,17 +2630,17 @@ Any variables in the caller's environment or in the file specified by the .Em restricted_env_file setting that match the -.Li env_keep +.Em env_keep and -.Li env_check +.Em env_check lists are then added, followed by any variables present in the file specified by the .Em env_file setting (if any). The contents of the -.Li env_keep +.Em env_keep and -.Li env_check +.Em env_check lists, as modified by global Defaults parameters in .Em sudoers , are displayed when @@ -2727,16 +2731,16 @@ This setting is only supported by version 1.9.10 or higher. Set this flag if you want to put fully qualified host names in the .Em sudoers file when the local host name (as returned by the -.Li hostname +.Ql hostname command) does not contain the domain name. In other words, instead of myhost you would use myhost.mydomain.edu. You may still use the short form if you wish (and even mix the two). This flag is only effective when the .Dq canonical host name, as returned by the -.Fn getaddrinfo +.Xr getaddrinfo 3 or -.Fn gethostbyname +.Xr gethostbyname 3 function, is a fully-qualified domain name. This is usually the case when the system is configured to use DNS for host name resolution. @@ -2783,13 +2787,8 @@ from the network). Just like with the hosts file, you must use the .Dq canonical name as DNS knows it. -That is, you may not use a host alias -.Po -.Li CNAME -entry -.Pc -due to performance issues and the fact that there is no way to get all -aliases from DNS. +That is, you may not use a host alias (CNAME entry) due to performance +issues and the fact that there is no way to get all aliases from DNS. .Pp This flag is .Em @fqdn@ @@ -2812,7 +2811,7 @@ by default. .It ignore_dot If set, .Nm sudo -will ignore "." or "" (both denoting current directory) in the +will ignore "." or "" (both denoting the current directory) in the .Ev PATH environment variable; the .Ev PATH @@ -2848,7 +2847,7 @@ by default. If set via LDAP, parsing of .Pa @sysconfdir@/sudoers will be skipped. -This is intended for Enterprises that wish to prevent the usage of local +This is intended for sites that wish to prevent the usage of local sudoers files so that only LDAP is used. This thwarts the efforts of rogue operators who would attempt to add roles to .Pa @sysconfdir@/sudoers . @@ -2859,7 +2858,7 @@ Since this flag tells .Nm sudo how to behave when no specific LDAP entries have been matched, this sudoOption is only meaningful for the -.Li cn=defaults +.Ql cn=defaults section. This flag is .Em off @@ -2984,15 +2983,15 @@ If set, .Nm will log when a command spawns a child process and executes a program using the -.Fn execl , -.Fn execle , -.Fn execlp , -.Fn execv , -.Fn execve , -.Fn execvp , -.Fn execvpe , +.Xr execve 2 , +.Xr execl 3 , +.Xr execle 3 , +.Xr execlp 3 , +.Xr execv 3 , +.Xr execvp 3 , +.Xr execvpe 3 , or -.Fn system +.Xr system 3 library functions. For example, if a shell is run by .Nm sudo , @@ -3119,7 +3118,7 @@ This works well on systems where the number of groups listed in the .Em sudoers file is larger than the number of groups a typical user belongs to. On systems where group lookups are slow, where users may belong -to a large number of groups, and where the number of groups listed +to a large number of groups, or where the number of groups listed in the .Em sudoers file is relatively small, it may be prohibitively expensive and @@ -3165,12 +3164,12 @@ This setting is only supported by version 1.8.18 or higher. If set, all commands run via .Nm sudo will behave as if the -.Li INTERCEPT +.Dv INTERCEPT tag has been set, unless overridden by an -.Li NOINTERCEPT +.Dv NOINTERCEPT tag. See the description of -.Em INTERCEPT and NOINTERCEPT +.Dv INTERCEPT and NOINTERCEPT above as well as the .Sx Preventing shell escapes section at the end of this manual. @@ -3196,7 +3195,7 @@ is enable. This flag has no effect unless the .Em intercept flag is enabled or the -.Em INTERCEPT +.Dv INTERCEPT tag has been set for the command. This flag is .Em on @@ -3218,7 +3217,7 @@ subsequent commands will need to be authenticated. This flag has no effect unless the .Em intercept flag is enabled or the -.Em INTERCEPT +.Dv INTERCEPT tag has been set for the command. This flag is .Em off @@ -3257,7 +3256,7 @@ file system is available. This flag has no effect unless the .Em intercept flag is enabled or the -.Em INTERCEPT +.Dv INTERCEPT tag has been set for the command and the .Em intercept_type option is set to @@ -3273,9 +3272,9 @@ tuple: host name, user name, and domain (if one is set). Historically, .Nm sudo only matched the user name and domain for netgroups used in a -.Li User_List +.Em User_List and only matched the host name and domain for netgroups used in a -.Li Host_List . +.Em Host_List . This flag is .Em off by default. @@ -3283,12 +3282,12 @@ by default. If set, all commands run via .Nm sudo will behave as if the -.Li NOEXEC +.Dv NOEXEC tag has been set, unless overridden by an -.Li EXEC +.Dv EXEC tag. See the description of -.Em EXEC and NOEXEC +.Dv EXEC and NOEXEC above as well as the .Sx Preventing shell escapes section at the end of this manual. @@ -3492,7 +3491,7 @@ Disabling this prevents users from .Dq chaining .Nm sudo commands to get a root shell by doing something like -.Dq Li sudo sudo /bin/sh . +.Ql sudo sudo /bin/sh . Note, however, that turning off .Em root_sudo will also prevent root from running @@ -3515,7 +3514,7 @@ by default. If enabled, allow matching of runas user and group IDs that are not present in the password or group databases. In addition to explicitly matching unknown user or group IDs in a -.Li Runas_List , +.Em Runas_List , this option also allows the .Sy ALL alias to match unknown IDs. @@ -3533,7 +3532,7 @@ If enabled, will only run commands as a user whose shell appears in the .Pa /etc/shells file, even if the invoking user's -.Li Runas_List +.Em Runas_List would otherwise permit it. If no .Pa /etc/shells @@ -3552,8 +3551,7 @@ If set, .Nm sudo will prompt for the password of the user defined by the .Em runas_default -option (defaults to -.Li @runas_default@ ) +option (defaults to @runas_default@) instead of the password of the invoking user when running a command or editing a file. This flag is @@ -3718,9 +3716,9 @@ option can be enabled to allow .Nm sudoedit to open symbolic links. It may be overridden on a per-command basis by the -.Em FOLLOW +.Dv FOLLOW and -.Em NOFOLLOW +.Dv NOFOLLOW tags. This flag is .Em off @@ -3742,8 +3740,7 @@ If set, will prompt for the password of the user specified by the .Fl u -option (defaults to -.Li root ) +option (defaults to root) instead of the password of the invoking user when running a command or editing a file. This flag precludes the use of a user-ID not listed in the passwd @@ -3842,7 +3839,7 @@ If a timeout is specified both in the .Pa sudoers file and on the command line, the smaller of the two timeouts will be used. See the -.Li Timeout_Spec +.Em Timeout_Spec section for a description of the timeout syntax. This flag is .Em off @@ -3870,7 +3867,7 @@ flag is set, .Nm sudo will prompt for a password even when it would be visible on the screen. This makes it possible to run things like -.Dq Li ssh somehost sudo ls +.Ql ssh somehost sudo ls since by default, .Xr ssh 1 does @@ -3891,13 +3888,12 @@ The .Em closefrom option can be used to specify a different file descriptor at which to start closing. -The default is -.Li 3 . +The default is 3. .It command_timeout The maximum amount of time a command is allowed to run before it is terminated. See the -.Li Timeout_Spec +.Em Timeout_Spec section for a description of the timeout syntax. .Pp This setting is only supported by version 1.8.20 or higher. @@ -3905,19 +3901,19 @@ This setting is only supported by version 1.8.20 or higher. The maximum amount of time to wait when connecting to a log server or waiting for a server response. See the -.Li Timeout_Spec +.Em Timeout_Spec section for a description of the timeout syntax. The default value is 30 seconds. .Pp This setting is only supported by version 1.9.0 or higher. .It maxseq The maximum sequence number that will be substituted for the -.Dq Li %{seq} +.Ql %{seq} escape in the I/O log file (see the .Em iolog_dir description below for more information). While the value substituted for -.Dq Li %{seq} +.Ql %{seq} is in base 36, .Em maxseq itself should be expressed in decimal. @@ -3940,8 +3936,7 @@ This setting is only supported by version 1.8.7 or higher. The number of tries a user gets to enter his/her password before .Nm sudo logs the failure and exits. -The default is -.Li @passwd_tries@ . +The default is @passwd_tries@. .It syslog_maxlen On many systems, .Xr syslog 3 @@ -3973,40 +3968,28 @@ This setting is only supported by version 1.8.19 or higher. Number of characters per line for the file log. This value is used to decide when to wrap lines for nicer log files. This has no effect on the syslog log file, only the file log. -The default is -.Li @loglen@ -(use 0 or negate the option to disable word wrap). +The default is @loglen@ (use 0 or negate the option to disable word wrap). .It passwd_timeout Number of minutes before the .Nm sudo -password prompt times out, or -.Li 0 -for no timeout. +password prompt times out, or 0 for no timeout. The timeout may include a fractional component -if minute granularity is insufficient, for example -.Li 2.5 . -The -default is -.Li @password_timeout@ . +if minute granularity is insufficient, for example 2.5. +The default is @password_timeout@. .It timestamp_timeout Number of minutes that can elapse before .Nm sudo will ask for a password again. The timeout may include a fractional component if -minute granularity is insufficient, for example -.Li 2.5 . -The default is -.Li @timeout@ . -Set this to -.Li 0 -to always prompt for a password. -If set to a value less than -.Li 0 -the user's time stamp will not expire until the system is rebooted. +minute granularity is insufficient, for example 2.5. +The default is @timeout@. +Set this to 0 to always prompt for a password. +If set to a value less than 0 the user's time stamp will not expire +until the system is rebooted. This can be used to allow users to create or delete their own time stamps via -.Dq Li sudo -v +.Ql sudo -v and -.Dq Li sudo -k +.Ql sudo -k respectively. .It umask File mode creation mask to use when running the command. @@ -4018,10 +4001,8 @@ Unless the flag is set, the actual umask will be the union of the user's umask and the value of the .Em umask -setting, which defaults to -.Li @sudo_umask@ . -This guarantees -that +setting, which defaults to @sudo_umask@. +This guarantees that .Nm sudo never lowers the umask when running a command. .Pp @@ -4051,7 +4032,7 @@ The default can be overridden for individual .Em sudoers entries by specifying the -.Em APPARMOR_PROFILE +.Dv APPARMOR_PROFILE option. This option is only available when sudo is built with AppArmor support. @@ -4062,11 +4043,11 @@ The message may include the .Ql %d escape which will expand to the number of failed password attempts. If set, it overrides the default message, -.Li %d incorrect password attempt(s) . +.Dq %d incorrect password attempt(s) . .It badpass_message Message that is displayed if a user enters an incorrect password. The default is -.Li @badpass_message@ +.Dq @badpass_message@ unless insults are enabled. .It editor A colon @@ -4119,15 +4100,15 @@ It has the following possible values: .Bl -tag -width 6n .It dso Preload a dynamic shared object (shared library) that intercepts the -.Fn execl , -.Fn execle , -.Fn execlp , -.Fn execv , -.Fn execve , -.Fn execvp , -.Fn execvpe , +.Xr execve 2 , +.Xr execl 3 , +.Xr execle 3 , +.Xr execlp 3 , +.Xr execv 3 , +.Xr execvp 3 , +.Xr execvpe 3 , and -.Fn system +.Xr system 3 library functions. A value of .Em dso @@ -4169,9 +4150,9 @@ Only used if the or .Em log_output options are enabled or when the -.Li LOG_INPUT +.Dv LOG_INPUT or -.Li LOG_OUTPUT +.Dv LOG_OUTPUT tags are present for a command. The session sequence number, if any, is stored in the directory. The default is @@ -4181,23 +4162,23 @@ The following percent .Pq Ql % escape sequences are supported: .Bl -tag -width 4n -.It Li %{seq} +.It %{seq} expanded to a monotonically increasing base-36 sequence number, such as 0100A5, where every two digits are used to form a new directory, e.g., .Pa 01/00/A5 -.It Li %{user} +.It %{user} expanded to the invoking user's login name -.It Li %{group} +.It %{group} expanded to the name of the invoking user's real group-ID -.It Li %{runas_user} +.It %{runas_user} expanded to the login name of the user the command will be run as (e.g., root) -.It Li %{runas_group} +.It %{runas_group} expanded to the group name of the user the command will be run as (e.g., wheel) -.It Li %{hostname} +.It %{hostname} expanded to the local host name without the domain name -.It Li %{command} +.It %{command} expanded to the base name of the command being run .El .Pp @@ -4218,14 +4199,14 @@ in which to store input/output logs when the or .Em log_output options are enabled or when the -.Li LOG_INPUT +.Dv LOG_INPUT or -.Li LOG_OUTPUT +.Dv LOG_OUTPUT tags are present for a command. .Em iolog_file may contain directory components. The default is -.Dq Li %{seq} . +.Ql %{seq} . .Pp See the .Em iolog_dir @@ -4235,9 +4216,9 @@ escape sequences. .Pp In addition to the escape sequences, path names that end in six or more -.Li X Ns s +.Em X Ns s will have the -.Li X Ns s +.Em X Ns s replaced with a unique combination of digits and letters, similar to the .Xr mktemp 3 function. @@ -4251,7 +4232,7 @@ overwritten unless .Em iolog_file ends in six or more -.Li X Ns s . +.Em X Ns s . .It iolog_flush If set, .Nm sudo @@ -4376,10 +4357,10 @@ Subject of the mail sent to the .Em mailto user. The escape -.Li %h +.Ql %h will expand to the host name of the machine. Default is -.Dq Li @mailsub@ . +.Dq @mailsub@ . .It noexec_file As of .Nm sudo @@ -4393,9 +4374,9 @@ name used when the .Fl A option is specified. The default value is either -.Dq Li @pam_service@ +.Ql @pam_service@ or -.Dq Li @pam_login_service@ , +.Ql @pam_login_service@ , depending on whether or not the .Fl i option is also specified. @@ -4410,7 +4391,7 @@ name used when the .Fl i option is specified. The default value is -.Dq Li @pam_login_service@ . +.Ql @pam_login_service@ . See the description of .Em pam_service for more information. @@ -4425,7 +4406,7 @@ file or a file in the .Pa /etc/pam.d directory. The default value is -.Dq Li sudo . +.Ql sudo . .Pp This setting is only supported by version 1.8.8 or higher. .It passprompt @@ -4438,14 +4419,14 @@ The following percent .Pq Ql % escape sequences are supported: .Bl -tag -width 4n -.It Li %H +.It %H expanded to the local host name including the domain name (only if the machine's host name is fully qualified or the .Em fqdn option is set) -.It Li %h +.It %h expanded to the local host name without the domain name -.It Li %p +.It %p expanded to the user whose password is being asked for (respects the .Em rootpw , .Em targetpw @@ -4453,16 +4434,16 @@ and .Em runaspw flags in .Em sudoers ) -.It Li \&%U +.It \&%U expanded to the login name of the user the command will be run as (defaults to root) -.It Li %u +.It %u expanded to the invoking user's login name -.It Li %% +.It %% two consecutive -.Li % +.Ql % characters are collapsed into a single -.Li % +.Ql % character .El .Pp @@ -4480,7 +4461,7 @@ The flag can be used to change this behavior. .Pp The default value is -.Dq Li "@passprompt@" . +.Ql "@passprompt@" . .if \n(PS \{\ .It privs The default Solaris privileges to use when constructing a new @@ -4514,14 +4495,13 @@ is built with SELinux support. The default user to run commands as if the .Fl u option is not specified on the command line. -This defaults to -.Li @runas_default@ . +This defaults to @runas_default@. .It sudoers_locale Locale to use when parsing the sudoers file, logging commands, and sending email. Changing the locale may affect how sudoers is interpreted. Defaults to -.Dq Li C . +.Ql C . .It timestamp_type .Nm uses per-user time stamp files for credential caching. @@ -4542,11 +4522,7 @@ process ID (usually the shell). Commands run from the same shell (or other common parent process) will not require a password for .Em timestamp_timeout -minutes -.Po -.Li @timeout@ -by default -.Pc . +minutes (@timeout@ by default). Commands run via .Nm sudo with a different parent process ID, for example from a shell script, @@ -4558,11 +4534,7 @@ If no terminal is present, the behavior is the same as .Em ppid . Commands run from the same terminal will not require a password for .Em timestamp_timeout -minutes -.Po -.Li @timeout@ -by default -.Pc . +minutes (@timeout@ by default). .It kernel The time stamp is stored in the kernel as an attribute of the terminal device. @@ -4590,8 +4562,7 @@ The default is .It timestampowner The owner of the lecture status directory, time stamp directory and all files stored therein. -The default is -.Li root . +The default is root. .if \n(SL \{\ .It type The default SELinux type to use when constructing a new security @@ -4623,16 +4594,16 @@ is configured with the .Li --enable-admin-flag option. The default value is -.Li ~/.sudo_as_admin_successful . +.Pa ~/.sudo_as_admin_successful . .It env_file The .Em env_file option specifies the fully qualified path to a file containing variables to be set in the environment of the program being run. Entries in this file should either be of the form -.Dq Li VARIABLE=value +.Ql VARIABLE=value or -.Dq Li export VARIABLE=value . +.Ql export VARIABLE=value . The value may optionally be enclosed in single or double quotes. Variables in this file are only added if the variable does not already exist in the environment. @@ -4646,7 +4617,7 @@ and .It exempt_group Users in this group are exempt from password and PATH requirements. The group name specified should not include a -.Li % +.Ql % prefix. This is not set by default. .It fdexec @@ -4693,7 +4664,7 @@ alias. .Pp This setting is only supported by version 1.8.20 or higher. If the operating system does not support the -.Fn fexecve +.Xr fexecve 2 system call, this setting has no effect. .It group_plugin A string containing a @@ -4780,7 +4751,7 @@ All the user's .Em sudoers file entries for the current host must have the -.Li NOPASSWD +.Dv NOPASSWD flag set to avoid entering a password. .It always The user must always enter a password to use the @@ -4791,7 +4762,7 @@ At least one of the user's .Em sudoers file entries for the current host must have the -.Li NOPASSWD +.Dv NOPASSWD flag set to avoid entering a password. .It never The user need never enter a password to use the @@ -4858,7 +4829,7 @@ The address should be enclosed in double quotes to protect against .Nm sudo interpreting the -.Li @ +.Ql @ sign. Defaults to the name of the user running .Nm sudo . @@ -4871,10 +4842,9 @@ The address should be enclosed in double quotes to protect against .Nm sudo interpreting the -.Li @ +.Ql @ sign. -Defaults to -.Li @mailto@ . +Defaults to @mailto@. .It rlimit_as The maximum size to which the process's address space may grow (in bytes), if supported by the operating system. @@ -4940,9 +4910,9 @@ The option specifies the fully qualified path to a file containing variables to be set in the environment of the program being run. Entries in this file should either be of the form -.Dq Li VARIABLE=value +.Ql VARIABLE=value or -.Dq Li export VARIABLE=value . +.Ql export VARIABLE=value . The value may optionally be enclosed in single or double quotes. Variables in this file are only added if the variable does not already exist in the environment. @@ -4986,7 +4956,7 @@ It is only possible to use .Em runchroot as a command-specific Defaults setting if the command exists with the same path both inside and outside the chroot jail. -This restriction does not apply to generic, host, or user-based +This restriction does not apply to global, host, or user-based Defaults settings or to a .Em Cmnd_Spec that includes a @@ -5028,8 +4998,7 @@ This option is @secure_path@ by default. .It syslog Syslog facility if syslog is being used for logging (negate to disable syslog logging). -Defaults to -.Li @logfac@ . +Defaults to @logfac@. .Pp The following syslog facilities are supported: .Sy authpriv @@ -5050,8 +5019,7 @@ and .It syslog_badpri Syslog priority to use when the user is not allowed to run a command or when authentication is unsuccessful. -Defaults to -.Li @badpri@ . +Defaults to @badpri@. .Pp The following syslog priorities are supported: .Sy alert , @@ -5070,8 +5038,7 @@ will disable logging of unsuccessful commands. .It syslog_goodpri Syslog priority to use when the user is allowed to run a command and authentication is successful. -Defaults to -.Li @goodpri@ . +Defaults to @goodpri@. .Pp See .Em syslog_badpri @@ -5091,7 +5058,7 @@ It has the following possible values: All the user's .Em sudoers file entries for the current host must have the -.Li NOPASSWD +.Dv NOPASSWD flag set to avoid entering a password. .It always The user must always enter a password to use the @@ -5101,7 +5068,7 @@ option. At least one of the user's .Em sudoers file entries for the current host must have the -.Li NOPASSWD +.Dv NOPASSWD flag set to avoid entering a password. .It never The user need never enter a password to use the @@ -5126,7 +5093,7 @@ Environment variables to be removed from the user's environment unless they are considered .Dq safe . For all variables except -.Li TZ , +.Ev TZ , .Dq safe means that the variable's value does not contain any .Ql % @@ -5136,7 +5103,7 @@ characters. This can be used to guard against printf-style format vulnerabilities in poorly-written programs. The -.Li TZ +.Ev TZ variable is considered unsafe if any of the following are true: .Bl -bullet -width 1n .It @@ -5154,23 +5121,23 @@ path element. It contains white space or non-printable characters. .It It is longer than the value of -.Li PATH_MAX . +.Dv PATH_MAX . .El .Pp The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the -.Li = , -.Li += , -.Li -= , +.Ql = , +.Ql += , +.Ql -= , and -.Li \&! +.Ql \&! operators respectively. Regardless of whether the -.Li env_reset +.Em env_reset option is enabled or disabled, variables specified by -.Li env_check +.Em env_check will be preserved in the environment if they pass the aforementioned check. The global list of environment variables to check is displayed when .Nm sudo @@ -5185,11 +5152,11 @@ option is not in effect. The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the -.Li = , -.Li += , -.Li -= , +.Ql = , +.Ql += , +.Ql -= , and -.Li \&! +.Ql \&! operators respectively. The global list of environment variables to remove is displayed when .Nm sudo @@ -5209,11 +5176,11 @@ processes will receive. The argument may be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the -.Li = , -.Li += , -.Li -= , +.Ql = , +.Ql += , +.Ql -= , and -.Li \&! +.Ql \&! operators respectively. The global list of variables to keep is displayed when @@ -5310,7 +5277,7 @@ plugin supports its own plugin interface to allow non-Unix group lookups which can query a group source other than the standard Unix group database. This can be used to implement support for the -.Li nonunix_group +.Em nonunix_group syntax described earlier. .Pp Group provider plugins are specified via the @@ -5345,9 +5312,9 @@ Defaults group_plugin="group_file.so /etc/sudo-group" The .Em system_group plugin supports group lookups via the standard C library functions -.Fn getgrnam +.Xr getgrnam 3 and -.Fn getgrid . +.Xr getgrid 3 . This plugin can be used in instances where the user belongs to groups not present in the user's supplemental group vector. This plugin takes no options: @@ -5447,7 +5414,7 @@ The actual command that was executed. Messages are logged using the locale specified by .Em sudoers_locale , which defaults to the -.Dq Li C +.Ql C locale. .Ss Denied command log entries If the user is not allowed to run the command, the reason for the denial @@ -5530,7 +5497,7 @@ is the user-ID that owns the .Em sudoers file) to the end of the .Nm -.Li Plugin +.Em Plugin line in the .Xr sudo.conf @mansectform@ file. @@ -5556,7 +5523,7 @@ is the user-ID that owns the .Em sudoers file) to the .Nm -.Li Plugin +.Em Plugin line in the .Xr sudo.conf @mansectform@ file. @@ -5572,7 +5539,7 @@ The default mode may be changed via the .Dq sudoers_mode option to the .Nm -.Li Plugin +.Em Plugin line in the .Xr sudo.conf @mansectform@ file. @@ -5590,7 +5557,7 @@ is the group-ID that owns the .Em sudoers file) to the .Nm -.Li Plugin +.Em Plugin line in the .Xr sudo.conf @mansectform@ file. @@ -5634,7 +5601,7 @@ The and .Em progname fields are added by the system's -.Fn syslog +.Xr syslog 3 function, not .Nm itself. @@ -5702,7 +5669,7 @@ by default using a unique session ID that is included in the .Nm sudo log line, prefixed with -.Dq Li TSID= . +.Ql TSID= . The .Em iolog_file option may be used to control the format of the session ID. @@ -5759,11 +5726,11 @@ The number of lines of the terminal the command ran on, or zero if no terminal was present. .It runargv A JSON array representing the command's argument vector as passed to the -.Fn execve +.Xr execve 2 system call. .It runenv A JSON array representing the command's environment as passed to the -.Fn execve +.Xr execve 2 system call. .It rungid The group ID the command ran as. @@ -5866,7 +5833,7 @@ log file unencrypted. In most cases, logging the command output via .Em log_output or -.Li LOG_OUTPUT +.Dv LOG_OUTPUT is all that is required. .Pp Since each session's I/O logs are stored in a separate directory, @@ -5980,12 +5947,12 @@ or .Ev USER environment variables when running commands as root. Additionally, on the machines in the -.Em SERVERS -.Li Host_Alias , +.Dv SERVERS +.Em Host_Alias , we keep an additional local log file and make sure we log the year in each log line since the log entries will be kept around for several years. Lastly, we disable shell escapes for the commands in the PAGERS -.Li Cmnd_Alias +.Em Cmnd_Alias .Po .Pa /usr/bin/more , .Pa /usr/bin/pg @@ -6042,7 +6009,7 @@ and .Sy crawl ) may run any command on any host but they must authenticate themselves first (since the entry lacks the -.Li NOPASSWD +.Dv NOPASSWD tag). .Bd -literal jack CSNETS = ALL @@ -6051,17 +6018,12 @@ jack CSNETS = ALL The user .Sy jack may run any command on the machines in the -.Em CSNETS -alias (the networks -.Li 128.138.243.0 , -.Li 128.138.204.0 , -and -.Li 128.138.242.0 ) . -Of those networks, only -.Li 128.138.204.0 -has an explicit netmask (in CIDR notation) indicating it is a class C network. +.Dv CSNETS +alias (the networks 128.138.243.0, 128.138.204.0, and 128.138.242.0). +Of those networks, only 128.138.204.0 has an explicit netmask (in +CIDR notation) indicating it is a class C network. For the other networks in -.Em CSNETS , +.Dv CSNETS , the local machine's netmask will be used during matching. .Bd -literal lisa CUNETS = ALL @@ -6070,9 +6032,8 @@ lisa CUNETS = ALL The user .Sy lisa may run any command on any host in the -.Em CUNETS -alias (the class B network -.Li 128.138.0.0 ) . +.Dv CUNETS +alias (the class B network 128.138.0.0). .Bd -literal operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\e sudoedit /etc/printcap, /usr/oper/bin/ @@ -6086,7 +6047,7 @@ printing system, shutting down the system, and any commands in the directory .Pa /usr/oper/bin/ . One command in the -.Li DUMPS +.Dv DUMPS Cmnd_Alias includes a sha224 digest, .Pa /home/operator/bin/start_backups . This is because the directory containing the script is writable by the @@ -6115,8 +6076,8 @@ group may run commands in .Pa /usr/sbin/ as themselves with any group in the -.Em ADMINGRP -.Li Runas_Alias +.Dv ADMINGRP +.Em Runas_Alias (the .Sy adm and @@ -6127,7 +6088,7 @@ The user .Sy pete is allowed to change anyone's password except for root on the -.Em HPPA +.Dv HPPA machines. Because command line arguments are matched as a single, concatenated string, the @@ -6156,12 +6117,12 @@ bob SPARC = (OP) ALL : SGI = (OP) ALL The user .Sy bob may run anything on the -.Em SPARC +.Dv SPARC and -.Em SGI +.Dv SGI machines as any user listed in the -.Em OP -.Li Runas_Alias +.Dv OP +.Em Runas_Alias .Po .Sy root and @@ -6197,8 +6158,8 @@ fred ALL = (DB) NOPASSWD: ALL The user .Sy fred can run commands as any user in the -.Em DB -.Li Runas_Alias +.Dv DB +.Em Runas_Alias .Po .Sy oracle or @@ -6210,7 +6171,7 @@ john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root* .Ed .Pp On the -.Em ALPHA +.Dv ALPHA machines, user .Sy john may su to anyone except root but he is not allowed to specify any options @@ -6224,29 +6185,29 @@ jen ALL, !SERVERS = ALL The user .Sy jen may run any command on any machine except for those in the -.Em SERVERS -.Li Host_Alias +.Dv SERVERS +.Em Host_Alias (primary, mail, www, and ns). .Bd -literal jill SERVERS = /usr/bin/, !SU, !SHELLS .Ed .Pp For any machine in the -.Em SERVERS -.Li Host_Alias , +.Dv SERVERS +.Em Host_Alias , .Sy jill may run any commands in the directory .Pa /usr/bin/ except for those commands belonging to the -.Em SU +.Dv SU and -.Em SHELLS -.Li Cmnd_Aliases . +.Dv SHELLS +.Em Cmnd_Aliases . While not specifically mentioned in the rule, the commands in the -.Em PAGERS -.Li Cmnd_Alias +.Dv PAGERS +.Em Cmnd_Alias all reside in .Pa /usr/bin and have the @@ -6272,8 +6233,8 @@ WEBADMIN www = (www) ALL, (root) /usr/bin/su www .Ed .Pp On the host www, any user in the -.Em WEBADMIN -.Li User_Alias +.Dv WEBADMIN +.Em User_Alias (will, wendy, and wim), may run any command as user www (which owns the web pages) or simply .Xr su 1 @@ -6284,7 +6245,7 @@ ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e .Ed .Pp Any user may mount or unmount a CD-ROM on the machines in the CDROM -.Li Host_Alias +.Em Host_Alias (orion, perseus, hercules) without entering a password. This is a bit tedious for users to type, so it is a prime candidate for encapsulating in a shell script. @@ -6307,9 +6268,9 @@ bill ALL = ALL, !SU, !SHELLS Doesn't really prevent .Sy bill from running the commands listed in -.Em SU +.Dv SU or -.Em SHELLS +.Dv SHELLS since he can simply copy those commands to a different name, or use a shell escape from an editor or other program. Therefore, these kind of restrictions should be considered @@ -6343,13 +6304,13 @@ john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\e User .Sy john can still run -.Li /usr/bin/passwd root +.Ql /usr/bin/passwd root if .Em fast_glob is enabled by changing to .Pa /usr/bin and running -.Li ./passwd root +.Ql ./passwd root instead. .Pp Another potential issue is that when @@ -6472,15 +6433,15 @@ It does this by setting an environment variable (usually .Ev LD_PRELOAD ) to the path of a dynamic shared object, or shared library, containing custom versions of the -.Fn execl , -.Fn execle , -.Fn execlp , -.Fn execv , -.Fn execve , -.Fn execvp , -.Fn execvpe , +.Xr execve 2 , +.Xr execl 3 , +.Xr execle 3 , +.Xr execlp 3 , +.Xr execv 3 , +.Xr execvp 3 , +.Xr execvpe 3 , and -.Fn system +.Xr system 3 library functions that connect back to .Nm sudo for a policy decision. @@ -6538,7 +6499,7 @@ It is not possible to intercept shell built-in commands or restrict the ability to read or write sensitive files from within a shell. .Pp To enable intercept mode on a per-command basis, use the -.Li INTERCEPT +.Dv INTERCEPT tag as documented in the User Specification section above. Here is that example again: .Bd -literal @@ -6617,26 +6578,26 @@ The .Em noexec functionality is capable of blocking execution of commands run via the -.Fn execl , -.Fn execle , -.Fn execlp , -.Fn exect , -.Fn execv , -.Fn execve , -.Fn execveat , -.Fn execvP , -.Fn execvp , -.Fn execvpe , -.Fn fexecve , -.Fn popen , -.Fn posix_spawn , -.Fn posix_spawnp , -.Fn system , +.Xr execve 2 , +.Xr execl 3 , +.Xr execle 3 , +.Xr execlp 3 , +.Xr exect 3 , +.Xr execv 3 , +.Xr execveat 3 , +.Xr execvP 3 , +.Xr execvp 3 , +.Xr execvpe 3 , +.Xr fexecve 3 , +.Xr popen 3 , +.Xr posix_spawn 3 , +.Xr posix_spawnp 3 , +.Xr system 3 , and -.Fn wordexp +.Xr wordexp 3 functions. On Linux, a -.Fn seccomp +.Xr seccomp 2 filter is used to implement .Em noexec . On Solaris 10 and higher, @@ -6648,7 +6609,7 @@ environment variable. To enable .Em noexec for a command, use the -.Li NOEXEC +.Dv NOEXEC tag as documented in the User Specification section above. Here is that example again: .Bd -literal @@ -6752,7 +6713,7 @@ will refuse to open a symbolic link unless either the option is enabled or the .Em sudoedit command is prefixed with the -.Li FOLLOW +.Dv FOLLOW tag in the .Em sudoers file. @@ -6803,7 +6764,7 @@ if the system supports it. .Nm will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * -.Li TIMEOUT +.Dv TIMEOUT will be ignored and .Nm will log and complain. @@ -6871,11 +6832,11 @@ The following subsystems are used by the plugin: .Bl -tag -width 8n .It Em alias -.Li User_Alias , -.Li Runas_Alias , -.Li Host_Alias +.Em User_Alias , +.Em Runas_Alias , +.Em Host_Alias and -.Li Cmnd_Alias +.Em Cmnd_Alias processing .It Em all matches every subsystem @@ -6985,7 +6946,7 @@ When using netgroups of machines (as opposed to users), if you store fully qualified host name in the netgroup (as is usually the case), you either need to have the machine's host name be fully qualified as returned by the -.Li hostname +.Em hostname command or use the .Em fqdn option in diff --git a/docs/sudoers_timestamp.man.in b/docs/sudoers_timestamp.man.in index ca5c309167..e824029a2d 100644 --- a/docs/sudoers_timestamp.man.in +++ b/docs/sudoers_timestamp.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDOERS_TIMESTAMP" "@mansectform@" "February 16, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS_TIMESTAMP" "@mansectform@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -29,7 +29,7 @@ plugin uses per-user time stamp files for credential caching. Once a user has been authenticated, they may use \fBsudo\fR without a password for a short period of time -(\fR@timeout@\fR +(\fI@timeout@\fR minutes unless overridden by the \fItimestamp_timeout\fR option) diff --git a/docs/sudoers_timestamp.mdoc.in b/docs/sudoers_timestamp.mdoc.in index 1dbfeac620..633cc7555f 100644 --- a/docs/sudoers_timestamp.mdoc.in +++ b/docs/sudoers_timestamp.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd February 16, 2022 +.Dd September 13, 2022 .Dt SUDOERS_TIMESTAMP @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -29,7 +29,7 @@ Once a user has been authenticated, they may use .Nm sudo without a password for a short period of time .Po -.Li @timeout@ +.Em @timeout@ minutes unless overridden by the .Em timestamp_timeout option @@ -94,19 +94,19 @@ same file but are not inter-operable. The size of the record in bytes. .It type The record type, currently -.Li TS_GLOBAL , -.Li TS_TTY , +.Dv TS_GLOBAL , +.Dv TS_TTY , or -.Li TS_PPID . +.Dv TS_PPID . .It flags Zero or more record flags which can be bit-wise ORed together. Supported flags are -.Li TS_DISABLED , +.Dv TS_DISABLED , for records disabled via .Nm sudo .Fl k and -.Li TS_ANYUID , +.Dv TS_ANYUID , which is used only when matching records. .It auth_uid The user-ID that was used for authentication. @@ -120,12 +120,12 @@ the default runas user or the target user. .It sid The ID of the user's terminal session, if present. The session ID is only used when matching records of type -.Li TS_TTY . +.Dv TS_TTY . .It start_time The start time of the session leader for records of type -.Li TS_TTY +.Dv TS_TTY or of the parent process for records of type -.Li TS_PPID . +.Dv TS_PPID . The .Em start_time is used to help prevent re-use of a time stamp record after a @@ -157,10 +157,10 @@ option, no password is required. .It u.ttydev The device number of the terminal associated with the session for records of type -.Li TS_TTY . +.Dv TS_TTY . .It u.ppid The ID of the parent process for records of type -.Li TS_PPID . +.Dv TS_PPID . .El .Sh LOCKING In @@ -174,7 +174,7 @@ of the entire file and the lock is held for a longer period of time. This scheme is described below. .Pp The first record in the time stamp file is of type -.Li TS_LOCKEXCL +.Dv TS_LOCKEXCL and is used as a .Em lock record to prevent more than one @@ -182,7 +182,7 @@ record to prevent more than one process from adding a new record at the same time. Once the desired time stamp record has been located or created (and locked), the -.Li TS_LOCKEXCL +.Dv TS_LOCKEXCL record is unlocked. The lock on the individual time stamp record, however, is held until authentication is complete. @@ -192,7 +192,7 @@ to avoid prompting for a password multiple times when it is used more than once in a pipeline. .Pp Records of type -.Li TS_GLOBAL +.Dv TS_GLOBAL cannot be locked for a long period of time since doing so would interfere with other .Nm sudo diff --git a/docs/sudoreplay.man.in b/docs/sudoreplay.man.in index 9b1b4c5a00..34d4f30134 100644 --- a/docs/sudoreplay.man.in +++ b/docs/sudoreplay.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDOREPLAY" "@mansectsu@" "February 16, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDOREPLAY" "@mansectsu@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -50,7 +50,7 @@ The \fIID\fR should either be a six character sequence of digits and upper case letters, e.g., -\fR0100A5\fR +\(lq0100A5\(rq or a path name. The \fIID\fR @@ -76,8 +76,10 @@ with enabled in the \fIsudoers\fR file, a -\fRTSID=ID\fR -string is logged via syslog or to the +\(lqTSID=ID\(rq +string is logged via +syslog(3) +or to the \fBsudo\fR log file. The @@ -400,7 +402,7 @@ This will be addressed in a future version of \fBsudoreplay\fR versions 1.8.4 and higher support a flexible debugging framework that is configured via -\fRDebug\fR +\fIDebug\fR lines in the sudo.conf(@mansectform@) file. diff --git a/docs/sudoreplay.mdoc.in b/docs/sudoreplay.mdoc.in index b9e8086fe7..518e345512 100644 --- a/docs/sudoreplay.mdoc.in +++ b/docs/sudoreplay.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd February 16, 2022 +.Dd September 13, 2022 .Dt SUDOREPLAY @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -48,7 +48,7 @@ The .Em ID should either be a six character sequence of digits and upper case letters, e.g., -.Li 0100A5 +.Dq 0100A5 or a path name. The .Em ID @@ -74,8 +74,10 @@ with enabled in the .Em sudoers file, a -.Li TSID=ID -string is logged via syslog or to the +.Dq TSID=ID +string is logged via +.Xr syslog 3 +or to the .Nm sudo log file. The @@ -363,7 +365,7 @@ This will be addressed in a future version of .Nm versions 1.8.4 and higher support a flexible debugging framework that is configured via -.Li Debug +.Em Debug lines in the .Xr sudo.conf @mansectform@ file. diff --git a/docs/visudo.man.in b/docs/visudo.man.in index b64ec25320..6610ada53a 100644 --- a/docs/visudo.man.in +++ b/docs/visudo.man.in @@ -21,7 +21,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.TH "VISUDO" "@mansectsu@" "April 23, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "VISUDO" "@mansectsu@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -289,7 +289,7 @@ include file for syntax errors. \fBvisudo\fR versions 1.8.4 and higher support a flexible debugging framework that is configured via -\fRDebug\fR +\fIDebug\fR lines in the sudo.conf(@mansectform@) file. @@ -450,7 +450,7 @@ file. The \fIsudoers\fR file contains a -\fRDefaults\fR +\fIDefaults\fR setting not recognized by \fBvisudo\fR. .SH "SEE ALSO" diff --git a/docs/visudo.mdoc.in b/docs/visudo.mdoc.in index 725e71cfca..fec556c6d2 100644 --- a/docs/visudo.mdoc.in +++ b/docs/visudo.mdoc.in @@ -20,7 +20,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd April 23, 2022 +.Dd September 13, 2022 .Dt VISUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -281,7 +281,7 @@ include file for syntax errors. .Nm versions 1.8.4 and higher support a flexible debugging framework that is configured via -.Li Debug +.Em Debug lines in the .Xr sudo.conf @mansectform@ file. @@ -430,7 +430,7 @@ file. The .Em sudoers file contains a -.Li Defaults +.Em Defaults setting not recognized by .Nm . .El From 304726a215995fd3ac38aedd265c6b316827599f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 7 Sep 2022 07:48:31 -0600 Subject: [PATCH 122/186] Move gcc-style __attribute__ macros to config.h.in Renamed __malloc -> sudo_malloclike, __printflike -> sudo_printflike, __printf0like -> sudo_printf0like. Add sudo_noreturn instead of __attribute__((__noreturn__)). We do not use stdnoreturn.h since it has been deprecated in C23 in favor of the [[noreturn]] attribute. --- config.h.in | 48 +++++++++++++++++++++++++- configure.ac | 48 +++++++++++++++++++++++++- include/sudo_compat.h | 56 +++---------------------------- include/sudo_debug.h | 6 ++-- include/sudo_fatal.h | 26 +++++++------- include/sudo_lbuf.h | 4 +-- include/sudo_util.h | 6 ++-- lib/eventlog/eventlog.c | 2 +- plugins/sudoers/check_aliases.c | 2 +- plugins/sudoers/cvtsudoers.c | 37 +++++++++++--------- plugins/sudoers/cvtsudoers.h | 2 +- plugins/sudoers/defaults.c | 2 +- plugins/sudoers/logging.h | 12 +++---- plugins/sudoers/sudoreplay.c | 27 ++++++++------- plugins/sudoers/testsudoers.c | 2 +- plugins/sudoers/toke.h | 2 +- plugins/sudoers/tsdump.c | 2 +- plugins/sudoers/visudo.c | 24 ++++++------- src/parse_args.c | 6 ++-- src/regress/noexec/check_noexec.c | 3 +- src/sudo.h | 2 +- 21 files changed, 185 insertions(+), 134 deletions(-) diff --git a/config.h.in b/config.h.in index b2fd69e347..901986ea74 100644 --- a/config.h.in +++ b/config.h.in @@ -1451,7 +1451,53 @@ code using `volatile' can become incorrect without. Disable with care. */ #undef volatile -/* Symbol visibility controls */ +#ifndef __GNUC_PREREQ__ +# ifdef __GNUC__ +# define __GNUC_PREREQ__(ma, mi) \ + ((__GNUC__ > (ma)) || (__GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))) +# else +# define __GNUC_PREREQ__(ma, mi) 0 +# endif +#endif + +/* Define away __attribute__ for non-gcc or old gcc. */ +#if !defined(__attribute__) && !__GNUC_PREREQ__(2, 5) +# define __attribute__(x) +#endif + +/* For functions that call exit() directly. */ +#if __GNUC_PREREQ__(2, 5) +# define sudo_noreturn __attribute__((__noreturn__)) +#else +# define sudo_noreturn +#endif + +/* For malloc-like functions that return uninitialized or zeroed memory. */ +#if __GNUC_PREREQ__(2, 96) +# define sudo_malloclike __attribute__((__malloc__)) +#else +# define sudo_malloclike +#endif + +/* Compile-time checking for function arguments that must not be NULL. */ +#if __GNUC_PREREQ__(3, 3) +# define sudo_attr_nonnull(_a) __attribute__((__nonnull__ (_a))) +#else +# define sudo_attr_nonnull(_a) +#endif + +/* For catching format string mismatches. */ +#if __GNUC_PREREQ__(2, 7) +# define sudo_printflike(_f, _v) __attribute__((__format__ (__printf__, _f, _v))) sudo_attr_nonnull(_f) +# define sudo_printf0like(_f, _v) __attribute__((__format__ (__printf__, _f, _v))) +# define sudo_attr_fmt_arg(_f) __attribute__((__format_arg__ (_f))) +#else +# define sudo_printflike(_f, _v) +# define sudo_printf0like(_f, _v) +# define sudo_attr_fmt_arg(_f) +#endif + +/* Symbol visibility controls. */ #ifdef HAVE_DSO_VISIBILITY # if defined(__GNUC__) # define sudo_dso_public __attribute__((__visibility__("default"))) diff --git a/configure.ac b/configure.ac index c8bbb1439b..177c6c3d7d 100644 --- a/configure.ac +++ b/configure.ac @@ -5533,7 +5533,53 @@ dnl AH_TOP([#ifndef SUDO_CONFIG_H #define SUDO_CONFIG_H]) -AH_BOTTOM([/* Symbol visibility controls */ +AH_BOTTOM([#ifndef __GNUC_PREREQ__ +# ifdef __GNUC__ +# define __GNUC_PREREQ__(ma, mi) \ + ((__GNUC__ > (ma)) || (__GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))) +# else +# define __GNUC_PREREQ__(ma, mi) 0 +# endif +#endif + +/* Define away __attribute__ for non-gcc or old gcc. */ +#if !defined(__attribute__) && !__GNUC_PREREQ__(2, 5) +# define __attribute__(x) +#endif + +/* For functions that call exit() directly. */ +#if __GNUC_PREREQ__(2, 5) +# define sudo_noreturn __attribute__((__noreturn__)) +#else +# define sudo_noreturn +#endif + +/* For malloc-like functions that return uninitialized or zeroed memory. */ +#if __GNUC_PREREQ__(2, 96) +# define sudo_malloclike __attribute__((__malloc__)) +#else +# define sudo_malloclike +#endif + +/* Compile-time checking for function arguments that must not be NULL. */ +#if __GNUC_PREREQ__(3, 3) +# define sudo_attr_nonnull(_a) __attribute__((__nonnull__ (_a))) +#else +# define sudo_attr_nonnull(_a) +#endif + +/* For catching format string mismatches. */ +#if __GNUC_PREREQ__(2, 7) +# define sudo_printflike(_f, _v) __attribute__((__format__ (__printf__, _f, _v))) sudo_attr_nonnull(_f) +# define sudo_printf0like(_f, _v) __attribute__((__format__ (__printf__, _f, _v))) +# define sudo_attr_fmt_arg(_f) __attribute__((__format_arg__ (_f))) +#else +# define sudo_printflike(_f, _v) +# define sudo_printf0like(_f, _v) +# define sudo_attr_fmt_arg(_f) +#endif + +/* Symbol visibility controls. */ #ifdef HAVE_DSO_VISIBILITY # if defined(__GNUC__) # define sudo_dso_public __attribute__((__visibility__("default"))) diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 698a67ea6b..1589c9e89d 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -37,54 +37,6 @@ * Macros and functions that may be missing on some operating systems. */ -#ifndef __GNUC_PREREQ__ -# ifdef __GNUC__ -# define __GNUC_PREREQ__(ma, mi) \ - ((__GNUC__ > (ma)) || (__GNUC__ == (ma) && __GNUC_MINOR__ >= (mi))) -# else -# define __GNUC_PREREQ__(ma, mi) 0 -# endif -#endif - -/* Define away __attribute__ for non-gcc or old gcc */ -#if !defined(__attribute__) && !__GNUC_PREREQ__(2, 5) -# define __attribute__(x) -#endif - -/* For malloc-like functions that return uninitialized or zeroed memory. */ -#ifndef __malloc -# if __GNUC_PREREQ__(2, 96) -# define __malloc __attribute__((__malloc__)) -# else -# define __malloc -# endif -#endif - -/* For catching format string mismatches */ -#ifndef __printflike -# if __GNUC_PREREQ__(3, 3) -# define __printflike(f, v) __attribute__((__format__ (__printf__, f, v))) __attribute__((__nonnull__ (f))) -# elif __GNUC_PREREQ__(2, 7) -# define __printflike(f, v) __attribute__((__format__ (__printf__, f, v))) -# else -# define __printflike(f, v) -# endif -#endif -#ifndef __printf0like -# if __GNUC_PREREQ__(2, 7) -# define __printf0like(f, v) __attribute__((__format__ (__printf__, f, v))) -# else -# define __printf0like(f, v) -# endif -#endif -#ifndef __format_arg -# if __GNUC_PREREQ__(2, 7) -# define __format_arg(f) __attribute__((__format_arg__ (f))) -# else -# define __format_arg(f) -# endif -#endif - #ifdef HAVE_FALLTHROUGH_ATTRIBUTE # define FALLTHROUGH __attribute__((__fallthrough__)) #else @@ -493,22 +445,22 @@ sudo_dso_public int sudo_futimens(int fd, const struct timespec *times); # define futimens(_a, _b) sudo_futimens((_a), (_b)) #endif /* HAVE_FUTIMENS */ #if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -sudo_dso_public int sudo_snprintf(char *str, size_t n, char const *fmt, ...) __printflike(3, 4); +sudo_dso_public int sudo_snprintf(char *str, size_t n, char const *fmt, ...) sudo_printflike(3, 4); # undef snprintf # define snprintf sudo_snprintf #endif /* HAVE_SNPRINTF */ #if !defined(HAVE_VSNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -sudo_dso_public int sudo_vsnprintf(char *str, size_t n, const char *fmt, va_list ap) __printflike(3, 0); +sudo_dso_public int sudo_vsnprintf(char *str, size_t n, const char *fmt, va_list ap) sudo_printflike(3, 0); # undef vsnprintf # define vsnprintf sudo_vsnprintf #endif /* HAVE_VSNPRINTF */ #if !defined(HAVE_ASPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -sudo_dso_public int sudo_asprintf(char **str, char const *fmt, ...) __printflike(2, 3); +sudo_dso_public int sudo_asprintf(char **str, char const *fmt, ...) sudo_printflike(2, 3); # undef asprintf # define asprintf sudo_asprintf #endif /* HAVE_ASPRINTF */ #if !defined(HAVE_VASPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -sudo_dso_public int sudo_vasprintf(char **str, const char *fmt, va_list ap) __printflike(2, 0); +sudo_dso_public int sudo_vasprintf(char **str, const char *fmt, va_list ap) sudo_printflike(2, 0); # undef vasprintf # define vasprintf sudo_vasprintf #endif /* HAVE_VASPRINTF */ diff --git a/include/sudo_debug.h b/include/sudo_debug.h index 399602b8f7..5ee5cc18d8 100644 --- a/include/sudo_debug.h +++ b/include/sudo_debug.h @@ -265,13 +265,13 @@ sudo_dso_public int sudo_debug_get_active_instance_v1(void); sudo_dso_public int sudo_debug_get_fds_v1(unsigned char **fds); sudo_dso_public int sudo_debug_get_instance_v1(const char *program); sudo_dso_public int sudo_debug_parse_flags_v1(struct sudo_conf_debug_file_list *debug_files, const char *entry); -sudo_dso_public void sudo_debug_printf2_v1(const char *func, const char *file, int line, int level, const char *fmt, ...) __printf0like(5, 6); -sudo_dso_public void sudo_debug_printf_nvm_v1(int pri, const char *fmt, ...) __printf0like(2, 3); +sudo_dso_public void sudo_debug_printf2_v1(const char *func, const char *file, int line, int level, const char *fmt, ...) sudo_printf0like(5, 6); +sudo_dso_public void sudo_debug_printf_nvm_v1(int pri, const char *fmt, ...) sudo_printf0like(2, 3); sudo_dso_public int sudo_debug_register_v1(const char *program, const char *const subsystems[], unsigned int ids[], struct sudo_conf_debug_file_list *debug_files); sudo_dso_public int sudo_debug_register_v2(const char *program, const char *const subsystems[], unsigned int ids[], struct sudo_conf_debug_file_list *debug_files, int minfd); sudo_dso_public int sudo_debug_set_active_instance_v1(int inst); sudo_dso_public void sudo_debug_update_fd_v1(int ofd, int nfd); -sudo_dso_public void sudo_debug_vprintf2_v1(const char *func, const char *file, int line, int level, const char *fmt, va_list ap) __printf0like(5, 0); +sudo_dso_public void sudo_debug_vprintf2_v1(const char *func, const char *file, int line, int level, const char *fmt, va_list ap) sudo_printf0like(5, 0); sudo_dso_public void sudo_debug_write2_v1(int fd, const char *func, const char *file, int line, const char *str, int len, int errnum); sudo_dso_public bool sudo_debug_needed_v1(int level); diff --git a/include/sudo_fatal.h b/include/sudo_fatal.h index 37ac9defcc..35881257a6 100644 --- a/include/sudo_fatal.h +++ b/include/sudo_fatal.h @@ -164,20 +164,20 @@ typedef bool (*sudo_warn_setlocale_t)(bool, int *); sudo_dso_public int sudo_fatal_callback_deregister_v1(sudo_fatal_callback_t func); sudo_dso_public int sudo_fatal_callback_register_v1(sudo_fatal_callback_t func); -sudo_dso_public char *sudo_warn_gettext_v1(const char *domainname, const char *msgid) __format_arg(2); +sudo_dso_public char *sudo_warn_gettext_v1(const char *domainname, const char *msgid) sudo_attr_fmt_arg(2); sudo_dso_public void sudo_warn_set_locale_func_v1(sudo_warn_setlocale_t func); -sudo_dso_public void sudo_fatal_nodebug_v1(const char *fmt, ...) __printf0like(1, 2) __attribute__((__noreturn__)); -sudo_dso_public void sudo_fatalx_nodebug_v1(const char *fmt, ...) __printflike(1, 2) __attribute__((__noreturn__)); -sudo_dso_public void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) __printflike(2, 3) __attribute__((__noreturn__)); -sudo_dso_public void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) __printf0like(1, 0) __attribute__((__noreturn__)); -sudo_dso_public void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) __printflike(1, 0) __attribute__((__noreturn__)); -sudo_dso_public void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) __printflike(2, 0) __attribute__((__noreturn__)); -sudo_dso_public void sudo_warn_nodebug_v1(const char *fmt, ...) __printf0like(1, 2); -sudo_dso_public void sudo_warnx_nodebug_v1(const char *fmt, ...) __printflike(1, 2); -sudo_dso_public void sudo_gai_warn_nodebug_v1(int errnum, const char *fmt, ...) __printflike(2, 3); -sudo_dso_public void sudo_vwarn_nodebug_v1(const char *fmt, va_list ap) __printf0like(1, 0); -sudo_dso_public void sudo_vwarnx_nodebug_v1(const char *fmt, va_list ap) __printflike(1, 0); -sudo_dso_public void sudo_gai_vwarn_nodebug_v1(int errnum, const char *fmt, va_list ap) __printflike(2, 0); +sudo_dso_public sudo_noreturn void sudo_fatal_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2); +sudo_dso_public sudo_noreturn void sudo_fatalx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2); +sudo_dso_public sudo_noreturn void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3); +sudo_dso_public sudo_noreturn void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0); +sudo_dso_public sudo_noreturn void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0); +sudo_dso_public sudo_noreturn void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0); +sudo_dso_public void sudo_warn_nodebug_v1(const char *fmt, ...) sudo_printf0like(1, 2); +sudo_dso_public void sudo_warnx_nodebug_v1(const char *fmt, ...) sudo_printflike(1, 2); +sudo_dso_public void sudo_gai_warn_nodebug_v1(int errnum, const char *fmt, ...) sudo_printflike(2, 3); +sudo_dso_public void sudo_vwarn_nodebug_v1(const char *fmt, va_list ap) sudo_printf0like(1, 0); +sudo_dso_public void sudo_vwarnx_nodebug_v1(const char *fmt, va_list ap) sudo_printflike(1, 0); +sudo_dso_public void sudo_gai_vwarn_nodebug_v1(int errnum, const char *fmt, va_list ap) sudo_printflike(2, 0); sudo_dso_public void sudo_warn_set_conversation_v1(sudo_conv_t conv); #define sudo_fatal_callback_deregister(_a) sudo_fatal_callback_deregister_v1((_a)) diff --git a/include/sudo_lbuf.h b/include/sudo_lbuf.h index c0a20c5f7b..c12be48bb4 100644 --- a/include/sudo_lbuf.h +++ b/include/sudo_lbuf.h @@ -38,8 +38,8 @@ typedef int (*sudo_lbuf_output_t)(const char *); sudo_dso_public void sudo_lbuf_init_v1(struct sudo_lbuf *lbuf, sudo_lbuf_output_t output, int indent, const char *continuation, int cols); sudo_dso_public void sudo_lbuf_destroy_v1(struct sudo_lbuf *lbuf); -sudo_dso_public bool sudo_lbuf_append_v1(struct sudo_lbuf *lbuf, const char *fmt, ...) __printflike(2, 3); -sudo_dso_public bool sudo_lbuf_append_quoted_v1(struct sudo_lbuf *lbuf, const char *set, const char *fmt, ...) __printflike(3, 4); +sudo_dso_public bool sudo_lbuf_append_v1(struct sudo_lbuf *lbuf, const char *fmt, ...) sudo_printflike(2, 3); +sudo_dso_public bool sudo_lbuf_append_quoted_v1(struct sudo_lbuf *lbuf, const char *set, const char *fmt, ...) sudo_printflike(3, 4); sudo_dso_public void sudo_lbuf_print_v1(struct sudo_lbuf *lbuf); sudo_dso_public bool sudo_lbuf_error_v1(struct sudo_lbuf *lbuf); sudo_dso_public void sudo_lbuf_clearerr_v1(struct sudo_lbuf *lbuf); diff --git a/include/sudo_util.h b/include/sudo_util.h index bafad020de..dba96863da 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -249,9 +249,9 @@ sudo_dso_public bool sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gi #define sudo_mkdir_parents(_a, _b, _c, _d, _e) sudo_mkdir_parents_v1((_a), (_b), (_c), (_d), (_e)) /* mmap_alloc.c */ -sudo_dso_public void *sudo_mmap_alloc_v1(size_t size) __malloc; +sudo_dso_public void *sudo_mmap_alloc_v1(size_t size) sudo_malloclike; #define sudo_mmap_alloc(_a) sudo_mmap_alloc_v1(_a) -sudo_dso_public void *sudo_mmap_allocarray_v1(size_t count, size_t size) __malloc; +sudo_dso_public void *sudo_mmap_allocarray_v1(size_t count, size_t size) sudo_malloclike; #define sudo_mmap_allocarray(_a, _b) sudo_mmap_allocarray_v1((_a), (_b)) sudo_dso_public char *sudo_mmap_strdup_v1(const char *str); #define sudo_mmap_strdup(_a) sudo_mmap_strdup_v1(_a) @@ -271,7 +271,7 @@ sudo_dso_public void initprogname2(const char *, const char * const *); /* rcstr.c */ sudo_dso_public char *sudo_rcstr_dup(const char *src); -sudo_dso_public char *sudo_rcstr_alloc(size_t len) __malloc; +sudo_dso_public char *sudo_rcstr_alloc(size_t len) sudo_malloclike; sudo_dso_public char *sudo_rcstr_addref(const char *s); sudo_dso_public void sudo_rcstr_delref(const char *s); diff --git a/lib/eventlog/eventlog.c b/lib/eventlog/eventlog.c index 15134913c8..5494a0950d 100644 --- a/lib/eventlog/eventlog.c +++ b/lib/eventlog/eventlog.c @@ -349,7 +349,7 @@ closefrom_nodebug(int lowfd) #define MAX_MAILFLAGS 63 -static void __attribute__((__noreturn__)) +static sudo_noreturn void exec_mailer(int pipein) { const struct eventlog_config *evl_conf = eventlog_getconf(); diff --git a/plugins/sudoers/check_aliases.c b/plugins/sudoers/check_aliases.c index 959a220ccb..1b3d030098 100644 --- a/plugins/sudoers/check_aliases.c +++ b/plugins/sudoers/check_aliases.c @@ -38,7 +38,7 @@ struct alias_warned { }; SLIST_HEAD(alias_warned_list, alias_warned); -static bool alias_warnx(const char *file, int line, int column, bool strict, bool quiet, const char *fmt, ...) __printflike(6, 7); +static bool alias_warnx(const char *file, int line, int column, bool strict, bool quiet, const char *fmt, ...) sudo_printflike(6, 7); static bool alias_warned(struct alias_warned_list *warned, char *name) diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index 30b148d38e..ca15cc9065 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -87,8 +87,8 @@ static struct option long_opts[] = { }; sudo_dso_public int main(int argc, char *argv[]); -static void help(void) __attribute__((__noreturn__)); -static void usage(int); +static sudo_noreturn void help(void); +static sudo_noreturn void usage(void); static bool convert_sudoers_sudoers(struct sudoers_parse_tree *parse_tree, const char *output_file, struct cvtsudoers_config *conf); static bool parse_sudoers(const char *input_file, struct cvtsudoers_config *conf); static bool parse_ldif(struct sudoers_parse_tree *parse_tree, const char *input_file, struct cvtsudoers_config *conf); @@ -207,7 +207,7 @@ main(int argc, char *argv[]) conf->order_increment = sudo_strtonum(optarg, 1, UINT_MAX, &errstr); if (errstr != NULL) { sudo_warnx(U_("order increment: %s: %s"), optarg, U_(errstr)); - usage(1); + usage(); } break; case 'l': @@ -226,7 +226,7 @@ main(int argc, char *argv[]) conf->sudo_order = sudo_strtonum(optarg, 0, UINT_MAX, &errstr); if (errstr != NULL) { sudo_warnx(U_("starting order: %s: %s"), optarg, U_(errstr)); - usage(1); + usage(); } break; case 'p': @@ -236,7 +236,7 @@ main(int argc, char *argv[]) conf->order_padding = sudo_strtonum(optarg, 1, UINT_MAX, &errstr); if (errstr != NULL ) { sudo_warnx(U_("order padding: %s: %s"), optarg, U_(errstr)); - usage(1); + usage(); } break; case 's': @@ -256,7 +256,7 @@ main(int argc, char *argv[]) pwfile = optarg; break; default: - usage(1); + usage(); } } argc -= optind; @@ -275,7 +275,7 @@ main(int argc, char *argv[]) input_format = format_sudoers; } else { sudo_warnx(U_("unsupported input format %s"), conf->input_format); - usage(1); + usage(); } } if (conf->output_format != NULL) { @@ -293,23 +293,23 @@ main(int argc, char *argv[]) conf->store_options = false; } else { sudo_warnx(U_("unsupported output format %s"), conf->output_format); - usage(1); + usage(); } } if (conf->filter != NULL) { /* We always expand aliases when filtering (may change in future). */ if (!cvtsudoers_parse_filter(conf->filter)) - usage(1); + usage(); } if (conf->defstr != NULL) { conf->defaults = cvtsudoers_parse_defaults(conf->defstr); if (conf->defaults == -1) - usage(1); + usage(); } if (conf->supstr != NULL) { conf->suppress = cvtsudoers_parse_suppression(conf->supstr); if (conf->suppress == -1) - usage(1); + usage(); } /* Apply padding to sudo_order if present. */ @@ -1485,21 +1485,26 @@ convert_sudoers_sudoers(struct sudoers_parse_tree *parse_tree, } static void -usage(int fatal) +print_usage(FILE *fp) { - (void) fprintf(fatal ? stderr : stdout, "usage: %s [-ehMpV] [-b dn] " + (void) fprintf(fp, "usage: %s [-ehMpV] [-b dn] " "[-c conf_file ] [-d deftypes] [-f output_format] [-i input_format] " "[-I increment] [-m filter] [-o output_file] [-O start_point] " "[-P padding] [-s sections] [input_file]\n", getprogname()); - if (fatal) - exit(EXIT_FAILURE); +} + +static void +usage(void) +{ + print_usage(stderr); + exit(EXIT_FAILURE); } static void help(void) { (void) printf(_("%s - convert between sudoers file formats\n\n"), getprogname()); - usage(0); + print_usage(stdout); (void) puts(_("\nOptions:\n" " -b, --base=dn the base DN for sudo LDAP queries\n" " -c, --config=conf_file the path to the configuration file\n" diff --git a/plugins/sudoers/cvtsudoers.h b/plugins/sudoers/cvtsudoers.h index cf48d1a9a9..6aaaeb2fdf 100644 --- a/plugins/sudoers/cvtsudoers.h +++ b/plugins/sudoers/cvtsudoers.h @@ -87,7 +87,7 @@ struct cvtsudoers_filter { /* cvtsudoers.c */ extern struct cvtsudoers_filter *filters; -void log_warnx(const char *fmt, ...) __printflike(1, 2); +void log_warnx(const char *fmt, ...) sudo_printflike(1, 2); /* cvtsudoers_csv.c */ bool convert_sudoers_csv(struct sudoers_parse_tree *parse_tree, const char *output_file, struct cvtsudoers_config *conf); diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 1c993c2d59..e90be1f64b 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -73,7 +73,7 @@ static bool store_timespec(const char *str, struct sudo_defs_types *def); static bool store_rlimit(const char *str, struct sudo_defs_types *def); static bool list_op(const char *str, size_t, struct list_members *list, enum list_ops op); static bool valid_path(struct sudo_defs_types *def, const char *val, const char *file, int line, int column, bool quiet); -static bool defaults_warnx(const char *file, int line, int column, bool quiet, const char *fmt, ...) __printflike(5, 6); +static bool defaults_warnx(const char *file, int line, int column, bool quiet, const char *fmt, ...) sudo_printflike(5, 6); /* * Table describing compile-time and run-time options. diff --git a/plugins/sudoers/logging.h b/plugins/sudoers/logging.h index 627a860b41..43e5a40c47 100644 --- a/plugins/sudoers/logging.h +++ b/plugins/sudoers/logging.h @@ -72,8 +72,8 @@ struct log_details; bool sudoers_warn_setlocale(bool restore, int *cookie); bool sudoers_setlocale(int locale_type, int *prev_locale); int sudoers_getlocale(void); -int audit_failure(char *const argv[], char const *const fmt, ...) __printflike(2, 3); -int vaudit_failure(char *const argv[], char const *const fmt, va_list ap) __printflike(2, 0); +int audit_failure(char *const argv[], char const *const fmt, ...) sudo_printflike(2, 3); +int vaudit_failure(char *const argv[], char const *const fmt, va_list ap) sudo_printflike(2, 0); bool log_allowed(struct eventlog *evlog); bool log_exit_status(int exit_status); bool log_auth_failure(int status, unsigned int tries); @@ -81,15 +81,15 @@ bool log_denial(int status, bool inform_user); bool log_failure(int status, int flags); bool log_server_alert(struct eventlog *evlog, struct timespec *now, const char *message, const char *errstr); bool log_server_reject(struct eventlog *evlog, const char *message); -bool log_warning(int flags, const char *fmt, ...) __printflike(2, 3); -bool log_warningx(int flags, const char *fmt, ...) __printflike(2, 3); -bool gai_log_warning(int flags, int errnum, const char *fmt, ...) __printflike(3, 4); +bool log_warning(int flags, const char *fmt, ...) sudo_printflike(2, 3); +bool log_warningx(int flags, const char *fmt, ...) sudo_printflike(2, 3); +bool gai_log_warning(int flags, int errnum, const char *fmt, ...) sudo_printflike(3, 4); bool sudoers_initlocale(const char *ulocale, const char *slocale); bool sudoers_locale_callback(const char *file, int line, int column, const union sudo_defs_val *sd_un, int op); void sudoers_to_eventlog(struct eventlog *evlog, const char *cmnd, char * const argv[], char *const envp[], const char *uuid_str); void init_eventlog_config(void); bool init_log_details(struct log_details *details, struct eventlog *evlog); -bool log_parse_error(const char *file, int line, int column, const char *fmt, va_list ap) __printf0like(4, 0); +bool log_parse_error(const char *file, int line, int column, const char *fmt, va_list ap) sudo_printf0like(4, 0); bool mail_parse_errors(void); #endif /* SUDOERS_LOGGING_H */ diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index d8e28774d5..f7c3743c3b 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -175,12 +175,12 @@ extern time_t get_date(char *); static int list_sessions(int, char **, const char *, const char *, const char *); static int parse_expr(struct search_node_list *, char **, bool); static void read_keyboard(int fd, int what, void *v); -static void help(void) __attribute__((__noreturn__)); +static sudo_noreturn void help(void); +static sudo_noreturn void usage(void); static int replay_session(int iolog_dir_fd, const char *iolog_dir, struct timespec *offset, struct timespec *max_wait, const char *decimal, bool interactive, bool suspend_wait); static void sudoreplay_cleanup(void); -static void usage(int); static void write_output(int fd, int what, void *v); static void restore_terminal_size(void); static void setup_terminal(struct eventlog *evlog, bool interactive, bool resize); @@ -302,7 +302,7 @@ main(int argc, char *argv[]) exitcode = EXIT_SUCCESS; goto done; default: - usage(1); + usage(); /* NOTREACHED */ } @@ -316,7 +316,7 @@ main(int argc, char *argv[]) } if (argc != 1) - usage(1); + usage(); /* By default we replay stdout, stderr and ttyout. */ if (def_filter) { @@ -1645,23 +1645,26 @@ read_keyboard(int fd, int what, void *v) } static void -usage(int fatal) +print_usage(FILE *fp) { - fprintf(fatal ? stderr : stdout, - _("usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n"), + fprintf(fp, _("usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n"), getprogname()); - fprintf(fatal ? stderr : stdout, - _("usage: %s [-h] [-d dir] -l [search expression]\n"), + fprintf(fp, _("usage: %s [-h] [-d dir] -l [search expression]\n"), getprogname()); - if (fatal) - exit(EXIT_FAILURE); +} + +static void +usage(void) +{ + print_usage(stderr); + exit(EXIT_FAILURE); } static void help(void) { (void) printf(_("%s - replay sudo session logs\n\n"), getprogname()); - usage(0); + print_usage(stdout); (void) puts(_("\nOptions:\n" " -d, --directory=dir specify directory for session logs\n" " -f, --filter=filter specify which I/O type(s) to display\n" diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index 809b6b59c6..8fa7d9d8d1 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -61,7 +61,7 @@ enum sudoers_formats { * Function Prototypes */ static void dump_sudoers(struct sudo_lbuf *lbuf); -static void usage(void) __attribute__((__noreturn__)); +static sudo_noreturn void usage(void); static void set_runaspw(const char *); static void set_runasgr(const char *); static bool cb_runas_default(const char *file, int line, int column, const union sudo_defs_val *, int); diff --git a/plugins/sudoers/toke.h b/plugins/sudoers/toke.h index d20cb458f0..2b9f111b22 100644 --- a/plugins/sudoers/toke.h +++ b/plugins/sudoers/toke.h @@ -36,7 +36,7 @@ bool fill_cmnd(const char *, size_t); bool fill(const char *, size_t); bool ipv6_valid(const char *s); int sudoers_trace_print(const char *); -void sudoerserrorf(const char *, ...) __printf0like(1, 2); +void sudoerserrorf(const char *, ...) sudo_printf0like(1, 2); void sudoerserror(const char *); bool push_include(const char *, bool); diff --git a/plugins/sudoers/tsdump.c b/plugins/sudoers/tsdump.c index 8abe667fa7..db15f7b633 100644 --- a/plugins/sudoers/tsdump.c +++ b/plugins/sudoers/tsdump.c @@ -50,7 +50,7 @@ union timestamp_entry_storage { sudo_dso_public int main(int argc, char *argv[]); -static void usage(void) __attribute__((__noreturn__)); +static sudo_noreturn void usage(void); static void dump_entry(struct timestamp_entry *entry, off_t pos); static bool valid_entry(union timestamp_entry_storage *u, off_t pos); static bool convert_entry(union timestamp_entry_storage *record, struct timespec *off); diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index fcd9d9f794..835dac3ae5 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -90,14 +90,14 @@ static char *get_editor(int *editor_argc, char ***editor_argv); static bool check_syntax(const char *, bool, bool, bool, bool); static bool edit_sudoers(struct sudoersfile *, char *, int, char **, int); static bool install_sudoers(struct sudoersfile *, bool, bool); -static bool visudo_track_error(const char *file, int line, int column, const char *fmt, va_list args) __printf0like(4, 0); +static bool visudo_track_error(const char *file, int line, int column, const char *fmt, va_list args) sudo_printf0like(4, 0); static int print_unused(struct sudoers_parse_tree *, struct alias *, void *); static bool reparse_sudoers(char *, int, char **, bool, bool); static int run_command(const char *, char *const *); static void parse_sudoers_options(void); static void setup_signals(void); -static void help(void) __attribute__((__noreturn__)); -static void usage(int); +static sudo_noreturn void help(void); +static sudo_noreturn void usage(void); static void visudo_cleanup(void); extern void get_hostname(void); @@ -151,7 +151,7 @@ main(int argc, char *argv[]) textdomain("sudoers"); if (argc < 1) - usage(1); + usage(); /* Register fatal/fatalx callback. */ sudo_fatal_callback_register(visudo_cleanup); @@ -208,7 +208,7 @@ main(int argc, char *argv[]) export_path = optarg; break; default: - usage(1); + usage(); } } argc -= optind; @@ -226,7 +226,7 @@ main(int argc, char *argv[]) } break; default: - usage(1); + usage(); } if (fflag) { @@ -1215,20 +1215,20 @@ quit(int signo) _exit(signo); } +#define VISUDO_USAGE "usage: %s [-chqsV] [[-f] sudoers ]\n" + static void -usage(int fatal) +usage(void) { - (void) fprintf(fatal ? stderr : stdout, - "usage: %s [-chqsV] [[-f] sudoers ]\n", getprogname()); - if (fatal) - exit(EXIT_FAILURE); + (void) fprintf(stderr, VISUDO_USAGE, getprogname()); + exit(EXIT_FAILURE); } static void help(void) { (void) printf(_("%s - safely edit the sudoers file\n\n"), getprogname()); - usage(0); + (void) printf(VISUDO_USAGE, getprogname()); (void) puts(_("\nOptions:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" diff --git a/src/parse_args.c b/src/parse_args.c index fefd9edd60..1128604ed5 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -47,9 +47,9 @@ int tgetpass_flags; /* * Local functions. */ -static void help(void) __attribute__((__noreturn__)); -static void usage_excl(void) __attribute__((__noreturn__)); -static void usage_excl_ticket(void) __attribute__((__noreturn__)); +static sudo_noreturn void help(void); +static sudo_noreturn void usage_excl(void); +static sudo_noreturn void usage_excl_ticket(void); /* * Mapping of command line flags to name/value settings. diff --git a/src/regress/noexec/check_noexec.c b/src/regress/noexec/check_noexec.c index 79848b43af..e62869e173 100644 --- a/src/regress/noexec/check_noexec.c +++ b/src/regress/noexec/check_noexec.c @@ -44,7 +44,6 @@ static bool verbose; sudo_dso_public int main(int argc, char *argv[], char *envp[]); -static void usage(void) __attribute__((__noreturn__)); static bool report_status(int status, const char *what) @@ -179,7 +178,7 @@ try_wordexp(void) } #endif -static void +static sudo_noreturn void usage(void) { fprintf(stderr, "usage: %s [-v] rexec | /path/to/sudo_noexec.so\n", diff --git a/src/sudo.h b/src/sudo.h index c0d2dcfbb0..bbf874fc88 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -277,7 +277,7 @@ extern int sudo_debug_instance; int sudo_edit(struct command_details *details); /* parse_args.c */ -void usage(void) __attribute__((__noreturn__)); +sudo_noreturn void usage(void); /* openbsd.c */ int os_init_openbsd(int argc, char *argv[], char *envp[]); From 498985632199fd20839c9aca6696a249d621b7cb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 15 Sep 2022 16:34:49 -0600 Subject: [PATCH 123/186] Use tcpgid if passed from sudo front-end and use it in tty_present(). This can be used as another indicator that a terminal is present without having to open /dev/tty. --- plugins/sudoers/policy.c | 10 +++++++++- plugins/sudoers/sudoers.c | 3 ++- plugins/sudoers/sudoers.h | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index a7d79a6da4..60a5a2d39e 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -406,7 +406,6 @@ sudoers_policy_deserialize_info(void *v, struct defaults_list *defaults) CLR(flags, MODE_UPDATE_TICKET); user_gid = (gid_t)-1; - user_sid = (pid_t)-1; user_uid = (gid_t)-1; user_umask = (mode_t)-1; for (cur = info->user_info; *cur != NULL; cur++) { @@ -502,6 +501,15 @@ sudoers_policy_deserialize_info(void *v, struct defaults_list *defaults) } continue; } + if (MATCHES(*cur, "tcpgid=")) { + p = *cur + sizeof("tcpgid=") - 1; + user_tcpgid = (pid_t) sudo_strtoid(p, &errstr); + if (errstr != NULL) { + sudo_warnx(U_("%s: %s"), *cur, U_(errstr)); + goto bad; + } + continue; + } if (MATCHES(*cur, "umask=")) { p = *cur + sizeof("umask=") - 1; sudo_user.umask = sudo_strtomode(p, &errstr); diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index a5a3972e91..cc40a647ff 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -1791,7 +1791,8 @@ tty_present(void) { debug_decl(tty_present, SUDOERS_DEBUG_PLUGIN); - if (user_ttypath == NULL) { + if (user_tcpgid == 0 && user_ttypath == NULL) { + /* No job control or terminal, check /dev/tty. */ int fd = open(_PATH_TTY, O_RDWR); if (fd == -1) debug_return_bool(false); diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index e27067480b..82c0279991 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -134,6 +134,7 @@ struct sudo_user { uid_t uid; uid_t gid; pid_t sid; + pid_t tcpgid; char uuid_str[37]; }; @@ -226,6 +227,7 @@ struct sudo_user { #define user_uid (sudo_user.uid) #define user_gid (sudo_user.gid) #define user_sid (sudo_user.sid) +#define user_tcpgid (sudo_user.tcpgid) #define user_umask (sudo_user.umask) #define user_passwd (sudo_user.pw->pw_passwd) #define user_dir (sudo_user.pw->pw_dir) From 7464b300d9cf37d5c5694ccc7a15910d5171211e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 20 Sep 2022 10:18:09 -0600 Subject: [PATCH 124/186] new_container: no need to initialize container pointer in declaration. From Li zeming. --- src/load_plugins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/load_plugins.c b/src/load_plugins.c index 33535217a3..107221e114 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -174,7 +174,7 @@ static struct plugin_container * new_container(void *handle, const char *path, struct generic_plugin *plugin, struct plugin_info *info) { - struct plugin_container *container = NULL; + struct plugin_container *container; debug_decl(new_container, SUDO_DEBUG_PLUGIN); if ((container = calloc(1, sizeof(*container))) == NULL) { From 4ee0caf07d5eaa7aff375a8d2d691301d84d1998 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 20 Sep 2022 11:27:40 -0600 Subject: [PATCH 125/186] Update to protobuf-c 1.4.1 We already had all the relevant fixes so this is just cosmetic. --- LICENSE.md | 2 +- include/protobuf-c/protobuf-c.h | 6 +++--- lib/protobuf-c/protobuf-c.c | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 8c61f3728a..07c91799da 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -319,7 +319,7 @@ The embedded copy of zlib bears the following license: The embedded copy of protobuf-c bears the following license: - Copyright (c) 2008-2018, Dave Benson and the protobuf-c authors. + Copyright (c) 2008-2022, Dave Benson and the protobuf-c authors. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/include/protobuf-c/protobuf-c.h b/include/protobuf-c/protobuf-c.h index 71c928fdbd..442abf61d1 100644 --- a/include/protobuf-c/protobuf-c.h +++ b/include/protobuf-c/protobuf-c.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2018, Dave Benson and the protobuf-c authors. + * Copyright (c) 2008-2022, Dave Benson and the protobuf-c authors. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -794,13 +794,13 @@ protobuf_c_version_number(void); * The version of the protobuf-c headers, represented as a string using the same * format as protobuf_c_version(). */ -#define PROTOBUF_C_VERSION "1.4.0" +#define PROTOBUF_C_VERSION "1.4.1" /** * The version of the protobuf-c headers, represented as an integer using the * same format as protobuf_c_version_number(). */ -#define PROTOBUF_C_VERSION_NUMBER 1004000 +#define PROTOBUF_C_VERSION_NUMBER 1004001 /** * The minimum protoc-c version which works with the current version of the diff --git a/lib/protobuf-c/protobuf-c.c b/lib/protobuf-c/protobuf-c.c index 9ee355df59..56f8dc8f1e 100644 --- a/lib/protobuf-c/protobuf-c.c +++ b/lib/protobuf-c/protobuf-c.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2015, Dave Benson and the protobuf-c authors. + * Copyright (c) 2008-2022, Dave Benson and the protobuf-c authors. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -2618,14 +2618,14 @@ parse_required_member(ScannedMember *scanned_member, return FALSE; def_mess = scanned_member->field->default_value; - if (len >= pref_len) { + if (len >= pref_len) subm = protobuf_c_message_unpack(scanned_member->field->descriptor, allocator, len - pref_len, data + pref_len); - } else { + else subm = NULL; - } + if (maybe_clear && *pmessage != NULL && *pmessage != def_mess) From ce387a684973d05c1d50c3fffe07d76d5753bf9e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 20 Sep 2022 14:35:12 -0600 Subject: [PATCH 126/186] Split log_{input,output} into log_{stdin,ttyin} and log_{ttyout,stdout,stderr} If log_input is set, log_{stdin,ttyin} will be set as well. If log_output is set, log_{stdout,stderr,ttyout} will be set as well. This provides more fine-grained control over I/O logging and makes it possible to disable logging piped or redirected intput or output. --- docs/sudoers.man.in | 361 +++++++++++++++++--- docs/sudoers.mdoc.in | 327 +++++++++++++++--- plugins/sudoers/audit.c | 2 +- plugins/sudoers/def_data.c | 20 ++ plugins/sudoers/def_data.h | 172 +++++----- plugins/sudoers/def_data.in | 15 + plugins/sudoers/defaults.h | 5 + plugins/sudoers/parse.c | 2 + plugins/sudoers/policy.c | 20 +- plugins/sudoers/regress/fuzz/fuzz_sudoers.c | 14 + plugins/sudoers/sudoers.c | 34 +- plugins/sudoers/sudoers.h | 2 + 12 files changed, 780 insertions(+), 194 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index 9f68c5c861..4702f2cd4f 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "September 20, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -292,27 +292,17 @@ and \fIlogfile\fR settings. See -\fILOG FORMAT\fR +\fIEVENT LOGGING\fR for a description of the log file format. .PP \fBsudoers\fR -is also capable of running a command in a pseudo-terminal and logging all +is also capable of running a command in a pseudo-terminal and logging input and/or output. The standard input, standard output, and standard error can be logged even when not associated with a terminal. -I/O logging is not on by default but can be enabled using -the -\fIlog_input\fR -and -\fIlog_output\fR -options as well as the -\fRLOG_INPUT\fR -and -\fRLOG_OUTPUT\fR -command tags. -See -\fII/O LOG FILES\fR -for details on how I/O log files are stored. +For more information about I/O logging, see the +\fII/O LOGGING\fR +section. .PP Starting with version 1.9, the \fIlog_servers\fR @@ -1860,22 +1850,16 @@ command and are ignored for all other commands. These tags override the value of the \fIlog_input\fR flag on a per-command basis. -For more information, see the description of -\fIlog_input\fR -in the -\fISUDOERS OPTIONS\fR -section below. +For more information, see +\fII/O LOGGING\fR. .TP 2n \fRLOG_OUTPUT\fR and \fRNOLOG_OUTPUT\fR .sp These tags override the value of the \fIlog_output\fR flag on a per-command basis. -For more information, see the description of -\fIlog_output\fR -in the -\fISUDOERS OPTIONS\fR -section below. +For more information, see +\fII/O LOGGING\fR. .TP 2n \fRMAIL\fR and \fRNOMAIL\fR .sp @@ -2846,7 +2830,7 @@ Most programs that require a user's password will disable echo before reading the password to avoid displaying the plaintext password on the screen. However, if terminal input is being logged (see -\fIlog_input\fR), +\fII/O LOGGING\fR), the password will still be present in the I/O log. If the \fIlog_passwords\fR @@ -2869,8 +2853,8 @@ is set), only the first character of the password will be replaced in the I/O log. This option has no effect unless \fIlog_input\fR -and -\fIlog_input\fR +or +\fIlog_ttyin\fR are also set. This flag is \fIon\fR @@ -3088,19 +3072,14 @@ by default. log_input If set, \fBsudo\fR -will run the command in a pseudo-terminal and log all user input. -If the standard input is not connected to the user's tty, due to -I/O redirection or because the command is part of a pipeline, that -input is also captured and stored in a separate log file. -Anything sent to the standard input will be consumed, regardless of -whether or not the command run via +will run the command in a pseudo-terminal (if \fBsudo\fR -is actually reading the standard input. -This may have unexpected results when using -\fBsudo\fR -in a shell script that expects to process the standard input. +was run from a terminal) and log all user input. +If the standard input is not connected to the user's terminal, due +to I/O redirection or because the command is part of a pipeline, +that input is also logged. For more information about I/O logging, see the -\fII/O LOG FILES\fR +\fII/O LOGGING\fR section. This flag is \fIoff\fR @@ -3109,12 +3088,15 @@ by default. log_output If set, \fBsudo\fR -will run the command in a pseudo-terminal and log all output that is sent -to the screen, similar to the -script(1) -command. +will run the command in a pseudo-terminal (if +\fBsudo\fR +was run from a terminal) and log all output that is sent to the +user's terminal, the standard output or the standard error. +If the standard output or standard error is not connected to the +user's terminal, due to I/O redirection or because the command is +part of a pipeline, that output is also logged. For more information about I/O logging, see the -\fII/O LOG FILES\fR +\fII/O LOGGING\fR section. This flag is \fIoff\fR @@ -3150,6 +3132,48 @@ by default. .sp This setting is only supported by version 1.9.0 or higher. .TP 18n +log_stderr +If set, +\fBsudo\fR +will run the command in a pseudo-terminal and log the standard error +if it is not connected to the user's terminal. +This can be used to log output to a pipe or redirected to a file. +This flag is +\fIoff\fR +by default but is enabled when either the +\fIlog_output\fR +flag or the +\fRLOG_OUTPUT\fR +command tag is set. +.TP 18n +log_stdin +If set, +\fBsudo\fR +will run the command in a pseudo-terminal and log the standard input +if it is not connected to the user's terminal. +This can be used to log input from a pipe or redirected from a file. +This flag is +\fIoff\fR +by default but is enabled when either the +\fIlog_input\fR +flag or the +\fRLOG_INPUT\fR +command tag is set. +.TP 18n +log_stdout +If set, +\fBsudo\fR +will run the command in a pseudo-terminal and log the standard output +if it is not connected to the user's terminal. +This can be used to log output to a pipe or redirected to a file. +This flag is +\fIoff\fR +by default but is enabled when either the +\fIlog_output\fR +flag or the +\fRLOG_OUTPUT\fR +command tag is set. +.TP 18n log_subcmds If set, \fBsudoers\fR @@ -3185,6 +3209,38 @@ and is incompatible with SELinux RBAC support unless the system supports seccomp(2) filter mode. .TP 18n +log_ttyin +If set, +\fBsudo\fR +will run the command in a pseudo-terminal and log user keystrokes +sent to the user's terminal, if one is present. +This flag is +\fIoff\fR +by default but is enabled when either the +\fIlog_input\fR +flag or the +\fRLOG_INPUT\fR +command tag is set. +If no terminal is present, for example when running a remote command using +ssh(1), +this flag will have no effect. +.TP 18n +log_ttyout +If set, +\fBsudo\fR +will run the command in a pseudo-terminal and log all output displayed +on the user's terminal, if one is present. +This flag is +\fIoff\fR +by default but is enabled when either the +\fIlog_output\fR +flag or the +\fRLOG_OUTPUT\fR +command tag is set. +If no terminal is present, for example when running a remote command using +ssh(1), +this flag will have no effect. +.TP 18n log_year If set, the four-digit year will be logged in the (non-syslog) \fBsudo\fR @@ -3834,6 +3890,11 @@ A pseudo-terminal is allocated by when it is running in a terminal and one or more of the \fIlog_input\fR, \fIlog_output\fR, +\fIlog_stdin\fR, +\fIlog_stdout\fR, +\fIlog_stderr\fR, +\fIlog_ttyin\fR, +\fIlog_ttyout\fR, or \fIuse_pty\fR flags is enabled. @@ -4606,7 +4667,7 @@ For \fBsudo_logsrvd\fR, client certificate validation is controlled by the \fItls_checkpeer\fR -option, which defaults to +flag, which defaults to \fIfalse\fR. .sp This setting is only supported by version 1.9.0 or higher. @@ -5110,7 +5171,7 @@ may be truncated. .TP 10n sudo Traditional sudo-style logs, see -\fILOG FORMAT\fR +\fIEVENT LOGGING\fR for a description of the log file format. .PP This setting affects logs sent via @@ -5693,7 +5754,7 @@ Defaults group_plugin=system_group.so .PP The group provider plugin API is described in detail in sudo_plugin(@mansectform@). -.SH "LOG FORMAT" +.SH "EVENT LOGGING" \fBsudoers\fR can log events in either JSON or \fIsudo\fR @@ -6049,11 +6110,60 @@ If the option is set to 0 (or negated with a \(oq\&!\(cq), word wrap will be disabled. -.SH "I/O LOG FILES" +.SH "I/O LOGGING" When I/O logging is enabled, \fBsudo\fR -will run the command in a pseudo-terminal and log all user input and/or output, -depending on which options are enabled. +will runs the command in a pseudo-terminal, logging user input +and/or output, depending on which +\fBsudoers\fR +flags are enabled. +There are five distinct types of I/O that can be logged, each with +a corresponding +\fBsudoers\fR +flag. +.TS +l l l. +.PP +\fBType\fR \fBFlag\fR \fBDescription\fR +.PP +terminal input log_ttyin keystrokes entered by the user +.PP +terminal output log_ttyout command output displayed to the screen +.PP +standard input log_stdin input from a pipe or a file +.PP +standard output log_stdout output to a pipe or a file +.PP +standard error log_stderr output to a pipe or a file +.TE +.PP +In addition to flags described the above, the +\fIlog_input\fR +flag and +\fRLOG_INPUT\fR +command tag set both +\fIlog_ttyin\fR +and +\fIlog_stdin\fR. +The +\fIlog_output\fR +flag and +\fRLOG_OUTPUT\fR +command tag set +\fIlog_ttyout\fR, +\fIlog_stdout\fR, +and +\fIlog_stderr\fR. +.PP +To capture terminal input and output, +\fBsudo\fR +run the command in a pseudo-terminal, logging the input and +output before passing it on to the user. +To capture the standard input, standard output or standard error, +\fBsudo\fR +uses a pipe to interpose itself between the input or output stream, +logging the I/O before passing it to the other end of the pipe. +.PP I/O can be logged either to the local machine or to a remote log server. For local logs, I/O is logged to the directory specified by the \fIiolog_dir\fR @@ -6073,7 +6183,121 @@ setting is used to specify one or more log servers running \fBsudo_logsrvd\fR or another server that implements the protocol described by sudo_logsrv.proto(@mansectform@). +.SS "I/O logging pitfals" +When logging standard input, anything sent to the standard input +will be consumed, regardless of whether or not the command run via +\fBsudo\fR +is actively reading the standard input. +This may have unexpected results when using +\fBsudo\fR +in a shell script that expects to process the standard input. +For example, given the following shell script: +.nf +.sp +.RS 4n +#!/bin/sh +sudo echo testing +echo done +.RE +.fi .PP +It will behave as expected when the script is passed to the shell as a +an argument: +.nf +.sp +.RS 4n +$ sh test.sh +testing +done +.RE +.fi +.PP +However, if the script is passed to the shell on the standard input, the +\(oqsudo echo testing\(cq +command will consume the rest of the script. +This means that the +\(oqecho done\(cq +statement is never executed. +.nf +.sp +.RS 4n +$ sh -s < test.sh +testing +.RE +.fi +.PP +There are several ways to work around this problem: +.TP 5n +1.\& +Redirect the standard input from +\fI/dev/null\fR +when running a command via +\fBsudo\fR +that does not need to read the standard input. +.nf +.sp +.RS 9n +sudo echo testing < /dev/null +.RE +.fi +.TP 5n +2.\& +Pass the script to the shell by path name instead of via the standard input. +.nf +.sp +.RS 9n +sh test.sh +.RE +.fi +.TP 5n +3.\& +Disable logging the standard input for commands that do not need +to read the standard input. +.nf +.sp +.RS 9n +Defaults!/bin/echo !log_stdin +.RE +.fi +.PP +Depending on the command, it may not be desirable to log the +standard input or standard output. +For example, I/O logging of commands that send or receive large +amount of data via the standard output or standard input such as +rsync(1) +and +tar(1) +could fill up the log file system with superfluous data. +It is possible to disable logging of the standard input and standard +output for such commands as follows: +.nf +.sp +.RS 4n +Cmnd_Alias COPY_CMDS = /usr/bin/tar, /usr/bin/cpio, /usr/bin/rsync + +# Log input and output but omit stdin and stdout when copying files. +Defaults log_input, log_output +Defaults!COPY_CMDS !log_stdin, !log_stdout +.RE +.fi +.PP +However, be aware that using the +\fIlog_input\fR +flag or the +\fRLOG_INPUT\fR +command tag will also enable +\fIlog_stdin\fR. +Likewise, the +\fIlog_ouput\fR +flag or the +\fRLOG_OUTPUT\fR +command tag will enable +\fIlog_stdout\fR +and +\fIlog_stderr.\fR +Careful ordering of rules may be necessary to achieve the results +that you expect. +.SS "I/O log format" For both local and remote I/O logs, each log is stored in a separate directory that contains the following files: .TP 10n @@ -6219,6 +6443,13 @@ command suspend or resume, signal received .TP 10n \fIttyin\fR Raw input from the user's terminal, exactly as it was received. +This file is only present if the +\fIlog_input\fR +or +\fIlog_ttyin\fR +flags are set and +\fBsudo\fR +was run from a terminal. No post-processing is performed. For manual viewing, you may wish to convert carriage return characters in the log to line feeds. @@ -6228,19 +6459,42 @@ For example: \fIstdin\fR The standard input when no terminal is present, or input redirected from a pipe or file. +This file is only present if the +\fIlog_input\fR +or +\fIlog_stdin\fR +flags are set and the standard input is not connected to a terminal. .TP 10n \fIttyout\fR Output from the pseudo-terminal (what the command writes to the screen). Terminal-specific post-processing is performed before the data is logged. This means that, for example, line feeds are usually converted to line feed/carriage return pairs and tabs may be expanded to spaces. +This file is only present if the +\fIlog_output\fR +or +\fIlog_ttyout\fR +flags are set and +\fBsudo\fR +was run from a terminal. .TP 10n \fIstdout\fR The standard output when no terminal is present, or output redirected to a pipe or file. +This file is only present if the +\fIlog_output\fR +or +\fIlog_stdout\fR +flags are set and the standard output is not connected to a terminal. .TP 10n \fIstderr\fR -The standard error redirected to a pipe or file. +The standard error when no terminal is present, or output redirected to +a pipe or file. +This file is only present if the +\fIlog_output\fR +or +\fIlog_stderr\fR +flags are set and the standard error is not connected to a terminal. .PP All files other than \fIlog\fR @@ -6268,6 +6522,9 @@ In most cases, logging the command output via or \fRLOG_OUTPUT\fR is all that is required. +When logging input, consider disabling the +\fIlog_passwords\fR +flag. .PP Since each session's I/O logs are stored in a separate directory, traditional log rotation utilities cannot be used to limit the diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 5e93a2c77e..ddf08db3fa 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd September 13, 2022 +.Dd September 20, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -281,27 +281,17 @@ and .Em logfile settings. See -.Sx "LOG FORMAT" +.Sx "EVENT LOGGING" for a description of the log file format. .Pp .Nm -is also capable of running a command in a pseudo-terminal and logging all +is also capable of running a command in a pseudo-terminal and logging input and/or output. The standard input, standard output, and standard error can be logged even when not associated with a terminal. -I/O logging is not on by default but can be enabled using -the -.Em log_input -and -.Em log_output -options as well as the -.Dv LOG_INPUT -and -.Dv LOG_OUTPUT -command tags. -See -.Sx "I/O LOG FILES" -for details on how I/O log files are stored. +For more information about I/O logging, see the +.Sx "I/O LOGGING" +section. .Pp Starting with version 1.9, the .Em log_servers @@ -1772,21 +1762,15 @@ command and are ignored for all other commands. These tags override the value of the .Em log_input flag on a per-command basis. -For more information, see the description of -.Em log_input -in the -.Sx SUDOERS OPTIONS -section below. +For more information, see +.Sx "I/O LOGGING" . .It Dv LOG_OUTPUT No and Dv NOLOG_OUTPUT .sp These tags override the value of the .Em log_output flag on a per-command basis. -For more information, see the description of -.Em log_output -in the -.Sx SUDOERS OPTIONS -section below. +For more information, see +.Sx "I/O LOGGING" . .It Dv MAIL No and Dv NOMAIL .sp These tags provide fine-grained control over whether @@ -2696,7 +2680,7 @@ Most programs that require a user's password will disable echo before reading the password to avoid displaying the plaintext password on the screen. However, if terminal input is being logged (see -.Em log_input ) , +.Sx "I/O LOGGING" ) , the password will still be present in the I/O log. If the .Em log_passwords @@ -2719,8 +2703,8 @@ is set), only the first character of the password will be replaced in the I/O log. This option has no effect unless .Em log_input -and -.Em log_input +or +.Em log_ttyin are also set. This flag is .Em on @@ -2921,19 +2905,14 @@ by default. .It log_input If set, .Nm sudo -will run the command in a pseudo-terminal and log all user input. -If the standard input is not connected to the user's tty, due to -I/O redirection or because the command is part of a pipeline, that -input is also captured and stored in a separate log file. -Anything sent to the standard input will be consumed, regardless of -whether or not the command run via +will run the command in a pseudo-terminal (if .Nm sudo -is actually reading the standard input. -This may have unexpected results when using -.Nm sudo -in a shell script that expects to process the standard input. +was run from a terminal) and log all user input. +If the standard input is not connected to the user's terminal, due +to I/O redirection or because the command is part of a pipeline, +that input is also logged. For more information about I/O logging, see the -.Sx "I/O LOG FILES" +.Sx "I/O LOGGING" section. This flag is .Em off @@ -2941,12 +2920,15 @@ by default. .It log_output If set, .Nm sudo -will run the command in a pseudo-terminal and log all output that is sent -to the screen, similar to the -.Xr script 1 -command. +will run the command in a pseudo-terminal (if +.Nm sudo +was run from a terminal) and log all output that is sent to the +user's terminal, the standard output or the standard error. +If the standard output or standard error is not connected to the +user's terminal, due to I/O redirection or because the command is +part of a pipeline, that output is also logged. For more information about I/O logging, see the -.Sx "I/O LOG FILES" +.Sx "I/O LOGGING" section. This flag is .Em off @@ -2978,6 +2960,45 @@ This flag is by default. .Pp This setting is only supported by version 1.9.0 or higher. +.It log_stderr +If set, +.Nm sudo +will run the command in a pseudo-terminal and log the standard error +if it is not connected to the user's terminal. +This can be used to log output to a pipe or redirected to a file. +This flag is +.Em off +by default but is enabled when either the +.Em log_output +flag or the +.Dv LOG_OUTPUT +command tag is set. +.It log_stdin +If set, +.Nm sudo +will run the command in a pseudo-terminal and log the standard input +if it is not connected to the user's terminal. +This can be used to log input from a pipe or redirected from a file. +This flag is +.Em off +by default but is enabled when either the +.Em log_input +flag or the +.Dv LOG_INPUT +command tag is set. +.It log_stdout +If set, +.Nm sudo +will run the command in a pseudo-terminal and log the standard output +if it is not connected to the user's terminal. +This can be used to log output to a pipe or redirected to a file. +This flag is +.Em off +by default but is enabled when either the +.Em log_output +flag or the +.Dv LOG_OUTPUT +command tag is set. .It log_subcmds If set, .Nm @@ -3012,6 +3033,36 @@ This setting is only supported by version 1.9.8 or higher and is incompatible with SELinux RBAC support unless the system supports .Xr seccomp 2 filter mode. +.It log_ttyin +If set, +.Nm sudo +will run the command in a pseudo-terminal and log user keystrokes +sent to the user's terminal, if one is present. +This flag is +.Em off +by default but is enabled when either the +.Em log_input +flag or the +.Dv LOG_INPUT +command tag is set. +If no terminal is present, for example when running a remote command using +.Xr ssh 1 , +this flag will have no effect. +.It log_ttyout +If set, +.Nm sudo +will run the command in a pseudo-terminal and log all output displayed +on the user's terminal, if one is present. +This flag is +.Em off +by default but is enabled when either the +.Em log_output +flag or the +.Dv LOG_OUTPUT +command tag is set. +If no terminal is present, for example when running a remote command using +.Xr ssh 1 , +this flag will have no effect. .It log_year If set, the four-digit year will be logged in the (non-syslog) .Nm sudo @@ -3626,6 +3677,11 @@ A pseudo-terminal is allocated by when it is running in a terminal and one or more of the .Em log_input , .Em log_output , +.Em log_stdin , +.Em log_stdout , +.Em log_stderr , +.Em log_ttyin , +.Em log_ttyout , or .Em use_pty flags is enabled. @@ -4348,7 +4404,7 @@ For .Nm sudo_logsrvd , client certificate validation is controlled by the .Em tls_checkpeer -option, which defaults to +flag, which defaults to .Em false . .Pp This setting is only supported by version 1.9.0 or higher. @@ -4791,7 +4847,7 @@ Due to limitations of the protocol, JSON events sent via may be truncated. .It sudo Traditional sudo-style logs, see -.Sx "LOG FORMAT" +.Sx "EVENT LOGGING" for a description of the log file format. .El .Pp @@ -5325,7 +5381,7 @@ Defaults group_plugin=system_group.so .Pp The group provider plugin API is described in detail in .Xr sudo_plugin @mansectform@ . -.Sh LOG FORMAT +.Sh EVENT LOGGING .Nm can log events in either JSON or .Em sudo @@ -5653,11 +5709,53 @@ option is set to 0 (or negated with a .Ql \&! ) , word wrap will be disabled. .El -.Sh I/O LOG FILES +.Sh I/O LOGGING When I/O logging is enabled, .Nm sudo -will run the command in a pseudo-terminal and log all user input and/or output, -depending on which options are enabled. +will runs the command in a pseudo-terminal, logging user input +and/or output, depending on which +.Nm +flags are enabled. +There are five distinct types of I/O that can be logged, each with +a corresponding +.Nm +flag. +.Bl -column "standard output" "log_output" "command output displayed to the screen" +.It Sy Type Ta Sy Flag Ta Sy Description +.It terminal input Ta log_ttyin Ta keystrokes entered by the user +.It terminal output Ta log_ttyout Ta command output displayed to the screen +.It standard input Ta log_stdin Ta input from a pipe or a file +.It standard output Ta log_stdout Ta output to a pipe or a file +.It standard error Ta log_stderr Ta output to a pipe or a file +.El +.Pp +In addition to flags described the above, the +.Em log_input +flag and +.Dv LOG_INPUT +command tag set both +.Em log_ttyin +and +.Em log_stdin . +The +.Em log_output +flag and +.Dv LOG_OUTPUT +command tag set +.Em log_ttyout , +.Em log_stdout , +and +.Em log_stderr . +.Pp +To capture terminal input and output, +.Nm sudo +run the command in a pseudo-terminal, logging the input and +output before passing it on to the user. +To capture the standard input, standard output or standard error, +.Nm sudo +uses a pipe to interpose itself between the input or output stream, +logging the I/O before passing it to the other end of the pipe. +.Pp I/O can be logged either to the local machine or to a remote log server. For local logs, I/O is logged to the directory specified by the .Em iolog_dir @@ -5679,7 +5777,99 @@ setting is used to specify one or more log servers running .Nm sudo_logsrvd or another server that implements the protocol described by .Xr sudo_logsrv.proto @mansectform@ . +.Ss I/O logging pitfals +When logging standard input, anything sent to the standard input +will be consumed, regardless of whether or not the command run via +.Nm sudo +is actively reading the standard input. +This may have unexpected results when using +.Nm sudo +in a shell script that expects to process the standard input. +For example, given the following shell script: +.Bd -literal -offset 4n +#!/bin/sh +sudo echo testing +echo done +.Ed +.Pp +It will behave as expected when the script is passed to the shell as a +an argument: +.Bd -literal -offset 4n +$ sh test.sh +testing +done +.Ed +.Pp +However, if the script is passed to the shell on the standard input, the +.Ql sudo echo testing +command will consume the rest of the script. +This means that the +.Ql echo done +statement is never executed. +.Bd -literal -offset 4n +$ sh -s < test.sh +testing +.Ed +.Pp +There are several ways to work around this problem: +.Bl -enum +.It +Redirect the standard input from +.Pa /dev/null +when running a command via +.Nm sudo +that does not need to read the standard input. +.Bd -literal -offset 4n +sudo echo testing < /dev/null +.Ed +.It +Pass the script to the shell by path name instead of via the standard input. +.Bd -literal -offset 4n +sh test.sh +.Ed +.It +Disable logging the standard input for commands that do not need +to read the standard input. +.Bd -literal -offset 4n +Defaults!/bin/echo !log_stdin +.Ed +.El .Pp +Depending on the command, it may not be desirable to log the +standard input or standard output. +For example, I/O logging of commands that send or receive large +amount of data via the standard output or standard input such as +.Xr rsync 1 +and +.Xr tar 1 +could fill up the log file system with superfluous data. +It is possible to disable logging of the standard input and standard +output for such commands as follows: +.Bd -literal -offset 4n +Cmnd_Alias COPY_CMDS = /usr/bin/tar, /usr/bin/cpio, /usr/bin/rsync + +# Log input and output but omit stdin and stdout when copying files. +Defaults log_input, log_output +Defaults!COPY_CMDS !log_stdin, !log_stdout +.Ed +.Pp +However, be aware that using the +.Em log_input +flag or the +.Dv LOG_INPUT +command tag will also enable +.Em log_stdin . +Likewise, the +.Em log_ouput +flag or the +.Dv LOG_OUTPUT +command tag will enable +.Em log_stdout +and +.Em log_stderr. +Careful ordering of rules may be necessary to achieve the results +that you expect. +.Ss I/O log format For both local and remote I/O logs, each log is stored in a separate directory that contains the following files: .Bl -tag -width 8n @@ -5789,6 +5979,13 @@ command suspend or resume, signal received .El .It Pa ttyin Raw input from the user's terminal, exactly as it was received. +This file is only present if the +.Em log_input +or +.Em log_ttyin +flags are set and +.Nm sudo +was run from a terminal. No post-processing is performed. For manual viewing, you may wish to convert carriage return characters in the log to line feeds. @@ -5797,16 +5994,39 @@ For example: .It Pa stdin The standard input when no terminal is present, or input redirected from a pipe or file. +This file is only present if the +.Em log_input +or +.Em log_stdin +flags are set and the standard input is not connected to a terminal. .It Pa ttyout Output from the pseudo-terminal (what the command writes to the screen). Terminal-specific post-processing is performed before the data is logged. This means that, for example, line feeds are usually converted to line feed/carriage return pairs and tabs may be expanded to spaces. +This file is only present if the +.Em log_output +or +.Em log_ttyout +flags are set and +.Nm sudo +was run from a terminal. .It Pa stdout The standard output when no terminal is present, or output redirected to a pipe or file. +This file is only present if the +.Em log_output +or +.Em log_stdout +flags are set and the standard output is not connected to a terminal. .It Pa stderr -The standard error redirected to a pipe or file. +The standard error when no terminal is present, or output redirected to +a pipe or file. +This file is only present if the +.Em log_output +or +.Em log_stderr +flags are set and the standard error is not connected to a terminal. .El .Pp All files other than @@ -5835,6 +6055,9 @@ In most cases, logging the command output via or .Dv LOG_OUTPUT is all that is required. +When logging input, consider disabling the +.Em log_passwords +flag. .Pp Since each session's I/O logs are stored in a separate directory, traditional log rotation utilities cannot be used to limit the diff --git a/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index a4d1d850df..5a03bfeecd 100644 --- a/plugins/sudoers/audit.c +++ b/plugins/sudoers/audit.c @@ -261,7 +261,7 @@ log_server_accept(struct eventlog *evlog) debug_return_bool(true); } else { /* Only send accept event to log server if I/O log plugin did not. */ - if (def_log_input || def_log_output) + if (iolog_enabled) debug_return_bool(true); } diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index 54b20356e4..a5e98633d9 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -351,10 +351,30 @@ struct sudo_defs_types sudo_defs_table[] = { "log_input", T_FLAG, N_("Log user's input for the command being run"), NULL, + }, { + "log_stdin", T_FLAG, + N_("Log the command's standard input if not connected to a terminal"), + NULL, + }, { + "log_ttyin", T_FLAG, + N_("Log the user's terminal input for the command being run"), + NULL, }, { "log_output", T_FLAG, N_("Log the output of the command being run"), NULL, + }, { + "log_stdout", T_FLAG, + N_("Log the command's standard output if not connected to a terminal"), + NULL, + }, { + "log_stderr", T_FLAG, + N_("Log the command's standard error if not connected to a terminal"), + NULL, + }, { + "log_ttyout", T_FLAG, + N_("Log the terminal output of the command being run"), + NULL, }, { "compress_io", T_FLAG, N_("Compress I/O logs using zlib"), diff --git a/plugins/sudoers/def_data.h b/plugins/sudoers/def_data.h index 4d8d36bfc8..5c244a45c9 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -150,167 +150,177 @@ #define def_umask_override (sudo_defs_table[I_UMASK_OVERRIDE].sd_un.flag) #define I_LOG_INPUT 74 #define def_log_input (sudo_defs_table[I_LOG_INPUT].sd_un.flag) -#define I_LOG_OUTPUT 75 +#define I_LOG_STDIN 75 +#define def_log_stdin (sudo_defs_table[I_LOG_STDIN].sd_un.flag) +#define I_LOG_TTYIN 76 +#define def_log_ttyin (sudo_defs_table[I_LOG_TTYIN].sd_un.flag) +#define I_LOG_OUTPUT 77 #define def_log_output (sudo_defs_table[I_LOG_OUTPUT].sd_un.flag) -#define I_COMPRESS_IO 76 +#define I_LOG_STDOUT 78 +#define def_log_stdout (sudo_defs_table[I_LOG_STDOUT].sd_un.flag) +#define I_LOG_STDERR 79 +#define def_log_stderr (sudo_defs_table[I_LOG_STDERR].sd_un.flag) +#define I_LOG_TTYOUT 80 +#define def_log_ttyout (sudo_defs_table[I_LOG_TTYOUT].sd_un.flag) +#define I_COMPRESS_IO 81 #define def_compress_io (sudo_defs_table[I_COMPRESS_IO].sd_un.flag) -#define I_USE_PTY 77 +#define I_USE_PTY 82 #define def_use_pty (sudo_defs_table[I_USE_PTY].sd_un.flag) -#define I_GROUP_PLUGIN 78 +#define I_GROUP_PLUGIN 83 #define def_group_plugin (sudo_defs_table[I_GROUP_PLUGIN].sd_un.str) -#define I_IOLOG_DIR 79 +#define I_IOLOG_DIR 84 #define def_iolog_dir (sudo_defs_table[I_IOLOG_DIR].sd_un.str) -#define I_IOLOG_FILE 80 +#define I_IOLOG_FILE 85 #define def_iolog_file (sudo_defs_table[I_IOLOG_FILE].sd_un.str) -#define I_SET_UTMP 81 +#define I_SET_UTMP 86 #define def_set_utmp (sudo_defs_table[I_SET_UTMP].sd_un.flag) -#define I_UTMP_RUNAS 82 +#define I_UTMP_RUNAS 87 #define def_utmp_runas (sudo_defs_table[I_UTMP_RUNAS].sd_un.flag) -#define I_PRIVS 83 +#define I_PRIVS 88 #define def_privs (sudo_defs_table[I_PRIVS].sd_un.str) -#define I_LIMITPRIVS 84 +#define I_LIMITPRIVS 89 #define def_limitprivs (sudo_defs_table[I_LIMITPRIVS].sd_un.str) -#define I_EXEC_BACKGROUND 85 +#define I_EXEC_BACKGROUND 90 #define def_exec_background (sudo_defs_table[I_EXEC_BACKGROUND].sd_un.flag) -#define I_PAM_SERVICE 86 +#define I_PAM_SERVICE 91 #define def_pam_service (sudo_defs_table[I_PAM_SERVICE].sd_un.str) -#define I_PAM_LOGIN_SERVICE 87 +#define I_PAM_LOGIN_SERVICE 92 #define def_pam_login_service (sudo_defs_table[I_PAM_LOGIN_SERVICE].sd_un.str) -#define I_PAM_ASKPASS_SERVICE 88 +#define I_PAM_ASKPASS_SERVICE 93 #define def_pam_askpass_service (sudo_defs_table[I_PAM_ASKPASS_SERVICE].sd_un.str) -#define I_PAM_SETCRED 89 +#define I_PAM_SETCRED 94 #define def_pam_setcred (sudo_defs_table[I_PAM_SETCRED].sd_un.flag) -#define I_PAM_SESSION 90 +#define I_PAM_SESSION 95 #define def_pam_session (sudo_defs_table[I_PAM_SESSION].sd_un.flag) -#define I_PAM_ACCT_MGMT 91 +#define I_PAM_ACCT_MGMT 96 #define def_pam_acct_mgmt (sudo_defs_table[I_PAM_ACCT_MGMT].sd_un.flag) -#define I_MAXSEQ 92 +#define I_MAXSEQ 97 #define def_maxseq (sudo_defs_table[I_MAXSEQ].sd_un.str) -#define I_USE_NETGROUPS 93 +#define I_USE_NETGROUPS 98 #define def_use_netgroups (sudo_defs_table[I_USE_NETGROUPS].sd_un.flag) -#define I_SUDOEDIT_CHECKDIR 94 +#define I_SUDOEDIT_CHECKDIR 99 #define def_sudoedit_checkdir (sudo_defs_table[I_SUDOEDIT_CHECKDIR].sd_un.flag) -#define I_SUDOEDIT_FOLLOW 95 +#define I_SUDOEDIT_FOLLOW 100 #define def_sudoedit_follow (sudo_defs_table[I_SUDOEDIT_FOLLOW].sd_un.flag) -#define I_ALWAYS_QUERY_GROUP_PLUGIN 96 +#define I_ALWAYS_QUERY_GROUP_PLUGIN 101 #define def_always_query_group_plugin (sudo_defs_table[I_ALWAYS_QUERY_GROUP_PLUGIN].sd_un.flag) -#define I_NETGROUP_TUPLE 97 +#define I_NETGROUP_TUPLE 102 #define def_netgroup_tuple (sudo_defs_table[I_NETGROUP_TUPLE].sd_un.flag) -#define I_IGNORE_AUDIT_ERRORS 98 +#define I_IGNORE_AUDIT_ERRORS 103 #define def_ignore_audit_errors (sudo_defs_table[I_IGNORE_AUDIT_ERRORS].sd_un.flag) -#define I_IGNORE_IOLOG_ERRORS 99 +#define I_IGNORE_IOLOG_ERRORS 104 #define def_ignore_iolog_errors (sudo_defs_table[I_IGNORE_IOLOG_ERRORS].sd_un.flag) -#define I_IGNORE_LOGFILE_ERRORS 100 +#define I_IGNORE_LOGFILE_ERRORS 105 #define def_ignore_logfile_errors (sudo_defs_table[I_IGNORE_LOGFILE_ERRORS].sd_un.flag) -#define I_MATCH_GROUP_BY_GID 101 +#define I_MATCH_GROUP_BY_GID 106 #define def_match_group_by_gid (sudo_defs_table[I_MATCH_GROUP_BY_GID].sd_un.flag) -#define I_SYSLOG_MAXLEN 102 +#define I_SYSLOG_MAXLEN 107 #define def_syslog_maxlen (sudo_defs_table[I_SYSLOG_MAXLEN].sd_un.uival) -#define I_IOLOG_USER 103 +#define I_IOLOG_USER 108 #define def_iolog_user (sudo_defs_table[I_IOLOG_USER].sd_un.str) -#define I_IOLOG_GROUP 104 +#define I_IOLOG_GROUP 109 #define def_iolog_group (sudo_defs_table[I_IOLOG_GROUP].sd_un.str) -#define I_IOLOG_MODE 105 +#define I_IOLOG_MODE 110 #define def_iolog_mode (sudo_defs_table[I_IOLOG_MODE].sd_un.mode) -#define I_FDEXEC 106 +#define I_FDEXEC 111 #define def_fdexec (sudo_defs_table[I_FDEXEC].sd_un.tuple) -#define I_IGNORE_UNKNOWN_DEFAULTS 107 +#define I_IGNORE_UNKNOWN_DEFAULTS 112 #define def_ignore_unknown_defaults (sudo_defs_table[I_IGNORE_UNKNOWN_DEFAULTS].sd_un.flag) -#define I_COMMAND_TIMEOUT 108 +#define I_COMMAND_TIMEOUT 113 #define def_command_timeout (sudo_defs_table[I_COMMAND_TIMEOUT].sd_un.ival) -#define I_USER_COMMAND_TIMEOUTS 109 +#define I_USER_COMMAND_TIMEOUTS 114 #define def_user_command_timeouts (sudo_defs_table[I_USER_COMMAND_TIMEOUTS].sd_un.flag) -#define I_IOLOG_FLUSH 110 +#define I_IOLOG_FLUSH 115 #define def_iolog_flush (sudo_defs_table[I_IOLOG_FLUSH].sd_un.flag) -#define I_SYSLOG_PID 111 +#define I_SYSLOG_PID 116 #define def_syslog_pid (sudo_defs_table[I_SYSLOG_PID].sd_un.flag) -#define I_TIMESTAMP_TYPE 112 +#define I_TIMESTAMP_TYPE 117 #define def_timestamp_type (sudo_defs_table[I_TIMESTAMP_TYPE].sd_un.tuple) -#define I_AUTHFAIL_MESSAGE 113 +#define I_AUTHFAIL_MESSAGE 118 #define def_authfail_message (sudo_defs_table[I_AUTHFAIL_MESSAGE].sd_un.str) -#define I_CASE_INSENSITIVE_USER 114 +#define I_CASE_INSENSITIVE_USER 119 #define def_case_insensitive_user (sudo_defs_table[I_CASE_INSENSITIVE_USER].sd_un.flag) -#define I_CASE_INSENSITIVE_GROUP 115 +#define I_CASE_INSENSITIVE_GROUP 120 #define def_case_insensitive_group (sudo_defs_table[I_CASE_INSENSITIVE_GROUP].sd_un.flag) -#define I_LOG_ALLOWED 116 +#define I_LOG_ALLOWED 121 #define def_log_allowed (sudo_defs_table[I_LOG_ALLOWED].sd_un.flag) -#define I_LOG_DENIED 117 +#define I_LOG_DENIED 122 #define def_log_denied (sudo_defs_table[I_LOG_DENIED].sd_un.flag) -#define I_LOG_SERVERS 118 +#define I_LOG_SERVERS 123 #define def_log_servers (sudo_defs_table[I_LOG_SERVERS].sd_un.list) -#define I_LOG_SERVER_TIMEOUT 119 +#define I_LOG_SERVER_TIMEOUT 124 #define def_log_server_timeout (sudo_defs_table[I_LOG_SERVER_TIMEOUT].sd_un.ival) -#define I_LOG_SERVER_KEEPALIVE 120 +#define I_LOG_SERVER_KEEPALIVE 125 #define def_log_server_keepalive (sudo_defs_table[I_LOG_SERVER_KEEPALIVE].sd_un.flag) -#define I_LOG_SERVER_CABUNDLE 121 +#define I_LOG_SERVER_CABUNDLE 126 #define def_log_server_cabundle (sudo_defs_table[I_LOG_SERVER_CABUNDLE].sd_un.str) -#define I_LOG_SERVER_PEER_CERT 122 +#define I_LOG_SERVER_PEER_CERT 127 #define def_log_server_peer_cert (sudo_defs_table[I_LOG_SERVER_PEER_CERT].sd_un.str) -#define I_LOG_SERVER_PEER_KEY 123 +#define I_LOG_SERVER_PEER_KEY 128 #define def_log_server_peer_key (sudo_defs_table[I_LOG_SERVER_PEER_KEY].sd_un.str) -#define I_LOG_SERVER_VERIFY 124 +#define I_LOG_SERVER_VERIFY 129 #define def_log_server_verify (sudo_defs_table[I_LOG_SERVER_VERIFY].sd_un.flag) -#define I_RUNAS_ALLOW_UNKNOWN_ID 125 +#define I_RUNAS_ALLOW_UNKNOWN_ID 130 #define def_runas_allow_unknown_id (sudo_defs_table[I_RUNAS_ALLOW_UNKNOWN_ID].sd_un.flag) -#define I_RUNAS_CHECK_SHELL 126 +#define I_RUNAS_CHECK_SHELL 131 #define def_runas_check_shell (sudo_defs_table[I_RUNAS_CHECK_SHELL].sd_un.flag) -#define I_PAM_RUSER 127 +#define I_PAM_RUSER 132 #define def_pam_ruser (sudo_defs_table[I_PAM_RUSER].sd_un.flag) -#define I_PAM_RHOST 128 +#define I_PAM_RHOST 133 #define def_pam_rhost (sudo_defs_table[I_PAM_RHOST].sd_un.flag) -#define I_RUNCWD 129 +#define I_RUNCWD 134 #define def_runcwd (sudo_defs_table[I_RUNCWD].sd_un.str) -#define I_RUNCHROOT 130 +#define I_RUNCHROOT 135 #define def_runchroot (sudo_defs_table[I_RUNCHROOT].sd_un.str) -#define I_LOG_FORMAT 131 +#define I_LOG_FORMAT 136 #define def_log_format (sudo_defs_table[I_LOG_FORMAT].sd_un.tuple) -#define I_SELINUX 132 +#define I_SELINUX 137 #define def_selinux (sudo_defs_table[I_SELINUX].sd_un.flag) -#define I_ADMIN_FLAG 133 +#define I_ADMIN_FLAG 138 #define def_admin_flag (sudo_defs_table[I_ADMIN_FLAG].sd_un.str) -#define I_INTERCEPT 134 +#define I_INTERCEPT 139 #define def_intercept (sudo_defs_table[I_INTERCEPT].sd_un.flag) -#define I_LOG_SUBCMDS 135 +#define I_LOG_SUBCMDS 140 #define def_log_subcmds (sudo_defs_table[I_LOG_SUBCMDS].sd_un.flag) -#define I_LOG_EXIT_STATUS 136 +#define I_LOG_EXIT_STATUS 141 #define def_log_exit_status (sudo_defs_table[I_LOG_EXIT_STATUS].sd_un.flag) -#define I_INTERCEPT_AUTHENTICATE 137 +#define I_INTERCEPT_AUTHENTICATE 142 #define def_intercept_authenticate (sudo_defs_table[I_INTERCEPT_AUTHENTICATE].sd_un.flag) -#define I_INTERCEPT_ALLOW_SETID 138 +#define I_INTERCEPT_ALLOW_SETID 143 #define def_intercept_allow_setid (sudo_defs_table[I_INTERCEPT_ALLOW_SETID].sd_un.flag) -#define I_RLIMIT_AS 139 +#define I_RLIMIT_AS 144 #define def_rlimit_as (sudo_defs_table[I_RLIMIT_AS].sd_un.str) -#define I_RLIMIT_CORE 140 +#define I_RLIMIT_CORE 145 #define def_rlimit_core (sudo_defs_table[I_RLIMIT_CORE].sd_un.str) -#define I_RLIMIT_CPU 141 +#define I_RLIMIT_CPU 146 #define def_rlimit_cpu (sudo_defs_table[I_RLIMIT_CPU].sd_un.str) -#define I_RLIMIT_DATA 142 +#define I_RLIMIT_DATA 147 #define def_rlimit_data (sudo_defs_table[I_RLIMIT_DATA].sd_un.str) -#define I_RLIMIT_FSIZE 143 +#define I_RLIMIT_FSIZE 148 #define def_rlimit_fsize (sudo_defs_table[I_RLIMIT_FSIZE].sd_un.str) -#define I_RLIMIT_LOCKS 144 +#define I_RLIMIT_LOCKS 149 #define def_rlimit_locks (sudo_defs_table[I_RLIMIT_LOCKS].sd_un.str) -#define I_RLIMIT_MEMLOCK 145 +#define I_RLIMIT_MEMLOCK 150 #define def_rlimit_memlock (sudo_defs_table[I_RLIMIT_MEMLOCK].sd_un.str) -#define I_RLIMIT_NOFILE 146 +#define I_RLIMIT_NOFILE 151 #define def_rlimit_nofile (sudo_defs_table[I_RLIMIT_NOFILE].sd_un.str) -#define I_RLIMIT_NPROC 147 +#define I_RLIMIT_NPROC 152 #define def_rlimit_nproc (sudo_defs_table[I_RLIMIT_NPROC].sd_un.str) -#define I_RLIMIT_RSS 148 +#define I_RLIMIT_RSS 153 #define def_rlimit_rss (sudo_defs_table[I_RLIMIT_RSS].sd_un.str) -#define I_RLIMIT_STACK 149 +#define I_RLIMIT_STACK 154 #define def_rlimit_stack (sudo_defs_table[I_RLIMIT_STACK].sd_un.str) -#define I_NONINTERACTIVE_AUTH 150 +#define I_NONINTERACTIVE_AUTH 155 #define def_noninteractive_auth (sudo_defs_table[I_NONINTERACTIVE_AUTH].sd_un.flag) -#define I_LOG_PASSWORDS 151 +#define I_LOG_PASSWORDS 156 #define def_log_passwords (sudo_defs_table[I_LOG_PASSWORDS].sd_un.flag) -#define I_PASSPROMPT_REGEX 152 +#define I_PASSPROMPT_REGEX 157 #define def_passprompt_regex (sudo_defs_table[I_PASSPROMPT_REGEX].sd_un.list) -#define I_INTERCEPT_TYPE 153 +#define I_INTERCEPT_TYPE 158 #define def_intercept_type (sudo_defs_table[I_INTERCEPT_TYPE].sd_un.tuple) -#define I_INTERCEPT_VERIFY 154 +#define I_INTERCEPT_VERIFY 159 #define def_intercept_verify (sudo_defs_table[I_INTERCEPT_VERIFY].sd_un.flag) -#define I_APPARMOR_PROFILE 155 +#define I_APPARMOR_PROFILE 160 #define def_apparmor_profile (sudo_defs_table[I_APPARMOR_PROFILE].sd_un.str) enum def_tuple { diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index 645dae6a63..014cca064d 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -238,9 +238,24 @@ umask_override log_input T_FLAG "Log user's input for the command being run" +log_stdin + T_FLAG + "Log the command's standard input if not connected to a terminal" +log_ttyin + T_FLAG + "Log the user's terminal input for the command being run" log_output T_FLAG "Log the output of the command being run" +log_stdout + T_FLAG + "Log the command's standard output if not connected to a terminal" +log_stderr + T_FLAG + "Log the command's standard error if not connected to a terminal" +log_ttyout + T_FLAG + "Log the terminal output of the command being run" compress_io T_FLAG "Compress I/O logs using zlib" diff --git a/plugins/sudoers/defaults.h b/plugins/sudoers/defaults.h index cfbb662699..f0bf88ebf4 100644 --- a/plugins/sudoers/defaults.h +++ b/plugins/sudoers/defaults.h @@ -131,6 +131,11 @@ struct early_default { #define SETDEF_CMND 0x10 #define SETDEF_ALL (SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER|SETDEF_RUNAS|SETDEF_CMND) +/* + * Convenience macros + */ +#define iolog_enabled (def_log_stdin || def_log_ttyin || def_log_stdout || def_log_stderr || def_log_ttyout) + /* * Prototypes */ diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index a03d8ac7ee..8693103097 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -358,11 +358,13 @@ apply_cmndspec(struct cmndspec *cs) } if (cs->tags.log_input != UNSPEC) { def_log_input = cs->tags.log_input; + cb_log_input(NULL, 0, 0, NULL, cs->tags.log_input); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "def_log_input -> %s", def_log_input ? "true" : "false"); } if (cs->tags.log_output != UNSPEC) { def_log_output = cs->tags.log_output; + cb_log_output(NULL, 0, 0, NULL, cs->tags.log_output); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "def_log_output -> %s", def_log_output ? "true" : "false"); } diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 60a5a2d39e..b80c26a0f7 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -666,20 +666,26 @@ sudoers_policy_store_result(bool accepted, char *argv[], char *envp[], if ((command_info[info_len++] = strdup("log_subcmds=true")) == NULL) goto oom; } - if (def_log_input || def_log_output) { + if (iolog_enabled) { if (iolog_path) command_info[info_len++] = iolog_path; /* now owned */ - if (def_log_input) { + if (def_log_stdin) { if ((command_info[info_len++] = strdup("iolog_stdin=true")) == NULL) goto oom; - if ((command_info[info_len++] = strdup("iolog_ttyin=true")) == NULL) - goto oom; } - if (def_log_output) { + if (def_log_stdout) { if ((command_info[info_len++] = strdup("iolog_stdout=true")) == NULL) goto oom; + } + if (def_log_stderr) { if ((command_info[info_len++] = strdup("iolog_stderr=true")) == NULL) goto oom; + } + if (def_log_ttyin) { + if ((command_info[info_len++] = strdup("iolog_ttyin=true")) == NULL) + goto oom; + } + if (def_log_ttyout) { if ((command_info[info_len++] = strdup("iolog_ttyout=true")) == NULL) goto oom; } @@ -1175,8 +1181,8 @@ sudoers_policy_check(int argc, char * const argv[], char *env_add[], #ifndef NO_LEAKS if (ret == true && sudo_version >= SUDO_API_MKVERSION(1, 3)) { /* Unset close function if we don't need it to avoid extra process. */ - if (!def_log_input && !def_log_output && !def_log_exit_status && - !def_use_pty && !sudo_auth_needs_end_session()) + if (!iolog_enabled && !def_log_exit_status && !def_use_pty && + !sudo_auth_needs_end_session()) sudoers_policy.close = NULL; } #endif diff --git a/plugins/sudoers/regress/fuzz/fuzz_sudoers.c b/plugins/sudoers/regress/fuzz/fuzz_sudoers.c index b69f6a04b8..2ce2f87ebd 100644 --- a/plugins/sudoers/regress/fuzz/fuzz_sudoers.c +++ b/plugins/sudoers/regress/fuzz/fuzz_sudoers.c @@ -135,6 +135,20 @@ cb_unused(struct sudoers_parse_tree *parse_tree, struct alias *a, void *v) return 0; } +bool +cb_log_input(const char *file, int line, int column, + const union sudo_defs_val *sd_un, int op) +{ + return 0; +} + +bool +cb_log_output(const char *file, int line, int column, + const union sudo_defs_val *sd_un, int op) +{ + return 0; +} + static FILE * open_data(const uint8_t *data, size_t size) { diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index cc40a647ff..33d3398c31 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -689,13 +689,18 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], } if (ISSET(sudo_mode, (MODE_RUN | MODE_EDIT)) && !remote_iologs) { - if ((def_log_input || def_log_output) && def_iolog_file && def_iolog_dir) { + if (iolog_enabled && def_iolog_file && def_iolog_dir) { if ((iolog_path = format_iolog_path()) == NULL) { if (!def_ignore_iolog_errors) goto done; /* Unable to expand I/O log path, disable I/O logging. */ def_log_input = false; def_log_output = false; + def_log_stdin = false; + def_log_stdout = false; + def_log_stderr = false; + def_log_ttyin = false; + def_log_ttyout = false; } } } @@ -1680,6 +1685,31 @@ cb_intercept_allow_setid(const char *file, int line, int column, debug_return_bool(true); } +bool +cb_log_input(const char *file, int line, int column, + const union sudo_defs_val *sd_un, int op) +{ + debug_decl(cb_log_input, SUDOERS_DEBUG_PLUGIN); + + def_log_stdin = op; + def_log_ttyin = op; + + debug_return_bool(true); +} + +bool +cb_log_output(const char *file, int line, int column, + const union sudo_defs_val *sd_un, int op) +{ + debug_decl(cb_log_output, SUDOERS_DEBUG_PLUGIN); + + def_log_stdout = op; + def_log_stderr = op; + def_log_ttyout = op; + + debug_return_bool(true); +} + /* * Set parse Defaults callbacks. * We do this here instead in def_data.in so we don't have to @@ -1741,6 +1771,8 @@ set_callbacks(void) sudo_defs_table[I_PASSPROMPT_REGEX].callback = cb_passprompt_regex; sudo_defs_table[I_INTERCEPT_TYPE].callback = cb_intercept_type; sudo_defs_table[I_INTERCEPT_ALLOW_SETID].callback = cb_intercept_allow_setid; + sudo_defs_table[I_LOG_INPUT].callback = cb_log_input; + sudo_defs_table[I_LOG_OUTPUT].callback = cb_log_output; debug_return; } diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 82c0279991..90f1e5fc62 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -420,6 +420,8 @@ bool matches_env_pattern(const char *pattern, const char *var, bool *full_match) /* sudoers.c */ FILE *open_sudoers(const char *, bool, bool *); +bool cb_log_input(const char *file, int line, int column, const union sudo_defs_val *sd_un, int op); +bool cb_log_output(const char *file, int line, int column, const union sudo_defs_val *sd_un, int op); int set_cmnd_path(const char *runchroot); int sudoers_init(void *info, sudoers_logger_t logger, char * const envp[]); int sudoers_policy_main(int argc, char *const argv[], int pwflag, char *env_add[], bool verbose, void *closure); From c823ca1e454570ef1cc1e2fd624f862d4b441055 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 20 Sep 2022 16:13:31 -0600 Subject: [PATCH 127/186] Quiet libgcrypt run-time warning about not being initialized. Fixes Debian bug #1019428 and Ubuntu bug #1397663. --- lib/util/digest_gcrypt.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/util/digest_gcrypt.c b/lib/util/digest_gcrypt.c index 3ec715228a..075e272274 100644 --- a/lib/util/digest_gcrypt.c +++ b/lib/util/digest_gcrypt.c @@ -23,6 +23,11 @@ #include +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif #include #include #include @@ -33,6 +38,8 @@ #include "sudo_debug.h" #include "sudo_digest.h" +#define SUDO_LIBGCRYPT_VERSION_MIN "1.3.0" + struct sudo_digest { int gcry_digest_type; unsigned int digest_len; @@ -61,9 +68,21 @@ struct sudo_digest * sudo_digest_alloc_v1(int digest_type) { debug_decl(sudo_digest_alloc, SUDO_DEBUG_UTIL); + static bool initialized = false; struct sudo_digest *dig; int gcry_digest_type; + if (!initialized) { + if (!gcry_check_version(SUDO_LIBGCRYPT_VERSION_MIN)) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "libgcrypt too old (need %s, have %s)", + SUDO_LIBGCRYPT_VERSION_MIN, gcry_check_version(NULL)); + debug_return_ptr(NULL); + } + gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); + initialized = true; + } + gcry_digest_type = sudo_digest_type_to_gcry(digest_type); if (gcry_digest_type == -1) { errno = EINVAL; From e9162014488f3544c9aa560510b3e4ff497177b2 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Sep 2022 11:29:38 -0600 Subject: [PATCH 128/186] regen --- lib/util/Makefile.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index ff24c7b966..22abb88884 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -1285,10 +1285,12 @@ signame.i: signame.c $(CC) -E -o $@ $(CPPFLAGS) $< signame.plog: signame.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file signame.c --i-file $< --output-file $@ -snprintf.lo: $(srcdir)/snprintf.c $(incdir)/sudo_compat.h \ +snprintf.lo: $(srcdir)/snprintf.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/snprintf.c -snprintf.i: $(srcdir)/snprintf.c $(incdir)/sudo_compat.h \ +snprintf.i: $(srcdir)/snprintf.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< snprintf.plog: snprintf.i From 8c482bfeb2f8f32def3ea709d366f6dd21378fde Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Sep 2022 19:06:53 -0600 Subject: [PATCH 129/186] sudo_mkdir_parents: just use memcpy() to copy the path component. Using snprintf() for this is overkill, we need to do the same length check either way. --- lib/util/mkdir_parents.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/util/mkdir_parents.c b/lib/util/mkdir_parents.c index 0b93aa5f1a..6f06c172a2 100644 --- a/lib/util/mkdir_parents.c +++ b/lib/util/mkdir_parents.c @@ -107,18 +107,20 @@ sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool pathend = cp + strlen(cp); for (cp = sudo_strsplit(cp, pathend, "/", &ep); cp != NULL && ep != NULL; cp = sudo_strsplit(NULL, pathend, "/", &ep)) { - int dfd, len; + size_t len = (size_t)(ep - cp); + int dfd; sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "mkdir %.*s, mode 0%o, uid %d, gid %d", (int)(ep - path), - path, (unsigned int)mode, (int)uid, (int)gid); - len = snprintf(name, sizeof(name), "%.*s", (int)(ep - cp), cp); - if (len >= ssizeof(name)) { + "mkdir %.*s, mode 0%o, uid %d, gid %d", (int)len, path, + (unsigned int)mode, (int)uid, (int)gid); + if (len >= sizeof(name)) { errno = ENAMETOOLONG; if (!quiet) - sudo_warn(U_("unable to open %.*s"), (int)(ep - path), path); - goto done; + sudo_warn(U_("unable to open %.*s"), (int)len, path); + goto bad; } + memcpy(name, cp, len); + name[len] = '\0'; reopen: dfd = openat(parentfd, name, O_RDONLY|O_NONBLOCK, 0); if (dfd == -1) { From cbd52e705c2de299b944ffc3c17dc563d4cdb899 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Sep 2022 19:08:09 -0600 Subject: [PATCH 130/186] Fix potential TOCTOU when creating time stamp directory and file. --- include/sudo_util.h | 8 +- lib/util/mkdir_parents.c | 48 +++++++--- lib/util/secure_path.c | 100 +++++++++++++++----- lib/util/util.exp.in | 3 + plugins/sudoers/timestamp.c | 182 ++++++++++++++++++++---------------- 5 files changed, 223 insertions(+), 118 deletions(-) diff --git a/include/sudo_util.h b/include/sudo_util.h index dba96863da..1ccb52d5ef 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2013-2018 Todd C. Miller + * Copyright (c) 2013-2022 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 @@ -247,6 +247,8 @@ sudo_dso_public const char *sudo_logpri2str_v1(int num); /* mkdir_parents.c */ sudo_dso_public bool sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet); #define sudo_mkdir_parents(_a, _b, _c, _d, _e) sudo_mkdir_parents_v1((_a), (_b), (_c), (_d), (_e)) +sudo_dso_public int sudo_open_parent_dir_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet); +#define sudo_open_parent_dir(_a, _b, _c, _d, _e) sudo_open_parent_dir_v1((_a), (_b), (_c), (_d), (_e)) /* mmap_alloc.c */ sudo_dso_public void *sudo_mmap_alloc_v1(size_t size) sudo_malloclike; @@ -295,6 +297,10 @@ sudo_dso_public int sudo_secure_dir_v1(const char *path, uid_t uid, gid_t gid, s #define sudo_secure_dir(_a, _b, _c, _d) sudo_secure_dir_v1((_a), (_b), (_c), (_d)) sudo_dso_public int sudo_secure_file_v1(const char *path, uid_t uid, gid_t gid, struct stat *sbp); #define sudo_secure_file(_a, _b, _c, _d) sudo_secure_file_v1((_a), (_b), (_c), (_d)) +sudo_dso_public int sudo_secure_open_file_v1(const char *path, uid_t uid, gid_t gid, int *error); +#define sudo_secure_open_file(_a, _b, _c, _d) sudo_secure_open_file_v1((_a), (_b), (_c), (_d)) +sudo_dso_public int sudo_secure_open_dir_v1(const char *path, uid_t uid, gid_t gid, int *error); +#define sudo_secure_open_dir(_a, _b, _c, _d) sudo_secure_open_dir_v1((_a), (_b), (_c), (_d)) /* setgroups.c */ sudo_dso_public int sudo_setgroups_v1(int ngids, const GETGROUPS_T *gids); diff --git a/lib/util/mkdir_parents.c b/lib/util/mkdir_parents.c index 6f06c172a2..6868cc09a5 100644 --- a/lib/util/mkdir_parents.c +++ b/lib/util/mkdir_parents.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2021 Todd C. Miller + * Copyright (c) 2009-2022 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 @@ -76,16 +76,17 @@ is_dir(int dfd, const char *name, int namelen, bool quiet) } /* - * Create any parent directories needed by path (but not path itself). + * Create any parent directories needed by path (but not path itself) + * and return an open fd for the parent directory or -1 on error. */ -bool -sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet) +int +sudo_open_parent_dir_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, + bool quiet) { const char *cp, *ep, *pathend; char name[PATH_MAX]; - bool ret = false; int parentfd; - debug_decl(sudo_mkdir_parents, SUDO_DEBUG_UTIL); + debug_decl(sudo_open_parent_dir, SUDO_DEBUG_UTIL); /* Starting parent dir is either root or cwd. */ cp = path; @@ -100,7 +101,7 @@ sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool if (parentfd == -1) { if (!quiet) sudo_warn(U_("unable to open %s"), *path == '/' ? "/" : "."); - debug_return_bool(false); + debug_return_int(-1); } /* Iterate over path components, skipping the last one. */ @@ -129,7 +130,7 @@ sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool sudo_warn(U_("unable to open %.*s"), (int)(ep - path), path); } - goto done; + goto bad; } if (mkdirat(parentfd, name, mode) == 0) { dfd = openat(parentfd, name, O_RDONLY|O_NONBLOCK|O_NOFOLLOW, 0); @@ -138,12 +139,12 @@ sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool sudo_warn(U_("unable to open %.*s"), (int)(ep - path), path); } - goto done; + goto bad; } /* Make sure the path we created is still a directory. */ if (!is_dir(dfd, path, ep - path, quiet)) { close(dfd); - goto done; + goto bad; } if (uid != (uid_t)-1 && gid != (gid_t)-1) { if (fchown(dfd, uid, gid) != 0) { @@ -159,22 +160,39 @@ sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, bool sudo_warn(U_("unable to mkdir %.*s"), (int)(ep - path), path); } - goto done; + goto bad; } } else { /* Already exists, make sure it is a directory. */ if (!is_dir(dfd, path, ep - path, quiet)) { close(dfd); - goto done; + goto bad; } } close(parentfd); parentfd = dfd; } - ret = true; -done: + debug_return_int(parentfd); +bad: if (parentfd != -1) close(parentfd); - debug_return_bool(ret); + debug_return_int(-1); +} + +/* + * Create any parent directories needed by path (but not path itself). + */ +bool +sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, + bool quiet) +{ + int fd; + debug_decl(sudo_mkdir_parents, SUDO_DEBUG_UTIL); + + fd = sudo_open_parent_dir(path, uid, gid, mode, quiet); + if (fd == -1) + debug_return_bool(false); + close(fd); + debug_return_bool(true); } diff --git a/lib/util/secure_path.c b/lib/util/secure_path.c index 9f84de8e9f..d2438f78df 100644 --- a/lib/util/secure_path.c +++ b/lib/util/secure_path.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2012, 2014-2016 Todd C. Miller + * Copyright (c) 2012, 2014-2022 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 @@ -24,7 +24,9 @@ #include #include +#include #include +#include #include "sudo_compat.h" #include "sudo_util.h" @@ -34,29 +36,41 @@ * Verify that path is the right type and not writable by other users. */ static int -sudo_secure_path(const char *path, unsigned int type, uid_t uid, gid_t gid, struct stat *sb) +sudo_check_secure(struct stat *sb, unsigned int type, uid_t uid, gid_t gid) +{ + int ret = SUDO_PATH_SECURE; + debug_decl(sudo_check_secure, SUDO_DEBUG_UTIL); + + if ((sb->st_mode & S_IFMT) != type) { + ret = SUDO_PATH_BAD_TYPE; + } else if (uid != (uid_t)-1 && sb->st_uid != uid) { + ret = SUDO_PATH_WRONG_OWNER; + } else if (sb->st_mode & S_IWOTH) { + ret = SUDO_PATH_WORLD_WRITABLE; + } else if (ISSET(sb->st_mode, S_IWGRP) && + (gid == (gid_t)-1 || sb->st_gid != gid)) { + ret = SUDO_PATH_GROUP_WRITABLE; + } + + debug_return_int(ret); +} + +/* + * Verify that path is the right type and not writable by other users. + */ +static int +sudo_secure_path(const char *path, unsigned int type, uid_t uid, gid_t gid, + struct stat *sb) { - struct stat stat_buf; int ret = SUDO_PATH_MISSING; + struct stat stat_buf; debug_decl(sudo_secure_path, SUDO_DEBUG_UTIL); if (sb == NULL) sb = &stat_buf; - if (path != NULL && stat(path, sb) == 0) { - if ((sb->st_mode & S_IFMT) != type) { - ret = SUDO_PATH_BAD_TYPE; - } else if (uid != (uid_t)-1 && sb->st_uid != uid) { - ret = SUDO_PATH_WRONG_OWNER; - } else if (sb->st_mode & S_IWOTH) { - ret = SUDO_PATH_WORLD_WRITABLE; - } else if (ISSET(sb->st_mode, S_IWGRP) && - (gid == (gid_t)-1 || sb->st_gid != gid)) { - ret = SUDO_PATH_GROUP_WRITABLE; - } else { - ret = SUDO_PATH_SECURE; - } - } + if (path != NULL && stat(path, sb) == 0) + ret = sudo_check_secure(sb, type, uid, gid); debug_return_int(ret); } @@ -65,16 +79,60 @@ sudo_secure_path(const char *path, unsigned int type, uid_t uid, gid_t gid, stru * Verify that path is a regular file and not writable by other users. */ int -sudo_secure_file_v1(const char *path, uid_t uid, gid_t gid, struct stat *st) +sudo_secure_file_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb) { - return sudo_secure_path(path, S_IFREG, uid, gid, st); + return sudo_secure_path(path, S_IFREG, uid, gid, sb); } /* * Verify that path is a directory and not writable by other users. */ int -sudo_secure_dir_v1(const char *path, uid_t uid, gid_t gid, struct stat *st) +sudo_secure_dir_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb) +{ + return sudo_secure_path(path, S_IFDIR, uid, gid, sb); +} + +/* + * Open path read-only as long as it is not writable by other users. + * Returns an open file descriptor on success, else -1. + * Sets error to SUDO_PATH_SECURE on success, and a value < 0 on failure. + */ +static int +sudo_secure_open(const char *path, int type, uid_t uid, gid_t gid, int *error) +{ + struct stat sb; + int fd; + debug_decl(sudo_secure_open, SUDO_DEBUG_UTIL); + + fd = open(path, O_RDONLY|O_NONBLOCK); + if (fd == -1 || fstat(fd, &sb) != 0) { + if (fd != -1) + close(fd); + *error = SUDO_PATH_MISSING; + debug_return_int(-1); + } + + *error = sudo_check_secure(&sb, type, uid, gid); + if (*error == SUDO_PATH_SECURE) { + (void)fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); + } else { + /* Not secure, caller can check error flag. */ + close(fd); + fd = -1; + } + + debug_return_int(fd); +} + +int +sudo_secure_open_file_v1(const char *path, uid_t uid, gid_t gid, int *error) +{ + return sudo_secure_open(path, S_IFREG, uid, gid, error); +} + +int +sudo_secure_open_dir_v1(const char *path, uid_t uid, gid_t gid, int *error) { - return sudo_secure_path(path, S_IFDIR, uid, gid, st); + return sudo_secure_open(path, S_IFDIR, uid, gid, error); } diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index dd5fbc1012..e11c02dd3c 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -116,6 +116,7 @@ sudo_mmap_free_v1 sudo_mmap_protect_v1 sudo_mmap_strdup_v1 sudo_new_key_val_v1 +sudo_open_parent_dir_v1 sudo_parse_gids_v1 sudo_parseln_v1 sudo_parseln_v2 @@ -127,6 +128,8 @@ sudo_rcstr_dup sudo_regex_compile_v1 sudo_secure_dir_v1 sudo_secure_file_v1 +sudo_secure_open_dir_v1 +sudo_secure_open_file_v1 sudo_setgroups_v1 sudo_str2logfac_v1 sudo_str2logpri_v1 diff --git a/plugins/sudoers/timestamp.c b/plugins/sudoers/timestamp.c index 9d0d3c0145..155cc0fec7 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -181,87 +181,105 @@ ts_find_record(int fd, struct timestamp_entry *key, struct timestamp_entry *entr /* * Create a directory and any missing parent directories with the * specified mode. - * Returns true on success. - * Returns false on failure and displays a warning to stderr. + * Returns an fd usable with the *at() functions on success. + * Returns -1 on failure, setting errno. */ -static bool +static int ts_mkdirs(const char *path, uid_t owner, gid_t group, mode_t mode, mode_t parent_mode, bool quiet) { - bool ret; + int parentfd, fd = -1; + const char *base; mode_t omask; debug_decl(ts_mkdirs, SUDOERS_DEBUG_AUTH); + /* Child directory we will create. */ + base = sudo_basename(path); + /* umask must not be more restrictive than the file modes. */ omask = umask(ACCESSPERMS & ~(mode|parent_mode)); - ret = sudo_mkdir_parents(path, owner, group, parent_mode, quiet); - if (ret) { + parentfd = sudo_open_parent_dir(path, owner, group, parent_mode, quiet); + if (parentfd != -1) { /* Create final path component. */ sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, "mkdir %s, mode 0%o, uid %d, gid %d", path, (unsigned int)mode, (int)owner, (int)group); - if (mkdir(path, mode) != 0 && errno != EEXIST) { + if (mkdirat(parentfd, base, mode) != 0 && errno != EEXIST) { if (!quiet) sudo_warn(U_("unable to mkdir %s"), path); - ret = false; } else { - if (chown(path, owner, group) != 0) { + fd = openat(parentfd, base, O_RDONLY|O_NONBLOCK, 0); + if (fd == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, + "%s: unable to open %s", __func__, path); + } else if (fchown(fd, owner, group) != 0) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, "%s: unable to chown %d:%d %s", __func__, (int)owner, (int)group, path); } } + close(parentfd); } umask(omask); - debug_return_bool(ret); + debug_return_int(fd); } /* * Check that path is owned by timestamp_uid and not writable by * group or other. If path is missing and make_it is true, create * the directory and its parent dirs. - * Returns true on success or false on failure, setting errno. + * + * Returns an fd usable with the *at() functions on success. + * Returns -1 on failure, setting errno. */ -static bool -ts_secure_dir(char *path, bool make_it, bool quiet) +static int +ts_secure_opendir(const char *path, bool make_it, bool quiet) { - struct stat sb; - bool ret = false; - debug_decl(ts_secure_dir, SUDOERS_DEBUG_AUTH); + int error, fd = -1; + debug_decl(ts_secure_opendir, SUDOERS_DEBUG_AUTH); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "checking %s", path); - switch (sudo_secure_dir(path, timestamp_uid, -1, &sb)) { - case SUDO_PATH_SECURE: - ret = true; - break; - case SUDO_PATH_MISSING: - if (make_it && ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU, - S_IRWXU|S_IXGRP|S_IXOTH, quiet)) { - ret = true; + fd = sudo_secure_open_dir(path, timestamp_uid, timestamp_gid, &error); + if (fd == -1) { + switch (error) { + case SUDO_PATH_MISSING: + if (make_it) { + fd = ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU, + S_IRWXU|S_IXGRP|S_IXOTH, quiet); + if (fd != -1) + break; + } + if (!quiet) + sudo_warn("%s", path); + break; + case SUDO_PATH_BAD_TYPE: + errno = ENOTDIR; + if (!quiet) + sudo_warn("%s", path); + break; + case SUDO_PATH_WRONG_OWNER: + if (!quiet) { + sudo_warnx(U_("%s: wrong owner, should be uid %u\n"), + path, (unsigned int)timestamp_uid); + } + errno = EACCES; + break; + case SUDO_PATH_GROUP_WRITABLE: + if (!quiet) + sudo_warnx(U_("%s is group writable"), path); + errno = EACCES; + break; + default: + if (!quiet) { + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); + errno = EINVAL; + } break; } - errno = ENOENT; - break; - case SUDO_PATH_BAD_TYPE: - errno = ENOTDIR; - if (!quiet) - sudo_warn("%s", path); - break; - case SUDO_PATH_WRONG_OWNER: - if (!quiet) { - sudo_warnx(U_("%s is owned by uid %u, should be %u"), - path, (unsigned int) sb.st_uid, - (unsigned int) timestamp_uid); - } - errno = EACCES; - break; - case SUDO_PATH_GROUP_WRITABLE: - if (!quiet) - sudo_warnx(U_("%s is group writable"), path); - errno = EACCES; - break; } - debug_return_bool(ret); + + debug_return_int(fd); } /* @@ -271,15 +289,15 @@ ts_secure_dir(char *path, bool make_it, bool quiet) * Returns TIMESTAMP_OPEN_ERROR or TIMESTAMP_PERM_ERROR on error. */ static int -ts_open(const char *path, int flags) +ts_openat(int dfd, const char *path, int flags) { bool uid_changed = false; int fd; - debug_decl(ts_open, SUDOERS_DEBUG_AUTH); + debug_decl(ts_openat, SUDOERS_DEBUG_AUTH); if (timestamp_uid != 0) uid_changed = set_perms(PERM_TIMESTAMP); - fd = open(path, flags, S_IRUSR|S_IWUSR); + fd = openat(dfd, path, flags, S_IRUSR|S_IWUSR); if (uid_changed && !restore_perms()) { /* Unable to restore permissions, should not happen. */ if (fd != -1) { @@ -406,7 +424,7 @@ timestamp_open(const char *user, pid_t sid) { struct ts_cookie *cookie; char *fname = NULL; - int tries, fd = -1; + int tries, dfd = -1, fd = -1; debug_decl(timestamp_open, SUDOERS_DEBUG_AUTH); /* Zero timeout means don't use the time stamp file. */ @@ -416,7 +434,8 @@ timestamp_open(const char *user, pid_t sid) } /* Check the validity of timestamp dir and create if missing. */ - if (!ts_secure_dir(def_timestampdir, true, false)) + dfd = ts_secure_opendir(def_timestampdir, true, false); + if (dfd == -1) goto bad; /* Open time stamp file. */ @@ -427,7 +446,7 @@ timestamp_open(const char *user, pid_t sid) for (tries = 1; ; tries++) { struct stat sb; - fd = ts_open(fname, O_RDWR|O_CREAT); + fd = ts_openat(dfd, user, O_RDWR|O_CREAT); switch (fd) { case TIMESTAMP_OPEN_ERROR: log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), fname); @@ -453,7 +472,7 @@ timestamp_open(const char *user, pid_t sid) sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, "removing time stamp file that predates boot time"); close(fd); - unlink(fname); + unlinkat(dfd, user, 0); continue; } } @@ -473,9 +492,12 @@ timestamp_open(const char *user, pid_t sid) cookie->sid = sid; cookie->pos = -1; + close(dfd); debug_return_ptr(cookie); bad: - if (fd != -1) + if (dfd != -1) + close(dfd); + if (fd >= 0) close(fd); free(fname); debug_return_ptr(NULL); @@ -962,7 +984,7 @@ int timestamp_remove(bool unlink_it) { struct timestamp_entry key, entry; - int fd = -1, ret = true; + int dfd = -1, fd = -1, ret = true; char *fname = NULL; debug_decl(timestamp_remove, SUDOERS_DEBUG_AUTH); @@ -976,6 +998,13 @@ timestamp_remove(bool unlink_it) } #endif + dfd = open(def_timestampdir, O_RDONLY|O_NONBLOCK); + if (dfd == -1) { + if (errno != ENOENT) + ret = -1; + goto done; + } + if (asprintf(&fname, "%s/%s", def_timestampdir, user_name) == -1) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); ret = -1; @@ -984,12 +1013,12 @@ timestamp_remove(bool unlink_it) /* For "sudo -K" simply unlink the time stamp file. */ if (unlink_it) { - ret = unlink(fname) ? -1 : true; + ret = unlinkat(dfd, user_name, 0) ? -1 : true; goto done; } /* Open time stamp file and lock it for exclusive access. */ - fd = ts_open(fname, O_RDWR); + fd = ts_openat(dfd, user_name, O_RDWR); switch (fd) { case TIMESTAMP_OPEN_ERROR: if (errno != ENOENT) @@ -1023,7 +1052,9 @@ timestamp_remove(bool unlink_it) } done: - if (fd != -1) + if (dfd != -1) + close(dfd); + if (fd >= 0) close(fd); free(fname); debug_return_int(ret); @@ -1035,21 +1066,17 @@ timestamp_remove(bool unlink_it) bool already_lectured(void) { - char status_file[PATH_MAX]; + bool ret = false; struct stat sb; - int len; + int dfd; debug_decl(already_lectured, SUDOERS_DEBUG_AUTH); - if (ts_secure_dir(def_lecture_status_dir, false, true)) { - len = snprintf(status_file, sizeof(status_file), "%s/%s", - def_lecture_status_dir, user_name); - if (len > 0 && len < ssizeof(status_file)) { - debug_return_bool(stat(status_file, &sb) == 0); - } - log_warningx(SLOG_SEND_MAIL, N_("lecture status path too long: %s/%s"), - def_lecture_status_dir, user_name); + dfd = ts_secure_opendir(def_lecture_status_dir, false, true); + if (dfd != -1) { + ret = fstatat(dfd, user_name, &sb, AT_SYMLINK_NOFOLLOW) == 0; + close(dfd); } - debug_return_bool(false); + debug_return_bool(ret); } /* @@ -1059,24 +1086,16 @@ already_lectured(void) int set_lectured(void) { - char lecture_status[PATH_MAX]; - int len, fd, ret = false; + int dfd, fd, ret = false; debug_decl(set_lectured, SUDOERS_DEBUG_AUTH); - len = snprintf(lecture_status, sizeof(lecture_status), "%s/%s", - def_lecture_status_dir, user_name); - if (len < 0 || len >= ssizeof(lecture_status)) { - log_warningx(SLOG_SEND_MAIL, N_("lecture status path too long: %s/%s"), - def_lecture_status_dir, user_name); - goto done; - } - - /* Check the validity of lecture dir and create if missing. */ - if (!ts_secure_dir(def_lecture_status_dir, true, false)) + /* Check the validity of timestamp dir and create if missing. */ + dfd = ts_secure_opendir(def_lecture_status_dir, true, false); + if (dfd == -1) goto done; /* Create lecture file. */ - fd = ts_open(lecture_status, O_WRONLY|O_CREAT|O_EXCL); + fd = ts_openat(dfd, user_name, O_WRONLY|O_CREAT|O_EXCL); switch (fd) { case TIMESTAMP_OPEN_ERROR: /* Failed to open, not a fatal error. */ @@ -1091,6 +1110,7 @@ set_lectured(void) ret = true; break; } + close(dfd); done: debug_return_int(ret); From 88ac5e09b61a0755308c90139be5f904da05fc04 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Sep 2022 19:08:10 -0600 Subject: [PATCH 131/186] Use sudo_secure_open_file() instead of sudo_secure_file() where possible. Both sudo_secure_open_file() and sudo_secure_open_dir() are now passed a struct stat pointer like sudo_secure_file() and sudo_secure_dir(). --- docs/sudoers.man.in | 2 +- docs/sudoers.mdoc.in | 2 +- include/sudo_util.h | 12 +-- lib/util/secure_path.c | 23 ++++-- lib/util/sudo_conf.c | 65 +++++++++------ .../sudoers/regress/testsudoers/test11.out.ok | 4 +- plugins/sudoers/sudoers.c | 32 +++----- plugins/sudoers/testsudoers.c | 51 ++++++------ plugins/sudoers/timestamp.c | 82 ++++++++++--------- 9 files changed, 145 insertions(+), 128 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index 4702f2cd4f..abe22b5af4 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -5950,7 +5950,7 @@ line in the sudo.conf(@mansectform@) file. .TP 3n -unable to stat @sysconfdir@/sudoers +unable to open @sysconfdir@/sudoers The \fI@sysconfdir@/sudoers\fR file is missing. diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index ddf08db3fa..4aeb920043 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -5557,7 +5557,7 @@ file) to the end of the line in the .Xr sudo.conf @mansectform@ file. -.It unable to stat @sysconfdir@/sudoers +.It unable to open @sysconfdir@/sudoers The .Pa @sysconfdir@/sudoers file is missing. diff --git a/include/sudo_util.h b/include/sudo_util.h index 1ccb52d5ef..911b00b8c9 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -293,14 +293,14 @@ sudo_dso_public unsigned int sudo_pow2_roundup_v1(unsigned int len); #define SUDO_PATH_WORLD_WRITABLE -4 #define SUDO_PATH_GROUP_WRITABLE -5 struct stat; -sudo_dso_public int sudo_secure_dir_v1(const char *path, uid_t uid, gid_t gid, struct stat *sbp); +sudo_dso_public int sudo_secure_dir_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb); #define sudo_secure_dir(_a, _b, _c, _d) sudo_secure_dir_v1((_a), (_b), (_c), (_d)) -sudo_dso_public int sudo_secure_file_v1(const char *path, uid_t uid, gid_t gid, struct stat *sbp); +sudo_dso_public int sudo_secure_file_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb); #define sudo_secure_file(_a, _b, _c, _d) sudo_secure_file_v1((_a), (_b), (_c), (_d)) -sudo_dso_public int sudo_secure_open_file_v1(const char *path, uid_t uid, gid_t gid, int *error); -#define sudo_secure_open_file(_a, _b, _c, _d) sudo_secure_open_file_v1((_a), (_b), (_c), (_d)) -sudo_dso_public int sudo_secure_open_dir_v1(const char *path, uid_t uid, gid_t gid, int *error); -#define sudo_secure_open_dir(_a, _b, _c, _d) sudo_secure_open_dir_v1((_a), (_b), (_c), (_d)) +sudo_dso_public int sudo_secure_open_file_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb, int *error); +#define sudo_secure_open_file(_a, _b, _c, _d, _e) sudo_secure_open_file_v1((_a), (_b), (_c), (_d), (_e)) +sudo_dso_public int sudo_secure_open_dir_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb, int *error); +#define sudo_secure_open_dir(_a, _b, _c, _d, _e) sudo_secure_open_dir_v1((_a), (_b), (_c), (_d), (_e)) /* setgroups.c */ sudo_dso_public int sudo_setgroups_v1(int ngids, const GETGROUPS_T *gids); diff --git a/lib/util/secure_path.c b/lib/util/secure_path.c index d2438f78df..89d21deee1 100644 --- a/lib/util/secure_path.c +++ b/lib/util/secure_path.c @@ -77,6 +77,7 @@ sudo_secure_path(const char *path, unsigned int type, uid_t uid, gid_t gid, /* * Verify that path is a regular file and not writable by other users. + * Not currently used. */ int sudo_secure_file_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb) @@ -99,21 +100,25 @@ sudo_secure_dir_v1(const char *path, uid_t uid, gid_t gid, struct stat *sb) * Sets error to SUDO_PATH_SECURE on success, and a value < 0 on failure. */ static int -sudo_secure_open(const char *path, int type, uid_t uid, gid_t gid, int *error) +sudo_secure_open(const char *path, int type, uid_t uid, gid_t gid, + struct stat *sb, int *error) { - struct stat sb; + struct stat stat_buf; int fd; debug_decl(sudo_secure_open, SUDO_DEBUG_UTIL); + if (sb == NULL) + sb = &stat_buf; + fd = open(path, O_RDONLY|O_NONBLOCK); - if (fd == -1 || fstat(fd, &sb) != 0) { + if (fd == -1 || fstat(fd, sb) != 0) { if (fd != -1) close(fd); *error = SUDO_PATH_MISSING; debug_return_int(-1); } - *error = sudo_check_secure(&sb, type, uid, gid); + *error = sudo_check_secure(sb, type, uid, gid); if (*error == SUDO_PATH_SECURE) { (void)fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); } else { @@ -126,13 +131,15 @@ sudo_secure_open(const char *path, int type, uid_t uid, gid_t gid, int *error) } int -sudo_secure_open_file_v1(const char *path, uid_t uid, gid_t gid, int *error) +sudo_secure_open_file_v1(const char *path, uid_t uid, gid_t gid, + struct stat *sb, int *error) { - return sudo_secure_open(path, S_IFREG, uid, gid, error); + return sudo_secure_open(path, S_IFREG, uid, gid, sb, error); } int -sudo_secure_open_dir_v1(const char *path, uid_t uid, gid_t gid, int *error) +sudo_secure_open_dir_v1(const char *path, uid_t uid, gid_t gid, + struct stat *sb, int *error) { - return sudo_secure_open(path, S_IFDIR, uid, gid, error); + return sudo_secure_open(path, S_IFDIR, uid, gid, sb, error); } diff --git a/lib/util/sudo_conf.c b/lib/util/sudo_conf.c index 5357df1d33..454d071d20 100644 --- a/lib/util/sudo_conf.c +++ b/lib/util/sudo_conf.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #define SUDO_ERROR_WRAP 0 @@ -651,7 +652,7 @@ sudo_conf_read_v1(const char *conf_file, int conf_types) { struct stat sb; FILE *fp = NULL; - int ret = false; + int fd, ret = false; char *prev_locale, *line = NULL; unsigned int conf_lineno = 0; size_t linesize = 0; @@ -670,38 +671,48 @@ sudo_conf_read_v1(const char *conf_file, int conf_types) if (prev_locale[0] != 'C' || prev_locale[1] != '\0') setlocale(LC_ALL, "C"); - if (conf_file == NULL) { + if (conf_file != NULL) { + fd = open(conf_file, O_RDONLY); + if (fd == -1) { + sudo_warn(U_("unable to open %s"), conf_file); + goto done; + } + } else { + int error; conf_file = _PATH_SUDO_CONF; - switch (sudo_secure_file(conf_file, ROOT_UID, -1, &sb)) { - case SUDO_PATH_SECURE: - break; - case SUDO_PATH_MISSING: - /* Root should always be able to read sudo.conf. */ - if (errno != ENOENT && geteuid() == ROOT_UID) - sudo_warn(U_("unable to stat %s"), conf_file); - goto done; - case SUDO_PATH_BAD_TYPE: - sudo_warnx(U_("%s is not a regular file"), conf_file); - goto done; - case SUDO_PATH_WRONG_OWNER: - sudo_warnx(U_("%s is owned by uid %u, should be %u"), - conf_file, (unsigned int) sb.st_uid, ROOT_UID); - goto done; - case SUDO_PATH_WORLD_WRITABLE: - sudo_warnx(U_("%s is world writable"), conf_file); - goto done; - case SUDO_PATH_GROUP_WRITABLE: - sudo_warnx(U_("%s is group writable"), conf_file); - goto done; - default: - /* NOTREACHED */ - goto done; + fd = sudo_secure_open_file(conf_file, ROOT_UID, -1, &sb, &error); + switch (error) { + case SUDO_PATH_SECURE: + break; + case SUDO_PATH_MISSING: + /* Root should always be able to read sudo.conf. */ + if (errno != ENOENT && geteuid() == ROOT_UID) + sudo_warn(U_("unable to open %s"), conf_file); + goto done; + case SUDO_PATH_BAD_TYPE: + sudo_warnx(U_("%s is not a regular file"), conf_file); + goto done; + case SUDO_PATH_WRONG_OWNER: + sudo_warnx(U_("%s is owned by uid %u, should be %u"), + conf_file, (unsigned int) sb.st_uid, ROOT_UID); + goto done; + case SUDO_PATH_WORLD_WRITABLE: + sudo_warnx(U_("%s is world writable"), conf_file); + goto done; + case SUDO_PATH_GROUP_WRITABLE: + sudo_warnx(U_("%s is group writable"), conf_file); + goto done; + default: + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); + goto done; } } - if ((fp = fopen(conf_file, "r")) == NULL) { + if ((fp = fdopen(fd, "r")) == NULL) { if (errno != ENOENT && geteuid() == ROOT_UID) sudo_warn(U_("unable to open %s"), conf_file); + close(fd); goto done; } diff --git a/plugins/sudoers/regress/testsudoers/test11.out.ok b/plugins/sudoers/regress/testsudoers/test11.out.ok index 987ab65594..f030dc84d2 100644 --- a/plugins/sudoers/regress/testsudoers/test11.out.ok +++ b/plugins/sudoers/regress/testsudoers/test11.out.ok @@ -3,7 +3,7 @@ Testing @include with garbage after the path name sudoers:1:24: syntax error @include sudoers.local womp womp ^~~~ -testsudoers: unable to stat sudoers.local: No such file or directory +testsudoers: unable to open sudoers.local: No such file or directory Entries for user root: @@ -14,7 +14,7 @@ Testing #include with garbage after the path name sudoers:1:24: syntax error #include sudoers.local womp womp ^~~~ -testsudoers: unable to stat sudoers.local: No such file or directory +testsudoers: unable to open sudoers.local: No such file or directory Entries for user root: diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 33d3398c31..abe63147dd 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -1093,36 +1093,25 @@ set_cmnd(void) FILE * open_sudoers(const char *file, bool doedit, bool *keepopen) { - struct stat sb; FILE *fp = NULL; - bool perm_root = false; + struct stat sb; + int error, fd; debug_decl(open_sudoers, SUDOERS_DEBUG_PLUGIN); if (!set_perms(PERM_SUDOERS)) debug_return_ptr(NULL); again: - switch (sudo_secure_file(file, sudoers_uid, sudoers_gid, &sb)) { + fd = sudo_secure_open_file(file, sudoers_uid, sudoers_gid, &sb, &error); + switch (error) { case SUDO_PATH_SECURE: /* - * If we are expecting sudoers to be group readable by - * SUDOERS_GID but it is not, we must open the file as root, - * not uid 1. - */ - if (sudoers_uid == ROOT_UID && ISSET(sudoers_mode, S_IRGRP)) { - if (!ISSET(sb.st_mode, S_IRGRP) || sb.st_gid != SUDOERS_GID) { - if (!perm_root) { - if (!restore_perms() || !set_perms(PERM_ROOT)) - debug_return_ptr(NULL); - } - } - } - /* - * Open file and make sure we can read it so we can present - * the user with a reasonable error message (unlike the lexer). + * Make sure we can read the file so we can present the + * user with a reasonable error message (unlike the lexer). */ - if ((fp = fopen(file, "r")) == NULL) { + if ((fp = fdopen(fd, "r")) == NULL) { log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), file); + close(fd); } else { if (sb.st_size != 0 && fgetc(fp) == EOF) { log_warning(SLOG_SEND_MAIL, @@ -1138,7 +1127,7 @@ open_sudoers(const char *file, bool doedit, bool *keepopen) break; case SUDO_PATH_MISSING: /* - * If we tried to stat() sudoers as non-root but got EACCES, + * If we tried to open sudoers as non-root but got EACCES, * try again as root. */ if (errno == EACCES && geteuid() != ROOT_UID) { @@ -1146,12 +1135,11 @@ open_sudoers(const char *file, bool doedit, bool *keepopen) if (restore_perms()) { if (!set_perms(PERM_ROOT)) debug_return_ptr(NULL); - perm_root = true; goto again; } errno = serrno; } - log_warning(SLOG_SEND_MAIL, N_("unable to stat %s"), file); + log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), file); break; case SUDO_PATH_BAD_TYPE: log_warningx(SLOG_SEND_MAIL, diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index 8fa7d9d8d1..415c723dc5 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -442,34 +442,37 @@ open_sudoers(const char *file, bool doedit, bool *keepopen) struct stat sb; FILE *fp = NULL; const char *base; + int error, fd; debug_decl(open_sudoers, SUDOERS_DEBUG_UTIL); /* Report errors using the basename for consistent test output. */ base = sudo_basename(file); - switch (sudo_secure_file(file, sudoers_uid, sudoers_gid, &sb)) { - case SUDO_PATH_SECURE: - fp = fopen(file, "r"); - break; - case SUDO_PATH_MISSING: - sudo_warn("unable to stat %s", base); - break; - case SUDO_PATH_BAD_TYPE: - sudo_warnx("%s is not a regular file", base); - break; - case SUDO_PATH_WRONG_OWNER: - sudo_warnx("%s should be owned by uid %u", - base, (unsigned int) sudoers_uid); - break; - case SUDO_PATH_WORLD_WRITABLE: - sudo_warnx("%s is world writable", base); - break; - case SUDO_PATH_GROUP_WRITABLE: - sudo_warnx("%s should be owned by gid %u", - base, (unsigned int) sudoers_gid); - break; - default: - /* NOTREACHED */ - break; + fd = sudo_secure_open_file(file, sudoers_uid, sudoers_gid, &sb, &error); + switch (error) { + case SUDO_PATH_SECURE: + if ((fp = fdopen(fd, "r")) == NULL) + close(fd); + break; + case SUDO_PATH_MISSING: + sudo_warn("unable to open %s", base); + break; + case SUDO_PATH_BAD_TYPE: + sudo_warnx("%s is not a regular file", base); + break; + case SUDO_PATH_WRONG_OWNER: + sudo_warnx("%s should be owned by uid %u", + base, (unsigned int) sudoers_uid); + break; + case SUDO_PATH_WORLD_WRITABLE: + sudo_warnx("%s is world writable", base); + break; + case SUDO_PATH_GROUP_WRITABLE: + sudo_warnx("%s should be owned by gid %u", + base, (unsigned int) sudoers_gid); + break; + default: + /* NOTREACHED */ + break; } debug_return_ptr(fp); diff --git a/plugins/sudoers/timestamp.c b/plugins/sudoers/timestamp.c index 155cc0fec7..146fd3b330 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -236,47 +236,55 @@ static int ts_secure_opendir(const char *path, bool make_it, bool quiet) { int error, fd = -1; + struct stat sb; debug_decl(ts_secure_opendir, SUDOERS_DEBUG_AUTH); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "checking %s", path); - fd = sudo_secure_open_dir(path, timestamp_uid, timestamp_gid, &error); - if (fd == -1) { - switch (error) { - case SUDO_PATH_MISSING: - if (make_it) { - fd = ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU, - S_IRWXU|S_IXGRP|S_IXOTH, quiet); - if (fd != -1) - break; - } - if (!quiet) - sudo_warn("%s", path); - break; - case SUDO_PATH_BAD_TYPE: - errno = ENOTDIR; - if (!quiet) - sudo_warn("%s", path); - break; - case SUDO_PATH_WRONG_OWNER: - if (!quiet) { - sudo_warnx(U_("%s: wrong owner, should be uid %u\n"), - path, (unsigned int)timestamp_uid); - } - errno = EACCES; - break; - case SUDO_PATH_GROUP_WRITABLE: - if (!quiet) - sudo_warnx(U_("%s is group writable"), path); - errno = EACCES; - break; - default: - if (!quiet) { - sudo_warnx("%s: internal error, unexpected error %d", - __func__, error); - errno = EINVAL; - } - break; + fd = sudo_secure_open_dir(path, timestamp_uid, timestamp_gid, &sb, &error); + switch (error) { + case SUDO_PATH_SECURE: + break; + case SUDO_PATH_MISSING: + if (make_it) { + fd = ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU, + S_IRWXU|S_IXGRP|S_IXOTH, quiet); + if (fd != -1) + break; + } + if (!quiet) + sudo_warn("%s", path); + break; + case SUDO_PATH_BAD_TYPE: + errno = ENOTDIR; + if (!quiet) + sudo_warn("%s", path); + break; + case SUDO_PATH_WRONG_OWNER: + if (!quiet) { + sudo_warnx(U_("%s is owned by uid %u, should be %u"), + path, (unsigned int)sb.st_uid, (unsigned int)timestamp_uid); + } + errno = EACCES; + break; + case SUDO_PATH_WORLD_WRITABLE: + if (!quiet) + sudo_warnx(U_("%s is world writable"), path); + errno = EACCES; + break; + case SUDO_PATH_GROUP_WRITABLE: + if (!quiet) { + sudo_warnx(U_("%s is owned by gid %u, should be %u"), + path, (unsigned int)sb.st_gid, (unsigned int)timestamp_gid); + } + errno = EACCES; + break; + default: + if (!quiet) { + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); + errno = EINVAL; } + break; } debug_return_int(fd); From 86c108b50b5b81e3a7a1e8915fd70d41afbe8669 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Sep 2022 19:08:11 -0600 Subject: [PATCH 132/186] Add mkdtempat() and mkostempsat() for systems without them. --- config.h.in | 6 ++ configure | 11 ++-- configure.ac | 9 +-- include/sudo_compat.h | 13 +++- lib/util/mktemp.c | 98 ++++++++++++++++++++++-------- plugins/python/regress/iohelpers.h | 8 ++- 6 files changed, 107 insertions(+), 38 deletions(-) diff --git a/config.h.in b/config.h.in index 901986ea74..bd8f0d59d0 100644 --- a/config.h.in +++ b/config.h.in @@ -602,6 +602,12 @@ /* Define to 1 if you have the `mkdtemp' function. */ #undef HAVE_MKDTEMP +/* Define to 1 if you have the `mkdtempat' function. */ +#undef HAVE_MKDTEMPAT + +/* Define to 1 if you have the `mkostempsat' function. */ +#undef HAVE_MKOSTEMPSAT + /* Define to 1 if you have the `mkstemps' function. */ #undef HAVE_MKSTEMPS diff --git a/configure b/configure index f9d1a199cc..35f528ab4e 100755 --- a/configure +++ b/configure @@ -23311,8 +23311,9 @@ fi fi done +sudo_mktemp=no - for ac_func in mkstemps mkdtemp + for ac_func in mkdtempat mkostempsat mkstemps mkdtemp do : as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -23323,11 +23324,12 @@ then : _ACEOF else $as_nop - break + sudo_mktemp=yes; break fi done -if test X"$ac_cv_func_mkstemps$ac_cv_func_mkdtemp" != X"yesyes"; then +# If any of the mktemp family are missing we use our own. +if test X"$sudo_mktemp" = X"yes"; then for ac_func in arc4random random lrand48 do : @@ -23357,9 +23359,8 @@ fi ;; esac - # If either mkdtemp() or mkstemps() is missing, replace both. - for _sym in sudo_mkdtemp sudo_mkstemps; do + for _sym in sudo_mkdtemp sudo_mkdtempat sudo_mkostempsat sudo_mkstemp sudo_mkstemps; do COMPAT_EXP="${COMPAT_EXP}${_sym} " done diff --git a/configure.ac b/configure.ac index 177c6c3d7d..427bfa794e 100644 --- a/configure.ac +++ b/configure.ac @@ -2957,15 +2957,16 @@ AC_CHECK_FUNCS([closefrom], [], [AC_LIBOBJ(closefrom) # include ]) COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }closefrom_test" ]) -AC_CHECK_FUNCS([mkstemps mkdtemp], [], [break]) -if test X"$ac_cv_func_mkstemps$ac_cv_func_mkdtemp" != X"yesyes"; then +sudo_mktemp=no +AC_CHECK_FUNCS([mkdtempat mkostempsat mkstemps mkdtemp], [], [sudo_mktemp=yes; break]) +# If any of the mktemp family are missing we use our own. +if test X"$sudo_mktemp" = X"yes"; then AC_CHECK_FUNCS([arc4random random lrand48], [break]) if test X"$ac_cv_func_arc4random" != X"yes"; then AC_CHECK_FUNCS([getentropy]) fi AC_LIBOBJ(mktemp) - # If either mkdtemp() or mkstemps() is missing, replace both. - SUDO_APPEND_COMPAT_EXP(sudo_mkdtemp sudo_mkstemps) + SUDO_APPEND_COMPAT_EXP(sudo_mkdtemp sudo_mkdtempat sudo_mkostempsat sudo_mkstemp sudo_mkstemps) COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }mktemp_test" fi AX_FUNC_SNPRINTF diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 1589c9e89d..a9212189ec 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -494,14 +494,23 @@ sudo_dso_public int sudo_mkdirat(int dfd, const char *path, mode_t mode); # undef mkdirat # define mkdirat(_a, _b, _c) sudo_mkdirat((_a), (_b), (_c)) #endif /* HAVE_MKDIRAT */ -#if !defined(HAVE_MKDTEMP) || !defined(HAVE_MKSTEMPS) +#if !defined(HAVE_MKDTEMP) || !defined(HAVE_MKDTEMPAT) || !defined(HAVE_MKOSTEMPSAT) || !defined(HAVE_MKSTEMPS) sudo_dso_public char *sudo_mkdtemp(char *path); # undef mkdtemp # define mkdtemp(_a) sudo_mkdtemp((_a)) +sudo_dso_public char *sudo_mkdtempat(int dfd, char *path); +# undef mkdtempat +# define mkdtempat(_a, _b) sudo_mkdtempat((_a), (_b)) +sudo_dso_public int sudo_mkostempsat(int dfd, char *path, int slen, int flags); +# undef mkostempsat +# define mkostempsat(_a, _b, _c, _d) sudo_mkostempsat((_a), (_b), (_c), (_d)) +sudo_dso_public int sudo_mkstemp(char *path); +# undef mkstemp +# define mkstemp(_a) sudo_mkstemp((_a)) sudo_dso_public int sudo_mkstemps(char *path, int slen); # undef mkstemps # define mkstemps(_a, _b) sudo_mkstemps((_a), (_b)) -#endif /* !HAVE_MKDTEMP || !HAVE_MKSTEMPS */ +#endif /* !HAVE_MKDTEMP || !HAVE_MKDTEMPAT || !HAVE_MKOSTEMPSAT || !HAVE_MKSTEMPS */ #ifndef HAVE_NANOSLEEP sudo_dso_public int sudo_nanosleep(const struct timespec *timeout, struct timespec *remainder); #undef nanosleep diff --git a/lib/util/mktemp.c b/lib/util/mktemp.c index c4ac2b3e0c..395dcf5013 100644 --- a/lib/util/mktemp.c +++ b/lib/util/mktemp.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2001, 2003, 2004, 2008-2011, 2013, 2015, 2017, 2018 + * Copyright (c) 2001, 2003, 2004, 2008-2011, 2013, 2015, 2017, 2018, 2022 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -24,7 +24,7 @@ #include -#if !defined(HAVE_MKSTEMPS) || !defined(HAVE_MKDTEMP) +#if !defined(HAVE_MKDTEMP) || !defined(HAVE_MKDTEMPAT) || !defined(HAVE_MKOSTEMPSAT) || !defined(HAVE_MKSTEMPS) #include @@ -32,9 +32,7 @@ #include #include #include -#ifdef HAVE_STDLIB_H -# include -#endif /* HAVE_STDLIB_H */ +#include #if defined(HAVE_STDINT_H) # include #elif defined(HAVE_INTTYPES_H) @@ -55,12 +53,14 @@ #define NUM_CHARS (sizeof(TEMPCHARS) - 1) #define MIN_X 6 +#define MKOTEMP_FLAGS (O_APPEND | O_CLOEXEC | O_SYNC) + static int -mktemp_internal(char *path, int slen, int mode) +mktemp_internal(int dfd, char *path, int slen, int mode, int flags) { char *start, *cp, *ep; const char tempchars[] = TEMPCHARS; - unsigned int r, tries; + unsigned int tries; size_t len; int fd; @@ -71,31 +71,43 @@ mktemp_internal(char *path, int slen, int mode) } ep = path + len - slen; - tries = 1; - for (start = ep; start > path && start[-1] == 'X'; start--) { - if (tries < INT_MAX / NUM_CHARS) - tries *= NUM_CHARS; - } - tries *= 2; + for (start = ep; start > path && start[-1] == 'X'; start--) + ; if (ep - start < MIN_X) { errno = EINVAL; return -1; } + if (flags & ~MKOTEMP_FLAGS) { + errno = EINVAL; + return -1; + } + flags |= O_CREAT | O_EXCL | O_RDWR; + + tries = INT_MAX; do { - for (cp = start; cp != ep; cp++) { - r = arc4random_uniform(NUM_CHARS); - *cp = tempchars[r]; - } + cp = start; + do { + unsigned short rbuf[16]; + unsigned int i; + + /* + * Avoid lots of arc4random() calls by using + * a buffer sized for up to 16 Xs at a time. + */ + arc4random_buf(rbuf, sizeof(rbuf)); + for (i = 0; i < nitems(rbuf) && cp != ep; i++) + *cp++ = tempchars[rbuf[i] % NUM_CHARS]; + } while (cp != ep); switch (mode) { case MKTEMP_FILE: - fd = open(path, O_CREAT|O_EXCL|O_RDWR, S_IRUSR|S_IWUSR); + fd = openat(dfd, path, flags, S_IRUSR|S_IWUSR); if (fd != -1 || errno != EEXIST) return fd; break; case MKTEMP_DIR: - if (mkdir(path, S_IRWXU) == 0) + if (mkdirat(dfd, path, S_IRWXU) == 0) return 0; if (errno != EEXIST) return -1; @@ -107,17 +119,53 @@ mktemp_internal(char *path, int slen, int mode) return -1; } -int -sudo_mkstemps(char *path, int slen) +char * +sudo_mkdtemp(char *path) { - return mktemp_internal(path, slen, MKTEMP_FILE); + if (mktemp_internal(AT_FDCWD, path, 0, MKTEMP_DIR, 0) == -1) + return NULL; + return path; } char * -sudo_mkdtemp(char *path) +sudo_mkdtempat(int dfd, char *path) { - if (mktemp_internal(path, 0, MKTEMP_DIR) == -1) + if (mktemp_internal(dfd, path, 0, MKTEMP_DIR, 0) == -1) return NULL; return path; } -#endif /* !HAVE_MKSTEMPS || !HAVE_MKDTEMP */ + +int +sudo_mkostempsat(int dfd, char *path, int slen, int flags) +{ + return mktemp_internal(dfd, path, slen, MKTEMP_FILE, flags); +} + +#ifdef notyet +int +sudo_mkostemps(char *path, int slen, int flags) +{ + return mktemp_internal(AT_FDCWD, path, slen, MKTEMP_FILE, flags); +} +#endif + +int +sudo_mkstemp(char *path) +{ + return mktemp_internal(AT_FDCWD, path, 0, MKTEMP_FILE, 0); +} + +#ifdef notyet +int +sudo_mkostemp(char *path, int flags) +{ + return mktemp_internal(AT_FDCWD, path, 0, MKTEMP_FILE, flags); +} +#endif + +int +sudo_mkstemps(char *path, int slen) +{ + return mktemp_internal(AT_FDCWD, path, slen, MKTEMP_FILE, 0); +} +#endif /* !HAVE_MKDTEMP || !HAVE_MKDTEMPAT || !HAVE_MKOSTEMPSAT || !HAVE_MKSTEMPS */ diff --git a/plugins/python/regress/iohelpers.h b/plugins/python/regress/iohelpers.h index 1ebd8e3a71..ed21d56ca4 100644 --- a/plugins/python/regress/iohelpers.h +++ b/plugins/python/regress/iohelpers.h @@ -20,16 +20,20 @@ #define PYTHON_IO_HELPERS #include -#include "sudo_compat.h" #include #include +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ #include #include #include #include -#include +#include "sudo_compat.h" #define MAX_OUTPUT (2 << 16) From 376d18b5da6cdfadc6ef5be2df4150a9a1b36811 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Sep 2022 19:08:12 -0600 Subject: [PATCH 133/186] Add fchownat() systems without it. --- MANIFEST | 1 + config.h.in | 3 +++ configure | 26 ++++++++++++++++++++++++++ configure.ac | 4 ++++ include/sudo_compat.h | 5 +++++ lib/util/Makefile.in | 8 ++++++++ scripts/mkdep.pl | 4 ++-- 7 files changed, 49 insertions(+), 2 deletions(-) diff --git a/MANIFEST b/MANIFEST index 22e2348df7..628cbf4def 100644 --- a/MANIFEST +++ b/MANIFEST @@ -220,6 +220,7 @@ lib/util/event_select.c lib/util/explicit_bzero.c lib/util/fatal.c lib/util/fchmodat.c +lib/util/fchownat.c lib/util/fnmatch.c lib/util/freezero.c lib/util/fstatat.c diff --git a/config.h.in b/config.h.in index bd8f0d59d0..32dbb9879d 100644 --- a/config.h.in +++ b/config.h.in @@ -298,6 +298,9 @@ /* Define to 1 if you have the `fchmodat' function. */ #undef HAVE_FCHMODAT +/* Define to 1 if you have the `fchownat' function. */ +#undef HAVE_FCHOWNAT + /* Define to 1 if your system has the F_CLOSEM fcntl. */ #undef HAVE_FCNTL_CLOSEM diff --git a/configure b/configure index 35f528ab4e..f565225fbc 100755 --- a/configure +++ b/configure @@ -22747,6 +22747,32 @@ esac fi +fi + +done + + for ac_func in fchownat +do : + ac_fn_c_check_func "$LINENO" "fchownat" "ac_cv_func_fchownat" +if test "x$ac_cv_func_fchownat" = xyes +then : + printf "%s\n" "#define HAVE_FCHOWNAT 1" >>confdefs.h + +else $as_nop + + case " $LIBOBJS " in + *" fchownat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS fchownat.$ac_objext" + ;; +esac + + + for _sym in sudo_fchownat; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + fi done diff --git a/configure.ac b/configure.ac index 427bfa794e..54f2c5e5ad 100644 --- a/configure.ac +++ b/configure.ac @@ -2873,6 +2873,10 @@ AC_CHECK_FUNCS(nanosleep, [], [ SUDO_APPEND_COMPAT_EXP(sudo_nanosleep) ]) ]) +AC_CHECK_FUNCS([fchownat], [], [ + AC_LIBOBJ(fchownat) + SUDO_APPEND_COMPAT_EXP(sudo_fchownat) +]) AC_CHECK_FUNCS([mkdirat], [], [ AC_LIBOBJ(mkdirat) SUDO_APPEND_COMPAT_EXP(sudo_mkdirat) diff --git a/include/sudo_compat.h b/include/sudo_compat.h index a9212189ec..87602154e9 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -484,6 +484,11 @@ sudo_dso_public size_t sudo_strnlen(const char *str, size_t maxlen); # undef strnlen # define strnlen(_a, _b) sudo_strnlen((_a), (_b)) #endif /* HAVE_STRNLEN */ +#ifndef HAVE_FCHOWNAT +sudo_dso_public int sudo_fchownat(int dfd, const char *path, uid_t uid, gid_t gid, int flag); +# undef fchownat +# define fchownat(_a, _b, _c, _d, _e) sudo_fchownat((_a), (_b), (_c), (_d), (_e)) +#endif /* HAVE_FCHOWNAT */ #ifndef HAVE_MEMRCHR sudo_dso_public void *sudo_memrchr(const void *s, int c, size_t n); # undef memrchr diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 22abb88884..f3d44fc0f6 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -703,6 +703,14 @@ fchmodat.i: $(srcdir)/fchmodat.c $(incdir)/sudo_compat.h \ $(CC) -E -o $@ $(CPPFLAGS) $< fchmodat.plog: fchmodat.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/fchmodat.c --i-file $< --output-file $@ +fchownat.lo: $(srcdir)/fchownat.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/fchownat.c +fchownat.i: $(srcdir)/fchownat.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +fchownat.plog: fchownat.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/fchownat.c --i-file $< --output-file $@ fnm_test.lo: $(srcdir)/regress/fnmatch/fnm_test.c $(incdir)/compat/fnmatch.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index 4056119e79..a6e10bcc1d 100755 --- a/scripts/mkdep.pl +++ b/scripts/mkdep.pl @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: ISC # -# Copyright (c) 2011-2021 Todd C. Miller +# Copyright (c) 2011-2022 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 @@ -120,7 +120,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_buf.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 gmtime_r.lo inet_ntop_lo inet_pton.lo isblank.lo localtime_r.lo memrchr.lo mkdirat.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 timegm.lo unlinkat.lo utimens.lo:; + $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_buf.lo arc4random_uniform.lo cfmakeraw.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo fchownat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo gmtime_r.lo inet_ntop_lo inet_pton.lo isblank.lo localtime_r.lo memrchr.lo mkdirat.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 timegm.lo unlinkat.lo utimens.lo:; # Parse OBJS lines my %objs; From 9d654482b286a6fb96ef458903d01fcc48df0dee Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 21 Sep 2022 19:08:15 -0600 Subject: [PATCH 134/186] Convert remaining uses of sudo_mkdir_parents() to sudo_open_parent_dir(). --- include/sudo_iolog.h | 2 +- lib/iolog/iolog_mkdirs.c | 22 +++++++++++++--------- lib/iolog/iolog_mkdtemp.c | 15 +++++++++------ lib/util/mkdir_parents.c | 1 + logsrvd/logsrvd.c | 11 ++++++----- logsrvd/logsrvd_journal.c | 13 +++++++++---- 6 files changed, 39 insertions(+), 25 deletions(-) diff --git a/include/sudo_iolog.h b/include/sudo_iolog.h index 90aa2099be..5994241845 100644 --- a/include/sudo_iolog.h +++ b/include/sudo_iolog.h @@ -143,7 +143,7 @@ void iolog_set_maxseq(unsigned int maxval); void iolog_set_mode(mode_t mode); void iolog_set_owner(uid_t uid, uid_t gid); bool iolog_swapids(bool restore); -bool iolog_mkdirs(char *path); +bool iolog_mkdirs(const char *path); /* iolog_filter.c */ void *iolog_pwfilt_alloc(void); diff --git a/lib/iolog/iolog_mkdirs.c b/lib/iolog/iolog_mkdirs.c index baa9eba003..c9ab980c4b 100644 --- a/lib/iolog/iolog_mkdirs.c +++ b/lib/iolog/iolog_mkdirs.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2021 Todd C. Miller + * Copyright (c) 2009-2022 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 @@ -46,7 +46,7 @@ * Create directory and any parent directories as needed. */ bool -iolog_mkdirs(char *path) +iolog_mkdirs(const char *path) { const mode_t iolog_filemode = iolog_get_file_mode(); const mode_t iolog_dirmode = iolog_get_dir_mode(); @@ -96,29 +96,33 @@ iolog_mkdirs(char *path) /* umask must not be more restrictive than the file modes. */ omask = umask(ACCESSPERMS & ~(iolog_filemode|iolog_dirmode)); - ok = sudo_mkdir_parents(path, iolog_uid, iolog_gid, iolog_dirmode, true); - if (!ok && errno == EACCES) { + ok = false; + if (dfd != -1) + close(dfd); + dfd = sudo_open_parent_dir(path, iolog_uid, iolog_gid, iolog_dirmode, true); + if (dfd == -1 && errno == EACCES) { /* Try again as the I/O log owner (for NFS). */ uid_changed = iolog_swapids(false); if (uid_changed) - ok = sudo_mkdir_parents(path, -1, -1, iolog_dirmode, false); + dfd = sudo_open_parent_dir(path, -1, -1, iolog_dirmode, false); } - if (ok) { + if (dfd != -1) { /* Create final path component. */ + const char *base = sudo_basename(path); sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, "mkdir %s, mode 0%o", path, (unsigned int) iolog_dirmode); - ok = mkdir(path, iolog_dirmode) == 0 || errno == EEXIST; + ok = mkdirat(dfd, base, iolog_dirmode) == 0 || errno == EEXIST; if (!ok) { if (errno == EACCES && !uid_changed) { /* Try again as the I/O log owner (for NFS). */ uid_changed = iolog_swapids(false); if (uid_changed) - ok = mkdir(path, iolog_dirmode) == 0 || errno == EEXIST; + ok = mkdirat(dfd, base, iolog_dirmode) == 0 || errno == EEXIST; } if (!ok) sudo_warn(U_("unable to mkdir %s"), path); } else { - if (chown(path, iolog_uid, iolog_gid) != 0) { + if (fchownat(dfd, base, iolog_uid, iolog_gid, AT_SYMLINK_NOFOLLOW) != 0) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, "%s: unable to chown %d:%d %s", __func__, (int)iolog_uid, (int)iolog_gid, path); diff --git a/lib/iolog/iolog_mkdtemp.c b/lib/iolog/iolog_mkdtemp.c index e7904e3127..948fdcd3e5 100644 --- a/lib/iolog/iolog_mkdtemp.c +++ b/lib/iolog/iolog_mkdtemp.c @@ -52,28 +52,29 @@ iolog_mkdtemp(char *path) const mode_t iolog_dirmode = iolog_get_dir_mode(); const uid_t iolog_uid = iolog_get_uid(); const gid_t iolog_gid = iolog_get_gid(); - bool ok, uid_changed = false; + bool ok = false, uid_changed = false; mode_t omask; + int dfd; debug_decl(iolog_mkdtemp, SUDO_DEBUG_UTIL); /* umask must not be more restrictive than the file modes. */ omask = umask(ACCESSPERMS & ~(iolog_filemode|iolog_dirmode)); - ok = sudo_mkdir_parents(path, iolog_uid, iolog_gid, iolog_dirmode, true); - if (!ok && errno == EACCES) { + dfd = sudo_open_parent_dir(path, iolog_uid, iolog_gid, iolog_dirmode, true); + if (dfd == -1 && errno == EACCES) { /* Try again as the I/O log owner (for NFS). */ uid_changed = iolog_swapids(false); if (uid_changed) - ok = sudo_mkdir_parents(path, -1, -1, iolog_dirmode, false); + dfd = sudo_open_parent_dir(path, -1, -1, iolog_dirmode, false); } - if (ok) { + if (dfd != -1) { /* Create final path component. */ sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, "mkdtemp %s", path); /* We cannot retry mkdtemp() so always open as iolog user */ if (!uid_changed) uid_changed = iolog_swapids(false); - if (mkdtemp(path) == NULL) { + if (mkdtempat(dfd, path) == NULL) { sudo_warn(U_("unable to mkdir %s"), path); ok = false; } else { @@ -82,6 +83,8 @@ iolog_mkdtemp(char *path) path, (unsigned int)iolog_dirmode); } } + close(dfd); + ok = true; } umask(omask); diff --git a/lib/util/mkdir_parents.c b/lib/util/mkdir_parents.c index 6868cc09a5..755ff50d34 100644 --- a/lib/util/mkdir_parents.c +++ b/lib/util/mkdir_parents.c @@ -182,6 +182,7 @@ sudo_open_parent_dir_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, /* * Create any parent directories needed by path (but not path itself). + * Not currently used. */ bool sudo_mkdir_parents_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index bd8191babe..7c66defc6c 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -1759,8 +1759,7 @@ static void write_pidfile(void) { FILE *fp; - int fd; - bool success; + int dfd, fd; mode_t oldmask; const char *pid_file = logsrvd_conf_pid_file(); debug_decl(write_pidfile, SUDO_DEBUG_UTIL); @@ -1771,10 +1770,11 @@ write_pidfile(void) /* Default logsrvd umask is more restrictive (077). */ oldmask = umask(S_IWGRP|S_IWOTH); - success = sudo_mkdir_parents(pid_file, ROOT_UID, ROOT_GID, + dfd = sudo_open_parent_dir(pid_file, ROOT_UID, ROOT_GID, S_IRWXU|S_IXGRP|S_IXOTH, false); - if (success) { - fd = open(pid_file, O_WRONLY|O_CREAT|O_NOFOLLOW, 0644); + if (dfd != -1) { + const char *base = sudo_basename(pid_file); + fd = openat(dfd, base, O_WRONLY|O_CREAT|O_NOFOLLOW, 0644); if (fd == -1 || (fp = fdopen(fd, "w")) == NULL) { sudo_warn("%s", pid_file); if (fd != -1) @@ -1786,6 +1786,7 @@ write_pidfile(void) sudo_warn("%s", pid_file); fclose(fp); } + close(dfd); } umask(oldmask); diff --git a/logsrvd/logsrvd_journal.c b/logsrvd/logsrvd_journal.c index c9e804fe54..831610cfa6 100644 --- a/logsrvd/logsrvd_journal.c +++ b/logsrvd/logsrvd_journal.c @@ -89,8 +89,9 @@ journal_fdopen(int fd, const char *journal_path, static int journal_mkstemp(const char *parent_dir, char *pathbuf, int pathlen) { - int len, fd = -1; + int len, dfd = -1, fd = -1; mode_t dirmode, oldmask; + char *template; debug_decl(journal_mkstemp, SUDO_DEBUG_UTIL); /* umask must not be more restrictive than the file modes. */ @@ -109,19 +110,23 @@ journal_mkstemp(const char *parent_dir, char *pathbuf, int pathlen) RELAY_TEMPLATE); goto done; } - if (!sudo_mkdir_parents(pathbuf, logsrvd_conf_iolog_uid(), - logsrvd_conf_iolog_gid(), S_IRWXU|S_IXGRP|S_IXOTH, false)) { + dfd = sudo_open_parent_dir(pathbuf, logsrvd_conf_iolog_uid(), + logsrvd_conf_iolog_gid(), S_IRWXU|S_IXGRP|S_IXOTH, false); + if (dfd == -1) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to create parent dir for %s", pathbuf); goto done; } - if ((fd = mkstemp(pathbuf)) == -1) { + template = pathbuf + (len - strlen(RELAY_TEMPLATE)); + if ((fd = mkostempsat(dfd, template, 0, 0)) == -1) { sudo_warn(U_("%s: %s"), "mkstemp", pathbuf); goto done; } done: umask(oldmask); + if (dfd != -1) + close(dfd); debug_return_int(fd); } From d37710b0f645aefd56dca855b4e0d22bc889d06f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 22 Sep 2022 11:34:00 -0600 Subject: [PATCH 135/186] Use mkdtempat_np() and mkostempsat_np() on macOS --- config.h.in | 10 +++++----- configure | 25 ++++++++++++++++++++++++- configure.ac | 10 +++++++++- include/sudo_compat.h | 31 +++++++++++++++++++------------ lib/util/mktemp.c | 5 +++-- 5 files changed, 60 insertions(+), 21 deletions(-) diff --git a/config.h.in b/config.h.in index 32dbb9879d..ba4d000562 100644 --- a/config.h.in +++ b/config.h.in @@ -602,17 +602,17 @@ /* Define to 1 if you have the `mkdirat' function. */ #undef HAVE_MKDIRAT -/* Define to 1 if you have the `mkdtemp' function. */ -#undef HAVE_MKDTEMP - /* Define to 1 if you have the `mkdtempat' function. */ #undef HAVE_MKDTEMPAT +/* Define to 1 if you have the `mkdtempat_np' function. */ +#undef HAVE_MKDTEMPAT_NP + /* Define to 1 if you have the `mkostempsat' function. */ #undef HAVE_MKOSTEMPSAT -/* Define to 1 if you have the `mkstemps' function. */ -#undef HAVE_MKSTEMPS +/* Define to 1 if you have the `mkostempsat_np' function. */ +#undef HAVE_MKOSTEMPSAT_NP /* Define to 1 if you have the header file. */ #undef HAVE_MPS_LDAP_SSL_H diff --git a/configure b/configure index f565225fbc..efdf3f1f21 100755 --- a/configure +++ b/configure @@ -23338,8 +23338,11 @@ fi done sudo_mktemp=no +case "$host_os" in + darwin*) + # macOS has these but uses a _np (non-portable) suffix - for ac_func in mkdtempat mkostempsat mkstemps mkdtemp + for ac_func in mkdtempat_np mkostempsat_np do : as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -23354,6 +23357,26 @@ else $as_nop fi done + ;; + *) + + for ac_func in mkdtempat mkostempsat +do : + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes" +then : + cat >>confdefs.h <<_ACEOF +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else $as_nop + sudo_mktemp=yes; break +fi + +done + ;; +esac # If any of the mktemp family are missing we use our own. if test X"$sudo_mktemp" = X"yes"; then diff --git a/configure.ac b/configure.ac index 54f2c5e5ad..103bc4fad4 100644 --- a/configure.ac +++ b/configure.ac @@ -2962,7 +2962,15 @@ AC_CHECK_FUNCS([closefrom], [], [AC_LIBOBJ(closefrom) COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }closefrom_test" ]) sudo_mktemp=no -AC_CHECK_FUNCS([mkdtempat mkostempsat mkstemps mkdtemp], [], [sudo_mktemp=yes; break]) +case "$host_os" in + darwin*) + # macOS has these but uses a _np (non-portable) suffix + AC_CHECK_FUNCS([mkdtempat_np mkostempsat_np], [], [sudo_mktemp=yes; break]) + ;; + *) + AC_CHECK_FUNCS([mkdtempat mkostempsat], [], [sudo_mktemp=yes; break]) + ;; +esac # If any of the mktemp family are missing we use our own. if test X"$sudo_mktemp" = X"yes"; then AC_CHECK_FUNCS([arc4random random lrand48], [break]) diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 87602154e9..63dd9916c8 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -499,23 +499,30 @@ sudo_dso_public int sudo_mkdirat(int dfd, const char *path, mode_t mode); # undef mkdirat # define mkdirat(_a, _b, _c) sudo_mkdirat((_a), (_b), (_c)) #endif /* HAVE_MKDIRAT */ -#if !defined(HAVE_MKDTEMP) || !defined(HAVE_MKDTEMPAT) || !defined(HAVE_MKOSTEMPSAT) || !defined(HAVE_MKSTEMPS) +#if !defined(HAVE_MKDTEMPAT) || !defined(HAVE_MKOSTEMPSAT) +# if defined(HAVE_MKDTEMPAT_NP) && defined(HAVE_MKOSTEMPSAT_NP) +# undef mkdtempat +# define mkdtempat mkdtempat_np +# undef mkostempsat +# define mkostempsat mkostempsat_np +# else sudo_dso_public char *sudo_mkdtemp(char *path); -# undef mkdtemp -# define mkdtemp(_a) sudo_mkdtemp((_a)) +# undef mkdtemp +# define mkdtemp(_a) sudo_mkdtemp((_a)) sudo_dso_public char *sudo_mkdtempat(int dfd, char *path); -# undef mkdtempat -# define mkdtempat(_a, _b) sudo_mkdtempat((_a), (_b)) +# undef mkdtempat +# define mkdtempat(_a, _b) sudo_mkdtempat((_a), (_b)) sudo_dso_public int sudo_mkostempsat(int dfd, char *path, int slen, int flags); -# undef mkostempsat -# define mkostempsat(_a, _b, _c, _d) sudo_mkostempsat((_a), (_b), (_c), (_d)) +# undef mkostempsat +# define mkostempsat(_a, _b, _c, _d) sudo_mkostempsat((_a), (_b), (_c), (_d)) sudo_dso_public int sudo_mkstemp(char *path); -# undef mkstemp -# define mkstemp(_a) sudo_mkstemp((_a)) +# undef mkstemp +# define mkstemp(_a) sudo_mkstemp((_a)) sudo_dso_public int sudo_mkstemps(char *path, int slen); -# undef mkstemps -# define mkstemps(_a, _b) sudo_mkstemps((_a), (_b)) -#endif /* !HAVE_MKDTEMP || !HAVE_MKDTEMPAT || !HAVE_MKOSTEMPSAT || !HAVE_MKSTEMPS */ +# undef mkstemps +# define mkstemps(_a, _b) sudo_mkstemps((_a), (_b)) +# endif /* HAVE_MKDTEMPAT_NP || HAVE_MKOSTEMPSAT_NP */ +#endif /* !HAVE_MKDTEMPAT || !HAVE_MKOSTEMPSAT */ #ifndef HAVE_NANOSLEEP sudo_dso_public int sudo_nanosleep(const struct timespec *timeout, struct timespec *remainder); #undef nanosleep diff --git a/lib/util/mktemp.c b/lib/util/mktemp.c index 395dcf5013..1540e511e8 100644 --- a/lib/util/mktemp.c +++ b/lib/util/mktemp.c @@ -24,7 +24,8 @@ #include -#if !defined(HAVE_MKDTEMP) || !defined(HAVE_MKDTEMPAT) || !defined(HAVE_MKOSTEMPSAT) || !defined(HAVE_MKSTEMPS) +#if (!defined(HAVE_MKDTEMPAT) && !defined(HAVE_MKDTEMPAT_NP)) || \ + (!defined(HAVE_MKOSTEMPSAT) && !defined(HAVE_MKOSTEMPSAT_NP)) #include @@ -168,4 +169,4 @@ sudo_mkstemps(char *path, int slen) { return mktemp_internal(AT_FDCWD, path, slen, MKTEMP_FILE, 0); } -#endif /* !HAVE_MKDTEMP || !HAVE_MKDTEMPAT || !HAVE_MKOSTEMPSAT || !HAVE_MKSTEMPS */ +#endif /* !HAVE_MKDTEMPAT || !HAVE_MKOSTEMPSAT */ From e66f34d250a57511b992788df9d30ae593fed18d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 23 Sep 2022 12:30:51 -0600 Subject: [PATCH 136/186] copy_arg: fix copying an escaped backslash GitHub issue #179 --- plugins/sudoers/editor.c | 6 ++---- plugins/sudoers/regress/editor/check_editor.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/sudoers/editor.c b/plugins/sudoers/editor.c index 7a6164f695..5ca4eb0afe 100644 --- a/plugins/sudoers/editor.c +++ b/plugins/sudoers/editor.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2010-2015 Todd C. Miller + * Copyright (c) 2010-2015, 2020-2022 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 @@ -103,10 +103,8 @@ copy_arg(const char *src, size_t len) if ((copy = malloc(len + 1)) != NULL) { sudoers_gc_add(GC_PTR, copy); for (dst = copy; src < src_end; ) { - if (src[0] == '\\' && src[1] != '\0') { + if (src[0] == '\\' && src[1] != '\0') src++; - continue; - } *dst++ = *src++; } *dst = '\0'; diff --git a/plugins/sudoers/regress/editor/check_editor.c b/plugins/sudoers/regress/editor/check_editor.c index 084d1628a5..eef9d384e6 100644 --- a/plugins/sudoers/regress/editor/check_editor.c +++ b/plugins/sudoers/regress/editor/check_editor.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2021 Todd C. Miller + * Copyright (c) 2021-2022 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 @@ -63,6 +63,15 @@ struct test_data { 3, { "/usr/bin/vi\\", "--", "/etc/hosts", "/bogus/file", NULL } }, + { + /* GitHub issue #179 */ + "EDITOR=sed -rie s/^\\\\(foo\\\\)/waldo\\\\1/", + 1, + { "/etc/sudoers", NULL }, + "/usr/bin/sed", + 5, + { "sed", "-rie", "s/^\\(foo\\)/waldo\\1/", "--", "/etc/sudoers", NULL } + }, { NULL } }; From 3ca9220e5058a9db152249b1fe8fecd787506ffa Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 27 Sep 2022 09:03:33 -0600 Subject: [PATCH 137/186] Implement find_spec, not the deprecated find_module. Fixes a test failure due to find_module having removed from setuptools. --- plugins/python/python_importblocker.c | 44 +++++++++++++++------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/plugins/python/python_importblocker.c b/plugins/python/python_importblocker.c index 2bce36c0b9..109a816a46 100644 --- a/plugins/python/python_importblocker.c +++ b/plugins/python/python_importblocker.c @@ -78,17 +78,18 @@ _sudo_ImportBlocker__Init(PyObject *py_self, PyObject *py_args) } static PyObject * -_sudo_ImportBlocker__find_module(PyObject *py_self, PyObject *py_args) +_sudo_ImportBlocker__find_spec(PyObject *py_self, PyObject *py_args) { - debug_decl(_sudo_ImportBlocker__find_module, PYTHON_DEBUG_C_CALLS); + debug_decl(_sudo_ImportBlocker__find_spec, PYTHON_DEBUG_C_CALLS); - PyObject *py_fullname = NULL, *py_path = NULL, *py_meta_path = NULL, - *py_meta_path_iterator = NULL, *py_finder = NULL, - *py_importer = NULL, *py_import_path = NULL; + PyObject *py_fullname = NULL, *py_path = NULL, *py_target = NULL, + *py_meta_path = NULL, *py_meta_path_iterator = NULL, + *py_finder = NULL, *py_spec = NULL, *py_loader = NULL, + *py_import_path = NULL; - py_debug_python_call("ImportBlocker", "find_module", py_args, NULL, PYTHON_DEBUG_C_CALLS); + py_debug_python_call("ImportBlocker", "find_spec", py_args, NULL, PYTHON_DEBUG_C_CALLS); - if (!PyArg_UnpackTuple(py_args, "sudo.ImportBlocker.find_module", 2, 3, &py_self, &py_fullname, &py_path)) + if (!PyArg_UnpackTuple(py_args, "sudo.ImportBlocker.find_spec", 2, 4, &py_self, &py_fullname, &py_path, &py_target)) goto cleanup; py_meta_path = PyObject_GetAttrString(py_self, "meta_path"); @@ -100,16 +101,18 @@ _sudo_ImportBlocker__find_module(PyObject *py_self, PyObject *py_args) goto cleanup; while ((py_finder = PyIter_Next(py_meta_path_iterator)) != NULL) { - py_importer = PyObject_CallMethod(py_finder, "find_module", "(OO)", - py_fullname, py_path); - if (py_importer == NULL) { + py_spec = PyObject_CallMethod(py_finder, "find_spec", "(OO)", + py_fullname, py_path, py_target); + if (py_spec == NULL) { goto cleanup; } - if (py_importer != Py_None) { // the import could be resolved - if (PyObject_HasAttrString(py_importer, "get_filename")) { + if (py_spec != Py_None && PyObject_HasAttrString(py_spec, "loader")) { + // the finder could be resolved and contains a loader + py_loader = PyObject_GetAttrString(py_spec, "loader"); + if (py_loader != NULL && PyObject_HasAttrString(py_loader, "get_filename")) { // there is a file associated with the import (.py, .so, etc) - py_import_path = PyObject_CallMethod(py_importer, "get_filename", ""); + py_import_path = PyObject_CallMethod(py_loader, "get_filename", ""); const char *import_path = PyUnicode_AsUTF8(py_import_path); sudo_debug_printf(SUDO_DEBUG_DIAG, "ImportBlocker: verifying permissions " @@ -127,32 +130,33 @@ _sudo_ImportBlocker__find_module(PyObject *py_self, PyObject *py_args) goto cleanup; } - Py_CLEAR(py_importer); + Py_CLEAR(py_spec); Py_CLEAR(py_finder); } - Py_CLEAR(py_importer); - py_importer = Py_None; - Py_INCREF(py_importer); + Py_CLEAR(py_spec); + py_spec = Py_None; + Py_INCREF(py_spec); cleanup: Py_CLEAR(py_meta_path_iterator); Py_CLEAR(py_meta_path); Py_CLEAR(py_finder); Py_CLEAR(py_import_path); + Py_CLEAR(py_loader); if (PyErr_Occurred()) { - Py_CLEAR(py_importer); + Py_CLEAR(py_spec); debug_return_ptr(NULL); } - debug_return_ptr(py_importer); + debug_return_ptr(py_spec); } static PyMethodDef _sudo_ImportBlocker_class_methods[] = { {"__init__", _sudo_ImportBlocker__Init, METH_VARARGS, ""}, - {"find_module", _sudo_ImportBlocker__find_module, METH_VARARGS, ""}, + {"find_spec", _sudo_ImportBlocker__find_spec, METH_VARARGS, ""}, {NULL, NULL, 0, NULL} }; From 803b4939be2240e2e0540a8d0258a70982d42a3a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 27 Sep 2022 13:35:45 -0600 Subject: [PATCH 138/186] Move exec code to call into I/O log plugin to exec_iolog.c. This will be shared with exec_nopty.c in the future to log stdin/stdout/stderr without running the command in a pty. Both exec_pty.c and exec_nopty.c now use the same closure. --- MANIFEST | 1 + src/Makefile.in | 31 +- src/exec.c | 31 ++ src/exec_iolog.c | 613 +++++++++++++++++++++++++ src/exec_nopty.c | 81 +--- src/exec_pty.c | 735 +++--------------------------- src/regress/noexec/check_noexec.c | 1 + src/sudo_exec.h | 97 +++- src/sudo_intercept_common.c | 2 +- 9 files changed, 827 insertions(+), 765 deletions(-) create mode 100644 src/exec_iolog.c diff --git a/MANIFEST b/MANIFEST index 628cbf4def..f2ffc49564 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1198,6 +1198,7 @@ src/exec.c src/exec_common.c src/exec_intercept.c src/exec_intercept.h +src/exec_iolog.c src/exec_monitor.c src/exec_nopty.c src/exec_preload.c diff --git a/src/Makefile.in b/src/Makefile.in index d7178b75c2..a3c6948838 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -141,11 +141,12 @@ SHELL = @SHELL@ PROGS = @PROGS@ -OBJS = conversation.o copy_file.o edit_open.o env_hooks.o exec.o exec_common.o \ - exec_intercept.o exec_monitor.o exec_nopty.o exec_preload.o \ - exec_ptrace.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 \ - suspend_nopty.o tcsetpgrp_nobg.o tgetpass.o ttyname.o utmp.o @SUDO_OBJS@ +OBJS = conversation.o copy_file.o edit_open.o env_hooks.o exec.o \ + exec_common.o exec_intercept.o exec_iolog.o exec_monitor.o \ + exec_nopty.o exec_preload.o exec_ptrace.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 suspend_nopty.o tcsetpgrp_nobg.o \ + tgetpass.o ttyname.o utmp.o @SUDO_OBJS@ IOBJS = $(OBJS:.o=.i) sesh.i sudo_intercept.i sudo_intercept_common.i @@ -567,6 +568,26 @@ exec_intercept.i: $(srcdir)/exec_intercept.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< exec_intercept.plog: exec_intercept.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/exec_intercept.c --i-file $< --output-file $@ +exec_iolog.o: $(srcdir)/exec_iolog.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ + $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/exec_iolog.c +exec_iolog.i: $(srcdir)/exec_iolog.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ + $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -E -o $@ $(CPPFLAGS) $< +exec_iolog.plog: exec_iolog.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/exec_iolog.c --i-file $< --output-file $@ exec_monitor.o: $(srcdir)/exec_monitor.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ diff --git a/src/exec.c b/src/exec.c index eaae6477be..9d90038959 100644 --- a/src/exec.c +++ b/src/exec.c @@ -531,3 +531,34 @@ terminate_command(pid_t pid, bool use_pgrp) debug_return; } + +/* + * Free the dynamically-allocated contents of the exec closure. + */ +void +free_exec_closure(struct exec_closure *ec) +{ + debug_decl(free_exec_closure, SUDO_DEBUG_EXEC); + + /* Free any remaining intercept resources. */ + intercept_cleanup(); + + sudo_ev_base_free(ec->evbase); + sudo_ev_free(ec->backchannel_event); + sudo_ev_free(ec->fwdchannel_event); + sudo_ev_free(ec->sigint_event); + sudo_ev_free(ec->sigquit_event); + sudo_ev_free(ec->sigtstp_event); + sudo_ev_free(ec->sigterm_event); + sudo_ev_free(ec->sighup_event); + sudo_ev_free(ec->sigalrm_event); + sudo_ev_free(ec->sigpipe_event); + sudo_ev_free(ec->sigusr1_event); + sudo_ev_free(ec->sigusr2_event); + sudo_ev_free(ec->sigchld_event); + sudo_ev_free(ec->sigcont_event); + sudo_ev_free(ec->siginfo_event); + sudo_ev_free(ec->sigwinch_event); + + debug_return; +} diff --git a/src/exec_iolog.c b/src/exec_iolog.c new file mode 100644 index 0000000000..8575ee482c --- /dev/null +++ b/src/exec_iolog.c @@ -0,0 +1,613 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2009-2022 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 "sudo.h" +#include "sudo_exec.h" +#include "sudo_plugin.h" +#include "sudo_plugin_int.h" + +sigset_t ttyblock; +int ttymode = TERM_COOKED; + +struct io_buffer_list iobufs = SLIST_HEAD_INITIALIZER(&iobufs); + +int io_fds[6] = { -1, -1, -1, -1, -1, -1 }; + +/* + * Remove and free any events associated with the specified + * file descriptor present in the I/O buffers list. + */ +void +ev_free_by_fd(struct sudo_event_base *evbase, int fd) +{ + struct io_buffer *iob; + debug_decl(ev_free_by_fd, SUDO_DEBUG_EXEC); + + /* Deschedule any users of the fd and free up the events. */ + SLIST_FOREACH(iob, &iobufs, entries) { + if (iob->revent != NULL) { + if (sudo_ev_get_fd(iob->revent) == fd) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: deleting and freeing revent %p with fd %d", + __func__, iob->revent, fd); + sudo_ev_free(iob->revent); + iob->revent = NULL; + } + } + if (iob->wevent != NULL) { + if (sudo_ev_get_fd(iob->wevent) == fd) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: deleting and freeing wevent %p with fd %d", + __func__, iob->wevent, fd); + sudo_ev_free(iob->wevent); + iob->wevent = NULL; + } + } + } + debug_return; +} + +/* + * Only close the fd if it is not /dev/tty or std{in,out,err}. + * Return value is the same as close(2). + */ +int +safe_close(int fd) +{ + debug_decl(safe_close, SUDO_DEBUG_EXEC); + + /* Avoid closing /dev/tty or std{in,out,err}. */ + if (fd < 3 || fd == io_fds[SFD_USERTTY]) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: not closing fd %d (%s)", __func__, fd, _PATH_TTY); + errno = EINVAL; + debug_return_int(-1); + } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: closing fd %d", __func__, fd); + debug_return_int(close(fd)); +} + +/* + * Allocate a new I/O buffer and associated read/write events. + */ +void +io_buf_new(int rfd, int wfd, + bool (*action)(const char *, unsigned int, struct io_buffer *), + void (*read_cb)(int fd, int what, void *v), + void (*write_cb)(int fd, int what, void *v), + struct exec_closure *ec, struct io_buffer_list *head) +{ + int n; + struct io_buffer *iob; + debug_decl(io_buf_new, SUDO_DEBUG_EXEC); + + /* Set non-blocking mode. */ + n = fcntl(rfd, F_GETFL, 0); + if (n != -1 && !ISSET(n, O_NONBLOCK)) + (void) fcntl(rfd, F_SETFL, n | O_NONBLOCK); + n = fcntl(wfd, F_GETFL, 0); + if (n != -1 && !ISSET(n, O_NONBLOCK)) + (void) fcntl(wfd, F_SETFL, n | O_NONBLOCK); + + /* Allocate and add to head of list. */ + if ((iob = malloc(sizeof(*iob))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + iob->ec = ec; + iob->revent = sudo_ev_alloc(rfd, SUDO_EV_READ|SUDO_EV_PERSIST, + read_cb, iob); + iob->wevent = sudo_ev_alloc(wfd, SUDO_EV_WRITE|SUDO_EV_PERSIST, + write_cb, iob); + iob->len = 0; + iob->off = 0; + iob->action = action; + iob->buf[0] = '\0'; + if (iob->revent == NULL || iob->wevent == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + SLIST_INSERT_HEAD(head, iob, entries); + + debug_return; +} + +/* + * Schedule I/O events before starting the main event loop or + * resuming from suspend. + */ +void +add_io_events(struct sudo_event_base *evbase) +{ + struct io_buffer *iob; + debug_decl(add_io_events, SUDO_DEBUG_EXEC); + + /* + * Schedule all readers as long as the buffer is not full. + * Schedule writers that contain buffered data. + * Normally, write buffers are added on demand when data is read. + */ + SLIST_FOREACH(iob, &iobufs, entries) { + /* Don't read from /dev/tty if we are not in the foreground. */ + if (iob->revent != NULL && + (ttymode == TERM_RAW || !USERTTY_EVENT(iob->revent))) { + if (iob->len != sizeof(iob->buf)) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "added I/O revent %p, fd %d, events %d", + iob->revent, iob->revent->fd, iob->revent->events); + if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + } + } + if (iob->wevent != NULL) { + /* Enable writer if buffer is not empty. */ + if (iob->len > iob->off) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "added I/O wevent %p, fd %d, events %d", + iob->wevent, iob->wevent->fd, iob->wevent->events); + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + } + } + } + debug_return; +} + +/* + * Flush any output buffered in iobufs or readable from fds other + * than /dev/tty. Removes I/O events from the event base when done. + */ +void +del_io_events(bool nonblocking) +{ + struct io_buffer *iob; + struct sudo_event_base *evbase; + debug_decl(del_io_events, SUDO_DEBUG_EXEC); + + /* Remove iobufs from existing event base. */ + SLIST_FOREACH(iob, &iobufs, entries) { + if (iob->revent != NULL) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "deleted I/O revent %p, fd %d, events %d", + iob->revent, iob->revent->fd, iob->revent->events); + sudo_ev_del(NULL, iob->revent); + } + if (iob->wevent != NULL) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "deleted I/O wevent %p, fd %d, events %d", + iob->wevent, iob->wevent->fd, iob->wevent->events); + sudo_ev_del(NULL, iob->wevent); + } + } + + /* Create temporary event base for flushing. */ + evbase = sudo_ev_base_alloc(); + if (evbase == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + + /* Avoid reading from /dev/tty, just flush existing data. */ + SLIST_FOREACH(iob, &iobufs, entries) { + /* Don't read from /dev/tty while flushing. */ + if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) { + if (iob->len != sizeof(iob->buf)) { + if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + } + } + /* Flush any write buffers with data in them. */ + if (iob->wevent != NULL) { + if (iob->len > iob->off) { + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + } + } + } + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: flushing remaining I/O buffers (nonblocking)", __func__); + (void) sudo_ev_loop(evbase, SUDO_EVLOOP_NONBLOCK); + + /* + * If not in non-blocking mode, make sure we flush write buffers. + * We don't want to read from the pty or stdin since that might block + * and the command is no longer running anyway. + */ + if (!nonblocking) { + /* Clear out iobufs from event base. */ + SLIST_FOREACH(iob, &iobufs, entries) { + if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) + sudo_ev_del(evbase, iob->revent); + if (iob->wevent != NULL) + sudo_ev_del(evbase, iob->wevent); + } + + SLIST_FOREACH(iob, &iobufs, entries) { + /* Flush any write buffers with data in them. */ + if (iob->wevent != NULL) { + if (iob->len > iob->off) { + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + } + } + } + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: flushing remaining write buffers (blocking)", __func__); + (void) sudo_ev_dispatch(evbase); + + /* We should now have flushed all write buffers. */ + SLIST_FOREACH(iob, &iobufs, entries) { + if (iob->wevent != NULL) { + if (iob->len > iob->off) { + sudo_debug_printf(SUDO_DEBUG_ERROR, + "unflushed data: wevent %p, fd %d, events %d", + iob->wevent, iob->wevent->fd, iob->wevent->events); + } + } + } + } + + /* Free temporary event base, removing its events. */ + sudo_ev_base_free(evbase); + + debug_return; +} + +/* + * Free the contents of the I/O buffers queue. + */ +void +free_io_bufs(void) +{ + struct io_buffer *iob; + debug_decl(free_io_bufs, SUDO_DEBUG_EXEC); + + while ((iob = SLIST_FIRST(&iobufs)) != NULL) { + SLIST_REMOVE_HEAD(&iobufs, entries); + if (iob->revent != NULL) + sudo_ev_free(iob->revent); + if (iob->wevent != NULL) + sudo_ev_free(iob->wevent); + free(iob); + } + + debug_return; +} + +/* Call I/O plugin tty input log method. */ +bool +log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob) +{ + struct plugin_container *plugin; + const char *errstr = NULL; + sigset_t omask; + bool ret = true; + debug_decl(log_ttyin, SUDO_DEBUG_EXEC); + + sigprocmask(SIG_BLOCK, &ttyblock, &omask); + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->log_ttyin) { + int rc; + + sudo_debug_set_active_instance(plugin->debug_instance); + rc = plugin->u.io->log_ttyin(buf, n, &errstr); + if (rc <= 0) { + if (rc < 0) { + /* Error: disable plugin's I/O function. */ + plugin->u.io->log_ttyin = NULL; + audit_error(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("I/O plugin error"), + iob->ec->details->info); + } else { + audit_reject(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("command rejected by I/O plugin"), + iob->ec->details->info); + } + ret = false; + break; + } + } + } + sudo_debug_set_active_instance(sudo_debug_instance); + sigprocmask(SIG_SETMASK, &omask, NULL); + + debug_return_bool(ret); +} + +/* Call I/O plugin stdin log method. */ +bool +log_stdin(const char *buf, unsigned int n, struct io_buffer *iob) +{ + struct plugin_container *plugin; + const char *errstr = NULL; + sigset_t omask; + bool ret = true; + debug_decl(log_stdin, SUDO_DEBUG_EXEC); + + sigprocmask(SIG_BLOCK, &ttyblock, &omask); + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->log_stdin) { + int rc; + + sudo_debug_set_active_instance(plugin->debug_instance); + rc = plugin->u.io->log_stdin(buf, n, &errstr); + if (rc <= 0) { + if (rc < 0) { + /* Error: disable plugin's I/O function. */ + plugin->u.io->log_stdin = NULL; + audit_error(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("I/O plugin error"), + iob->ec->details->info); + } else { + audit_reject(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("command rejected by I/O plugin"), + iob->ec->details->info); + } + ret = false; + break; + } + } + } + sudo_debug_set_active_instance(sudo_debug_instance); + sigprocmask(SIG_SETMASK, &omask, NULL); + + debug_return_bool(ret); +} + +/* Call I/O plugin tty output log method. */ +bool +log_ttyout(const char *buf, unsigned int n, struct io_buffer *iob) +{ + struct plugin_container *plugin; + const char *errstr = NULL; + sigset_t omask; + bool ret = true; + debug_decl(log_ttyout, SUDO_DEBUG_EXEC); + + sigprocmask(SIG_BLOCK, &ttyblock, &omask); + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->log_ttyout) { + int rc; + + sudo_debug_set_active_instance(plugin->debug_instance); + rc = plugin->u.io->log_ttyout(buf, n, &errstr); + if (rc <= 0) { + if (rc < 0) { + /* Error: disable plugin's I/O function. */ + plugin->u.io->log_ttyout = NULL; + audit_error(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("I/O plugin error"), + iob->ec->details->info); + } else { + audit_reject(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("command rejected by I/O plugin"), + iob->ec->details->info); + } + ret = false; + break; + } + } + } + sudo_debug_set_active_instance(sudo_debug_instance); + if (!ret) { + /* + * I/O plugin rejected the output, delete the write event + * (user's tty) so we do not display the rejected output. + */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: deleting and freeing devtty wevent %p", __func__, iob->wevent); + sudo_ev_free(iob->wevent); + iob->wevent = NULL; + iob->off = iob->len = 0; + } + sigprocmask(SIG_SETMASK, &omask, NULL); + + debug_return_bool(ret); +} + +/* Call I/O plugin stdout log method. */ +bool +log_stdout(const char *buf, unsigned int n, struct io_buffer *iob) +{ + struct plugin_container *plugin; + const char *errstr = NULL; + sigset_t omask; + bool ret = true; + debug_decl(log_stdout, SUDO_DEBUG_EXEC); + + sigprocmask(SIG_BLOCK, &ttyblock, &omask); + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->log_stdout) { + int rc; + + sudo_debug_set_active_instance(plugin->debug_instance); + rc = plugin->u.io->log_stdout(buf, n, &errstr); + if (rc <= 0) { + if (rc < 0) { + /* Error: disable plugin's I/O function. */ + plugin->u.io->log_stdout = NULL; + audit_error(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("I/O plugin error"), + iob->ec->details->info); + } else { + audit_reject(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("command rejected by I/O plugin"), + iob->ec->details->info); + } + ret = false; + break; + } + } + } + sudo_debug_set_active_instance(sudo_debug_instance); + if (!ret) { + /* + * I/O plugin rejected the output, delete the write event + * (user's stdout) so we do not display the rejected output. + */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: deleting and freeing stdout wevent %p", __func__, iob->wevent); + sudo_ev_free(iob->wevent); + iob->wevent = NULL; + iob->off = iob->len = 0; + } + sigprocmask(SIG_SETMASK, &omask, NULL); + + debug_return_bool(ret); +} + +/* Call I/O plugin stderr log method. */ +bool +log_stderr(const char *buf, unsigned int n, struct io_buffer *iob) +{ + struct plugin_container *plugin; + const char *errstr = NULL; + sigset_t omask; + bool ret = true; + debug_decl(log_stderr, SUDO_DEBUG_EXEC); + + sigprocmask(SIG_BLOCK, &ttyblock, &omask); + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->log_stderr) { + int rc; + + sudo_debug_set_active_instance(plugin->debug_instance); + rc = plugin->u.io->log_stderr(buf, n, &errstr); + if (rc <= 0) { + if (rc < 0) { + /* Error: disable plugin's I/O function. */ + plugin->u.io->log_stderr = NULL; + audit_error(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("I/O plugin error"), + iob->ec->details->info); + } else { + audit_reject(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("command rejected by I/O plugin"), + iob->ec->details->info); + } + ret = false; + break; + } + } + } + sudo_debug_set_active_instance(sudo_debug_instance); + if (!ret) { + /* + * I/O plugin rejected the output, delete the write event + * (user's stderr) so we do not display the rejected output. + */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: deleting and freeing stderr wevent %p", __func__, iob->wevent); + sudo_ev_free(iob->wevent); + iob->wevent = NULL; + iob->off = iob->len = 0; + } + sigprocmask(SIG_SETMASK, &omask, NULL); + + debug_return_bool(ret); +} + +/* Call I/O plugin suspend log method. */ +void +log_suspend(struct exec_closure *ec, int signo) +{ + struct plugin_container *plugin; + const char *errstr = NULL; + sigset_t omask; + debug_decl(log_suspend, SUDO_DEBUG_EXEC); + + sigprocmask(SIG_BLOCK, &ttyblock, &omask); + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->version < SUDO_API_MKVERSION(1, 13)) + continue; + if (plugin->u.io->log_suspend) { + int rc; + + sudo_debug_set_active_instance(plugin->debug_instance); + rc = plugin->u.io->log_suspend(signo, &errstr); + if (rc <= 0) { + /* Error: disable plugin's I/O function. */ + plugin->u.io->log_suspend = NULL; + audit_error(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("error logging suspend"), + ec->details->info); + break; + } + } + } + sudo_debug_set_active_instance(sudo_debug_instance); + sigprocmask(SIG_SETMASK, &omask, NULL); + + debug_return; +} + +/* Call I/O plugin window change log method. */ +void +log_winchange(struct exec_closure *ec, unsigned int rows, + unsigned int cols) +{ + struct plugin_container *plugin; + const char *errstr = NULL; + sigset_t omask; + debug_decl(log_winchange, SUDO_DEBUG_EXEC); + + sigprocmask(SIG_BLOCK, &ttyblock, &omask); + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->version < SUDO_API_MKVERSION(1, 12)) + continue; + if (plugin->u.io->change_winsize) { + int rc; + + sudo_debug_set_active_instance(plugin->debug_instance); + rc = plugin->u.io->change_winsize(rows, cols, &errstr); + if (rc <= 0) { + /* Error: disable plugin's I/O function. */ + plugin->u.io->change_winsize = NULL; + audit_error(plugin->name, SUDO_IO_PLUGIN, + errstr ? errstr : _("error changing window size"), + ec->details->info); + break; + } + } + } + sudo_debug_set_active_instance(sudo_debug_instance); + sigprocmask(SIG_SETMASK, &omask, NULL); + + debug_return; +} + +void +init_ttyblock(void) +{ + /* So we can block tty-generated signals */ + sigemptyset(&ttyblock); + sigaddset(&ttyblock, SIGINT); + sigaddset(&ttyblock, SIGQUIT); + sigaddset(&ttyblock, SIGTSTP); + sigaddset(&ttyblock, SIGTTIN); + sigaddset(&ttyblock, SIGTTOU); +} diff --git a/src/exec_nopty.c b/src/exec_nopty.c index 95e1a3f7d7..29b4d9a4e3 100644 --- a/src/exec_nopty.c +++ b/src/exec_nopty.c @@ -44,39 +44,13 @@ #include "sudo_plugin.h" #include "sudo_plugin_int.h" -#ifndef __WALL -# define __WALL 0 -#endif - -struct exec_closure_nopty { - struct command_details *details; - struct sudo_event_base *evbase; - struct sudo_event *errpipe_event; - struct sudo_event *sigint_event; - struct sudo_event *sigquit_event; - struct sudo_event *sigtstp_event; - struct sudo_event *sigterm_event; - struct sudo_event *sighup_event; - struct sudo_event *sigalrm_event; - struct sudo_event *sigpipe_event; - struct sudo_event *sigusr1_event; - struct sudo_event *sigusr2_event; - struct sudo_event *sigchld_event; - struct sudo_event *sigcont_event; - struct sudo_event *siginfo_event; - struct command_status *cstat; - void *intercept; - pid_t cmnd_pid; - pid_t ppgrp; -}; - -static void handle_sigchld_nopty(struct exec_closure_nopty *ec); +static void handle_sigchld_nopty(struct exec_closure *ec); /* Note: this is basically the same as mon_errpipe_cb() in exec_monitor.c */ static void errpipe_cb(int fd, int what, void *v) { - struct exec_closure_nopty *ec = v; + struct exec_closure *ec = v; ssize_t nread; int errval; debug_decl(errpipe_cb, SUDO_DEBUG_EXEC); @@ -110,7 +84,7 @@ errpipe_cb(int fd, int what, void *v) ec->cstat->type = CMD_ERRNO; ec->cstat->val = errval; } - sudo_ev_del(ec->evbase, ec->errpipe_event); + sudo_ev_del(ec->evbase, ec->backchannel_event); close(fd); break; } @@ -122,7 +96,7 @@ static void signal_cb_nopty(int signo, int what, void *v) { struct sudo_ev_siginfo_container *sc = v; - struct exec_closure_nopty *ec = sc->closure; + struct exec_closure *ec = sc->closure; char signame[SIG2STR_MAX]; debug_decl(signal_cb_nopty, SUDO_DEBUG_EXEC); @@ -203,10 +177,10 @@ signal_cb_nopty(int signo, int what, void *v) * Allocates events for the signal pipe and error pipe. */ static void -fill_exec_closure_nopty(struct exec_closure_nopty *ec, +fill_exec_closure(struct exec_closure *ec, struct command_status *cstat, struct command_details *details, int errfd) { - debug_decl(fill_exec_closure_nopty, SUDO_DEBUG_EXEC); + debug_decl(fill_exec_closure, SUDO_DEBUG_EXEC); /* Fill in the non-event part of the closure. */ ec->ppgrp = getpgrp(); @@ -218,11 +192,11 @@ fill_exec_closure_nopty(struct exec_closure_nopty *ec, details->evbase = NULL; /* Event for command status via errfd. */ - ec->errpipe_event = sudo_ev_alloc(errfd, + ec->backchannel_event = sudo_ev_alloc(errfd, SUDO_EV_READ|SUDO_EV_PERSIST, errpipe_cb, ec); - if (ec->errpipe_event == NULL) + if (ec->backchannel_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - if (sudo_ev_add(ec->evbase, ec->errpipe_event, NULL, false) == -1) + if (sudo_ev_add(ec->evbase, ec->backchannel_event, NULL, false) == -1) sudo_fatal("%s", U_("unable to add event to queue")); sudo_debug_printf(SUDO_DEBUG_INFO, "error pipe fd %d\n", errfd); @@ -319,42 +293,13 @@ fill_exec_closure_nopty(struct exec_closure_nopty *ec, debug_return; } -/* - * Free the dynamically-allocated contents of the exec closure. - */ -static void -free_exec_closure_nopty(struct exec_closure_nopty *ec) -{ - debug_decl(free_exec_closure_nopty, SUDO_DEBUG_EXEC); - - /* Free any remaining intercept resources. */ - intercept_cleanup(); - - sudo_ev_base_free(ec->evbase); - sudo_ev_free(ec->errpipe_event); - sudo_ev_free(ec->sigint_event); - sudo_ev_free(ec->sigquit_event); - sudo_ev_free(ec->sigtstp_event); - sudo_ev_free(ec->sigterm_event); - sudo_ev_free(ec->sighup_event); - sudo_ev_free(ec->sigalrm_event); - sudo_ev_free(ec->sigpipe_event); - sudo_ev_free(ec->sigusr1_event); - sudo_ev_free(ec->sigusr2_event); - sudo_ev_free(ec->sigchld_event); - sudo_ev_free(ec->sigcont_event); - sudo_ev_free(ec->siginfo_event); - - debug_return; -} - /* * Execute a command and wait for it to finish. */ void exec_nopty(struct command_details *details, struct command_status *cstat) { - struct exec_closure_nopty ec = { 0 }; + struct exec_closure ec = { 0 }; int intercept_sv[2] = { -1, -1 }; sigset_t set, oset; int errpipe[2]; @@ -446,7 +391,7 @@ exec_nopty(struct command_details *details, struct command_status *cstat) * Fill in exec closure, allocate event base, signal events and * the error pipe event. */ - fill_exec_closure_nopty(&ec, cstat, details, errpipe[0]); + fill_exec_closure(&ec, cstat, details, errpipe[0]); if (ISSET(details->flags, CD_INTERCEPT|CD_LOG_SUBCMDS)) { int rc = 1; @@ -492,7 +437,7 @@ exec_nopty(struct command_details *details, struct command_status *cstat) #endif /* Free things up. */ - free_exec_closure_nopty(&ec); + free_exec_closure(&ec); debug_return; } @@ -503,7 +448,7 @@ exec_nopty(struct command_details *details, struct command_status *cstat) * the tty pgrp when sudo resumes. */ static void -handle_sigchld_nopty(struct exec_closure_nopty *ec) +handle_sigchld_nopty(struct exec_closure *ec) { pid_t pid; int status; diff --git a/src/exec_pty.c b/src/exec_pty.c index e2fd9c60ea..44621e90ab 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -48,82 +48,22 @@ #include "sudo_plugin.h" #include "sudo_plugin_int.h" -#ifndef __WALL -# define __WALL 0 -#endif - -/* Evaluates to true if the event has /dev/tty as its fd. */ -#define USERTTY_EVENT(_ev) (sudo_ev_get_fd((_ev)) == io_fds[SFD_USERTTY]) - -#define TERM_COOKED 0 -#define TERM_RAW 1 - /* Tail queue of messages to send to the monitor. */ struct monitor_message { TAILQ_ENTRY(monitor_message) entries; struct command_status cstat; }; TAILQ_HEAD(monitor_message_list, monitor_message); - -struct exec_closure_pty { - struct command_details *details; - struct sudo_event_base *evbase; - struct sudo_event *backchannel_event; - struct sudo_event *fwdchannel_event; - struct sudo_event *sigint_event; - struct sudo_event *sigquit_event; - struct sudo_event *sigtstp_event; - struct sudo_event *sigterm_event; - struct sudo_event *sighup_event; - struct sudo_event *sigalrm_event; - struct sudo_event *sigusr1_event; - struct sudo_event *sigusr2_event; - struct sudo_event *sigchld_event; - struct sudo_event *sigwinch_event; - struct command_status *cstat; - void *intercept; - struct monitor_message_list monitor_messages; - pid_t monitor_pid; - pid_t cmnd_pid; - pid_t ppgrp; - short rows; - short cols; -}; - -/* - * I/O buffer with associated read/write events and a logging action. - * Used to, e.g. pass data from the pty to the user's terminal - * and any I/O logging plugins. - */ -struct io_buffer; -typedef bool (*sudo_io_action_t)(const char *, unsigned int, struct io_buffer *); -struct io_buffer { - SLIST_ENTRY(io_buffer) entries; - struct exec_closure_pty *ec; - struct sudo_event *revent; - struct sudo_event *wevent; - sudo_io_action_t action; - int len; /* buffer length (how much produced) */ - int off; /* write position (how much already consumed) */ - char buf[64 * 1024]; -}; -SLIST_HEAD(io_buffer_list, io_buffer); +static struct monitor_message_list monitor_messages = + TAILQ_HEAD_INITIALIZER(monitor_messages); static char ptyname[PATH_MAX]; -int io_fds[6] = { -1, -1, -1, -1, -1, -1}; static bool foreground, pipeline; -static int ttymode = TERM_COOKED; -static sigset_t ttyblock; -static struct io_buffer_list iobufs; static const char *utmp_user; -static void del_io_events(bool nonblocking); -static void sync_ttysize(struct exec_closure_pty *ec); -static int safe_close(int fd); -static void ev_free_by_fd(struct sudo_event_base *evbase, int fd); -static pid_t check_foreground(struct exec_closure_pty *ec); -static void add_io_events(struct sudo_event_base *evbase); -static void schedule_signal(struct exec_closure_pty *ec, int signo); +static void sync_ttysize(struct exec_closure *ec); +static pid_t check_foreground(struct exec_closure *ec); +static void schedule_signal(struct exec_closure *ec, int signo); /* * Cleanup hook for sudo_fatal()/sudo_fatalx() @@ -202,307 +142,6 @@ pty_make_controlling(void) return 0; } -/* Call I/O plugin tty input log method. */ -static bool -log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob) -{ - struct plugin_container *plugin; - const char *errstr = NULL; - sigset_t omask; - bool ret = true; - debug_decl(log_ttyin, SUDO_DEBUG_EXEC); - - sigprocmask(SIG_BLOCK, &ttyblock, &omask); - TAILQ_FOREACH(plugin, &io_plugins, entries) { - if (plugin->u.io->log_ttyin) { - int rc; - - sudo_debug_set_active_instance(plugin->debug_instance); - rc = plugin->u.io->log_ttyin(buf, n, &errstr); - if (rc <= 0) { - if (rc < 0) { - /* Error: disable plugin's I/O function. */ - plugin->u.io->log_ttyin = NULL; - audit_error(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("I/O plugin error"), - iob->ec->details->info); - } else { - audit_reject(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("command rejected by I/O plugin"), - iob->ec->details->info); - } - ret = false; - break; - } - } - } - sudo_debug_set_active_instance(sudo_debug_instance); - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return_bool(ret); -} - -/* Call I/O plugin stdin log method. */ -static bool -log_stdin(const char *buf, unsigned int n, struct io_buffer *iob) -{ - struct plugin_container *plugin; - const char *errstr = NULL; - sigset_t omask; - bool ret = true; - debug_decl(log_stdin, SUDO_DEBUG_EXEC); - - sigprocmask(SIG_BLOCK, &ttyblock, &omask); - TAILQ_FOREACH(plugin, &io_plugins, entries) { - if (plugin->u.io->log_stdin) { - int rc; - - sudo_debug_set_active_instance(plugin->debug_instance); - rc = plugin->u.io->log_stdin(buf, n, &errstr); - if (rc <= 0) { - if (rc < 0) { - /* Error: disable plugin's I/O function. */ - plugin->u.io->log_stdin = NULL; - audit_error(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("I/O plugin error"), - iob->ec->details->info); - } else { - audit_reject(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("command rejected by I/O plugin"), - iob->ec->details->info); - } - ret = false; - break; - } - } - } - sudo_debug_set_active_instance(sudo_debug_instance); - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return_bool(ret); -} - -/* Call I/O plugin tty output log method. */ -static bool -log_ttyout(const char *buf, unsigned int n, struct io_buffer *iob) -{ - struct plugin_container *plugin; - const char *errstr = NULL; - sigset_t omask; - bool ret = true; - debug_decl(log_ttyout, SUDO_DEBUG_EXEC); - - sigprocmask(SIG_BLOCK, &ttyblock, &omask); - TAILQ_FOREACH(plugin, &io_plugins, entries) { - if (plugin->u.io->log_ttyout) { - int rc; - - sudo_debug_set_active_instance(plugin->debug_instance); - rc = plugin->u.io->log_ttyout(buf, n, &errstr); - if (rc <= 0) { - if (rc < 0) { - /* Error: disable plugin's I/O function. */ - plugin->u.io->log_ttyout = NULL; - audit_error(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("I/O plugin error"), - iob->ec->details->info); - } else { - audit_reject(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("command rejected by I/O plugin"), - iob->ec->details->info); - } - ret = false; - break; - } - } - } - sudo_debug_set_active_instance(sudo_debug_instance); - if (!ret) { - /* - * I/O plugin rejected the output, delete the write event - * (user's tty) so we do not display the rejected output. - */ - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: deleting and freeing devtty wevent %p", __func__, iob->wevent); - sudo_ev_free(iob->wevent); - iob->wevent = NULL; - iob->off = iob->len = 0; - } - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return_bool(ret); -} - -/* Call I/O plugin stdout log method. */ -static bool -log_stdout(const char *buf, unsigned int n, struct io_buffer *iob) -{ - struct plugin_container *plugin; - const char *errstr = NULL; - sigset_t omask; - bool ret = true; - debug_decl(log_stdout, SUDO_DEBUG_EXEC); - - sigprocmask(SIG_BLOCK, &ttyblock, &omask); - TAILQ_FOREACH(plugin, &io_plugins, entries) { - if (plugin->u.io->log_stdout) { - int rc; - - sudo_debug_set_active_instance(plugin->debug_instance); - rc = plugin->u.io->log_stdout(buf, n, &errstr); - if (rc <= 0) { - if (rc < 0) { - /* Error: disable plugin's I/O function. */ - plugin->u.io->log_stdout = NULL; - audit_error(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("I/O plugin error"), - iob->ec->details->info); - } else { - audit_reject(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("command rejected by I/O plugin"), - iob->ec->details->info); - } - ret = false; - break; - } - } - } - sudo_debug_set_active_instance(sudo_debug_instance); - if (!ret) { - /* - * I/O plugin rejected the output, delete the write event - * (user's stdout) so we do not display the rejected output. - */ - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: deleting and freeing stdout wevent %p", __func__, iob->wevent); - sudo_ev_free(iob->wevent); - iob->wevent = NULL; - iob->off = iob->len = 0; - } - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return_bool(ret); -} - -/* Call I/O plugin stderr log method. */ -static bool -log_stderr(const char *buf, unsigned int n, struct io_buffer *iob) -{ - struct plugin_container *plugin; - const char *errstr = NULL; - sigset_t omask; - bool ret = true; - debug_decl(log_stderr, SUDO_DEBUG_EXEC); - - sigprocmask(SIG_BLOCK, &ttyblock, &omask); - TAILQ_FOREACH(plugin, &io_plugins, entries) { - if (plugin->u.io->log_stderr) { - int rc; - - sudo_debug_set_active_instance(plugin->debug_instance); - rc = plugin->u.io->log_stderr(buf, n, &errstr); - if (rc <= 0) { - if (rc < 0) { - /* Error: disable plugin's I/O function. */ - plugin->u.io->log_stderr = NULL; - audit_error(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("I/O plugin error"), - iob->ec->details->info); - } else { - audit_reject(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("command rejected by I/O plugin"), - iob->ec->details->info); - } - ret = false; - break; - } - } - } - sudo_debug_set_active_instance(sudo_debug_instance); - if (!ret) { - /* - * I/O plugin rejected the output, delete the write event - * (user's stderr) so we do not display the rejected output. - */ - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: deleting and freeing stderr wevent %p", __func__, iob->wevent); - sudo_ev_free(iob->wevent); - iob->wevent = NULL; - iob->off = iob->len = 0; - } - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return_bool(ret); -} - -/* Call I/O plugin suspend log method. */ -static void -log_suspend(struct exec_closure_pty *ec, int signo) -{ - struct plugin_container *plugin; - const char *errstr = NULL; - sigset_t omask; - debug_decl(log_suspend, SUDO_DEBUG_EXEC); - - sigprocmask(SIG_BLOCK, &ttyblock, &omask); - TAILQ_FOREACH(plugin, &io_plugins, entries) { - if (plugin->u.io->version < SUDO_API_MKVERSION(1, 13)) - continue; - if (plugin->u.io->log_suspend) { - int rc; - - sudo_debug_set_active_instance(plugin->debug_instance); - rc = plugin->u.io->log_suspend(signo, &errstr); - if (rc <= 0) { - /* Error: disable plugin's I/O function. */ - plugin->u.io->log_suspend = NULL; - audit_error(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("error logging suspend"), - ec->details->info); - break; - } - } - } - sudo_debug_set_active_instance(sudo_debug_instance); - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return; -} - -/* Call I/O plugin window change log method. */ -static void -log_winchange(struct exec_closure_pty *ec, unsigned int rows, unsigned int cols) -{ - struct plugin_container *plugin; - const char *errstr = NULL; - sigset_t omask; - debug_decl(log_winchange, SUDO_DEBUG_EXEC); - - sigprocmask(SIG_BLOCK, &ttyblock, &omask); - TAILQ_FOREACH(plugin, &io_plugins, entries) { - if (plugin->u.io->version < SUDO_API_MKVERSION(1, 12)) - continue; - if (plugin->u.io->change_winsize) { - int rc; - - sudo_debug_set_active_instance(plugin->debug_instance); - rc = plugin->u.io->change_winsize(rows, cols, &errstr); - if (rc <= 0) { - /* Error: disable plugin's I/O function. */ - plugin->u.io->change_winsize = NULL; - audit_error(plugin->name, SUDO_IO_PLUGIN, - errstr ? errstr : _("error changing window size"), - ec->details->info); - break; - } - } - } - sudo_debug_set_active_instance(sudo_debug_instance); - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return; -} - /* * Check whether we are running in the foregroup. * Updates the foreground global and updates the window size. @@ -510,7 +149,7 @@ log_winchange(struct exec_closure_pty *ec, unsigned int rows, unsigned int cols) * on success, or -1 on failure (tty revoked). */ static pid_t -check_foreground(struct exec_closure_pty *ec) +check_foreground(struct exec_closure *ec) { int ret = 0; debug_decl(check_foreground, SUDO_DEBUG_EXEC); @@ -532,7 +171,7 @@ check_foreground(struct exec_closure_pty *ec) * foreground or SIGCONT_BG if it is a background process. */ static int -suspend_sudo_pty(struct exec_closure_pty *ec, int signo) +suspend_sudo_pty(struct exec_closure *ec, int signo) { char signame[SIG2STR_MAX]; struct sigaction sa, osa; @@ -823,71 +462,25 @@ write_callback(int fd, int what, void *v) debug_return; } -static void -io_buf_new(int rfd, int wfd, - bool (*action)(const char *, unsigned int, struct io_buffer *), - struct exec_closure_pty *ec, struct io_buffer_list *head) -{ - int n; - struct io_buffer *iob; - debug_decl(io_buf_new, SUDO_DEBUG_EXEC); - - /* Set non-blocking mode. */ - n = fcntl(rfd, F_GETFL, 0); - if (n != -1 && !ISSET(n, O_NONBLOCK)) - (void) fcntl(rfd, F_SETFL, n | O_NONBLOCK); - n = fcntl(wfd, F_GETFL, 0); - if (n != -1 && !ISSET(n, O_NONBLOCK)) - (void) fcntl(wfd, F_SETFL, n | O_NONBLOCK); - - /* Allocate and add to head of list. */ - if ((iob = malloc(sizeof(*iob))) == NULL) - sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - iob->ec = ec; - iob->revent = sudo_ev_alloc(rfd, SUDO_EV_READ|SUDO_EV_PERSIST, - read_callback, iob); - iob->wevent = sudo_ev_alloc(wfd, SUDO_EV_WRITE|SUDO_EV_PERSIST, - write_callback, iob); - iob->len = 0; - iob->off = 0; - iob->action = action; - iob->buf[0] = '\0'; - if (iob->revent == NULL || iob->wevent == NULL) - sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - SLIST_INSERT_HEAD(head, iob, entries); - - debug_return; -} - /* * We already closed the follower so reads from the leader will not block. */ static void pty_finish(struct command_status *cstat) { - struct io_buffer *iob; - int n; + int flags; debug_decl(pty_finish, SUDO_DEBUG_EXEC); - /* Flush any remaining output (the plugin already got it). */ + /* Flush any remaining output (the plugin already got it) and free bufs. */ if (io_fds[SFD_USERTTY] != -1) { - n = fcntl(io_fds[SFD_USERTTY], F_GETFL, 0); - if (n != -1 && ISSET(n, O_NONBLOCK)) { - CLR(n, O_NONBLOCK); - (void) fcntl(io_fds[SFD_USERTTY], F_SETFL, n); + flags = fcntl(io_fds[SFD_USERTTY], F_GETFL, 0); + if (flags != -1 && ISSET(flags, O_NONBLOCK)) { + CLR(flags, O_NONBLOCK); + (void) fcntl(io_fds[SFD_USERTTY], F_SETFL, flags); } } del_io_events(false); - - /* Free I/O buffers. */ - while ((iob = SLIST_FIRST(&iobufs)) != NULL) { - SLIST_REMOVE_HEAD(&iobufs, entries); - if (iob->revent != NULL) - sudo_ev_free(iob->revent); - if (iob->wevent != NULL) - sudo_ev_free(iob->wevent); - free(iob); - } + free_io_bufs(); /* Restore terminal settings. */ if (io_fds[SFD_USERTTY] != -1) @@ -904,7 +497,7 @@ pty_finish(struct command_status *cstat) * Send command status to the monitor (signal or window size change). */ static void -send_command_status(struct exec_closure_pty *ec, int type, int val) +send_command_status(struct exec_closure *ec, int type, int val) { struct monitor_message *msg; debug_decl(send_command, SUDO_DEBUG_EXEC); @@ -913,7 +506,7 @@ send_command_status(struct exec_closure_pty *ec, int type, int val) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); msg->cstat.type = type; msg->cstat.val = val; - TAILQ_INSERT_TAIL(&ec->monitor_messages, msg, entries); + TAILQ_INSERT_TAIL(&monitor_messages, msg, entries); if (sudo_ev_add(ec->evbase, ec->fwdchannel_event, NULL, true) == -1) sudo_fatal("%s", U_("unable to add event to queue")); @@ -928,7 +521,7 @@ send_command_status(struct exec_closure_pty *ec, int type, int val) * Schedule a signal to be forwarded. */ static void -schedule_signal(struct exec_closure_pty *ec, int signo) +schedule_signal(struct exec_closure *ec, int signo) { char signame[SIG2STR_MAX]; debug_decl(schedule_signal, SUDO_DEBUG_EXEC); @@ -949,10 +542,27 @@ schedule_signal(struct exec_closure_pty *ec, int signo) debug_return; } +/* + * Free any remaining monitor messages in the queue. + */ +static void +flush_monitor_messages(void) +{ + struct monitor_message *msg; + debug_decl(flush_monitor_messages, SUDO_DEBUG_EXEC); + + while ((msg = TAILQ_FIRST(&monitor_messages)) != NULL) { + TAILQ_REMOVE(&monitor_messages, msg, entries); + free(msg); + } + + debug_return; +} + static void backchannel_cb(int fd, int what, void *v) { - struct exec_closure_pty *ec = v; + struct exec_closure *ec = v; struct command_status cstat; ssize_t nread; debug_decl(backchannel_cb, SUDO_DEBUG_EXEC); @@ -1060,7 +670,7 @@ backchannel_cb(int fd, int what, void *v) * Handle changes to the monitors's status (SIGCHLD). */ static void -handle_sigchld_pty(struct exec_closure_pty *ec) +handle_sigchld_pty(struct exec_closure *ec) { int n, status; pid_t pid; @@ -1129,7 +739,7 @@ static void signal_cb_pty(int signo, int what, void *v) { struct sudo_ev_siginfo_container *sc = v; - struct exec_closure_pty *ec = sc->closure; + struct exec_closure *ec = sc->closure; char signame[SIG2STR_MAX]; debug_decl(signal_cb_pty, SUDO_DEBUG_EXEC); @@ -1180,13 +790,13 @@ signal_cb_pty(int signo, int what, void *v) static void fwdchannel_cb(int sock, int what, void *v) { - struct exec_closure_pty *ec = v; + struct exec_closure *ec = v; char signame[SIG2STR_MAX]; struct monitor_message *msg; ssize_t nsent; debug_decl(fwdchannel_cb, SUDO_DEBUG_EXEC); - while ((msg = TAILQ_FIRST(&ec->monitor_messages)) != NULL) { + while ((msg = TAILQ_FIRST(&monitor_messages)) != NULL) { switch (msg->cstat.type) { case CMD_SIGNO: if (msg->cstat.val == SIGCONT_FG) @@ -1209,7 +819,7 @@ fwdchannel_cb(int sock, int what, void *v) msg->cstat.type, msg->cstat.val); break; } - TAILQ_REMOVE(&ec->monitor_messages, msg, entries); + TAILQ_REMOVE(&monitor_messages, msg, entries); nsent = send(sock, &msg->cstat, sizeof(msg->cstat), 0); if (nsent != sizeof(msg->cstat)) { if (errno == EPIPE) { @@ -1217,10 +827,7 @@ fwdchannel_cb(int sock, int what, void *v) "broken pipe writing to monitor over backchannel"); /* Other end of socket gone, empty out monitor_messages. */ free(msg); - while ((msg = TAILQ_FIRST(&ec->monitor_messages)) != NULL) { - TAILQ_REMOVE(&ec->monitor_messages, msg, entries); - free(msg); - } + flush_monitor_messages(); /* XXX - need new CMD_ type for monitor errors. */ ec->cstat->type = CMD_ERRNO; ec->cstat->val = errno; @@ -1238,10 +845,10 @@ fwdchannel_cb(int sock, int what, void *v) * Forwarded signals on the backchannel are enabled on demand. */ static void -fill_exec_closure_pty(struct exec_closure_pty *ec, struct command_status *cstat, +fill_exec_closure(struct exec_closure *ec, struct command_status *cstat, struct command_details *details, pid_t ppgrp, int backchannel) { - debug_decl(fill_exec_closure_pty, SUDO_DEBUG_EXEC); + debug_decl(fill_exec_closure, SUDO_DEBUG_EXEC); /* Fill in the non-event part of the closure. */ ec->cmnd_pid = -1; @@ -1250,7 +857,6 @@ fill_exec_closure_pty(struct exec_closure_pty *ec, struct command_status *cstat, ec->details = details; ec->rows = user_details.ts_rows; ec->cols = user_details.ts_cols; - TAILQ_INIT(&ec->monitor_messages); /* Reset cstat for running the command. */ cstat->type = CMD_INVALID; @@ -1352,40 +958,6 @@ fill_exec_closure_pty(struct exec_closure_pty *ec, struct command_status *cstat, debug_return; } -/* - * Free the dynamically-allocated contents of the exec closure. - */ -static void -free_exec_closure_pty(struct exec_closure_pty *ec) -{ - struct monitor_message *msg; - debug_decl(free_exec_closure_pty, SUDO_DEBUG_EXEC); - - /* Free any remaining intercept resources. */ - intercept_cleanup(); - - sudo_ev_base_free(ec->evbase); - sudo_ev_free(ec->backchannel_event); - sudo_ev_free(ec->fwdchannel_event); - sudo_ev_free(ec->sigint_event); - sudo_ev_free(ec->sigquit_event); - sudo_ev_free(ec->sigtstp_event); - sudo_ev_free(ec->sigterm_event); - sudo_ev_free(ec->sighup_event); - sudo_ev_free(ec->sigalrm_event); - sudo_ev_free(ec->sigusr1_event); - sudo_ev_free(ec->sigusr2_event); - sudo_ev_free(ec->sigchld_event); - sudo_ev_free(ec->sigwinch_event); - - while ((msg = TAILQ_FIRST(&ec->monitor_messages)) != NULL) { - TAILQ_REMOVE(&ec->monitor_messages, msg, entries); - free(msg); - } - - debug_return; -} - /* * Execute a command in a pty, potentially with I/O logging, and * wait for it to finish. @@ -1398,7 +970,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) int io_pipe[3][2] = { { -1, -1 }, { -1, -1 }, { -1, -1 } }; bool interpose[3] = { false, false, false }; int sv[2], intercept_sv[2] = { -1, -1 }; - struct exec_closure_pty ec = { 0 }; + struct exec_closure ec = { 0 }; struct plugin_container *plugin; int evloop_retries = -1; sigset_t set, oset; @@ -1461,15 +1033,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) * Child will run the command in the pty, parent will pass data * to and from pty. */ - - /* So we can block tty-generated signals */ - sigemptyset(&ttyblock); - sigaddset(&ttyblock, SIGINT); - sigaddset(&ttyblock, SIGQUIT); - sigaddset(&ttyblock, SIGTSTP); - sigaddset(&ttyblock, SIGTTIN); - sigaddset(&ttyblock, SIGTTOU); - + init_ttyblock(); ppgrp = getpgrp(); /* parent's pgrp, so child can signal us */ /* Determine whether any of std{in,out,err} should be logged. */ @@ -1495,12 +1059,12 @@ exec_pty(struct command_details *details, struct command_status *cstat) /* Read from /dev/tty, write to pty leader */ if (!ISSET(details->flags, CD_BACKGROUND)) { io_buf_new(io_fds[SFD_USERTTY], io_fds[SFD_LEADER], - log_ttyin, &ec, &iobufs); + log_ttyin, read_callback, write_callback, &ec, &iobufs); } /* Read from pty leader, write to /dev/tty */ io_buf_new(io_fds[SFD_LEADER], io_fds[SFD_USERTTY], - log_ttyout, &ec, &iobufs); + log_ttyout, read_callback, write_callback, &ec, &iobufs); /* Are we the foreground process? */ foreground = tcgetpgrp(io_fds[SFD_USERTTY]) == ppgrp; @@ -1527,7 +1091,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) if (pipe2(io_pipe[STDIN_FILENO], O_CLOEXEC) != 0) sudo_fatal("%s", U_("unable to create pipe")); io_buf_new(STDIN_FILENO, io_pipe[STDIN_FILENO][1], - log_stdin, &ec, &iobufs); + log_stdin, read_callback, write_callback, &ec, &iobufs); io_fds[SFD_STDIN] = io_pipe[STDIN_FILENO][0]; } } @@ -1548,7 +1112,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) if (pipe2(io_pipe[STDOUT_FILENO], O_CLOEXEC) != 0) sudo_fatal("%s", U_("unable to create pipe")); io_buf_new(io_pipe[STDOUT_FILENO][0], STDOUT_FILENO, - log_stdout, &ec, &iobufs); + log_stdout, read_callback, write_callback, &ec, &iobufs); io_fds[SFD_STDOUT] = io_pipe[STDOUT_FILENO][1]; } } @@ -1568,7 +1132,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) if (pipe2(io_pipe[STDERR_FILENO], O_CLOEXEC) != 0) sudo_fatal("%s", U_("unable to create pipe")); io_buf_new(io_pipe[STDERR_FILENO][0], STDERR_FILENO, - log_stderr, &ec, &iobufs); + log_stderr, read_callback, write_callback, &ec, &iobufs); io_fds[SFD_STDERR] = io_pipe[STDERR_FILENO][1]; } } @@ -1676,7 +1240,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) * Fill in exec closure, allocate event base, signal events and * the backchannel event. */ - fill_exec_closure_pty(&ec, cstat, details, ppgrp, sv[0]); + fill_exec_closure(&ec, cstat, details, ppgrp, sv[0]); /* Create event and closure for intercept mode. */ if (ISSET(details->flags, CD_INTERCEPT|CD_LOG_SUBCMDS)) { @@ -1734,156 +1298,17 @@ exec_pty(struct command_details *details, struct command_status *cstat) pty_finish(cstat); /* Free things up. */ - free_exec_closure_pty(&ec); + free_exec_closure(&ec); debug_return_bool(true); } -/* - * Schedule I/O events before starting the main event loop or - * resuming from suspend. - */ -static void -add_io_events(struct sudo_event_base *evbase) -{ - struct io_buffer *iob; - debug_decl(add_io_events, SUDO_DEBUG_EXEC); - - /* - * Schedule all readers as long as the buffer is not full. - * Schedule writers that contain buffered data. - * Normally, write buffers are added on demand when data is read. - */ - SLIST_FOREACH(iob, &iobufs, entries) { - /* Don't read from /dev/tty if we are not in the foreground. */ - if (iob->revent != NULL && - (ttymode == TERM_RAW || !USERTTY_EVENT(iob->revent))) { - if (iob->len != sizeof(iob->buf)) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "added I/O revent %p, fd %d, events %d", - iob->revent, iob->revent->fd, iob->revent->events); - if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) - sudo_fatal("%s", U_("unable to add event to queue")); - } - } - if (iob->wevent != NULL) { - /* Enable writer if buffer is not empty. */ - if (iob->len > iob->off) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "added I/O wevent %p, fd %d, events %d", - iob->wevent, iob->wevent->fd, iob->wevent->events); - if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal("%s", U_("unable to add event to queue")); - } - } - } - debug_return; -} - -/* - * Flush any output buffered in iobufs or readable from fds other - * than /dev/tty. Removes I/O events from the event base when done. - */ -static void -del_io_events(bool nonblocking) -{ - struct io_buffer *iob; - struct sudo_event_base *evbase; - debug_decl(del_io_events, SUDO_DEBUG_EXEC); - - /* Remove iobufs from existing event base. */ - SLIST_FOREACH(iob, &iobufs, entries) { - if (iob->revent != NULL) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "deleted I/O revent %p, fd %d, events %d", - iob->revent, iob->revent->fd, iob->revent->events); - sudo_ev_del(NULL, iob->revent); - } - if (iob->wevent != NULL) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "deleted I/O wevent %p, fd %d, events %d", - iob->wevent, iob->wevent->fd, iob->wevent->events); - sudo_ev_del(NULL, iob->wevent); - } - } - - /* Create temporary event base for flushing. */ - evbase = sudo_ev_base_alloc(); - if (evbase == NULL) - sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - - /* Avoid reading from /dev/tty, just flush existing data. */ - SLIST_FOREACH(iob, &iobufs, entries) { - /* Don't read from /dev/tty while flushing. */ - if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) { - if (iob->len != sizeof(iob->buf)) { - if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) - sudo_fatal("%s", U_("unable to add event to queue")); - } - } - /* Flush any write buffers with data in them. */ - if (iob->wevent != NULL) { - if (iob->len > iob->off) { - if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal("%s", U_("unable to add event to queue")); - } - } - } - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: flushing remaining I/O buffers (nonblocking)", __func__); - (void) sudo_ev_loop(evbase, SUDO_EVLOOP_NONBLOCK); - - /* - * If not in non-blocking mode, make sure we flush write buffers. - * We don't want to read from the pty or stdin since that might block - * and the command is no longer running anyway. - */ - if (!nonblocking) { - /* Clear out iobufs from event base. */ - SLIST_FOREACH(iob, &iobufs, entries) { - if (iob->revent != NULL && !USERTTY_EVENT(iob->revent)) - sudo_ev_del(evbase, iob->revent); - if (iob->wevent != NULL) - sudo_ev_del(evbase, iob->wevent); - } - - SLIST_FOREACH(iob, &iobufs, entries) { - /* Flush any write buffers with data in them. */ - if (iob->wevent != NULL) { - if (iob->len > iob->off) { - if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal("%s", U_("unable to add event to queue")); - } - } - } - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: flushing remaining write buffers (blocking)", __func__); - (void) sudo_ev_dispatch(evbase); - - /* We should now have flushed all write buffers. */ - SLIST_FOREACH(iob, &iobufs, entries) { - if (iob->wevent != NULL) { - if (iob->len > iob->off) { - sudo_debug_printf(SUDO_DEBUG_ERROR, - "unflushed data: wevent %p, fd %d, events %d", - iob->wevent, iob->wevent->fd, iob->wevent->events); - } - } - } - } - - /* Free temporary event base, removing its events. */ - sudo_ev_base_free(evbase); - - debug_return; -} - /* * Check for tty size changes. * Passes the new window size to the I/O plugin and to the monitor. */ static void -sync_ttysize(struct exec_closure_pty *ec) +sync_ttysize(struct exec_closure *ec) { struct winsize wsize; debug_decl(sync_ttysize, SUDO_DEBUG_EXEC); @@ -1907,57 +1332,3 @@ sync_ttysize(struct exec_closure_pty *ec) debug_return; } - -/* - * Remove and free any events associated with the specified - * file descriptor present in the I/O buffers list. - */ -static void -ev_free_by_fd(struct sudo_event_base *evbase, int fd) -{ - struct io_buffer *iob; - debug_decl(ev_free_by_fd, SUDO_DEBUG_EXEC); - - /* Deschedule any users of the fd and free up the events. */ - SLIST_FOREACH(iob, &iobufs, entries) { - if (iob->revent != NULL) { - if (sudo_ev_get_fd(iob->revent) == fd) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: deleting and freeing revent %p with fd %d", - __func__, iob->revent, fd); - sudo_ev_free(iob->revent); - iob->revent = NULL; - } - } - if (iob->wevent != NULL) { - if (sudo_ev_get_fd(iob->wevent) == fd) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: deleting and freeing wevent %p with fd %d", - __func__, iob->wevent, fd); - sudo_ev_free(iob->wevent); - iob->wevent = NULL; - } - } - } - debug_return; -} - -/* - * Only close the fd if it is not /dev/tty or std{in,out,err}. - * Return value is the same as close(2). - */ -static int -safe_close(int fd) -{ - debug_decl(safe_close, SUDO_DEBUG_EXEC); - - /* Avoid closing /dev/tty or std{in,out,err}. */ - if (fd < 3 || fd == io_fds[SFD_USERTTY]) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "%s: not closing fd %d (%s)", __func__, fd, _PATH_TTY); - errno = EINVAL; - debug_return_int(-1); - } - sudo_debug_printf(SUDO_DEBUG_INFO, "%s: closing fd %d", __func__, fd); - debug_return_int(close(fd)); -} diff --git a/src/regress/noexec/check_noexec.c b/src/regress/noexec/check_noexec.c index e62869e173..4e0a402e84 100644 --- a/src/regress/noexec/check_noexec.c +++ b/src/regress/noexec/check_noexec.c @@ -39,6 +39,7 @@ #include "sudo_compat.h" #include "sudo_fatal.h" #include "sudo_util.h" +#include "sudo_queue.h" #include "sudo_exec.h" static bool verbose; diff --git a/src/sudo_exec.h b/src/sudo_exec.h index b8a8bcff20..819957e9e7 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -26,6 +26,13 @@ # define MSG_WAITALL 0 #endif +/* + * Linux-specific wait flag used with ptrace(2). + */ +#ifndef __WALL +# define __WALL 0 +#endif + /* * Some older systems support siginfo but predate SI_USER. */ @@ -35,8 +42,66 @@ # define USER_SIGNALED(_info) ((_info) != NULL && (_info)->si_code <= 0) #endif +/* Values for ttymode. */ +#define TERM_COOKED 0 +#define TERM_RAW 1 + +struct command_details; +struct command_status; +struct sudo_event_base; +struct stat; + +/* + * Closure passed to I/O event callbacks. + */ +struct exec_closure { + struct command_details *details; + struct sudo_event_base *evbase; + struct sudo_event *backchannel_event; + struct sudo_event *fwdchannel_event; + struct sudo_event *sigint_event; + struct sudo_event *sigquit_event; + struct sudo_event *sigtstp_event; + struct sudo_event *sigterm_event; + struct sudo_event *sighup_event; + struct sudo_event *sigalrm_event; + struct sudo_event *sigpipe_event; + struct sudo_event *sigusr1_event; + struct sudo_event *sigusr2_event; + struct sudo_event *sigchld_event; + struct sudo_event *sigcont_event; + struct sudo_event *siginfo_event; + struct sudo_event *sigwinch_event; + struct command_status *cstat; + void *intercept; + pid_t monitor_pid; + pid_t cmnd_pid; + pid_t ppgrp; + short rows; + short cols; +}; + /* - * Indices into io_fds[] when running a command in a pty. + * I/O buffer with associated read/write events and a logging action. + * Used to, e.g. pass data from the pty to the user's terminal + * and any I/O logging plugins. + */ +struct io_buffer; +typedef bool (*sudo_io_action_t)(const char *, unsigned int, struct io_buffer *); +struct io_buffer { + SLIST_ENTRY(io_buffer) entries; + struct exec_closure *ec; + struct sudo_event *revent; + struct sudo_event *wevent; + sudo_io_action_t action; + int len; /* buffer length (how much produced) */ + int off; /* write position (how much already consumed) */ + char buf[64 * 1024]; +}; +SLIST_HEAD(io_buffer_list, io_buffer); + +/* + * Indices into io_fds[] when logging I/O. */ #define SFD_STDIN 0 #define SFD_STDOUT 1 @@ -45,6 +110,9 @@ #define SFD_FOLLOWER 4 #define SFD_USERTTY 5 +/* Evaluates to true if the event has /dev/tty as its fd. */ +#define USERTTY_EVENT(_ev) (sudo_ev_get_fd((_ev)) == io_fds[SFD_USERTTY]) + /* * Special values to indicate whether continuing in foreground or background. */ @@ -104,18 +172,11 @@ union sudo_token_un { # endif /* HAVE_DECL_SECCOMP_MODE_FILTER */ #endif /* _PATH_SUDO_INTERCEPT && __linux__ */ -/* - * Symbols shared between exec.c, exec_nopty.c, exec_pty.c and exec_monitor.c - */ -struct command_details; -struct command_status; -struct sudo_event_base; -struct stat; - /* exec.c */ void exec_cmnd(struct command_details *details, sigset_t *mask, int intercept_fd, int errfd); void terminate_command(pid_t pid, bool use_pgrp); bool sudo_terminated(struct command_status *cstat); +void free_exec_closure(struct exec_closure *ec); /* exec_common.c */ int sudo_execve(int fd, const char *path, char *const argv[], char *envp[], int intercept_fd, int flags); @@ -126,6 +187,24 @@ char **enable_monitor(char *envp[], const char *dso); void *intercept_setup(int fd, struct sudo_event_base *evbase, struct command_details *details); void intercept_cleanup(void); +/* exec_iolog.c */ +bool log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob); +bool log_stdin(const char *buf, unsigned int n, struct io_buffer *iob); +bool log_ttyout(const char *buf, unsigned int n, struct io_buffer *iob); +bool log_stdout(const char *buf, unsigned int n, struct io_buffer *iob); +bool log_stderr(const char *buf, unsigned int n, struct io_buffer *iob); +void log_suspend(struct exec_closure *ec, int signo); +void log_winchange(struct exec_closure *ec, unsigned int rows, unsigned int cols); +void io_buf_new(int rfd, int wfd, bool (*action)(const char *, unsigned int, struct io_buffer *), void (*read_cb)(int fd, int what, void *v), void (*write_cb)(int fd, int what, void *v), struct exec_closure *ec, struct io_buffer_list *head); +int safe_close(int fd); +void ev_free_by_fd(struct sudo_event_base *evbase, int fd); +void free_io_bufs(void); +void add_io_events(struct sudo_event_base *evbase); +void del_io_events(bool nonblocking); +void init_ttyblock(void); +extern struct io_buffer_list iobufs; +extern int ttymode; + /* exec_nopty.c */ void exec_nopty(struct command_details *details, struct command_status *cstat); diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index 9a21fefc25..d28c00184e 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -51,8 +51,8 @@ #include "sudo_compat.h" #include "sudo_conf.h" #include "sudo_debug.h" -#include "sudo_fatal.h" #include "sudo_exec.h" +#include "sudo_fatal.h" #include "sudo_gettext.h" #include "sudo_util.h" #include "intercept.pb-c.h" From 87b7209ebb6dcee889562305842fde75bbf26092 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 27 Sep 2022 13:46:55 -0600 Subject: [PATCH 139/186] Add support for logging stdin/stdout/stderr in the non-pty exec path. If we are logging I/O but not terminal input/output (either because no terminal is present or because that is what the plugin requested), the non-pty exec path is now taken. --- docs/sudoers.man.in | 11 +- docs/sudoers.mdoc.in | 11 +- src/exec.c | 10 +- src/exec_nopty.c | 273 +++++++++++++++++++++++++++- src/exec_pty.c | 10 +- src/regress/intercept/test_ptrace.c | 2 +- src/sudo_exec.h | 2 +- src/suspend_nopty.c | 10 +- 8 files changed, 292 insertions(+), 37 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index abe22b5af4..6f5818cb13 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "September 20, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "September 27, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -3135,8 +3135,7 @@ This setting is only supported by version 1.9.0 or higher. log_stderr If set, \fBsudo\fR -will run the command in a pseudo-terminal and log the standard error -if it is not connected to the user's terminal. +will log the standard error if it is not connected to the user's terminal. This can be used to log output to a pipe or redirected to a file. This flag is \fIoff\fR @@ -3149,8 +3148,7 @@ command tag is set. log_stdin If set, \fBsudo\fR -will run the command in a pseudo-terminal and log the standard input -if it is not connected to the user's terminal. +will log the standard input if it is not connected to the user's terminal. This can be used to log input from a pipe or redirected from a file. This flag is \fIoff\fR @@ -3163,8 +3161,7 @@ command tag is set. log_stdout If set, \fBsudo\fR -will run the command in a pseudo-terminal and log the standard output -if it is not connected to the user's terminal. +will log the standard output if it is not connected to the user's terminal. This can be used to log output to a pipe or redirected to a file. This flag is \fIoff\fR diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 4aeb920043..911b69afce 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd September 20, 2022 +.Dd September 27, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -2963,8 +2963,7 @@ This setting is only supported by version 1.9.0 or higher. .It log_stderr If set, .Nm sudo -will run the command in a pseudo-terminal and log the standard error -if it is not connected to the user's terminal. +will log the standard error if it is not connected to the user's terminal. This can be used to log output to a pipe or redirected to a file. This flag is .Em off @@ -2976,8 +2975,7 @@ command tag is set. .It log_stdin If set, .Nm sudo -will run the command in a pseudo-terminal and log the standard input -if it is not connected to the user's terminal. +will log the standard input if it is not connected to the user's terminal. This can be used to log input from a pipe or redirected from a file. This flag is .Em off @@ -2989,8 +2987,7 @@ command tag is set. .It log_stdout If set, .Nm sudo -will run the command in a pseudo-terminal and log the standard output -if it is not connected to the user's terminal. +will log the standard output if it is not connected to the user's terminal. This can be used to log output to a pipe or redirected to a file. This flag is .Em off diff --git a/src/exec.c b/src/exec.c index 9d90038959..f8856b4262 100644 --- a/src/exec.c +++ b/src/exec.c @@ -360,9 +360,6 @@ sudo_terminated(struct command_status *cstat) debug_return_bool(false); } -#if SUDO_API_VERSION != SUDO_API_MKVERSION(1, 20) -# error "Update sudo_needs_pty() after changing the plugin API" -#endif static bool sudo_needs_pty(struct command_details *details) { @@ -373,12 +370,7 @@ sudo_needs_pty(struct command_details *details) TAILQ_FOREACH(plugin, &io_plugins, entries) { if (plugin->u.io->log_ttyin != NULL || - plugin->u.io->log_ttyout != NULL || - plugin->u.io->log_stdin != NULL || - plugin->u.io->log_stdout != NULL || - plugin->u.io->log_stderr != NULL || - plugin->u.io->change_winsize != NULL || - plugin->u.io->log_suspend != NULL) + plugin->u.io->log_ttyout != NULL) return true; } return false; diff --git a/src/exec_nopty.c b/src/exec_nopty.c index 29b4d9a4e3..9466085355 100644 --- a/src/exec_nopty.c +++ b/src/exec_nopty.c @@ -23,8 +23,10 @@ #include -#include +#include #include +#include +#include #if defined(HAVE_STDINT_H) # include @@ -46,6 +48,27 @@ static void handle_sigchld_nopty(struct exec_closure *ec); +/* + * Handle window size change events. + */ +static void +handle_sigwinch(struct exec_closure *ec, int fd) +{ + struct winsize wsize; + debug_decl(handle_sigwinch, SUDO_DEBUG_EXEC); + + if (fd != -1 && ioctl(fd, TIOCGWINSZ, &wsize) == 0) { + if (wsize.ws_row != ec->rows || wsize.ws_col != ec->cols) { + /* Log window change event. */ + log_winchange(ec, wsize.ws_row, wsize.ws_col); + + /* Update rows/cols. */ + ec->rows = wsize.ws_row; + ec->cols = wsize.ws_col; + } + } +} + /* Note: this is basically the same as mon_errpipe_cb() in exec_monitor.c */ static void errpipe_cb(int fd, int what, void *v) @@ -117,6 +140,9 @@ signal_cb_nopty(int signo, int what, void *v) sudo_ev_loopexit(ec->evbase); } debug_return; + case SIGWINCH: + handle_sigwinch(ec, io_fds[SFD_USERTTY]); + FALLTHROUGH; #ifdef SIGINFO case SIGINFO: #endif @@ -186,6 +212,8 @@ fill_exec_closure(struct exec_closure *ec, ec->ppgrp = getpgrp(); ec->cstat = cstat; ec->details = details; + ec->rows = user_details.ts_rows; + ec->cols = user_details.ts_cols; /* Setup event base and events. */ ec->evbase = details->evbase; @@ -287,22 +315,222 @@ fill_exec_closure(struct exec_closure *ec, sudo_fatal("%s", U_("unable to add event to queue")); #endif + ec->sigwinch_event = sudo_ev_alloc(SIGWINCH, + SUDO_EV_SIGINFO, signal_cb_nopty, ec); + if (ec->sigwinch_event == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + if (sudo_ev_add(ec->evbase, ec->sigwinch_event, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + /* Set the default event base. */ sudo_ev_base_setdef(ec->evbase); debug_return; } +/* + * Read an iobuf that is ready. + */ +static void +read_callback(int fd, int what, void *v) +{ + struct io_buffer *iob = v; + struct sudo_event_base *evbase = sudo_ev_get_base(iob->revent); + ssize_t n; + debug_decl(read_callback, SUDO_DEBUG_EXEC); + + n = read(fd, iob->buf + iob->len, sizeof(iob->buf) - iob->len); + switch (n) { + case -1: + if (errno == EAGAIN || errno == EINTR) { + /* Not an error, retry later. */ + break; + } + /* Treat read error as fatal and close the fd. */ + sudo_debug_printf(SUDO_DEBUG_ERROR, + "error reading fd %d: %s", fd, strerror(errno)); + FALLTHROUGH; + case 0: + /* got EOF */ + if (n == 0) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "read EOF from fd %d", fd); + } + safe_close(fd); + ev_free_by_fd(evbase, fd); + /* If writer already consumed the buffer, close it too. */ + if (iob->wevent != NULL && iob->off == iob->len) { + safe_close(sudo_ev_get_fd(iob->wevent)); + ev_free_by_fd(evbase, sudo_ev_get_fd(iob->wevent)); + iob->off = iob->len = 0; + } + break; + default: + sudo_debug_printf(SUDO_DEBUG_INFO, + "read %zd bytes from fd %d", n, fd); + if (!iob->action(iob->buf + iob->len, n, iob)) { + terminate_command(iob->ec->cmnd_pid, true); + iob->ec->cmnd_pid = -1; + } + iob->len += n; + /* Disable reader if buffer is full. */ + if (iob->len == sizeof(iob->buf)) + sudo_ev_del(evbase, iob->revent); + /* Enable writer now that there is new data in the buffer. */ + if (iob->wevent != NULL) { + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + } + break; + } + + debug_return; +} + +/* + * Write an iobuf that is ready. + */ +static void +write_callback(int fd, int what, void *v) +{ + struct io_buffer *iob = v; + struct sudo_event_base *evbase = sudo_ev_get_base(iob->wevent); + ssize_t n; + debug_decl(write_callback, SUDO_DEBUG_EXEC); + + n = write(fd, iob->buf + iob->off, iob->len - iob->off); + if (n == -1) { + switch (errno) { + case EPIPE: + case EBADF: + /* other end of pipe closed */ + sudo_debug_printf(SUDO_DEBUG_INFO, + "unable to write %d bytes to fd %d", + iob->len - iob->off, fd); + /* Close reader if there is one. */ + if (iob->revent != NULL) { + safe_close(sudo_ev_get_fd(iob->revent)); + ev_free_by_fd(evbase, sudo_ev_get_fd(iob->revent)); + } + safe_close(fd); + ev_free_by_fd(evbase, fd); + break; + case EINTR: + case EAGAIN: + /* Not an error, retry later. */ + break; + default: + /* XXX - need a way to distinguish non-exec error. */ + iob->ec->cstat->type = CMD_ERRNO; + iob->ec->cstat->val = errno; + sudo_debug_printf(SUDO_DEBUG_ERROR, + "error writing fd %d: %s", fd, strerror(errno)); + sudo_ev_loopbreak(evbase); + break; + } + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, + "wrote %zd bytes to fd %d", n, fd); + iob->off += n; + /* Disable writer and reset the buffer if fully consumed. */ + if (iob->off == iob->len) { + iob->off = iob->len = 0; + sudo_ev_del(evbase, iob->wevent); + /* Forward the EOF from reader to writer. */ + if (iob->revent == NULL) { + safe_close(fd); + ev_free_by_fd(evbase, fd); + } + } + /* Enable reader if buffer is not full. */ + if (iob->revent != NULL && iob->len != sizeof(iob->buf)) { + if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) + sudo_fatal("%s", U_("unable to add event to queue")); + } + } + + debug_return; +} + +/* + * If std{in,out,err} are not connected to a terminal, interpose + * outselves using a pipe. Fills in io_pipe[][]. + */ +static void +interpose_pipes(struct exec_closure *ec, int io_pipe[3][2]) +{ + bool interpose[3] = { false, false, false }; + struct plugin_container *plugin; + bool want_winch = false; + debug_decl(interpose_pipes, SUDO_DEBUG_EXEC); + + /* + * Determine whether any of std{in,out,err} or window size changes + * should be logged. + */ + TAILQ_FOREACH(plugin, &io_plugins, entries) { + if (plugin->u.io->log_stdin) + interpose[STDIN_FILENO] = true; + if (plugin->u.io->log_stdout) + interpose[STDOUT_FILENO] = true; + if (plugin->u.io->log_stderr) + interpose[STDERR_FILENO] = true; + if (plugin->u.io->version >= SUDO_API_MKVERSION(1, 12)) { + if (plugin->u.io->change_winsize) + want_winch = true; + } + } + + /* + * If stdin, stdout or stderr is not a tty and logging is enabled, + * use a pipe to interpose ourselves. + */ + if (interpose[STDIN_FILENO]) { + if (!isatty(STDIN_FILENO)) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "stdin not a tty, creating a pipe"); + if (pipe2(io_pipe[STDIN_FILENO], O_CLOEXEC) != 0) + sudo_fatal("%s", U_("unable to create pipe")); + io_buf_new(STDIN_FILENO, io_pipe[STDIN_FILENO][1], + log_stdin, read_callback, write_callback, ec, &iobufs); + } + } + if (interpose[STDOUT_FILENO]) { + if (!isatty(STDOUT_FILENO)) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "stdout not a tty, creating a pipe"); + if (pipe2(io_pipe[STDOUT_FILENO], O_CLOEXEC) != 0) + sudo_fatal("%s", U_("unable to create pipe")); + io_buf_new(io_pipe[STDOUT_FILENO][0], STDOUT_FILENO, + log_stdout, read_callback, write_callback, ec, &iobufs); + } + } + if (interpose[STDERR_FILENO]) { + if (!isatty(STDERR_FILENO)) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "stderr not a tty, creating a pipe"); + if (pipe2(io_pipe[STDERR_FILENO], O_CLOEXEC) != 0) + sudo_fatal("%s", U_("unable to create pipe")); + io_buf_new(io_pipe[STDERR_FILENO][0], STDERR_FILENO, + log_stderr, read_callback, write_callback, ec, &iobufs); + } + } + if (want_winch) { + /* Need /dev/tty for SIGWINCH handling. */ + io_fds[SFD_USERTTY] = open(_PATH_TTY, O_RDWR); + } +} + /* * Execute a command and wait for it to finish. */ void exec_nopty(struct command_details *details, struct command_status *cstat) { + int io_pipe[3][2] = { { -1, -1 }, { -1, -1 }, { -1, -1 } }; + int errpipe[2], intercept_sv[2] = { -1, -1 }; struct exec_closure ec = { 0 }; - int intercept_sv[2] = { -1, -1 }; sigset_t set, oset; - int errpipe[2]; debug_decl(exec_nopty, SUDO_DEBUG_EXEC); /* @@ -329,6 +557,9 @@ exec_nopty(struct command_details *details, struct command_status *cstat) } } + /* Interpose std{in,out,err} with pipes if logging I/O. */ + interpose_pipes(&ec, io_pipe); + /* * Block signals until we have our handlers setup in the parent so * we don't miss SIGCHLD if the command exits immediately. @@ -363,6 +594,25 @@ exec_nopty(struct command_details *details, struct command_status *cstat) close(errpipe[0]); if (intercept_sv[0] != -1) close(intercept_sv[0]); + /* Replace stdin/stdout/stderr with pipes as needed and exec. */ + if (io_pipe[STDIN_FILENO][0] != -1) { + if (dup3(io_pipe[STDIN_FILENO][0], STDIN_FILENO, 0) == -1) + sudo_fatal("dup3"); + close(io_pipe[STDIN_FILENO][0]); + close(io_pipe[STDIN_FILENO][1]); + } + if (io_pipe[STDOUT_FILENO][0] != -1) { + if (dup3(io_pipe[STDOUT_FILENO][1], STDOUT_FILENO, 0) == -1) + sudo_fatal("dup3"); + close(io_pipe[STDOUT_FILENO][0]); + close(io_pipe[STDOUT_FILENO][1]); + } + if (io_pipe[STDERR_FILENO][0] != -1) { + if (dup3(io_pipe[STDERR_FILENO][1], STDERR_FILENO, 0) == -1) + sudo_fatal("dup3"); + close(io_pipe[STDERR_FILENO][0]); + close(io_pipe[STDERR_FILENO][1]); + } exec_cmnd(details, &oset, intercept_sv[1], errpipe[1]); while (write(errpipe[1], &errno, sizeof(int)) == -1) { if (errno != EINTR) @@ -373,6 +623,13 @@ exec_nopty(struct command_details *details, struct command_status *cstat) } sudo_debug_printf(SUDO_DEBUG_INFO, "executed %s, pid %d", details->command, (int)ec.cmnd_pid); + /* Close the other end of the pipes and socketpairs. */ + if (io_pipe[STDIN_FILENO][0] != -1) + close(io_pipe[STDIN_FILENO][0]); + if (io_pipe[STDOUT_FILENO][1] != -1) + close(io_pipe[STDOUT_FILENO][1]); + if (io_pipe[STDERR_FILENO][1] != -1) + close(io_pipe[STDERR_FILENO][1]); close(errpipe[1]); if (intercept_sv[1] != -1) close(intercept_sv[1]); @@ -412,6 +669,9 @@ exec_nopty(struct command_details *details, struct command_status *cstat) terminate_command(ec.cmnd_pid, true); } + /* Enable any I/O log events. */ + add_io_events(ec.evbase); + /* Restore signal mask now that signal handlers are setup. */ sigprocmask(SIG_SETMASK, &oset, NULL); @@ -436,8 +696,13 @@ exec_nopty(struct command_details *details, struct command_status *cstat) } #endif + /* Flush any remaining output. */ + del_io_events(true); + /* Free things up. */ + free_io_bufs(); free_exec_closure(&ec); + debug_return; } @@ -488,7 +753,7 @@ handle_sigchld_nopty(struct exec_closure *ec) /* If the main command is suspended, suspend sudo too. */ if (pid == ec->cmnd_pid) - suspend_sudo_nopty(signo, ec->ppgrp, ec->cmnd_pid); + suspend_sudo_nopty(ec, signo, ec->ppgrp, ec->cmnd_pid); } else { if (WIFSIGNALED(status)) { if (sig2str(WTERMSIG(status), signame) == -1) { diff --git a/src/exec_pty.c b/src/exec_pty.c index 44621e90ab..d8235fd857 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -980,14 +980,10 @@ exec_pty(struct command_details *details, struct command_status *cstat) debug_decl(exec_pty, SUDO_DEBUG_EXEC); /* - * Allocate a pty. + * Allocate a pty if sudo is running in a terminal. */ - if (!pty_setup(details, user_details.tty)) { - if (TAILQ_EMPTY(&io_plugins)) { - /* Not logging I/O and didn't allocate a pty. */ - debug_return_bool(false); - } - } + if (!pty_setup(details, user_details.tty)) + debug_return_bool(false); /* * We communicate with the monitor over a bi-directional pair of sockets. diff --git a/src/regress/intercept/test_ptrace.c b/src/regress/intercept/test_ptrace.c index 47ff22b639..e31e3c0476 100644 --- a/src/regress/intercept/test_ptrace.c +++ b/src/regress/intercept/test_ptrace.c @@ -219,7 +219,7 @@ main(int argc, char *argv[]) } else if (WIFSTOPPED(status)) { if (exec_ptrace_stopped(pid, status, &closure)) { if (pid == child) { - suspend_sudo_nopty(WSTOPSIG(status), ppgrp, child); + suspend_sudo_nopty(NULL, WSTOPSIG(status), ppgrp, child); if (kill(child, SIGCONT) != 0) sudo_warn("kill(%d, SIGCONT)", (int)child); } diff --git a/src/sudo_exec.h b/src/sudo_exec.h index 819957e9e7..a75d6f17f0 100644 --- a/src/sudo_exec.h +++ b/src/sudo_exec.h @@ -232,6 +232,6 @@ bool set_exec_filter(void); int exec_ptrace_seize(pid_t child); /* suspend_nopty.c */ -void suspend_sudo_nopty(int signo, pid_t ppgrp, pid_t cmnd_pid); +void suspend_sudo_nopty(struct exec_closure *ec, int signo, pid_t ppgrp, pid_t cmnd_pid); #endif /* SUDO_EXEC_H */ diff --git a/src/suspend_nopty.c b/src/suspend_nopty.c index babeae29ba..896b7e2fa3 100644 --- a/src/suspend_nopty.c +++ b/src/suspend_nopty.c @@ -34,7 +34,8 @@ #include "sudo_exec.h" void -suspend_sudo_nopty(int signo, pid_t ppgrp, pid_t cmnd_pid) +suspend_sudo_nopty(struct exec_closure *ec, int signo, pid_t ppgrp, + pid_t cmnd_pid) { struct sigaction sa, osa; pid_t saved_pgrp = -1; @@ -80,6 +81,9 @@ suspend_sudo_nopty(int signo, pid_t ppgrp, pid_t cmnd_pid) } } + /* Log the suspend event. */ + log_suspend(ec, signo); + if (signo == SIGTSTP) { memset(&sa, 0, sizeof(sa)); sigemptyset(&sa.sa_mask); @@ -94,6 +98,10 @@ suspend_sudo_nopty(int signo, pid_t ppgrp, pid_t cmnd_pid) if (sudo_sigaction(SIGTSTP, &osa, NULL) != 0) sudo_warn(U_("unable to restore handler for signal %d"), SIGTSTP); } + + /* Log the resume event. */ + log_suspend(ec, SIGCONT); + if (saved_pgrp != -1) { /* * On resume, restore foreground process group, if different. From f360a8006c4ef8971edb8b4a48746373407c088c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 27 Sep 2022 14:16:03 -0600 Subject: [PATCH 140/186] Regen dependencies --- plugins/python/Makefile.in | 10 ++++++---- src/Makefile.in | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/plugins/python/Makefile.in b/plugins/python/Makefile.in index 997eb479f1..1510d22e7d 100644 --- a/plugins/python/Makefile.in +++ b/plugins/python/Makefile.in @@ -277,11 +277,13 @@ check_python_examples.i: $(srcdir)/regress/check_python_examples.c \ $(CC) -E -o $@ $(CPPFLAGS) $< check_python_examples.plog: check_python_examples.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/check_python_examples.c --i-file $< --output-file $@ -iohelpers.o: $(srcdir)/regress/iohelpers.c $(incdir)/sudo_compat.h \ - $(srcdir)/regress/iohelpers.h $(top_builddir)/config.h +iohelpers.o: $(srcdir)/regress/iohelpers.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(srcdir)/regress/iohelpers.h \ + $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/iohelpers.c -iohelpers.i: $(srcdir)/regress/iohelpers.c $(incdir)/sudo_compat.h \ - $(srcdir)/regress/iohelpers.h $(top_builddir)/config.h +iohelpers.i: $(srcdir)/regress/iohelpers.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(srcdir)/regress/iohelpers.h \ + $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< iohelpers.plog: iohelpers.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/iohelpers.c --i-file $< --output-file $@ diff --git a/src/Makefile.in b/src/Makefile.in index a3c6948838..aee91ca2e9 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -411,14 +411,14 @@ check_net_ifs.plog: check_net_ifs.i check_noexec.o: $(srcdir)/regress/noexec/check_noexec.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_util.h $(srcdir)/sudo_exec.h \ - $(top_builddir)/config.h + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/sudo_exec.h $(top_builddir)/config.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/noexec/check_noexec.c check_noexec.i: $(srcdir)/regress/noexec/check_noexec.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_util.h $(srcdir)/sudo_exec.h \ - $(top_builddir)/config.h + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/sudo_exec.h $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< check_noexec.plog: check_noexec.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/noexec/check_noexec.c --i-file $< --output-file $@ From cf95f8d5aefc63cd49c81a1ccd93ec7145c19c47 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 27 Sep 2022 14:57:56 -0600 Subject: [PATCH 141/186] HP-UX has struct winsize in termios.h. --- src/exec_nopty.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/exec_nopty.c b/src/exec_nopty.c index 9466085355..690dca68b0 100644 --- a/src/exec_nopty.c +++ b/src/exec_nopty.c @@ -40,6 +40,7 @@ #include #include #include +#include /* for struct winsize on HP-UX */ #include "sudo.h" #include "sudo_exec.h" From 91504236765927f5eba2863ed9848645dddec33c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 27 Sep 2022 15:30:02 -0600 Subject: [PATCH 142/186] Don't send ttyname to log server if it is NULL. Otherwise the log server will reject the AcceptMessage because a NULL string is not allowed. --- plugins/sudoers/log_client.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index 818218a3d6..c926ddbe75 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -909,7 +909,9 @@ fmt_info_messages(struct client_closure *closure, struct eventlog *evlog, fill_str("submithost", evlog->submithost); /* TODO - submituid */ fill_str("submituser", evlog->submituser); - fill_str("ttyname", evlog->ttyname); + if (evlog->ttyname != NULL) { + fill_str("ttyname", evlog->ttyname); + } /* Free unused structs. */ while (info_msgs_size > n) From e6f2ad0ed6fd28e42915260352cd0a897bc2c0cc Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 28 Sep 2022 08:47:25 -0600 Subject: [PATCH 143/186] Add missing NULL checks for mandatory fields in protobuf messages. Also no longer reject an InfoMessage with an unknown value_case, just log and ignore it. --- logsrvd/iolog_writer.c | 154 ++++++++++++++--------------------- logsrvd/logsrvd.c | 33 +++++++- logsrvd/logsrvd_local.c | 19 ++++- plugins/sudoers/log_client.c | 4 +- 4 files changed, 111 insertions(+), 99 deletions(-) diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 6fc57f9695..0ea661d6d8 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -54,22 +54,28 @@ #include "logsrvd.h" -static inline bool -has_numval(InfoMessage *info) -{ - return info->value_case == INFO_MESSAGE__VALUE_NUMVAL; -} - -static inline bool -has_strval(InfoMessage *info) +static bool +type_matches(InfoMessage *info, const char *source, + InfoMessage__ValueCase value_case) { - return info->value_case == INFO_MESSAGE__VALUE_STRVAL; -} + const void *val = info->u.strval; /* same for strlistval */ + debug_decl(type_matches, SUDO_DEBUG_UTIL); -static inline bool -has_strlistval(InfoMessage *info) -{ - return info->value_case == INFO_MESSAGE__VALUE_STRLISTVAL; + if (info->key == NULL) { + sudo_warnx(U_("%s: protocol error: NULL key"), source); + debug_return_bool(false); + } + if (info->value_case != value_case) { + sudo_warnx(U_("%s: protocol error: wrong type for %s"), + source, info->key); + debug_return_bool(false); + } + if (value_case != INFO_MESSAGE__VALUE_NUMVAL && val == NULL) { + sudo_warnx(U_("%s: protocol error: NULL value found in %s"), + source, info->key); + debug_return_bool(false); + } + debug_return_bool(true); } /* @@ -159,210 +165,170 @@ evlog_new(TimeSpec *submit_time, InfoMessage **info_msgs, size_t infolen, switch (key[0]) { case 'c': if (strcmp(key, "columns") == 0) { - if (!has_numval(info)) { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "columns"); - } else if (info->u.numval <= 0 || info->u.numval > INT_MAX) { - errno = ERANGE; - sudo_warn(U_("%s: %s"), source, "columns"); - } else { - evlog->columns = info->u.numval; + if (type_matches(info, source, INFO_MESSAGE__VALUE_NUMVAL)) { + if (info->u.numval <= 0 || info->u.numval > INT_MAX) { + errno = ERANGE; + sudo_warn(U_("%s: %s"), source, "columns"); + } else { + evlog->columns = info->u.numval; + } } continue; } if (strcmp(key, "command") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->command = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "command"); } continue; } break; case 'l': if (strcmp(key, "lines") == 0) { - if (!has_numval(info)) { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "lines"); - } else if (info->u.numval <= 0 || info->u.numval > INT_MAX) { - errno = ERANGE; - sudo_warn(U_("%s: %s"), source, "lines"); - } else { - evlog->lines = info->u.numval; + if (type_matches(info, source, INFO_MESSAGE__VALUE_NUMVAL)) { + if (info->u.numval <= 0 || info->u.numval > INT_MAX) { + errno = ERANGE; + sudo_warn(U_("%s: %s"), source, "lines"); + } else { + evlog->lines = info->u.numval; + } } continue; } break; case 'r': if (strcmp(key, "runargv") == 0) { - if (has_strlistval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRLISTVAL)) { evlog->argv = strlist_copy(info->u.strlistval); if (evlog->argv == NULL) goto bad; - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "runargv"); } continue; } if (strcmp(key, "runchroot") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->runchroot = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "runchroot"); } continue; } if (strcmp(key, "runcwd") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->runcwd = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "runcwd"); } continue; } if (strcmp(key, "runenv") == 0) { - if (has_strlistval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRLISTVAL)) { evlog->envp = strlist_copy(info->u.strlistval); if (evlog->envp == NULL) goto bad; - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "runenv"); } continue; } if (strcmp(key, "rungid") == 0) { - if (!has_numval(info)) { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "rungid"); - } else if (info->u.numval < 0 || info->u.numval > INT_MAX) { - errno = ERANGE; - sudo_warn(U_("%s: %s"), source, "rungid"); - } else { - evlog->rungid = info->u.numval; + if (type_matches(info, source, INFO_MESSAGE__VALUE_NUMVAL)) { + if (info->u.numval < 0 || info->u.numval > INT_MAX) { + errno = ERANGE; + sudo_warn(U_("%s: %s"), source, "rungid"); + } else { + evlog->rungid = info->u.numval; + } } continue; } if (strcmp(key, "rungroup") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->rungroup = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "rungroup"); } continue; } if (strcmp(key, "runuid") == 0) { - if (!has_numval(info)) { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "runuid"); - } else if (info->u.numval < 0 || info->u.numval > INT_MAX) { - errno = ERANGE; - sudo_warn(U_("%s: %s"), source, "runuid"); - } else { - evlog->runuid = info->u.numval; + if (type_matches(info, source, INFO_MESSAGE__VALUE_NUMVAL)) { + if (info->u.numval < 0 || info->u.numval > INT_MAX) { + errno = ERANGE; + sudo_warn(U_("%s: %s"), source, "runuid"); + } else { + evlog->runuid = info->u.numval; + } } continue; } if (strcmp(key, "runuser") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->runuser = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "runuser"); } continue; } break; case 's': if (strcmp(key, "submitcwd") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->cwd = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "submitcwd"); } continue; } if (strcmp(key, "submitgroup") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->submitgroup = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "submitgroup"); } continue; } if (strcmp(key, "submithost") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->submithost = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "submithost"); } continue; } if (strcmp(key, "submituser") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->submituser = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "submituser"); } continue; } break; case 't': if (strcmp(key, "ttyname") == 0) { - if (has_strval(info)) { + if (type_matches(info, source, INFO_MESSAGE__VALUE_STRVAL)) { if ((evlog->ttyname = strdup(info->u.strval)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; } - } else { - sudo_warnx(U_("%s: protocol error: wrong type for %s"), - source, "ttyname"); } continue; } diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index 7c66defc6c..a09b7b6976 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -517,6 +517,12 @@ handle_exit(ExitMessage *msg, uint8_t *buf, size_t len, debug_return_bool(false); } + /* Check that message is valid. */ + if (msg->run_time == NULL) { + sudo_warnx(U_("%s: %s"), source, U_("invalid ExitMessage")); + closure->errstr = _("invalid ExitMessage"); + debug_return_bool(false); + } sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received ExitMessage from %s", source, __func__); @@ -564,6 +570,13 @@ handle_restart(RestartMessage *msg, uint8_t *buf, size_t len, closure->errstr = _("state machine error"); debug_return_bool(false); } + + /* Check that message is valid. */ + if (msg->log_id == NULL || msg->resume_point == NULL) { + sudo_warnx(U_("%s: %s"), source, U_("invalid RestartMessage")); + closure->errstr = _("invalid RestartMessage"); + debug_return_bool(false); + } sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received RestartMessage for %s from %s", __func__, msg->log_id, source); @@ -642,6 +655,12 @@ handle_iobuf(int iofd, IoBuffer *iobuf, uint8_t *buf, size_t len, debug_return_bool(false); } + /* Check that message is valid. */ + if (iobuf->delay == NULL) { + sudo_warnx(U_("%s: %s"), source, U_("invalid IoBuffer")); + closure->errstr = _("invalid IoBuffer"); + debug_return_bool(false); + } sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received IoBuffer from %s", source, __func__); @@ -672,6 +691,12 @@ handle_winsize(ChangeWindowSize *msg, uint8_t *buf, size_t len, debug_return_bool(false); } + /* Check that message is valid. */ + if (msg->delay == NULL) { + sudo_warnx(U_("%s: %s"), source, U_("invalid ChangeWindowSize")); + closure->errstr = _("invalid ChangeWindowSize"); + debug_return_bool(false); + } sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received ChangeWindowSize from %s", source, __func__); @@ -702,6 +727,12 @@ handle_suspend(CommandSuspend *msg, uint8_t *buf, size_t len, debug_return_bool(false); } + /* Check that message is valid. */ + if (msg->delay == NULL || msg->signal == NULL) { + sudo_warnx(U_("%s: %s"), source, U_("invalid CommandSuspend")); + closure->errstr = _("invalid CommandSuspend"); + debug_return_bool(false); + } sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received CommandSuspend from %s", source, __func__); @@ -730,7 +761,7 @@ handle_client_hello(ClientHello *msg, uint8_t *buf, size_t len, sudo_debug_printf(SUDO_DEBUG_INFO, "%s: received ClientHello", __func__); sudo_debug_printf(SUDO_DEBUG_INFO, "%s: client ID %s", - __func__, msg->client_id); + __func__, msg->client_id ? msg->client_id : "unknown"); debug_return_bool(true); } diff --git a/logsrvd/logsrvd_local.c b/logsrvd/logsrvd_local.c index 2cbd5c82d1..2875c9db63 100644 --- a/logsrvd/logsrvd_local.c +++ b/logsrvd/logsrvd_local.c @@ -105,6 +105,11 @@ logsrvd_json_log_cb(struct json_container *json, void *v) goto bad; break; case INFO_MESSAGE__VALUE_STRVAL: + if (info->u.strval == NULL) { + sudo_warnx(U_("%s: protocol error: NULL value found in %s"), + "local", info->key); + break; + } json_value.type = JSON_STRING; json_value.u.string = info->u.strval; if (!sudo_json_add_value(json, info->key, &json_value)) @@ -114,9 +119,19 @@ logsrvd_json_log_cb(struct json_container *json, void *v) InfoMessage__StringList *strlist = info->u.strlistval; size_t n; + if (strlist == NULL) { + sudo_warnx(U_("%s: protocol error: NULL value found in %s"), + "local", info->key); + break; + } if (!sudo_json_open_array(json, info->key)) goto bad; for (n = 0; n < strlist->n_strings; n++) { + if (strlist->strings[n] == NULL) { + sudo_warnx(U_("%s: protocol error: NULL value found in %s"), + "local", info->key); + break; + } json_value.type = JSON_STRING; json_value.u.string = strlist->strings[n]; if (!sudo_json_add_value(json, NULL, &json_value)) @@ -127,9 +142,9 @@ logsrvd_json_log_cb(struct json_container *json, void *v) break; } default: - sudo_warnx(U_("unexpected type_case value %d in %s from %s"), + sudo_warnx(U_("unexpected value_case %d in %s from %s"), info->value_case, "InfoMessage", "local"); - goto bad; + break; } } debug_return_bool(true); diff --git a/plugins/sudoers/log_client.c b/plugins/sudoers/log_client.c index c926ddbe75..a53ffe4272 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -909,9 +909,9 @@ fmt_info_messages(struct client_closure *closure, struct eventlog *evlog, fill_str("submithost", evlog->submithost); /* TODO - submituid */ fill_str("submituser", evlog->submituser); - if (evlog->ttyname != NULL) { +// if (evlog->ttyname != NULL) { fill_str("ttyname", evlog->ttyname); - } + // } /* Free unused structs. */ while (info_msgs_size > n) From 865d3cd0bbbd9c36949c2b8a303110c645fc4f34 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 28 Sep 2022 09:05:29 -0600 Subject: [PATCH 144/186] Add support for NumberList stored in an InfoMessage. --- logsrvd/logsrvd_local.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/logsrvd/logsrvd_local.c b/logsrvd/logsrvd_local.c index 2875c9db63..a343d9f891 100644 --- a/logsrvd/logsrvd_local.c +++ b/logsrvd/logsrvd_local.c @@ -141,6 +141,27 @@ logsrvd_json_log_cb(struct json_container *json, void *v) goto bad; break; } + case INFO_MESSAGE__VALUE_NUMLISTVAL: { + InfoMessage__NumberList *numlist = info->u.numlistval; + size_t n; + + if (numlist == NULL) { + sudo_warnx(U_("%s: protocol error: NULL value found in %s"), + "local", info->key); + break; + } + if (!sudo_json_open_array(json, info->key)) + goto bad; + for (n = 0; n < numlist->n_numbers; n++) { + json_value.type = JSON_NUMBER; + json_value.u.number = numlist->numbers[n]; + if (!sudo_json_add_value(json, NULL, &json_value)) + goto bad; + } + if (!sudo_json_close_array(json)) + goto bad; + break; + } default: sudo_warnx(U_("unexpected value_case %d in %s from %s"), info->value_case, "InfoMessage", "local"); From 166e0e13bc0668f907a4d648915cc66ce6733085 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 28 Sep 2022 09:06:32 -0600 Subject: [PATCH 145/186] Change max user-ID and group-ID from INT_MAX to UINT_MAX. --- logsrvd/iolog_writer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 0ea661d6d8..400a68fade 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -238,7 +238,7 @@ evlog_new(TimeSpec *submit_time, InfoMessage **info_msgs, size_t infolen, } if (strcmp(key, "rungid") == 0) { if (type_matches(info, source, INFO_MESSAGE__VALUE_NUMVAL)) { - if (info->u.numval < 0 || info->u.numval > INT_MAX) { + if (info->u.numval < 0 || info->u.numval > UINT_MAX) { errno = ERANGE; sudo_warn(U_("%s: %s"), source, "rungid"); } else { @@ -259,7 +259,7 @@ evlog_new(TimeSpec *submit_time, InfoMessage **info_msgs, size_t infolen, } if (strcmp(key, "runuid") == 0) { if (type_matches(info, source, INFO_MESSAGE__VALUE_NUMVAL)) { - if (info->u.numval < 0 || info->u.numval > INT_MAX) { + if (info->u.numval < 0 || info->u.numval > UINT_MAX) { errno = ERANGE; sudo_warn(U_("%s: %s"), source, "runuid"); } else { From d2a13a815497efe9bcbaa1e6591a080a2ce21648 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 28 Sep 2022 16:39:19 -0600 Subject: [PATCH 146/186] Fix typos found by codespell 2.2.1. --- INSTALL.md | 2 +- etc/codespell.ignore | 2 ++ lib/eventlog/eventlog.c | 2 +- plugins/group_file/getgrent.c | 2 +- plugins/sudoers/cvtsudoers.c | 2 +- plugins/sudoers/tsgetgrpw.c | 4 ++-- plugins/sudoers/tsgetgrpw.h | 4 ++-- src/exec_nopty.c | 2 +- 8 files changed, 11 insertions(+), 9 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index e6a1231386..b7f74fd99c 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -320,7 +320,7 @@ Defaults are listed in brackets after the description. Adds the specified library (or libraries) to SUDO_LIBS and and VISUDO_LIBS so sudo will link against them. If the library doesn't start with "-l" or end in ".a" or ".o" a - "-l" will be pre-pended to it. Multiple libraries may be + "-l" will be prepended to it. Multiple libraries may be specified as long as they are space separated. --with-libtool=PATH diff --git a/etc/codespell.ignore b/etc/codespell.ignore index 1b9cc1ba9f..d242e622e2 100644 --- a/etc/codespell.ignore +++ b/etc/codespell.ignore @@ -12,3 +12,5 @@ thur toke vas wit +siz +clen diff --git a/lib/eventlog/eventlog.c b/lib/eventlog/eventlog.c index 5494a0950d..3d03294b9e 100644 --- a/lib/eventlog/eventlog.c +++ b/lib/eventlog/eventlog.c @@ -1004,7 +1004,7 @@ format_json(int event_type, struct eventlog_args *args, } /* - * Log a message to syslog, pre-pending the username and splitting the + * Log a message to syslog, prepending the username and splitting the * message into parts if it is longer than syslog_maxlen. */ static bool diff --git a/plugins/group_file/getgrent.c b/plugins/group_file/getgrent.c index 142fd39e16..efb74b25bf 100644 --- a/plugins/group_file/getgrent.c +++ b/plugins/group_file/getgrent.c @@ -22,7 +22,7 @@ */ /* - * Trivial replacements for the libc getgr{uid,nam}() routines. + * Trivial replacements for the libc getgrent() family of functions. */ #include diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index ca15cc9065..a6f17e9c8f 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -1384,7 +1384,7 @@ alias_prune_helper(struct sudoers_parse_tree *parse_tree, struct alias *a, { struct cvtsudoers_config *conf = v; - /* XXX - misue of these functions */ + /* XXX - misuse of these functions */ switch (a->type) { case USERALIAS: userlist_matches_filter(parse_tree, &a->members, conf); diff --git a/plugins/sudoers/tsgetgrpw.c b/plugins/sudoers/tsgetgrpw.c index 27439e97b0..481cb33708 100644 --- a/plugins/sudoers/tsgetgrpw.c +++ b/plugins/sudoers/tsgetgrpw.c @@ -23,8 +23,8 @@ */ /* - * Trivial replacements for the libc get{gr,pw}{uid,nam}() routines - * for use by testsudoers in the sudo test harness. + * Trivial replacements for the libc getgrent() and getpwent() family + * of functions for use by testsudoers in the sudo test harness. * We need our own since many platforms don't provide set{pw,gr}file(). */ diff --git a/plugins/sudoers/tsgetgrpw.h b/plugins/sudoers/tsgetgrpw.h index 62aa751c34..826189b392 100644 --- a/plugins/sudoers/tsgetgrpw.h +++ b/plugins/sudoers/tsgetgrpw.h @@ -17,8 +17,8 @@ */ /* - * Trivial replacements for the libc get{gr,pw}{uid,nam}() routines - * for use by testsudoers in the sudo test harness. + * Trivial replacements for the libc getgrent() and getpwent() family + * of functions for use by testsudoers in the sudo test harness. * We need our own since many platforms don't provide set{pw,gr}file(). */ diff --git a/src/exec_nopty.c b/src/exec_nopty.c index 690dca68b0..bd91e3ae6c 100644 --- a/src/exec_nopty.c +++ b/src/exec_nopty.c @@ -455,7 +455,7 @@ write_callback(int fd, int what, void *v) /* * If std{in,out,err} are not connected to a terminal, interpose - * outselves using a pipe. Fills in io_pipe[][]. + * ourselves using a pipe. Fills in io_pipe[][]. */ static void interpose_pipes(struct exec_closure *ec, int io_pipe[3][2]) From 6cd99d0b71287007267fcab29fbb5dd7036b0e2e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 29 Sep 2022 10:52:32 -0600 Subject: [PATCH 147/186] Improve the description of JSON output. --- docs/cvtsudoers.man.in | 148 +++++++++++++++++++++++++++++----------- docs/cvtsudoers.mdoc.in | 122 ++++++++++++++++++++++++--------- 2 files changed, 198 insertions(+), 72 deletions(-) diff --git a/docs/cvtsudoers.man.in b/docs/cvtsudoers.man.in index ded8f86ec4..2b5ac6b788 100644 --- a/docs/cvtsudoers.man.in +++ b/docs/cvtsudoers.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "CVTSUDOERS" "1" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" +.TH "CVTSUDOERS" "1" "September 29, 2022" "Sudo @PACKAGE_VERSION@" "General Commands Manual" .nh .if n .ad l .SH "NAME" @@ -537,7 +537,33 @@ An array of objects, each containing an array and an optional \fIBinding\fR array. -Each object contains a +.sp +The +\fIOptions\fR +array consists of one or more objects, each containing a +\(lqname:value\(rq +pair that corresponds to a +\fIsudoers\fR +\fIDefaults\fR +setting. +\fIOptions\fR +that operate on a list will also include an +\fIoperation\fR +entry in the object, with a value of +\(lqlist_assign\(rq +for +\(oq=\(cq, +\(lqlist_add\(rq +for +\(oq+=\(cq, +or +\(lqlist_remove\(rq +for +\(oq-=\(cq. +.sp +The optional +\fIBinding\fR +array consists of one or more objects, each containing a \(lqname:value\(rq pair and an optional \fInegated\fR @@ -547,13 +573,28 @@ If a is present, the setting will only take effect if one of the specified \fIcommand\fR, \fIhostname\fR, +\fInetgroup\fR, +\fInetworkaddr\fR, +\fInonunixgid\fR, +\fInonunixgroup\fR, \fIusergid\fR, \fIusergroup\fR, \fIuserid\fR, \fIusername\fR, or alias entries match. .sp -For example: +For example, the following +\fIsudoers\fR +entry: +.nf +.sp +.RS 6n +Defaults@somehost set_home, env_keep += DISPLAY +.RE +.fi +.RS 6n +.sp +converts to: .nf .sp .RS 6n @@ -563,24 +604,25 @@ For example: { "hostname": "somehost" } ], "Options": [ - { "set_home": true } + { "set_home": true }, + { + "operation": "list_add", + "env_keep": [ + "DISPLAY" + ] + } ] } ] .RE .fi -.RS 6n -.sp -will enable the -\fIset_home\fR -option when the local host name matches -\fIsomehost\fR. .RE .TP 6n User_Aliases A JSON object containing one or more \fIsudoers\fR -User_Alias entries where each named alias has as its value an array +\fIUser_Alias\fR +entries where each named alias has as its value an array containing one or more objects. Each object contains a \(lqname:value\(rq @@ -598,7 +640,18 @@ The name may be one of or \fIusername\fR. .sp -For example: +For example, the following +\fIsudoers\fR +entry: +.nf +.sp +.RS 6n +User_Alias SYSADMIN = will, %wheel, +admin +.RE +.fi +.RS 6n +.sp +converts to: .nf .sp .RS 6n @@ -611,23 +664,12 @@ For example: } .RE .fi -.RS 6n -.sp -will define a -\fIUser_Alias\fR -named SYSADMIN that contains the user -\(lqwill\(rq, -the Unix group -\(lqwheel\(rq, -and the netgroup -\(lqadmin\(rq. .RE .TP 6n Runas_Aliases A JSON object containing one or more \fIsudoers\fR -.TP 6n -Runas_Alias +\fIRunas_Alias\fR entries, where each named alias has as its value an array containing one or more objects. Each object contains a @@ -646,7 +688,18 @@ The name may be one of or \fIusername\fR. .sp -For example: +For example, the following +\fIsudoers\fR +entry: +.nf +.sp +.RS 6n +Runas_Alias DB = oracle, sybase : OP = root, operator +.RE +.fi +.RS 6n +.sp +converts to: .nf .sp .RS 6n @@ -662,14 +715,6 @@ For example: } .RE .fi -.RS 6n -.sp -will define two -\fIRunas_Alias\fR -entries: -\(lqDB\(rq -and -\(lqOP\(rq. .RE .TP 6n Host_Aliases @@ -690,7 +735,19 @@ The name may be one of or \fInetworkaddr\fR. .sp -For example: +For example, the following +\fIsudoers\fR +entries: +.nf +.sp +.RS 6n +Host_Alias DORMNET = 128.138.243.0, 128.138.204.0/24 +Host_Alias SERVERS = boulder, refuge +.RE +.fi +.RS 6n +.sp +convert to: .nf .sp .RS 6n @@ -706,6 +763,7 @@ For example: } .RE .fi +.RE .TP 6n Cmnd_Aliases A JSON object containing one or more @@ -722,7 +780,20 @@ The name may be either another \fIcmndalias\fR or a \fIcommand\fR. -For example: +For example, the following +\fIsudoers\fR +entries: +.nf +.sp +.RS 6n +Cmnd_Alias SHELLS = /bin/bash, /bin/csh, /bin/sh, /bin/zsh +Cmnd_Alias VIPW = /usr/bin/chpass, /usr/bin/chfn, /usr/bin/chsh, \e + /usr/bin/passwd, /usr/sbin/vigr, /usr/sbin/vipw +.RE +.fi +.RS 6n +.sp +convert to: .nf .sp .RS 6n @@ -744,6 +815,7 @@ For example: } .RE .fi +.RE .TP 6n User_Specs A JSON array containing one or more objects, each representing a @@ -1029,12 +1101,12 @@ setting. operator The operator determines how the value is applied to the setting. It may be either -\(lq=\(rq +\(oq=\(cq (assignment), -\(lq+=\(rq +\(oq+=\(cq (append), or -\(lq-=\(rq +\(oq-=\(cq (remove). .TP 10n value diff --git a/docs/cvtsudoers.mdoc.in b/docs/cvtsudoers.mdoc.in index 75cb847845..6d73a0987b 100644 --- a/docs/cvtsudoers.mdoc.in +++ b/docs/cvtsudoers.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd September 13, 2022 +.Dd September 29, 2022 .Dt CVTSUDOERS 1 .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -469,7 +469,33 @@ An array of objects, each containing an array and an optional .Em Binding array. -Each object contains a +.Pp +The +.Em Options +array consists of one or more objects, each containing a +.Dq name:value +pair that corresponds to a +.Em sudoers +.Em Defaults +setting. +.Em Options +that operate on a list will also include an +.Em operation +entry in the object, with a value of +.Dq list_assign +for +.Ql = , +.Dq list_add +for +.Ql += , +or +.Dq list_remove +for +.Ql -= . +.Pp +The optional +.Em Binding +array consists of one or more objects, each containing a .Dq name:value pair and an optional .Em negated @@ -479,13 +505,24 @@ If a is present, the setting will only take effect if one of the specified .Em command , .Em hostname , +.Em netgroup , +.Em networkaddr , +.Em nonunixgid , +.Em nonunixgroup , .Em usergid , .Em usergroup , .Em userid , .Em username , or alias entries match. .Pp -For example: +For example, the following +.Em sudoers +entry: +.Bd -literal +Defaults@somehost set_home, env_keep += DISPLAY +.Ed +.Pp +converts to: .Bd -literal "Defaults": [ { @@ -493,20 +530,22 @@ For example: { "hostname": "somehost" } ], "Options": [ - { "set_home": true } + { "set_home": true }, + { + "operation": "list_add", + "env_keep": [ + "DISPLAY" + ] + } ] } ] .Ed -.Pp -will enable the -.Em set_home -option when the local host name matches -.Em somehost . .It User_Aliases A JSON object containing one or more .Em sudoers -User_Alias entries where each named alias has as its value an array +.Em User_Alias +entries where each named alias has as its value an array containing one or more objects. Each object contains a .Dq name:value @@ -524,7 +563,14 @@ The name may be one of or .Em username . .Pp -For example: +For example, the following +.Em sudoers +entry: +.Bd -literal +User_Alias SYSADMIN = will, %wheel, +admin +.Ed +.Pp +converts to: .Bd -literal "User_Aliases": { "SYSADMIN": [ @@ -534,19 +580,10 @@ For example: ] } .Ed -.Pp -will define a -.Em User_Alias -named SYSADMIN that contains the user -.Dq will , -the Unix group -.Dq wheel , -and the netgroup -.Dq admin . .It Runas_Aliases A JSON object containing one or more .Em sudoers -.It Runas_Alias +.Em Runas_Alias entries, where each named alias has as its value an array containing one or more objects. Each object contains a @@ -565,7 +602,14 @@ The name may be one of or .Em username . .Pp -For example: +For example, the following +.Em sudoers +entry: +.Bd -literal +Runas_Alias DB = oracle, sybase : OP = root, operator +.Ed +.Pp +converts to: .Bd -literal "Runas_Aliases": { "DB": [ @@ -578,13 +622,6 @@ For example: ] } .Ed -.Pp -will define two -.Em Runas_Alias -entries: -.Dq DB -and -.Dq OP . .It Host_Aliases A JSON object containing one or more .Em sudoers @@ -603,7 +640,15 @@ The name may be one of or .Em networkaddr . .Pp -For example: +For example, the following +.Em sudoers +entries: +.Bd -literal +Host_Alias DORMNET = 128.138.243.0, 128.138.204.0/24 +Host_Alias SERVERS = boulder, refuge +.Ed +.Pp +convert to: .Bd -literal "Host_Aliases": { "DORMNET": [ @@ -631,7 +676,16 @@ The name may be either another .Em cmndalias or a .Em command . -For example: +For example, the following +.Em sudoers +entries: +.Bd -literal +Cmnd_Alias SHELLS = /bin/bash, /bin/csh, /bin/sh, /bin/zsh +Cmnd_Alias VIPW = /usr/bin/chpass, /usr/bin/chfn, /usr/bin/chsh, \e + /usr/bin/passwd, /usr/sbin/vigr, /usr/sbin/vipw +.Ed +.Pp +convert to: .Bd -literal "Cmnd_Aliases": { "SHELLS": [ @@ -913,12 +967,12 @@ setting. .It operator The operator determines how the value is applied to the setting. It may be either -.Dq = +.Ql = (assignment), -.Dq += +.Ql += (append), or -.Dq -= +.Ql -= (remove). .It value The setting's value, usually a string or, for From 63efad271a13124d739d536e9f5bf1dd110c3a1a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 29 Sep 2022 11:16:21 -0600 Subject: [PATCH 148/186] Update with recent changes. --- NEWS | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/NEWS b/NEWS index 7c96ab6ef1..ec341e70a8 100644 --- a/NEWS +++ b/NEWS @@ -67,6 +67,23 @@ What's new in Sudo 1.9.12 * Fixed a bug where sub-commands were not being logged to a remote log server when log_subcmds was enabled. GitHub issue #174. + * The new log_stdin, log_stdout, log_stderr, log_ttyin, and log_ttyout + sudoers settings can be used to support more fine-grained I/O logging. + The sudo front-end no longer allocates a pseudo-terminal when running + a command if the I/O logging plugin requests logging of stdin, stdout, + or stderr but not terminal input/output. + + * Quieted a libgcrypt run-time initialization warning. + This fixes Debian bug #1019428 and Ubuntu bug #1397663. + + * Fixed a bug in visudo that caused literal backslashes to be removed + from the EDITOR environment variable. GitHub issue #179. + + * The sudo Python plugin now implements the "find_spec" method instead + of the the deprecated "find_module". This fixes a test failure when + a newer version of setuptools that doesn't include "find_module" is + found on the system. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts From afaeb0ed5710921e75b65c5ea361a46c818f0af7 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 29 Sep 2022 13:43:20 -0600 Subject: [PATCH 149/186] Mark code that escapes/unescapes "sudo -s cmd args..." for removal. A future version of the plugin API will defer any such escaping to the policy plugin so it can be configurable. --- plugins/sudoers/strlcpy_unesc.c | 3 +++ plugins/sudoers/sudoers.c | 1 + src/parse_args.c | 1 + 3 files changed, 5 insertions(+) diff --git a/plugins/sudoers/strlcpy_unesc.c b/plugins/sudoers/strlcpy_unesc.c index ee6276e762..c8c89ac69f 100644 --- a/plugins/sudoers/strlcpy_unesc.c +++ b/plugins/sudoers/strlcpy_unesc.c @@ -29,6 +29,9 @@ #include "sudoers.h" +/* + * Like strlcpy() but collapses non-space chars escaped with a backslash. + */ size_t strlcpy_unescape(char *dst, const char *src, size_t size) { diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index abe63147dd..c079ea3fbb 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -1047,6 +1047,7 @@ set_cmnd(void) * When running a command via a shell, the sudo front-end * escapes potential meta chars. We unescape non-spaces * for sudoers matching and logging purposes. + * TODO: move escaping to the policy plugin instead */ user_args = strvec_join(NewArgv + 1, ' ', strlcpy_unescape); } else { diff --git a/src/parse_args.c b/src/parse_args.c index 1128604ed5..56f207e8f4 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -606,6 +606,7 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, /* * For shell mode we need to rewrite argv + * TODO: move this to the policy plugin and make escaping configurable */ if (ISSET(flags, MODE_SHELL|MODE_LOGIN_SHELL) && ISSET(mode, MODE_RUN)) { char **av, *cmnd = NULL; From 371b974e07d3cf071012929d7c95fe19239fe590 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 1 Oct 2022 16:59:07 -0600 Subject: [PATCH 150/186] Use "hg log --template" instead of "hg log --style". --- Makefile.in | 2 +- scripts/log2cl.pl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile.in b/Makefile.in index fb21fdf70f..bf884ae6e7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -236,7 +236,7 @@ depend: siglist.c signame.c ChangeLog: if test -d $(srcdir)/.hg; then \ - if hg log -R $(srcdir) --style=changelog -r "sort(branch(.) or follow(), -date)" > $@.tmp; then \ + if hg log -R $(srcdir) --template=changelog -r "sort(branch(.) or follow(), -date)" > $@.tmp; then \ mv -f $@.tmp $(srcdir)/$@; \ else \ rm -f $@.tmp; \ diff --git a/scripts/log2cl.pl b/scripts/log2cl.pl index 894736a654..a20cd220a6 100755 --- a/scripts/log2cl.pl +++ b/scripts/log2cl.pl @@ -17,7 +17,7 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # Simple script to massage "git log" output into a GNU style ChangeLog. -# The goal is to emulate "hg log --style=changelog" via perl format. +# The goal is to emulate "hg log --template=changelog" via perl format. use Getopt::Std; use Text::Wrap; @@ -46,7 +46,7 @@ my $log_size = 0; my @lines; -# Wrap like "hg log --style=changelog" +# Wrap like "hg log --template=changelog" $Text::Wrap::columns = 77; while () { From 719b7f933f03e5fcaf1ab963a3c05c6bfc525823 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 4 Oct 2022 08:51:36 -0600 Subject: [PATCH 151/186] sudo_open_parent_dir: stop before creating the last path component Fix a regression introduced in sudo 1.9.9 where the entire directory path was created instead of just the parent directory. --- lib/util/mkdir_parents.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/util/mkdir_parents.c b/lib/util/mkdir_parents.c index 755ff50d34..ba46b3968f 100644 --- a/lib/util/mkdir_parents.c +++ b/lib/util/mkdir_parents.c @@ -106,18 +106,18 @@ sudo_open_parent_dir_v1(const char *path, uid_t uid, gid_t gid, mode_t mode, /* Iterate over path components, skipping the last one. */ pathend = cp + strlen(cp); - for (cp = sudo_strsplit(cp, pathend, "/", &ep); cp != NULL && ep != NULL; + for (cp = sudo_strsplit(cp, pathend, "/", &ep); cp != NULL && *ep != '\0'; cp = sudo_strsplit(NULL, pathend, "/", &ep)) { size_t len = (size_t)(ep - cp); int dfd; sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "mkdir %.*s, mode 0%o, uid %d, gid %d", (int)len, path, + "mkdir %.*s, mode 0%o, uid %d, gid %d", (int)(ep - path), path, (unsigned int)mode, (int)uid, (int)gid); if (len >= sizeof(name)) { errno = ENAMETOOLONG; if (!quiet) - sudo_warn(U_("unable to open %.*s"), (int)len, path); + sudo_warn(U_("unable to mkdir %.*s"), (int)(ep - path), path); goto bad; } memcpy(name, cp, len); From 59765dd36003f98f8b279400ac59d2ceb49e1970 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 4 Oct 2022 09:01:44 -0600 Subject: [PATCH 152/186] Correct return value when mkdtempat() fails. --- lib/iolog/iolog_mkdtemp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/iolog/iolog_mkdtemp.c b/lib/iolog/iolog_mkdtemp.c index 948fdcd3e5..ea83f555ad 100644 --- a/lib/iolog/iolog_mkdtemp.c +++ b/lib/iolog/iolog_mkdtemp.c @@ -79,12 +79,13 @@ iolog_mkdtemp(char *path) ok = false; } else { if (chmod(path, iolog_dirmode) != 0) { + /* Not a fatal error, pre-existing mode is 0700. */ sudo_warn(U_("unable to change mode of %s to 0%o"), path, (unsigned int)iolog_dirmode); } + ok = true; } close(dfd); - ok = true; } umask(omask); From 3940020c94e24aa7983f9fdd6ad2d37d53ab5e11 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 4 Oct 2022 09:33:44 -0600 Subject: [PATCH 153/186] sudo_secure_open_{file,dir}: always check thatreturn value is not -1. Avoids false positives from static analyzers that can't figure out that the fd is always valid when error is SUDO_PATH_SECURE. --- lib/util/sudo_conf.c | 49 +++++++++---------- plugins/sudoers/sudoers.c | 44 +++++++++--------- plugins/sudoers/testsudoers.c | 52 +++++++++++---------- plugins/sudoers/timestamp.c | 88 +++++++++++++++++------------------ 4 files changed, 120 insertions(+), 113 deletions(-) diff --git a/lib/util/sudo_conf.c b/lib/util/sudo_conf.c index 454d071d20..5f046ffa1b 100644 --- a/lib/util/sudo_conf.c +++ b/lib/util/sudo_conf.c @@ -681,30 +681,31 @@ sudo_conf_read_v1(const char *conf_file, int conf_types) int error; conf_file = _PATH_SUDO_CONF; fd = sudo_secure_open_file(conf_file, ROOT_UID, -1, &sb, &error); - switch (error) { - case SUDO_PATH_SECURE: - break; - case SUDO_PATH_MISSING: - /* Root should always be able to read sudo.conf. */ - if (errno != ENOENT && geteuid() == ROOT_UID) - sudo_warn(U_("unable to open %s"), conf_file); - goto done; - case SUDO_PATH_BAD_TYPE: - sudo_warnx(U_("%s is not a regular file"), conf_file); - goto done; - case SUDO_PATH_WRONG_OWNER: - sudo_warnx(U_("%s is owned by uid %u, should be %u"), - conf_file, (unsigned int) sb.st_uid, ROOT_UID); - goto done; - case SUDO_PATH_WORLD_WRITABLE: - sudo_warnx(U_("%s is world writable"), conf_file); - goto done; - case SUDO_PATH_GROUP_WRITABLE: - sudo_warnx(U_("%s is group writable"), conf_file); - goto done; - default: - sudo_warnx("%s: internal error, unexpected error %d", - __func__, error); + if (fd == -1) { + switch (error) { + case SUDO_PATH_MISSING: + /* Root should always be able to read sudo.conf. */ + if (errno != ENOENT && geteuid() == ROOT_UID) + sudo_warn(U_("unable to open %s"), conf_file); + break; + case SUDO_PATH_BAD_TYPE: + sudo_warnx(U_("%s is not a regular file"), conf_file); + break; + case SUDO_PATH_WRONG_OWNER: + sudo_warnx(U_("%s is owned by uid %u, should be %u"), + conf_file, (unsigned int) sb.st_uid, ROOT_UID); + break; + case SUDO_PATH_WORLD_WRITABLE: + sudo_warnx(U_("%s is world writable"), conf_file); + break; + case SUDO_PATH_GROUP_WRITABLE: + sudo_warnx(U_("%s is group writable"), conf_file); + break; + default: + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); + break; + } goto done; } } diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index c079ea3fbb..faa5be4f24 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -1104,28 +1104,28 @@ open_sudoers(const char *file, bool doedit, bool *keepopen) again: fd = sudo_secure_open_file(file, sudoers_uid, sudoers_gid, &sb, &error); - switch (error) { - case SUDO_PATH_SECURE: - /* - * Make sure we can read the file so we can present the - * user with a reasonable error message (unlike the lexer). - */ - if ((fp = fdopen(fd, "r")) == NULL) { - log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), file); - close(fd); + if (fd != -1) { + /* + * Make sure we can read the file so we can present the + * user with a reasonable error message (unlike the lexer). + */ + if ((fp = fdopen(fd, "r")) == NULL) { + log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), file); + close(fd); + } else { + if (sb.st_size != 0 && fgetc(fp) == EOF) { + log_warning(SLOG_SEND_MAIL, + N_("unable to read %s"), file); + fclose(fp); + fp = NULL; } else { - if (sb.st_size != 0 && fgetc(fp) == EOF) { - log_warning(SLOG_SEND_MAIL, - N_("unable to read %s"), file); - fclose(fp); - fp = NULL; - } else { - /* Rewind fp and set close on exec flag. */ - rewind(fp); - (void) fcntl(fileno(fp), F_SETFD, 1); - } + /* Rewind fp and set close on exec flag. */ + rewind(fp); + (void) fcntl(fileno(fp), F_SETFD, 1); } - break; + } + } else { + switch (error) { case SUDO_PATH_MISSING: /* * If we tried to open sudoers as non-root but got EACCES, @@ -1160,8 +1160,10 @@ open_sudoers(const char *file, bool doedit, bool *keepopen) (unsigned int) sb.st_gid, (unsigned int) sudoers_gid); break; default: - /* NOTREACHED */ + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); break; + } } if (!restore_perms()) { diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index 415c723dc5..3af5636d9a 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -448,31 +448,35 @@ open_sudoers(const char *file, bool doedit, bool *keepopen) /* Report errors using the basename for consistent test output. */ base = sudo_basename(file); fd = sudo_secure_open_file(file, sudoers_uid, sudoers_gid, &sb, &error); - switch (error) { - case SUDO_PATH_SECURE: - if ((fp = fdopen(fd, "r")) == NULL) + if (fd != -1) { + if ((fp = fdopen(fd, "r")) == NULL) { + sudo_warn("unable to open %s", base); close(fd); - break; - case SUDO_PATH_MISSING: - sudo_warn("unable to open %s", base); - break; - case SUDO_PATH_BAD_TYPE: - sudo_warnx("%s is not a regular file", base); - break; - case SUDO_PATH_WRONG_OWNER: - sudo_warnx("%s should be owned by uid %u", - base, (unsigned int) sudoers_uid); - break; - case SUDO_PATH_WORLD_WRITABLE: - sudo_warnx("%s is world writable", base); - break; - case SUDO_PATH_GROUP_WRITABLE: - sudo_warnx("%s should be owned by gid %u", - base, (unsigned int) sudoers_gid); - break; - default: - /* NOTREACHED */ - break; + } + } else { + switch (error) { + case SUDO_PATH_MISSING: + sudo_warn("unable to open %s", base); + break; + case SUDO_PATH_BAD_TYPE: + sudo_warnx("%s is not a regular file", base); + break; + case SUDO_PATH_WRONG_OWNER: + sudo_warnx("%s should be owned by uid %u", + base, (unsigned int) sudoers_uid); + break; + case SUDO_PATH_WORLD_WRITABLE: + sudo_warnx("%s is world writable", base); + break; + case SUDO_PATH_GROUP_WRITABLE: + sudo_warnx("%s should be owned by gid %u", + base, (unsigned int) sudoers_gid); + break; + default: + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); + break; + } } debug_return_ptr(fp); diff --git a/plugins/sudoers/timestamp.c b/plugins/sudoers/timestamp.c index 146fd3b330..825eec6b71 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -235,56 +235,56 @@ ts_mkdirs(const char *path, uid_t owner, gid_t group, mode_t mode, static int ts_secure_opendir(const char *path, bool make_it, bool quiet) { - int error, fd = -1; + int error, fd; struct stat sb; debug_decl(ts_secure_opendir, SUDOERS_DEBUG_AUTH); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "checking %s", path); fd = sudo_secure_open_dir(path, timestamp_uid, timestamp_gid, &sb, &error); - switch (error) { - case SUDO_PATH_SECURE: - break; - case SUDO_PATH_MISSING: - if (make_it) { - fd = ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU, - S_IRWXU|S_IXGRP|S_IXOTH, quiet); - if (fd != -1) - break; - } - if (!quiet) - sudo_warn("%s", path); - break; - case SUDO_PATH_BAD_TYPE: - errno = ENOTDIR; - if (!quiet) - sudo_warn("%s", path); - break; - case SUDO_PATH_WRONG_OWNER: - if (!quiet) { - sudo_warnx(U_("%s is owned by uid %u, should be %u"), - path, (unsigned int)sb.st_uid, (unsigned int)timestamp_uid); - } - errno = EACCES; - break; - case SUDO_PATH_WORLD_WRITABLE: - if (!quiet) - sudo_warnx(U_("%s is world writable"), path); - errno = EACCES; - break; - case SUDO_PATH_GROUP_WRITABLE: - if (!quiet) { - sudo_warnx(U_("%s is owned by gid %u, should be %u"), - path, (unsigned int)sb.st_gid, (unsigned int)timestamp_gid); - } - errno = EACCES; - break; - default: - if (!quiet) { - sudo_warnx("%s: internal error, unexpected error %d", - __func__, error); - errno = EINVAL; + if (fd == -1) { + switch (error) { + case SUDO_PATH_MISSING: + if (make_it) { + fd = ts_mkdirs(path, timestamp_uid, timestamp_gid, S_IRWXU, + S_IRWXU|S_IXGRP|S_IXOTH, quiet); + if (fd != -1) + break; + } + if (!quiet) + sudo_warn("%s", path); + break; + case SUDO_PATH_BAD_TYPE: + errno = ENOTDIR; + if (!quiet) + sudo_warn("%s", path); + break; + case SUDO_PATH_WRONG_OWNER: + if (!quiet) { + sudo_warnx(U_("%s is owned by uid %u, should be %u"), + path, (unsigned int)sb.st_uid, (unsigned int)timestamp_uid); + } + errno = EACCES; + break; + case SUDO_PATH_WORLD_WRITABLE: + if (!quiet) + sudo_warnx(U_("%s is world writable"), path); + errno = EACCES; + break; + case SUDO_PATH_GROUP_WRITABLE: + if (!quiet) { + sudo_warnx(U_("%s is owned by gid %u, should be %u"), + path, (unsigned int)sb.st_gid, (unsigned int)timestamp_gid); + } + errno = EACCES; + break; + default: + if (!quiet) { + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); + errno = EINVAL; + } + break; } - break; } debug_return_int(fd); From 575200e734503a183dcc94a19a1bbe8eeb8e5157 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 4 Oct 2022 13:37:32 -0600 Subject: [PATCH 154/186] Do not match a literal "" command line argument as "" in sudoers. If the empty string is specified in sudoers, no user args are allowed. GitHub issue #182. --- plugins/sudoers/match_command.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index c234c1f390..37d376d325 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -89,8 +89,10 @@ command_args_match(const char *sudoers_cmnd, const char *sudoers_args) * If no args specified in sudoers, any user args are allowed. * If the empty string is specified in sudoers, no user args are allowed. */ - if (!sudoers_args || (!user_args && !strcmp("\"\"", sudoers_args))) + if (sudoers_args == NULL) debug_return_bool(true); + if (strcmp("\"\"", sudoers_args) == 0) + debug_return_bool(user_args ? false : true); /* * If args are specified in sudoers, they must match the user args. From fa952bfbb7e0a02815ff9e97ab8d6e59db20f4d5 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 4 Oct 2022 16:11:45 -0600 Subject: [PATCH 155/186] Add -I flag to disable editing include files unless there is an error. This can be used when you only want to edit a single sudoers file unless there is a pre-existing syntax error. --- docs/visudo.man.in | 22 ++++++++++++++++++++-- docs/visudo.mdoc.in | 21 +++++++++++++++++++-- plugins/sudoers/visudo.c | 15 +++++++++++++-- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/docs/visudo.man.in b/docs/visudo.man.in index 6610ada53a..d239808afb 100644 --- a/docs/visudo.man.in +++ b/docs/visudo.man.in @@ -21,7 +21,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.TH "VISUDO" "@mansectsu@" "September 13, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "VISUDO" "@mansectsu@" "October 4, 2022" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -30,7 +30,7 @@ .SH "SYNOPSIS" .HP 7n \fBvisudo\fR -[\fB\-chOPqsV\fR] +[\fB\-chIOPqsV\fR] [[\fB\-f\fR]\ \fIsudoers\fR] .SH "DESCRIPTION" \fBvisudo\fR @@ -208,6 +208,24 @@ option. \fB\-h\fR, \fB\--help\fR Display a short help message to the standard output and exit. .TP 12n +\fB\-I\fR, \fB\--no-includes\fR +Disable the editing of include files unless there is a pre-existing +syntax error. +By default, +\fBvisudo\fR +will edit the main +\fIsudoers\fR +file and any files included via +\fI@include\fR +or +\fI#include\fR +directives. +Files included via +\fI@includedir\fR +or +\fI#includedir\fR +are never edited unless they contain a syntax error. +.TP 12n \fB\-O\fR, \fB\--owner\fR Enforce the default ownership (user and group) of the \fIsudoers\fR diff --git a/docs/visudo.mdoc.in b/docs/visudo.mdoc.in index fec556c6d2..33ebfaa53b 100644 --- a/docs/visudo.mdoc.in +++ b/docs/visudo.mdoc.in @@ -20,7 +20,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd September 13, 2022 +.Dd October 4, 2022 .Dt VISUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -28,7 +28,7 @@ .Nd edit the sudoers file .Sh SYNOPSIS .Nm visudo -.Op Fl chOPqsV +.Op Fl chIOPqsV .Op Bo Fl f Bc Ar sudoers .Sh DESCRIPTION .Nm @@ -203,6 +203,23 @@ path can be specified without using the option. .It Fl h , -help Display a short help message to the standard output and exit. +.It Fl I , -no-includes +Disable the editing of include files unless there is a pre-existing +syntax error. +By default, +.Nm +will edit the main +.Ar sudoers +file and any files included via +.Em @include +or +.Em #include +directives. +Files included via +.Em @includedir +or +.Em #includedir +are never edited unless they contain a syntax error. .It Fl O , -owner Enforce the default ownership (user and group) of the .Em sudoers diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 835dac3ae5..734118bac7 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1996, 1998-2005, 2007-2018 + * Copyright (c) 1996, 1998-2005, 2007-2022 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -109,13 +109,15 @@ struct sudo_user sudo_user; struct passwd *list_pw; static struct sudoersfile_list sudoerslist = TAILQ_HEAD_INITIALIZER(sudoerslist); static bool checkonly; +static bool edit_includes = true; static unsigned int errors; -static const char short_opts[] = "cf:hOPqsVx:"; +static const char short_opts[] = "cf:hIOPqsVx:"; static struct option long_opts[] = { { "check", no_argument, NULL, 'c' }, { "export", required_argument, NULL, 'x' }, { "file", required_argument, NULL, 'f' }, { "help", no_argument, NULL, 'h' }, + { "no-includes", no_argument, NULL, 'I' }, { "owner", no_argument, NULL, 'O' }, { "perms", no_argument, NULL, 'P' }, { "quiet", no_argument, NULL, 'q' }, @@ -192,6 +194,9 @@ main(int argc, char *argv[]) case 'h': help(); break; + case 'I': + edit_includes = false; + break; case 'O': use_owner = true; /* check/set owner */ break; @@ -1087,6 +1092,11 @@ open_sudoers(const char *path, bool doedit, bool *keepopen) break; } if (entry == NULL) { + if (doedit && !edit_includes) { + /* Only edit the main sudoers file. */ + if (strcmp(path, sudoers_file) != 0) + doedit = false; + } if ((entry = new_sudoers(path, doedit)) == NULL) debug_return_ptr(NULL); if ((fp = fdopen(entry->fd, "r")) == NULL) @@ -1233,6 +1243,7 @@ help(void) " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" + " -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n")); From 2e2dd48befea3f1e723a62dc7666cc07984d1ace Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 5 Oct 2022 10:10:31 -0600 Subject: [PATCH 156/186] Add test for matching a literal "" command line argument as "" in sudoers. GitHub issue #182. --- MANIFEST | 2 ++ .../sudoers/regress/testsudoers/test19.out.ok | 20 +++++++++++++++++++ plugins/sudoers/regress/testsudoers/test19.sh | 20 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 plugins/sudoers/regress/testsudoers/test19.out.ok create mode 100755 plugins/sudoers/regress/testsudoers/test19.sh diff --git a/MANIFEST b/MANIFEST index f2ffc49564..aaf84d54d2 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1020,6 +1020,8 @@ plugins/sudoers/regress/testsudoers/test17.out.ok plugins/sudoers/regress/testsudoers/test17.sh plugins/sudoers/regress/testsudoers/test18.out.ok plugins/sudoers/regress/testsudoers/test18.sh +plugins/sudoers/regress/testsudoers/test19.out.ok +plugins/sudoers/regress/testsudoers/test19.sh plugins/sudoers/regress/testsudoers/test2.inc plugins/sudoers/regress/testsudoers/test2.out.ok plugins/sudoers/regress/testsudoers/test2.sh diff --git a/plugins/sudoers/regress/testsudoers/test19.out.ok b/plugins/sudoers/regress/testsudoers/test19.out.ok new file mode 100644 index 0000000000..a0de2408e3 --- /dev/null +++ b/plugins/sudoers/regress/testsudoers/test19.out.ok @@ -0,0 +1,20 @@ +Parses OK + +Entries for user root: + +ALL = /bin/ls "" + host matched + runas matched + cmnd allowed + +Command allowed +Parses OK + +Entries for user root: + +ALL = /bin/ls "" + host matched + runas matched + cmnd unmatched + +Command unmatched diff --git a/plugins/sudoers/regress/testsudoers/test19.sh b/plugins/sudoers/regress/testsudoers/test19.sh new file mode 100755 index 0000000000..113eb2ad46 --- /dev/null +++ b/plugins/sudoers/regress/testsudoers/test19.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# +# Verify that "" in sudoers does not match a literal "" on the command line. +# + +: ${TESTSUDOERS=testsudoers} + +exec 2>&1 + +# This should succeed +$TESTSUDOERS root /bin/ls <<'EOF' +root ALL = /bin/ls "" +EOF + +# This should fail +$TESTSUDOERS root /bin/ls '""' <<'EOF' +root ALL = /bin/ls "" +EOF + +exit 0 From b37bf44cddd8a78edc0ba36212d16f061486b29c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 5 Oct 2022 12:36:14 -0600 Subject: [PATCH 157/186] Add test for sudo open_parent_dir() --- MANIFEST | 1 + lib/util/Makefile.in | 24 ++- .../open_parent_dir/open_parent_dir_test.c | 166 ++++++++++++++++++ 3 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 lib/util/regress/open_parent_dir/open_parent_dir_test.c diff --git a/MANIFEST b/MANIFEST index aaf84d54d2..fe247a007b 100644 --- a/MANIFEST +++ b/MANIFEST @@ -280,6 +280,7 @@ lib/util/regress/glob/globtest.c lib/util/regress/glob/globtest.in lib/util/regress/harness.in lib/util/regress/mktemp/mktemp_test.c +lib/util/regress/open_parent_dir/open_parent_dir_test.c lib/util/regress/parse_gids/parse_gids_test.c lib/util/regress/progname/progname_test.c lib/util/regress/strsig/strsig_test.c diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index f3d44fc0f6..90874ee3fc 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -112,9 +112,9 @@ PVS_LOG_OPTS = -a 'GA:1,2' -e -t errorfile -d $(PVS_IGNORE) # Regression tests TEST_PROGS = conf_test hltq_test parseln_test progname_test \ + parse_gids_test getgids getgrouplist_test open_parent_dir_test \ strsplit_test strtobool_test strtoid_test strtomode_test \ - strtonum_test parse_gids_test getgids getgrouplist_test \ - uuid_test @COMPAT_TEST_PROGS@ + strtonum_test uuid_test @COMPAT_TEST_PROGS@ TEST_LIBS = @LIBS@ TEST_LDFLAGS = @LDFLAGS@ TEST_VERBOSE = @@ -172,6 +172,8 @@ GLOBTEST_OBJS = globtest.lo glob.lo GETDELIM_TEST_OBJS = getdelim_test.lo getdelim.lo +OPEN_PARENT_DIR_TEST_OBJS = open_parent_dir_test.lo mkdir_parents.lo + STRTOBOOL_TEST_OBJS = strtobool_test.lo strtobool.lo STRTOMODE_TEST_OBJS = strtomode_test.lo strtomode.lo @@ -283,6 +285,9 @@ hltq_test: $(HLTQ_TEST_OBJS) libsudo_util.la mktemp_test: $(MKTEMP_TEST_OBJS) libsudo_util.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(MKTEMP_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) +open_parent_dir_test: $(OPEN_PARENT_DIR_TEST_OBJS) libsudo_util.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(OPEN_PARENT_DIR_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + parseln_test: $(PARSELN_TEST_OBJS) libsudo_util.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(PARSELN_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) @@ -455,6 +460,7 @@ check: $(TEST_PROGS) check-fuzzer ./strsig_test || rval=`expr $$rval + $$?`; \ fi; \ ./getgrouplist_test || rval=`expr $$rval + $$?`; \ + ./open_parent_dir_test || rval=`expr $$rval + $$?`; \ ./strtobool_test || rval=`expr $$rval + $$?`; \ ./strtoid_test || rval=`expr $$rval + $$?`; \ ./strtomode_test || rval=`expr $$rval + $$?`; \ @@ -1115,6 +1121,20 @@ nanosleep.i: $(srcdir)/nanosleep.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< nanosleep.plog: nanosleep.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/nanosleep.c --i-file $< --output-file $@ +open_parent_dir_test.lo: \ + $(srcdir)/regress/open_parent_dir/open_parent_dir_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/open_parent_dir/open_parent_dir_test.c +open_parent_dir_test.i: \ + $(srcdir)/regress/open_parent_dir/open_parent_dir_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +open_parent_dir_test.plog: open_parent_dir_test.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/open_parent_dir/open_parent_dir_test.c --i-file $< --output-file $@ openat.lo: $(srcdir)/openat.c $(incdir)/sudo_compat.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/openat.c openat.i: $(srcdir)/openat.c $(incdir)/sudo_compat.h $(top_builddir)/config.h diff --git a/lib/util/regress/open_parent_dir/open_parent_dir_test.c b/lib/util/regress/open_parent_dir/open_parent_dir_test.c new file mode 100644 index 0000000000..95f1a09ed7 --- /dev/null +++ b/lib/util/regress/open_parent_dir/open_parent_dir_test.c @@ -0,0 +1,166 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2022 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include +#include +#include +#include +#include + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_fatal.h" +#include "sudo_util.h" + +sudo_dso_public int main(int argc, char *argv[]); + +static int errors = 0, ntests = 0; + +static int +run_test(const char *tdir, const char *path, uid_t uid, gid_t gid) +{ + char *cp, fullpath[PATH_MAX]; + struct stat sb1, sb2; + int dfd, len; + int ret = -1; + + /* Test creating full path. */ + len = snprintf(fullpath, sizeof(fullpath), "%s/%s", tdir, path); + if (len < 0 || len >= ssizeof(fullpath)) { + errno = ENAMETOOLONG; + sudo_fatal("%s/%s", tdir, path); + } + ntests++; + dfd = sudo_open_parent_dir(fullpath, uid, gid, 0700, false); + if (dfd == -1) { + errors++; + goto done; + } + + /* Verify that we only created the parent dir, not full path. */ + ntests++; + if (stat(fullpath, &sb1) == 0) { + sudo_warnx("created full path \"%s\", not just parent dir", + fullpath); + errors++; + goto done; + } + + /* Verify that dfd refers to the parent dir. */ + ntests++; + cp = strrchr(fullpath, '/'); + *cp = '\0'; + if (stat(fullpath, &sb1) == -1) { + sudo_warn("%s", fullpath); + errors++; + goto done; + } + if (fstat(dfd, &sb2) == -1) { + sudo_warn("%s", fullpath); + errors++; + goto done; + } + if (sb1.st_dev != sb2.st_dev || sb1.st_ino != sb2.st_ino) { + sudo_warn("%s: sudo_open_parent_dir fd mismatch", fullpath); + errors++; + goto done; + } + +done: + if (dfd != -1) + close(dfd); + return ret; +} + +int +main(int argc, char *argv[]) +{ + char tdir[] = "open_parent_dir.XXXXXXXX"; + int ch, dfd, fd, len; + char cmd[1024]; + uid_t uid; + gid_t gid; + + initprogname(argc > 0 ? argv[0] : "open_parent_dir_test"); + + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + /* ignore */ + break; + default: + fprintf(stderr, "usage: %s [-v]\n", getprogname()); + return EXIT_FAILURE; + } + } + argc -= optind; + argv += optind; + + uid = geteuid(); + gid = getegid(); + + /* All tests relative to tdir. */ + if (mkdtemp(tdir) == NULL) + sudo_fatal("%s", tdir); + + /* Test creating new path. */ + dfd = run_test(tdir, "level1/level2/level3", uid, gid); + + /* Verify we can create a new file in the new parent dir. */ + if (dfd != -1) { + ntests++; + fd = openat(dfd, "testfile", O_WRONLY|O_CREAT|O_EXCL, 0600); + if (fd == -1) { + errors++; + } else { + close(fd); + } + close(dfd); + dfd = -1; + } + + /* Test exiting path when final component exists. */ + dfd = run_test(tdir, "level1/level2/testfile", uid, gid); + if (dfd != -1) { + unlinkat(dfd, "testfile", 0); + close(dfd); + } + + /* Test exiting path when final component doesn't exist. */ + dfd = run_test(tdir, "level1/level2/testfile", uid, gid); + if (dfd != -1) + close(dfd); + + /* Cleanup */ + len = snprintf(cmd, sizeof(cmd), "rm -rf \"%s\"", tdir); + if (len < 0 || len >= ssizeof(cmd)) { + errno = ENAMETOOLONG; + sudo_fatalx("rm -rf %s", tdir); + } + ignore_result(system(cmd)); + + if (ntests != 0) { + printf("%s: %d tests run, %d errors, %d%% success rate\n", + getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); + } + return errors; +} From 0b506a2d07df25073f08975687ce6ea44c35d65b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 5 Oct 2022 15:26:14 -0600 Subject: [PATCH 158/186] sudo_dso_load: try multi-arch on Linux if we can't load the path. For example, if loading /usr/lib/libsss_sudo.so fails, try again with /usr/lib/x86_64-linux-gnu/libsss_sudo.so. --- lib/util/sudo_dso.c | 64 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/lib/util/sudo_dso.c b/lib/util/sudo_dso.c index cecdf97b68..4314c8ebb4 100644 --- a/lib/util/sudo_dso.c +++ b/lib/util/sudo_dso.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2010, 2012-2014 Todd C. Miller + * Copyright (c) 2010, 2012-2014, 2021-2022 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,10 @@ #include +#ifdef __linux__ +# include +#endif + #include #include #include @@ -169,6 +173,58 @@ sudo_dso_strerror_v1(void) # endif # endif +# if defined(__linux__) +/* + * On Linux systems that use muti-arch, the actual DSO may be + * in a machine-specific subdirectory. If the specified path + * contains /lib/ or /libexec/, insert a multi-arch directory + * after it. + */ +static void * +dlopen_multi_arch(const char *path, int flags) +{ +# if defined(__ILP32__) + const char *libdirs[] = { "/libx32/", "/lib/", "/libexec/", NULL }; +# elif defined(__LP64__) + const char *libdirs[] = { "/lib64/", "/lib/", "/libexec/", NULL }; +# else + const char *libdirs[] = { "/lib32/", "/lib/", "/libexec/", NULL }; +# endif + const char **lp, *lib, *slash; + struct utsname unamebuf; + void *ret = NULL; + struct stat sb; + char *newpath; + int len; + + /* Only try multi-arch if the original path does not exist. */ + if (stat(path, &sb) == -1 && errno == ENOENT && uname(&unamebuf) == 0) { + for (lp = libdirs; *lp != NULL; lp++) { + /* Replace lib64, lib32, libx32 with lib in new path. */ + const char *newlib = lp == libdirs ? "/lib/" : *lp; + + /* Search for lib dir in path, find the trailing slash. */ + lib = strstr(path, *lp); + if (lib == NULL) + continue; + slash = lib + strlen(*lp) - 1; + + /* Add machine-linux-gnu dir after /lib/ or /libexec/. */ + len = asprintf(&newpath, "%.*s%s%s-linux-gnu%s", + (int)(lib - path), path, newlib, unamebuf.machine, slash); + if (len == -1) + break; + if (stat(newpath, &sb) == 0) + ret = dlopen(newpath, flags); + free(newpath); + if (ret != NULL) + break; + } + } + return ret; +} +#endif /* __linux__ */ + void * sudo_dso_load_v1(const char *path, int mode) { @@ -207,7 +263,7 @@ sudo_dso_load_v1(const char *path, int mode) } #endif /* RTLD_MEMBER */ ret = dlopen(path, flags); -#ifdef RTLD_MEMBER +#if defined(RTLD_MEMBER) /* * If we try to dlopen() an AIX .a file without an explicit member * it will fail with ENOEXEC. Try again using the default member. @@ -222,6 +278,10 @@ sudo_dso_load_v1(const char *path, int mode) ret = dlopen(path, flags); } } +#elif defined(__linux__) + /* On failure, try again with a muti-arch path where possible. */ + if (ret == NULL) + ret = dlopen_multi_arch(path, flags); #endif /* RTLD_MEMBER */ return ret; From 7e20e4b80f263cba190ff73b5ff553a5d314604c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 6 Oct 2022 12:46:38 -0600 Subject: [PATCH 159/186] Apply multiarch rules when loading plugins too. --- MANIFEST | 2 + include/sudo_util.h | 4 + lib/util/Makefile.in | 52 ++++-- lib/util/multiarch.c | 103 +++++++++++ lib/util/regress/multiarch/multiarch_test.c | 178 ++++++++++++++++++++ lib/util/sudo_dso.c | 56 ++---- lib/util/util.exp.in | 1 + src/load_plugins.c | 25 +-- 8 files changed, 360 insertions(+), 61 deletions(-) create mode 100644 lib/util/multiarch.c create mode 100644 lib/util/regress/multiarch/multiarch_test.c diff --git a/MANIFEST b/MANIFEST index fe247a007b..ed456e6f26 100644 --- a/MANIFEST +++ b/MANIFEST @@ -253,6 +253,7 @@ lib/util/mksiglist.c lib/util/mksigname.c lib/util/mktemp.c lib/util/mmap_alloc.c +lib/util/multiarch.c lib/util/nanosleep.c lib/util/openat.c lib/util/parseln.c @@ -280,6 +281,7 @@ lib/util/regress/glob/globtest.c lib/util/regress/glob/globtest.in lib/util/regress/harness.in lib/util/regress/mktemp/mktemp_test.c +lib/util/regress/multiarch/multiarch_test.c lib/util/regress/open_parent_dir/open_parent_dir_test.c lib/util/regress/parse_gids/parse_gids_test.c lib/util/regress/progname/progname_test.c diff --git a/include/sudo_util.h b/include/sudo_util.h index 911b00b8c9..3fe7fc4ce6 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -262,6 +262,10 @@ sudo_dso_public void sudo_mmap_free_v1(void *ptr); sudo_dso_public int sudo_mmap_protect_v1(void *ptr); #define sudo_mmap_protect(_a) sudo_mmap_protect_v1(_a) +/* multiarch.c */ +sudo_dso_public char *sudo_stat_multiarch_v1(const char *path, struct stat *sb); +#define sudo_stat_multiarch(_a, _b) sudo_stat_multiarch_v1((_a), (_b)) + /* parseln.c */ sudo_dso_public ssize_t sudo_parseln_v1(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp); sudo_dso_public ssize_t sudo_parseln_v2(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp, int flags); diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 90874ee3fc..ad97748f82 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -111,8 +111,8 @@ PVS_IGNORE = 'V707,V011,V002,V536' PVS_LOG_OPTS = -a 'GA:1,2' -e -t errorfile -d $(PVS_IGNORE) # Regression tests -TEST_PROGS = conf_test hltq_test parseln_test progname_test \ - parse_gids_test getgids getgrouplist_test open_parent_dir_test \ +TEST_PROGS = conf_test hltq_test parseln_test progname_test parse_gids_test \ + getgids getgrouplist_test multiarch_test open_parent_dir_test \ strsplit_test strtobool_test strtoid_test strtomode_test \ strtonum_test uuid_test @COMPAT_TEST_PROGS@ TEST_LIBS = @LIBS@ @@ -144,11 +144,11 @@ SHELL = @SHELL@ LTOBJS = basename.lo @DIGEST@ event.lo fatal.lo key_val.lo gethostname.lo \ gettime.lo getgrouplist.lo gidlist.lo json.lo lbuf.lo locking.lo \ - logfac.lo logpri.lo mkdir_parents.lo mmap_alloc.lo parseln.lo \ - progname.lo rcstr.lo regex.lo roundup.lo secure_path.lo setgroups.lo \ - strsplit.lo strtobool.lo strtoid.lo strtomode.lo strtonum.lo \ - sudo_conf.lo sudo_debug.lo sudo_dso.lo term.lo ttyname_dev.lo \ - ttysize.lo uuid.lo @COMMON_OBJS@ @LTLIBOBJS@ + logfac.lo logpri.lo mkdir_parents.lo mmap_alloc.lo multiarch.lo \ + parseln.lo progname.lo rcstr.lo regex.lo roundup.lo secure_path.lo \ + setgroups.lo strsplit.lo strtobool.lo strtoid.lo strtomode.lo \ + strtonum.lo sudo_conf.lo sudo_debug.lo sudo_dso.lo term.lo \ + ttyname_dev.lo ttysize.lo uuid.lo @COMMON_OBJS@ @LTLIBOBJS@ IOBJS = $(LTOBJS:.lo=.i) @@ -172,6 +172,8 @@ GLOBTEST_OBJS = globtest.lo glob.lo GETDELIM_TEST_OBJS = getdelim_test.lo getdelim.lo +MULTIARCH_TEST_OBJS = multiarch_test.lo multiarch.lo + OPEN_PARENT_DIR_TEST_OBJS = open_parent_dir_test.lo mkdir_parents.lo STRTOBOOL_TEST_OBJS = strtobool_test.lo strtobool.lo @@ -285,6 +287,9 @@ hltq_test: $(HLTQ_TEST_OBJS) libsudo_util.la mktemp_test: $(MKTEMP_TEST_OBJS) libsudo_util.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(MKTEMP_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) +multiarch_test: $(MULTIARCH_TEST_OBJS) libsudo_util.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(MULTIARCH_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + open_parent_dir_test: $(OPEN_PARENT_DIR_TEST_OBJS) libsudo_util.la $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(OPEN_PARENT_DIR_TEST_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(HARDENING_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) @@ -460,6 +465,7 @@ check: $(TEST_PROGS) check-fuzzer ./strsig_test || rval=`expr $$rval + $$?`; \ fi; \ ./getgrouplist_test || rval=`expr $$rval + $$?`; \ + ./multiarch_test || rval=`expr $$rval + $$?`; \ ./open_parent_dir_test || rval=`expr $$rval + $$?`; \ ./strtobool_test || rval=`expr $$rval + $$?`; \ ./strtoid_test || rval=`expr $$rval + $$?`; \ @@ -1111,6 +1117,28 @@ mmap_alloc.i: $(srcdir)/mmap_alloc.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< mmap_alloc.plog: mmap_alloc.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/mmap_alloc.c --i-file $< --output-file $@ +multiarch.lo: $(srcdir)/multiarch.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/multiarch.c +multiarch.i: $(srcdir)/multiarch.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +multiarch.plog: multiarch.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/multiarch.c --i-file $< --output-file $@ +multiarch_test.lo: $(srcdir)/regress/multiarch/multiarch_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/regress/multiarch/multiarch_test.c +multiarch_test.i: $(srcdir)/regress/multiarch/multiarch_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +multiarch_test.plog: multiarch_test.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/multiarch/multiarch_test.c --i-file $< --output-file $@ nanosleep.lo: $(srcdir)/nanosleep.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h @@ -1527,11 +1555,13 @@ sudo_debug.i: $(srcdir)/sudo_debug.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< sudo_debug.plog: sudo_debug.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sudo_debug.c --i-file $< --output-file $@ -sudo_dso.lo: $(srcdir)/sudo_dso.c $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ - $(top_builddir)/config.h +sudo_dso.lo: $(srcdir)/sudo_dso.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_CFLAGS) $(srcdir)/sudo_dso.c -sudo_dso.i: $(srcdir)/sudo_dso.c $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ - $(top_builddir)/config.h +sudo_dso.i: $(srcdir)/sudo_dso.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ + $(incdir)/sudo_util.h $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< sudo_dso.plog: sudo_dso.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sudo_dso.c --i-file $< --output-file $@ diff --git a/lib/util/multiarch.c b/lib/util/multiarch.c new file mode 100644 index 0000000000..54fd3b555b --- /dev/null +++ b/lib/util/multiarch.c @@ -0,0 +1,103 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2022 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 + +#ifdef __linux__ +# include +#endif + +#include +#include +#include + +#include "sudo_compat.h" +#include "sudo_util.h" + +# if defined(__linux__) +/* + * On Linux systems that use muti-arch, the actual DSO may be in a + * machine-specific subdirectory. If the specified path contains + * /lib/ or /libexec/, insert a multi-arch directory after it. + * If sb is non-NULL, stat(2) will be called on the new path, filling in sb. + * Returns a dynamically allocated string on success and NULL on failure. + */ +char * +sudo_stat_multiarch_v1(const char *path, struct stat *sb) +{ +# if defined(__ILP32__) + const char *libdirs[] = { "/libx32/", "/lib/", "/libexec/", NULL }; +# elif defined(__LP64__) + const char *libdirs[] = { "/lib64/", "/lib/", "/libexec/", NULL }; +# else + const char *libdirs[] = { "/lib32/", "/lib/", "/libexec/", NULL }; +# endif + const char **lp, *lib, *slash; + struct utsname unamebuf; + char *newpath = NULL; + int len; + + if (uname(&unamebuf) == -1) + return NULL; + + for (lp = libdirs; *lp != NULL; lp++) { + /* Replace lib64, lib32, libx32 with lib in new path. */ + const char *newlib = lp == libdirs ? "/lib/" : *lp; + + /* Search for lib dir in path, find the trailing slash. */ + lib = strstr(path, *lp); + if (lib == NULL) + continue; + slash = lib + strlen(*lp) - 1; + + /* Make sure there isn't already a machine-linux-gnu dir. */ + len = strcspn(slash + 1, "/-"); + if (strncmp(slash + 1 + len, "-linux-gnu/", 11) == 0) { + /* Multiarch already present. */ + break; + } + + /* Add machine-linux-gnu dir after /lib/ or /libexec/. */ + len = asprintf(&newpath, "%.*s%s%s-linux-gnu%s", + (int)(lib - path), path, newlib, unamebuf.machine, slash); + if (len == -1) { + newpath = NULL; + break; + } + + /* If sb was set, use stat(2) to make sure newpath exists. */ + if (sb == NULL || stat(newpath, sb) == 0) + break; + free(newpath); + newpath = NULL; + } + + return newpath; +} +#else +char * +sudo_stat_multiarch_v1(const char *path, struct stat *sb) +{ + return NULL; +} +#endif /* __linux__ */ diff --git a/lib/util/regress/multiarch/multiarch_test.c b/lib/util/regress/multiarch/multiarch_test.c new file mode 100644 index 0000000000..dfceeb8522 --- /dev/null +++ b/lib/util/regress/multiarch/multiarch_test.c @@ -0,0 +1,178 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2022 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include +#include +#include +#include +#include + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_fatal.h" +#include "sudo_util.h" + +sudo_dso_public int main(int argc, char *argv[]); + +#ifdef __linux__ +# include + +# if defined(__ILP32__) +# define ARCH_LIB "libx32" +# elif defined(__LP64__) +# define ARCH_LIB "lib64" +# else +# define ARCH_LIB "lib32" +# endif + +struct multiarch_test { + const char *inpath; + char *outpath; +}; + +static struct multiarch_test * +make_test_data(void) +{ + struct multiarch_test *test_data; + struct utsname unamebuf; + int i; + + if (uname(&unamebuf) == -1) + return NULL; + + test_data = calloc(7, sizeof(*test_data)); + if (test_data == NULL) + return NULL; + + test_data[0].inpath = "/usr/" ARCH_LIB "/libfoo.so"; + i = asprintf(&test_data[0].outpath, "/usr/lib/%s-linux-gnu/libfoo.so", + unamebuf.machine); + if (i == -1) { + test_data[0].outpath = NULL; + goto bad; + } + + test_data[1].inpath = "/usr/lib/something.so"; + i = asprintf(&test_data[1].outpath, "/usr/lib/%s-linux-gnu/something.so", + unamebuf.machine); + if (i == -1) { + test_data[1].outpath = NULL; + goto bad; + } + + test_data[2].inpath = "/usr/libexec/libbar.so"; + i = asprintf(&test_data[2].outpath, "/usr/libexec/%s-linux-gnu/libbar.so", + unamebuf.machine); + if (i == -1) { + test_data[2].outpath = NULL; + goto bad; + } + + test_data[3].inpath = "/usr/local/lib/sudo/libsudo_util.so"; + i = asprintf(&test_data[3].outpath, "/usr/local/lib/%s-linux-gnu/sudo/libsudo_util.so", + unamebuf.machine); + if (i == -1) { + test_data[3].outpath = NULL; + goto bad; + } + + test_data[4].inpath = "/opt/sudo/lib/sudoers.so"; + i = asprintf(&test_data[4].outpath, "/opt/sudo/lib/%s-linux-gnu/sudoers.so", + unamebuf.machine); + if (i == -1) { + test_data[4].outpath = NULL; + goto bad; + } + + i = asprintf(&test_data[5].outpath, "/usr/lib/%s-linux-gnu/something.so", + unamebuf.machine); + if (i == -1) { + test_data[5].outpath = NULL; + goto bad; + } + test_data[5].inpath = test_data[5].outpath; + test_data[5].outpath = NULL; + + return test_data; +bad: + for (i = 0; test_data[i].outpath != NULL; i++) + free(test_data[i].outpath); + free(test_data); + return NULL; +} +#endif /* __linux__ */ + +int +main(int argc, char *argv[]) +{ + int ch, errors = 0; +#ifdef __linux__ + int ntests = 0; + struct multiarch_test *test_data; +#endif + + initprogname(argc > 0 ? argv[0] : "multiarch_test"); + + while ((ch = getopt(argc, argv, "v")) != -1) { + switch (ch) { + case 'v': + /* ignore */ + break; + default: + fprintf(stderr, "usage: %s [-v]\n", getprogname()); + return EXIT_FAILURE; + } + } + argc -= optind; + argv += optind; + +#ifdef __linux__ + test_data = make_test_data(); + if (test_data == NULL) { + sudo_warnx("%s", "failed to generate test data"); + return EXIT_FAILURE; + } + + for (ch = 0; test_data[ch].inpath != NULL; ch++) { + char *outpath = sudo_stat_multiarch(test_data[ch].inpath, NULL); + ntests++; + if (outpath == NULL) { + if (test_data[ch].outpath != NULL) { + sudo_warnx("%s: sudo_stat_multiarch failed", + test_data[ch].inpath); + errors++; + } + } else if (strcmp(outpath, test_data[ch].outpath) != 0) { + sudo_warnx("%s: expected %s got %s", test_data[ch].inpath, + test_data[ch].outpath, outpath); + errors++; + free(outpath); + } + } + + if (ntests != 0) { + printf("%s: %d tests run, %d errors, %d%% success rate\n", + getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); + } +#endif /* __linux__ */ + return errors; +} diff --git a/lib/util/sudo_dso.c b/lib/util/sudo_dso.c index 4314c8ebb4..96b6129ea0 100644 --- a/lib/util/sudo_dso.c +++ b/lib/util/sudo_dso.c @@ -39,6 +39,7 @@ #include "sudo_compat.h" #include "sudo_dso.h" +#include "sudo_util.h" /* * Pointer for statically compiled symbols. @@ -183,47 +184,27 @@ sudo_dso_strerror_v1(void) static void * dlopen_multi_arch(const char *path, int flags) { -# if defined(__ILP32__) - const char *libdirs[] = { "/libx32/", "/lib/", "/libexec/", NULL }; -# elif defined(__LP64__) - const char *libdirs[] = { "/lib64/", "/lib/", "/libexec/", NULL }; -# else - const char *libdirs[] = { "/lib32/", "/lib/", "/libexec/", NULL }; -# endif - const char **lp, *lib, *slash; - struct utsname unamebuf; void *ret = NULL; struct stat sb; char *newpath; - int len; /* Only try multi-arch if the original path does not exist. */ - if (stat(path, &sb) == -1 && errno == ENOENT && uname(&unamebuf) == 0) { - for (lp = libdirs; *lp != NULL; lp++) { - /* Replace lib64, lib32, libx32 with lib in new path. */ - const char *newlib = lp == libdirs ? "/lib/" : *lp; - - /* Search for lib dir in path, find the trailing slash. */ - lib = strstr(path, *lp); - if (lib == NULL) - continue; - slash = lib + strlen(*lp) - 1; - - /* Add machine-linux-gnu dir after /lib/ or /libexec/. */ - len = asprintf(&newpath, "%.*s%s%s-linux-gnu%s", - (int)(lib - path), path, newlib, unamebuf.machine, slash); - if (len == -1) - break; - if (stat(newpath, &sb) == 0) - ret = dlopen(newpath, flags); + if (stat(path, &sb) == -1 && errno == ENOENT) { + newpath = sudo_stat_multiarch(path, &sb); + if (newpath != NULL) { + ret = dlopen(newpath, flags); free(newpath); - if (ret != NULL) - break; } } return ret; } -#endif /* __linux__ */ +# else +static void * +dlopen_multi_arch(const char *path, int flags) +{ + return NULL; +} +# endif /* __linux__ */ void * sudo_dso_load_v1(const char *path, int mode) @@ -231,9 +212,9 @@ sudo_dso_load_v1(const char *path, int mode) struct sudo_preload_table *pt; int flags = 0; void *ret; -#ifdef RTLD_MEMBER +# ifdef RTLD_MEMBER char *cp; -#endif +# endif /* Check prelinked symbols first. */ if (preload_table != NULL) { @@ -253,7 +234,7 @@ sudo_dso_load_v1(const char *path, int mode) if (ISSET(mode, SUDO_DSO_LOCAL)) SET(flags, RTLD_LOCAL); -#ifdef RTLD_MEMBER +# ifdef RTLD_MEMBER /* Check for AIX path(module) syntax and add RTLD_MEMBER for a module. */ cp = strrchr(path, '('); if (cp != NULL) { @@ -261,9 +242,9 @@ sudo_dso_load_v1(const char *path, int mode) if (len > 2 && cp[len - 1] == '\0') SET(flags, RTLD_MEMBER); } -#endif /* RTLD_MEMBER */ +# endif /* RTLD_MEMBER */ ret = dlopen(path, flags); -#if defined(RTLD_MEMBER) +# if defined(RTLD_MEMBER) /* * If we try to dlopen() an AIX .a file without an explicit member * it will fail with ENOEXEC. Try again using the default member. @@ -278,11 +259,10 @@ sudo_dso_load_v1(const char *path, int mode) ret = dlopen(path, flags); } } -#elif defined(__linux__) +# endif /* RTLD_MEMBER */ /* On failure, try again with a muti-arch path where possible. */ if (ret == NULL) ret = dlopen_multi_arch(path, flags); -#endif /* RTLD_MEMBER */ return ret; } diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index e11c02dd3c..c7eb146427 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -131,6 +131,7 @@ sudo_secure_file_v1 sudo_secure_open_dir_v1 sudo_secure_open_file_v1 sudo_setgroups_v1 +sudo_stat_multiarch_v1 sudo_str2logfac_v1 sudo_str2logpri_v1 sudo_strsplit_v1 diff --git a/src/load_plugins.c b/src/load_plugins.c index 107221e114..8a7cbaf12d 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -43,6 +43,7 @@ sudo_stat_plugin(struct plugin_info *info, char *fullpath, size_t pathsize, struct stat *sb) { int status = -1; + size_t len; debug_decl(sudo_stat_plugin, SUDO_DEBUG_PLUGIN); if (info->path[0] == '/') { @@ -52,8 +53,6 @@ sudo_stat_plugin(struct plugin_info *info, char *fullpath, } status = stat(fullpath, sb); } else { - int len; - #ifdef STATIC_SUDOERS_PLUGIN /* Check static symbols. */ if (strcmp(info->path, SUDOERS_PLUGIN) == 0) { @@ -77,20 +76,22 @@ sudo_stat_plugin(struct plugin_info *info, char *fullpath, len = snprintf(fullpath, pathsize, "%s%s", sudo_conf_plugin_dir_path(), info->path); - if (len < 0 || (size_t)len >= pathsize) { + if (len >= pathsize) { errno = ENAMETOOLONG; goto done; } - /* Try parent dir for compatibility with old plugindir default. */ - if ((status = stat(fullpath, sb)) != 0) { - char *cp = strrchr(fullpath, '/'); - if (cp > fullpath + 4 && cp[-5] == '/' && cp[-4] == 's' && - cp[-3] == 'u' && cp[-2] == 'd' && cp[-1] == 'o') { - int serrno = errno; - strlcpy(cp - 4, info->path, pathsize - (cp - 4 - fullpath)); - if ((status = stat(fullpath, sb)) != 0) - errno = serrno; + status = stat(fullpath, sb); + } + if (status == -1) { + char *newpath = sudo_stat_multiarch(fullpath, sb); + if (newpath != NULL) { + len = strlcpy(fullpath, newpath, pathsize); + free(newpath); + if (len >= pathsize) { + errno = ENAMETOOLONG; + goto done; } + status = 0; } } done: From 282d13532b10e30b7a1da0dc9766a7dd039700cf Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 6 Oct 2022 13:40:00 -0600 Subject: [PATCH 160/186] Update NEWS file with recent changes. --- NEWS | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/NEWS b/NEWS index ec341e70a8..d528f08442 100644 --- a/NEWS +++ b/NEWS @@ -84,6 +84,21 @@ What's new in Sudo 1.9.12 a newer version of setuptools that doesn't include "find_module" is found on the system. + * Fixed a bug introduced in sudo 1.9.9 where sudo_logsrvd created + the process ID file, usually /var/run/sudo/sudo_logsrvd.pid, as + a directory instead of a plain file. The same bug could result + in I/O log directories that end in six or more X's being created + literally in addition to the name being used as a template for + the mkdtemp(3) function. + + * Fixed a long-standing bug where a sudoers rule with a command + line argument of "", which indicates the command may be run with + no arguments, would also match a literal "" on the command line. + GitHub issue #182. + + * Added the -I option to visudo which only edits the main sudoers + file. Include files are not edited unless a syntax error is found. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts From 6a0f7ccc4118a66ab1e722c43d56cd81c50ed563 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 6 Oct 2022 15:02:09 -0600 Subject: [PATCH 161/186] Fix printing of MYSELF when listing another user's privileges. We need to use list_pw if it is set instead of user_name. GitHub issue #183 --- plugins/sudoers/fmtsudoers.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/sudoers/fmtsudoers.c b/plugins/sudoers/fmtsudoers.c index c4152efbf9..8f0ab0539f 100644 --- a/plugins/sudoers/fmtsudoers.c +++ b/plugins/sudoers/fmtsudoers.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include "sudoers.h" @@ -51,7 +52,7 @@ sudoers_format_member_int(struct sudo_lbuf *lbuf, switch (type) { case MYSELF: sudo_lbuf_append(lbuf, "%s%s", negated ? "!" : "", - user_name ? user_name : ""); + list_pw ? list_pw->pw_name : (user_name ? user_name : "")); break; case ALL: if (name == NULL) { From af83e3c10fab8825aa2ae8a9f25a07996527bd4e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 6 Oct 2022 16:29:54 -0600 Subject: [PATCH 162/186] Fix display of command tags and options in "sudo -l" when RunAs changes. A new line is started when RunAs changes which means we need to display the command tags and options again. GitHub issue #184 --- plugins/sudoers/parse.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index 8693103097..3745efbe23 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -470,7 +470,7 @@ display_priv_short(struct sudoers_parse_tree *parse_tree, struct passwd *pw, debug_decl(display_priv_short, SUDOERS_DEBUG_PARSER); TAILQ_FOREACH(priv, &us->privileges, entries) { - struct cmndspec *cs, *prev_cs = NULL; + struct cmndspec *cs; struct cmndtag tags; if (hostlist_matches(parse_tree, pw, &priv->hostlist) != ALLOW) @@ -478,11 +478,13 @@ display_priv_short(struct sudoers_parse_tree *parse_tree, struct passwd *pw, sudoers_defaults_list_to_tags(&priv->defaults, &tags); TAILQ_FOREACH(cs, &priv->cmndlist, entries) { - /* Start a new line if RunAs changes. */ + struct cmndspec *prev_cs = TAILQ_PREV(cs, cmndspec_list, entries); + if (prev_cs == NULL || RUNAS_CHANGED(cs, prev_cs)) { struct member *m; - if (cs != TAILQ_FIRST(&priv->cmndlist)) + /* Start new line, first entry or RunAs changed. */ + if (prev_cs != NULL) sudo_lbuf_append(lbuf, "\n"); sudo_lbuf_append(lbuf, " ("); if (cs->runasuserlist != NULL) { @@ -507,11 +509,13 @@ display_priv_short(struct sudoers_parse_tree *parse_tree, struct passwd *pw, } } sudo_lbuf_append(lbuf, ") "); - } else if (cs != TAILQ_FIRST(&priv->cmndlist)) { + sudoers_format_cmndspec(lbuf, parse_tree, cs, NULL, tags, true); + } else { + /* Continue existing line. */ sudo_lbuf_append(lbuf, ", "); + sudoers_format_cmndspec(lbuf, parse_tree, cs, prev_cs, tags, + true); } - sudoers_format_cmndspec(lbuf, parse_tree, cs, prev_cs, tags, true); - prev_cs = cs; nfound++; } sudo_lbuf_append(lbuf, "\n"); From 0eb136d65ca1082239d7432476667de589cd4357 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Oct 2022 09:28:27 -0600 Subject: [PATCH 163/186] Fix a build error on Solaris 9. --- lib/util/mmap_alloc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/util/mmap_alloc.c b/lib/util/mmap_alloc.c index b136369f9a..df3d4cbcc2 100644 --- a/lib/util/mmap_alloc.c +++ b/lib/util/mmap_alloc.c @@ -28,6 +28,7 @@ #include #include +#include #include #if defined(HAVE_STDINT_H) # include From 57b5ff8e8cba59b09b1ec2bc192a799f5ca19e65 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Oct 2022 11:00:17 -0600 Subject: [PATCH 164/186] Avoid a -Wshadow warning on Solaris 9. --- docs/sudo_plugin.man.in | 62 +++---- docs/sudo_plugin.mdoc.in | 62 +++---- include/sudo_eventlog.h | 2 +- include/sudo_json.h | 20 +- include/sudo_plugin.h | 15 +- lib/eventlog/eventlog.c | 94 +++++----- lib/iolog/iolog_loginfo.c | 18 +- .../regress/iolog_json/check_iolog_json.c | 42 ++--- lib/util/json.c | 174 +++++++++--------- logsrvd/logsrvd_local.c | 42 ++--- plugins/audit_json/audit_json.c | 108 +++++------ plugins/sudoers/sudoers.h | 2 +- src/env_hooks.c | 20 +- src/exec_intercept.c | 24 +-- src/net_ifs.c | 48 ++--- src/sudo_intercept_common.c | 12 +- src/sudo_plugin_int.h | 10 +- 17 files changed, 383 insertions(+), 372 deletions(-) diff --git a/docs/sudo_plugin.man.in b/docs/sudo_plugin.man.in index 615cf447a8..d4e003628a 100644 --- a/docs/sudo_plugin.man.in +++ b/docs/sudo_plugin.man.in @@ -16,7 +16,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.TH "SUDO_PLUGIN" "5" "September 11, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN" "5" "October 7, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -70,7 +70,7 @@ struct policy_plugin { unsigned int type; /* always SUDO_POLICY_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const user_env[], char * const plugin_options[], const char **errstr); void (*close)(int exit_status, int error); @@ -79,9 +79,9 @@ struct policy_plugin { char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[], const char **errstr); int (*list)(int argc, char * const argv[], int verbose, - const char *list_user, const char **errstr); + const char *user, const char **errstr); int (*validate)(const char **errstr); - void (*invalidate)(int remove); + void (*invalidate)(int rmcred); int (*init_session)(struct passwd *pwd, char **user_env[], const char **errstr); void (*register_hooks)(int version, @@ -117,7 +117,7 @@ built against. .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const user_env[], char * const plugin_options[], const char **errstr); .RE @@ -132,7 +132,7 @@ will print a usage message before it exits. If an error occurs, the plugin may optionally call the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function with \fRSUDO_CONF_ERROR_MSG\fR to present additional error information to the user. @@ -154,7 +154,7 @@ function that can be used by the plugin to interact with the user (see for details). Returns 0 on success and \-1 on failure. .TP 6n -\fIplugin_printf\fR +\fIsudo_plugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used to display informational or error messages (see @@ -822,7 +822,7 @@ system call. The plugin is responsible for displaying error information via the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function. If the command was successfully executed, the value of \fIerror\fR @@ -861,7 +861,7 @@ option. The plugin may display its version information to the user via the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function using \fRSUDO_CONV_INFO_MSG\fR. If the user requests detailed version information, the @@ -948,7 +948,7 @@ exits. If an error occurs, the plugin may optionally call the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function with \fRSUDO_CONF_ERROR_MSG\fR to present additional error information to the user. @@ -1634,7 +1634,7 @@ Failure to do so may result in a crash. .nf .RS 6n int (*list)(int argc, char * const argv[], int verbose, - const char *list_user, const char **errstr); + const char *user, const char **errstr); .RE .fi .RS 6n @@ -1644,7 +1644,7 @@ Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function with \fRSUDO_CONF_ERROR_MSG\fR to present additional error information to @@ -1653,7 +1653,7 @@ the user. Privileges should be output via the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function using \fRSUDO_CONV_INFO_MSG\fR. .sp @@ -1680,7 +1680,7 @@ to the command should be displayed along with any command line arguments. \fIverbose\fR Flag indicating whether to list in verbose mode or not. .TP 6n -\fIlist_user\fR +\fIuser\fR The name of a different user to list privileges for if the policy allows it. If @@ -1749,7 +1749,7 @@ Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function with \fRSUDO_CONF_ERROR_MSG\fR to present additional @@ -1791,7 +1791,7 @@ Failure to do so may result in a crash. \fIinvalidate\fR .nf .RS 6n -void (*invalidate)(int remove); +void (*invalidate)(int rmcred); .RE .fi .RS 6n @@ -1811,7 +1811,7 @@ that cache authentication credentials, this function will invalidate the credentials. If the -\fIremove\fR +\fIrmcred\fR flag is non-zero, the plugin may remove the credentials instead of simply invalidating them. .sp @@ -1853,7 +1853,7 @@ Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function with \fRSUDO_CONF_ERROR_MSG\fR to present additional @@ -2097,7 +2097,7 @@ struct io_plugin { unsigned int type; /* always SUDO_IO_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[], char * const plugin_options[], const char **errstr); @@ -2197,7 +2197,7 @@ built against. .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[], char * const plugin_options[]); @@ -2230,7 +2230,7 @@ will print a usage message before it exits. If an error occurs, the plugin may optionally call the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function with \fRSUDO_CONF_ERROR_MSG\fR to present additional error information to the user. @@ -2259,7 +2259,7 @@ The \fBconversation\fR() function returns 0 on success and \-1 on failure. .TP 6n -\fIplugin_printf\fR +\fIsudo_plugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used by the @@ -2267,10 +2267,10 @@ function that may be used by the function to display version information (see show_version below). The -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function may also be used to display additional error message to the user. The -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function returns number of characters printed on success and \-1 on failure. .TP 6n \fIsettings\fR @@ -2511,7 +2511,7 @@ option. The plugin may display its version information to the user via the \fBconversation\fR() or -\fBplugin_printf\fR() +\fBsudo_plugin_printf\fR() function using \fRSUDO_CONV_INFO_MSG\fR. If the user requests detailed version information, the @@ -3008,7 +3008,7 @@ struct audit_plugin { unsigned int type; /* always SUDO_AUDIT_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -3065,7 +3065,7 @@ built against. .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -3687,7 +3687,7 @@ struct approval_plugin { unsigned int type; /* always SUDO_APPROVAL_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -3737,7 +3737,7 @@ built against. .nf .RS 6n int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -5013,7 +5013,7 @@ initialization, cleanup, and group lookup. .RS 0n struct sudoers_group_plugin { unsigned int version; - int (*init)(int version, sudo_printf_t sudo_printf, + int (*init)(int version, sudo_printf_t sudo_plugin_printf, char *const argv[]); void (*cleanup)(void); int (*query)(const char *user, const char *group, @@ -5039,7 +5039,7 @@ was built against. \fIinit\fR .nf .RS 6n -int (*init)(int version, sudo_printf_t plugin_printf, +int (*init)(int version, sudo_printf_t sudo_plugin_printf, char *const argv[]); .RE .fi diff --git a/docs/sudo_plugin.mdoc.in b/docs/sudo_plugin.mdoc.in index 7b6c3adda2..bca8fcbae4 100644 --- a/docs/sudo_plugin.mdoc.in +++ b/docs/sudo_plugin.mdoc.in @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd September 11, 2022 +.Dd October 7, 2022 .Dt SUDO_PLUGIN @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -67,7 +67,7 @@ struct policy_plugin { unsigned int type; /* always SUDO_POLICY_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const user_env[], char * const plugin_options[], const char **errstr); void (*close)(int exit_status, int error); @@ -76,9 +76,9 @@ struct policy_plugin { char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[], const char **errstr); int (*list)(int argc, char * const argv[], int verbose, - const char *list_user, const char **errstr); + const char *user, const char **errstr); int (*validate)(const char **errstr); - void (*invalidate)(int remove); + void (*invalidate)(int rmcred); int (*init_session)(struct passwd *pwd, char **user_env[], const char **errstr); void (*register_hooks)(int version, @@ -110,7 +110,7 @@ built against. .It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const user_env[], char * const plugin_options[], const char **errstr); .Ed @@ -123,7 +123,7 @@ will print a usage message before it exits. If an error occurs, the plugin may optionally call the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function with .Dv SUDO_CONF_ERROR_MSG to present additional error information to the user. @@ -143,7 +143,7 @@ function that can be used by the plugin to interact with the user (see .Sx Conversation API for details). Returns 0 on success and \-1 on failure. -.It Fa plugin_printf +.It Fa sudo_plugin_printf A pointer to a .Fn printf Ns -style function that may be used to display informational or error messages (see @@ -729,7 +729,7 @@ system call. The plugin is responsible for displaying error information via the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function. If the command was successfully executed, the value of .Fa error @@ -764,7 +764,7 @@ option. The plugin may display its version information to the user via the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function using .Dv SUDO_CONV_INFO_MSG . If the user requests detailed version information, the @@ -846,7 +846,7 @@ exits. If an error occurs, the plugin may optionally call the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function with .Dv SUDO_CONF_ERROR_MSG to present additional error information to the user. @@ -1462,7 +1462,7 @@ Failure to do so may result in a crash. .It Fa list .Bd -literal -compact int (*list)(int argc, char * const argv[], int verbose, - const char *list_user, const char **errstr); + const char *user, const char **errstr); .Ed .Pp List available privileges for the invoking user. @@ -1470,7 +1470,7 @@ Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function with .Dv SUDO_CONF_ERROR_MSG to present additional error information to @@ -1479,7 +1479,7 @@ the user. Privileges should be output via the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function using .Dv SUDO_CONV_INFO_MSG . .Pp @@ -1503,7 +1503,7 @@ If the command is permitted by the policy, the fully-qualified path to the command should be displayed along with any command line arguments. .It Fa verbose Flag indicating whether to list in verbose mode or not. -.It Fa list_user +.It Fa user The name of a different user to list privileges for if the policy allows it. If @@ -1564,7 +1564,7 @@ Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function with .Dv SUDO_CONF_ERROR_MSG to present additional @@ -1601,7 +1601,7 @@ Failure to do so may result in a crash. .El .It Fa invalidate .Bd -literal -compact -void (*invalidate)(int remove); +void (*invalidate)(int rmcred); .Ed .Pp The @@ -1619,7 +1619,7 @@ that cache authentication credentials, this function will invalidate the credentials. If the -.Fa remove +.Fa rmcred flag is non-zero, the plugin may remove the credentials instead of simply invalidating them. .Pp @@ -1656,7 +1656,7 @@ Returns 1 on success, 0 on failure, and \-1 on error. On error, the plugin may optionally call the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function with .Dv SUDO_CONF_ERROR_MSG to present additional @@ -1877,7 +1877,7 @@ struct io_plugin { unsigned int type; /* always SUDO_IO_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[], char * const plugin_options[], const char **errstr); @@ -1973,7 +1973,7 @@ built against. .It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t plugin_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[], char * const plugin_options[]); @@ -2004,7 +2004,7 @@ will print a usage message before it exits. If an error occurs, the plugin may optionally call the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function with .Dv SUDO_CONF_ERROR_MSG to present additional error information to the user. @@ -2031,7 +2031,7 @@ function may also be used to display additional error message to the user. The .Fn conversation function returns 0 on success and \-1 on failure. -.It Fa plugin_printf +.It Fa sudo_plugin_printf A pointer to a .Fn printf Ns -style function that may be used by the @@ -2039,10 +2039,10 @@ function that may be used by the function to display version information (see show_version below). The -.Fn plugin_printf +.Fn sudo_plugin_printf function may also be used to display additional error message to the user. The -.Fn plugin_printf +.Fn sudo_plugin_printf function returns number of characters printed on success and \-1 on failure. .It Fa settings A vector of user-supplied @@ -2258,7 +2258,7 @@ option. The plugin may display its version information to the user via the .Fn conversation or -.Fn plugin_printf +.Fn sudo_plugin_printf function using .Dv SUDO_CONV_INFO_MSG . If the user requests detailed version information, the @@ -2686,7 +2686,7 @@ struct audit_plugin { unsigned int type; /* always SUDO_AUDIT_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -2739,7 +2739,7 @@ built against. .It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -3291,7 +3291,7 @@ struct approval_plugin { unsigned int type; /* always SUDO_APPROVAL_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -3337,7 +3337,7 @@ built against. .It Fa open .Bd -literal -compact int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -4446,7 +4446,7 @@ initialization, cleanup, and group lookup. .Bd -literal struct sudoers_group_plugin { unsigned int version; - int (*init)(int version, sudo_printf_t sudo_printf, + int (*init)(int version, sudo_printf_t sudo_plugin_printf, char *const argv[]); void (*cleanup)(void); int (*query)(const char *user, const char *group, @@ -4469,7 +4469,7 @@ to determine the API version the group plugin was built against. .It Fa init .Bd -literal -compact -int (*init)(int version, sudo_printf_t plugin_printf, +int (*init)(int version, sudo_printf_t sudo_plugin_printf, char *const argv[]); .Ed .Pp diff --git a/include/sudo_eventlog.h b/include/sudo_eventlog.h index 457f519dc6..b4552f2e6f 100644 --- a/include/sudo_eventlog.h +++ b/include/sudo_eventlog.h @@ -132,7 +132,7 @@ bool eventlog_accept(const struct eventlog *evlog, int flags, eventlog_json_call bool eventlog_exit(const struct eventlog *evlog, int flags); bool eventlog_alert(const struct eventlog *evlog, int flags, struct timespec *alert_time, const char *reason, const char *errstr); bool eventlog_reject(const struct eventlog *evlog, int flags, const char *reason, eventlog_json_callback_t info_cb, void *info); -bool eventlog_store_json(struct json_container *json, const struct eventlog *evlog); +bool eventlog_store_json(struct json_container *jsonc, const struct eventlog *evlog); size_t eventlog_writeln(FILE *fp, char *line, size_t len, size_t maxlen); void eventlog_free(struct eventlog *evlog); void eventlog_set_type(int type); diff --git a/include/sudo_json.h b/include/sudo_json.h index ff942d2764..d40118c185 100644 --- a/include/sudo_json.h +++ b/include/sudo_json.h @@ -65,34 +65,34 @@ struct json_container { bool need_comma; }; -sudo_dso_public bool sudo_json_init_v1(struct json_container *json, int indent, bool minimal, bool memfatal); +sudo_dso_public bool sudo_json_init_v1(struct json_container *jsonc, int indent, bool minimal, bool memfatal); #define sudo_json_init(_a, _b, _c, _d) sudo_json_init_v1((_a), (_b), (_c), (_d)) -sudo_dso_public void sudo_json_free_v1(struct json_container *json); +sudo_dso_public void sudo_json_free_v1(struct json_container *jsonc); #define sudo_json_free(_a) sudo_json_free_v1((_a)) -sudo_dso_public bool sudo_json_open_object_v1(struct json_container *json, const char *name); +sudo_dso_public bool sudo_json_open_object_v1(struct json_container *jsonc, const char *name); #define sudo_json_open_object(_a, _b) sudo_json_open_object_v1((_a), (_b)) -sudo_dso_public bool sudo_json_close_object_v1(struct json_container *json); +sudo_dso_public bool sudo_json_close_object_v1(struct json_container *jsonc); #define sudo_json_close_object(_a) sudo_json_close_object_v1((_a)) -sudo_dso_public bool sudo_json_open_array_v1(struct json_container *json, const char *name); +sudo_dso_public bool sudo_json_open_array_v1(struct json_container *jsonc, const char *name); #define sudo_json_open_array(_a, _b) sudo_json_open_array_v1((_a), (_b)) -sudo_dso_public bool sudo_json_close_array_v1(struct json_container *json); +sudo_dso_public bool sudo_json_close_array_v1(struct json_container *jsonc); #define sudo_json_close_array(_a) sudo_json_close_array_v1((_a)) -sudo_dso_public bool sudo_json_add_value_v1(struct json_container *json, const char *name, struct json_value *value); +sudo_dso_public bool sudo_json_add_value_v1(struct json_container *jsonc, const char *name, struct json_value *value); #define sudo_json_add_value(_a, _b, _c) sudo_json_add_value_v1((_a), (_b), (_c)) -sudo_dso_public bool sudo_json_add_value_as_object_v1(struct json_container *json, const char *name, struct json_value *value); +sudo_dso_public bool sudo_json_add_value_as_object_v1(struct json_container *jsonc, const char *name, struct json_value *value); #define sudo_json_add_value_as_object(_a, _b, _c) sudo_json_add_value_as_object_v1((_a), (_b), (_c)) -sudo_dso_public char *sudo_json_get_buf_v1(struct json_container *json); +sudo_dso_public char *sudo_json_get_buf_v1(struct json_container *jsonc); #define sudo_json_get_buf(_a) sudo_json_get_buf_v1((_a)) -sudo_dso_public unsigned int sudo_json_get_len_v1(struct json_container *json); +sudo_dso_public unsigned int sudo_json_get_len_v1(struct json_container *jsonc); #define sudo_json_get_len(_a) sudo_json_get_len_v1((_a)) #endif /* SUDO_JSON_H */ diff --git a/include/sudo_plugin.h b/include/sudo_plugin.h index 45c30ce353..261763833e 100644 --- a/include/sudo_plugin.h +++ b/include/sudo_plugin.h @@ -165,7 +165,7 @@ struct policy_plugin { unsigned int type; /* always SUDO_POLICY_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const user_env[], char * const plugin_options[], const char **errstr); void (*close)(int exit_status, int error); /* wait status or error */ @@ -174,9 +174,9 @@ struct policy_plugin { char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[], const char **errstr); int (*list)(int argc, char * const argv[], int verbose, - const char *list_user, const char **errstr); + const char *user, const char **errstr); int (*validate)(const char **errstr); - void (*invalidate)(int remove); + void (*invalidate)(int rmcred); int (*init_session)(struct passwd *pwd, char **user_env_out[], const char **errstr); void (*register_hooks)(int version, int (*register_hook)(struct sudo_hook *hook)); @@ -190,7 +190,7 @@ struct io_plugin { unsigned int type; /* always SUDO_IO_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[], char * const plugin_options[], const char **errstr); @@ -223,7 +223,7 @@ struct audit_plugin { unsigned int type; /* always SUDO_AUDIT_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -249,7 +249,7 @@ struct approval_plugin { unsigned int type; /* always SUDO_APPROVAL_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); @@ -279,7 +279,8 @@ struct approval_plugin { */ struct sudoers_group_plugin { unsigned int version; - int (*init)(int version, sudo_printf_t sudo_printf, char *const argv[]); + int (*init)(int version, sudo_printf_t sudo_plugin_printf, + char *const argv[]); void (*cleanup)(void); int (*query)(const char *user, const char *group, const struct passwd *pwd); }; diff --git a/lib/eventlog/eventlog.c b/lib/eventlog/eventlog.c index 3d03294b9e..4621487d6f 100644 --- a/lib/eventlog/eventlog.c +++ b/lib/eventlog/eventlog.c @@ -627,24 +627,24 @@ send_mail(const struct eventlog *evlog, const char *fmt, ...) } static bool -json_add_timestamp(struct json_container *json, const char *name, +json_add_timestamp(struct json_container *jsonc, const char *name, const struct timespec *ts, bool format_timestamp) { struct json_value json_value; int len; debug_decl(json_add_timestamp, SUDO_DEBUG_PLUGIN); - if (!sudo_json_open_object(json, name)) + if (!sudo_json_open_object(jsonc, name)) goto oom; json_value.type = JSON_NUMBER; json_value.u.number = ts->tv_sec; - if (!sudo_json_add_value(json, "seconds", &json_value)) + if (!sudo_json_add_value(jsonc, "seconds", &json_value)) goto oom; json_value.type = JSON_NUMBER; json_value.u.number = ts->tv_nsec; - if (!sudo_json_add_value(json, "nanoseconds", &json_value)) + if (!sudo_json_add_value(jsonc, "nanoseconds", &json_value)) goto oom; if (format_timestamp) { @@ -660,7 +660,7 @@ json_add_timestamp(struct json_container *json, const char *name, if (len != 0 && timebuf[sizeof(timebuf) - 1] == '\0') { json_value.type = JSON_STRING; json_value.u.string = timebuf; // -V507 - if (!sudo_json_add_value(json, "iso8601", &json_value)) + if (!sudo_json_add_value(jsonc, "iso8601", &json_value)) goto oom; } } @@ -671,13 +671,13 @@ json_add_timestamp(struct json_container *json, const char *name, if (len != 0 && timebuf[sizeof(timebuf) - 1] == '\0') { json_value.type = JSON_STRING; json_value.u.string = timebuf; // -V507 - if (!sudo_json_add_value(json, "localtime", &json_value)) + if (!sudo_json_add_value(jsonc, "localtime", &json_value)) goto oom; } } } - if (!sudo_json_close_object(json)) + if (!sudo_json_close_object(jsonc)) goto oom; debug_return_bool(true); @@ -693,7 +693,7 @@ json_add_timestamp(struct json_container *json, const char *name, * be stored and formatted by the caller. */ bool -eventlog_store_json(struct json_container *json, const struct eventlog *evlog) +eventlog_store_json(struct json_container *jsonc, const struct eventlog *evlog) { struct json_value json_value; size_t i; @@ -712,112 +712,112 @@ eventlog_store_json(struct json_container *json, const struct eventlog *evlog) json_value.type = JSON_STRING; json_value.u.string = evlog->submituser; - if (!sudo_json_add_value(json, "submituser", &json_value)) + if (!sudo_json_add_value(jsonc, "submituser", &json_value)) goto oom; if (evlog->command != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->command; - if (!sudo_json_add_value(json, "command", &json_value)) + if (!sudo_json_add_value(jsonc, "command", &json_value)) goto oom; } if (evlog->runuser != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->runuser; - if (!sudo_json_add_value(json, "runuser", &json_value)) + if (!sudo_json_add_value(jsonc, "runuser", &json_value)) goto oom; } if (evlog->rungroup != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->rungroup; - if (!sudo_json_add_value(json, "rungroup", &json_value)) + if (!sudo_json_add_value(jsonc, "rungroup", &json_value)) goto oom; } if (evlog->runchroot != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->runchroot; - if (!sudo_json_add_value(json, "runchroot", &json_value)) + if (!sudo_json_add_value(jsonc, "runchroot", &json_value)) goto oom; } if (evlog->runcwd != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->runcwd; - if (!sudo_json_add_value(json, "runcwd", &json_value)) + if (!sudo_json_add_value(jsonc, "runcwd", &json_value)) goto oom; } if (evlog->ttyname != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->ttyname; - if (!sudo_json_add_value(json, "ttyname", &json_value)) + if (!sudo_json_add_value(jsonc, "ttyname", &json_value)) goto oom; } if (evlog->submithost != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->submithost; - if (!sudo_json_add_value(json, "submithost", &json_value)) + if (!sudo_json_add_value(jsonc, "submithost", &json_value)) goto oom; } if (evlog->cwd != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->cwd; - if (!sudo_json_add_value(json, "submitcwd", &json_value)) + if (!sudo_json_add_value(jsonc, "submitcwd", &json_value)) goto oom; } if (evlog->rungroup!= NULL && evlog->rungid != (gid_t)-1) { json_value.type = JSON_ID; json_value.u.id = evlog->rungid; - if (!sudo_json_add_value(json, "rungid", &json_value)) + if (!sudo_json_add_value(jsonc, "rungid", &json_value)) goto oom; } if (evlog->runuid != (uid_t)-1) { json_value.type = JSON_ID; json_value.u.id = evlog->runuid; - if (!sudo_json_add_value(json, "runuid", &json_value)) + if (!sudo_json_add_value(jsonc, "runuid", &json_value)) goto oom; } json_value.type = JSON_NUMBER; json_value.u.number = evlog->columns; - if (!sudo_json_add_value(json, "columns", &json_value)) + if (!sudo_json_add_value(jsonc, "columns", &json_value)) goto oom; json_value.type = JSON_NUMBER; json_value.u.number = evlog->lines; - if (!sudo_json_add_value(json, "lines", &json_value)) + if (!sudo_json_add_value(jsonc, "lines", &json_value)) goto oom; if (evlog->argv != NULL) { - if (!sudo_json_open_array(json, "runargv")) + if (!sudo_json_open_array(jsonc, "runargv")) goto oom; for (i = 0; (cp = evlog->argv[i]) != NULL; i++) { json_value.type = JSON_STRING; json_value.u.string = cp; - if (!sudo_json_add_value(json, NULL, &json_value)) + if (!sudo_json_add_value(jsonc, NULL, &json_value)) goto oom; } - if (!sudo_json_close_array(json)) + if (!sudo_json_close_array(jsonc)) goto oom; } if (evlog->envp != NULL) { - if (!sudo_json_open_array(json, "runenv")) + if (!sudo_json_open_array(jsonc, "runenv")) goto oom; for (i = 0; (cp = evlog->envp[i]) != NULL; i++) { json_value.type = JSON_STRING; json_value.u.string = cp; - if (!sudo_json_add_value(json, NULL, &json_value)) + if (!sudo_json_add_value(jsonc, NULL, &json_value)) goto oom; } - if (!sudo_json_close_array(json)) + if (!sudo_json_close_array(jsonc)) goto oom; } @@ -829,9 +829,9 @@ eventlog_store_json(struct json_container *json, const struct eventlog *evlog) } static bool -default_json_cb(struct json_container *json, void *v) +default_json_cb(struct json_container *jsonc, void *v) { - return eventlog_store_json(json, v); + return eventlog_store_json(jsonc, v); } static char * @@ -840,7 +840,7 @@ format_json(int event_type, struct eventlog_args *args, { eventlog_json_callback_t info_cb = args->json_info_cb; void *info = args->json_info; - struct json_container json = { 0 }; + struct json_container jsonc = { 0 }; struct json_value json_value; const char *time_str, *type_str; struct timespec now; @@ -880,15 +880,15 @@ format_json(int event_type, struct eventlog_args *args, debug_return_str(NULL); } - if (!sudo_json_init(&json, 4, compact, false)) + if (!sudo_json_init(&jsonc, 4, compact, false)) goto bad; - if (!sudo_json_open_object(&json, type_str)) + if (!sudo_json_open_object(&jsonc, type_str)) goto bad; if (evlog != NULL && evlog->uuid_str[0] != '\0') { json_value.type = JSON_STRING; json_value.u.string = evlog->uuid_str; - if (!sudo_json_add_value(&json, "uuid", &json_value)) + if (!sudo_json_add_value(&jsonc, "uuid", &json_value)) goto bad; } @@ -907,7 +907,7 @@ format_json(int event_type, struct eventlog_args *args, } json_value.type = JSON_STRING; json_value.u.string = ereason ? ereason : args->reason; - if (!sudo_json_add_value(&json, "reason", &json_value)) { + if (!sudo_json_add_value(&jsonc, "reason", &json_value)) { free(ereason); goto bad; } @@ -915,7 +915,7 @@ format_json(int event_type, struct eventlog_args *args, } /* Log event time on server (set earlier) */ - if (!json_add_timestamp(&json, "server_time", &now, true)) { + if (!json_add_timestamp(&jsonc, "server_time", &now, true)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unable format timestamp"); goto bad; @@ -923,7 +923,7 @@ format_json(int event_type, struct eventlog_args *args, /* Log event time from client */ if (args->event_time != NULL) { - if (!json_add_timestamp(&json, time_str, args->event_time, true)) { + if (!json_add_timestamp(&jsonc, time_str, args->event_time, true)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unable format timestamp"); goto bad; @@ -938,7 +938,7 @@ format_json(int event_type, struct eventlog_args *args, } if (sudo_timespecisset(&evlog->run_time)) { - if (!json_add_timestamp(&json, "run_time", &evlog->run_time, false)) { + if (!json_add_timestamp(&jsonc, "run_time", &evlog->run_time, false)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unable format timestamp"); goto bad; @@ -947,17 +947,17 @@ format_json(int event_type, struct eventlog_args *args, if (evlog->signal_name != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->signal_name; - if (!sudo_json_add_value(&json, "signal", &json_value)) + if (!sudo_json_add_value(&jsonc, "signal", &json_value)) goto bad; json_value.type = JSON_BOOL; json_value.u.boolean = evlog->dumped_core; - if (!sudo_json_add_value(&json, "dumped_core", &json_value)) + if (!sudo_json_add_value(&jsonc, "dumped_core", &json_value)) goto bad; } json_value.type = JSON_NUMBER; json_value.u.number = evlog->exit_value; - if (!sudo_json_add_value(&json, "exit_value", &json_value)) + if (!sudo_json_add_value(&jsonc, "exit_value", &json_value)) goto bad; } @@ -966,18 +966,18 @@ format_json(int event_type, struct eventlog_args *args, if (evlog->peeraddr != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->peeraddr; - if (!sudo_json_add_value(&json, "peeraddr", &json_value)) + if (!sudo_json_add_value(&jsonc, "peeraddr", &json_value)) goto bad; } if (evlog->iolog_path != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->iolog_path; - if (!sudo_json_add_value(&json, "iolog_path", &json_value)) + if (!sudo_json_add_value(&jsonc, "iolog_path", &json_value)) goto bad; if (sudo_timespecisset(&evlog->iolog_offset)) { - if (!json_add_timestamp(&json, "iolog_offset", &evlog->iolog_offset, false)) { + if (!json_add_timestamp(&jsonc, "iolog_offset", &evlog->iolog_offset, false)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "unable format timestamp"); goto bad; @@ -988,18 +988,18 @@ format_json(int event_type, struct eventlog_args *args, /* Write log info. */ if (info != NULL) { - if (!info_cb(&json, info)) + if (!info_cb(&jsonc, info)) goto bad; } - if (!sudo_json_close_object(&json)) + if (!sudo_json_close_object(&jsonc)) goto bad; /* Caller is responsible for freeing the buffer. */ - debug_return_str(sudo_json_get_buf(&json)); + debug_return_str(sudo_json_get_buf(&jsonc)); bad: - sudo_json_free(&json); + sudo_json_free(&jsonc); debug_return_str(NULL); } diff --git a/lib/iolog/iolog_loginfo.c b/lib/iolog/iolog_loginfo.c index 68b9224540..26902593d6 100644 --- a/lib/iolog/iolog_loginfo.c +++ b/lib/iolog/iolog_loginfo.c @@ -153,34 +153,34 @@ iolog_write_info_file_legacy(int dfd, struct eventlog *evlog) static bool iolog_write_info_file_json(int dfd, struct eventlog *evlog) { - struct json_container json; + struct json_container jsonc; struct json_value json_value; bool ret = false; FILE *fp = NULL; int fd = -1; debug_decl(iolog_write_info_file_json, SUDO_DEBUG_UTIL); - if (!sudo_json_init(&json, 4, false, false)) + if (!sudo_json_init(&jsonc, 4, false, false)) debug_return_bool(false); /* Timestamp */ - if (!sudo_json_open_object(&json, "timestamp")) + if (!sudo_json_open_object(&jsonc, "timestamp")) goto oom; json_value.type = JSON_NUMBER; json_value.u.number = evlog->submit_time.tv_sec; - if (!sudo_json_add_value(&json, "seconds", &json_value)) + if (!sudo_json_add_value(&jsonc, "seconds", &json_value)) goto oom; json_value.type = JSON_NUMBER; json_value.u.number = evlog->submit_time.tv_nsec; - if (!sudo_json_add_value(&json, "nanoseconds", &json_value)) + if (!sudo_json_add_value(&jsonc, "nanoseconds", &json_value)) goto oom; - if (!sudo_json_close_object(&json)) + if (!sudo_json_close_object(&jsonc)) goto oom; - if (!eventlog_store_json(&json, evlog)) + if (!eventlog_store_json(&jsonc, evlog)) goto done; fd = iolog_openat(dfd, "log.json", O_CREAT|O_TRUNC|O_WRONLY); @@ -197,7 +197,7 @@ iolog_write_info_file_json(int dfd, struct eventlog *evlog) } fd = -1; - fprintf(fp, "{%s\n}\n", sudo_json_get_buf(&json)); + fprintf(fp, "{%s\n}\n", sudo_json_get_buf(&jsonc)); fflush(fp); if (ferror(fp)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, @@ -211,7 +211,7 @@ iolog_write_info_file_json(int dfd, struct eventlog *evlog) oom: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); done: - sudo_json_free(&json); + sudo_json_free(&jsonc); if (fp != NULL) fclose(fp); if (fd != -1) diff --git a/lib/iolog/regress/iolog_json/check_iolog_json.c b/lib/iolog/regress/iolog_json/check_iolog_json.c index cb41f0df82..b50caca1ab 100644 --- a/lib/iolog/regress/iolog_json/check_iolog_json.c +++ b/lib/iolog/regress/iolog_json/check_iolog_json.c @@ -35,7 +35,7 @@ sudo_dso_public int main(int argc, char *argv[]); static bool -json_print_object(struct json_container *json, struct json_object *object) +json_print_object(struct json_container *jsonc, struct json_object *object) { struct json_item *item; struct json_value json_value; @@ -46,40 +46,40 @@ json_print_object(struct json_container *json, struct json_object *object) case JSON_STRING: json_value.type = JSON_STRING; json_value.u.string = item->u.string; - if (!sudo_json_add_value(json, item->name, &json_value)) + if (!sudo_json_add_value(jsonc, item->name, &json_value)) goto oom; break; case JSON_NUMBER: json_value.type = JSON_NUMBER; json_value.u.number = item->u.number; - if (!sudo_json_add_value(json, item->name, &json_value)) + if (!sudo_json_add_value(jsonc, item->name, &json_value)) goto oom; break; case JSON_OBJECT: - if (!sudo_json_open_object(json, item->name)) + if (!sudo_json_open_object(jsonc, item->name)) goto oom; - if (!json_print_object(json, &item->u.child)) + if (!json_print_object(jsonc, &item->u.child)) goto done; - if (!sudo_json_close_object(json)) + if (!sudo_json_close_object(jsonc)) goto oom; break; case JSON_ARRAY: - if (!sudo_json_open_array(json, item->name)) + if (!sudo_json_open_array(jsonc, item->name)) goto oom; - if (!json_print_object(json, &item->u.child)) + if (!json_print_object(jsonc, &item->u.child)) goto done; - if (!sudo_json_close_array(json)) + if (!sudo_json_close_array(jsonc)) goto oom; break; case JSON_BOOL: json_value.type = JSON_BOOL; json_value.u.boolean = item->u.boolean; - if (!sudo_json_add_value(json, item->name, &json_value)) + if (!sudo_json_add_value(jsonc, item->name, &json_value)) goto oom; break; case JSON_NULL: json_value.type = JSON_NULL; - if (!sudo_json_add_value(json, item->name, &json_value)) + if (!sudo_json_add_value(jsonc, item->name, &json_value)) goto oom; break; default: @@ -98,7 +98,7 @@ json_print_object(struct json_container *json, struct json_object *object) } static bool -json_format(struct json_container *json, struct json_object *object) +json_format(struct json_container *jsonc, struct json_object *object) { struct json_item *item; bool ret = false; @@ -111,7 +111,7 @@ json_format(struct json_container *json, struct json_object *object) } object = &item->u.child; - if (!json_print_object(json, object)) + if (!json_print_object(jsonc, object)) goto done; ret = true; @@ -129,7 +129,7 @@ usage(void) } static bool -compare(FILE *fp, const char *infile, struct json_container *json) +compare(FILE *fp, const char *infile, struct json_container *jsonc) { const char *cp; unsigned int lineno = 0; @@ -137,7 +137,7 @@ compare(FILE *fp, const char *infile, struct json_container *json) char *line = NULL; ssize_t len; - cp = sudo_json_get_buf(json); + cp = sudo_json_get_buf(jsonc); while ((len = getdelim(&line, &linesize, '\n', fp)) != -1) { lineno++; @@ -192,7 +192,7 @@ main(int argc, char *argv[]) usage(); for (i = 0; i < argc; i++) { - struct json_container json; + struct json_container jsonc; const char *infile = argv[i]; const char *outfile = argv[i]; const char *cp; @@ -202,7 +202,7 @@ main(int argc, char *argv[]) ntests++; - if (!sudo_json_init(&json, 4, false, true)) { + if (!sudo_json_init(&jsonc, 4, false, true)) { errors++; continue; } @@ -219,7 +219,7 @@ main(int argc, char *argv[]) } /* Format as pretty-printed JSON */ - if (!json_format(&json, &root)) { + if (!json_format(&jsonc, &root)) { errors++; goto next; } @@ -237,18 +237,18 @@ main(int argc, char *argv[]) /* Compare output to expected output. */ rewind(outfp); - if (!compare(outfp, outfile, &json)) + if (!compare(outfp, outfile, &jsonc)) errors++; /* Write the formatted output to stdout for -c (cat) */ if (cat) { - fprintf(stdout, "{%s\n}\n", sudo_json_get_buf(&json)); + fprintf(stdout, "{%s\n}\n", sudo_json_get_buf(&jsonc)); fflush(stdout); } next: free_json_items(&root.items); - sudo_json_free(&json); + sudo_json_free(&jsonc); if (infp != NULL) fclose(infp); if (outfp != NULL && outfp != infp) diff --git a/lib/util/json.c b/lib/util/json.c index 6fac63f4e4..266129dcaf 100644 --- a/lib/util/json.c +++ b/lib/util/json.c @@ -44,13 +44,13 @@ * Returns true on success, false if out of memory. */ static bool -json_expand_buf(struct json_container *json) +json_expand_buf(struct json_container *jsonc) { char *newbuf; debug_decl(json_expand_buf, SUDO_DEBUG_UTIL); - if ((newbuf = reallocarray(json->buf, 2, json->bufsize)) == NULL) { - if (json->memfatal) { + if ((newbuf = reallocarray(jsonc->buf, 2, jsonc->bufsize)) == NULL) { + if (jsonc->memfatal) { sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } @@ -58,8 +58,8 @@ json_expand_buf(struct json_container *json) "%s: %s", __func__, "unable to allocate memory"); debug_return_bool(false); } - json->buf = newbuf; - json->bufsize *= 2; + jsonc->buf = newbuf; + jsonc->bufsize *= 2; debug_return_bool(true); } @@ -69,24 +69,24 @@ json_expand_buf(struct json_container *json) * Append "indent" number of blank characters. */ static bool -json_new_line(struct json_container *json) +json_new_line(struct json_container *jsonc) { - int indent = json->indent_level; + int indent = jsonc->indent_level; debug_decl(json_new_line, SUDO_DEBUG_UTIL); /* No non-essential white space in minimal mode. */ - if (json->minimal) + if (jsonc->minimal) debug_return_bool(true); - while (json->buflen + 1 + indent >= json->bufsize) { - if (!json_expand_buf(json)) + while (jsonc->buflen + 1 + indent >= jsonc->bufsize) { + if (!json_expand_buf(jsonc)) debug_return_bool(false); } - json->buf[json->buflen++] = '\n'; + jsonc->buf[jsonc->buflen++] = '\n'; while (indent--) { - json->buf[json->buflen++] = ' '; + jsonc->buf[jsonc->buflen++] = ' '; } - json->buf[json->buflen] = '\0'; + jsonc->buf[jsonc->buflen] = '\0'; debug_return_bool(true); } @@ -96,20 +96,20 @@ json_new_line(struct json_container *json) * Does not perform any quoting. */ static bool -json_append_buf(struct json_container *json, const char *str) +json_append_buf(struct json_container *jsonc, const char *str) { size_t len; debug_decl(json_append_buf, SUDO_DEBUG_UTIL); len = strlen(str); - while (json->buflen + len >= json->bufsize) { - if (!json_expand_buf(json)) + while (jsonc->buflen + len >= jsonc->bufsize) { + if (!json_expand_buf(jsonc)) debug_return_bool(false); } - memcpy(json->buf + json->buflen, str, len); - json->buflen += len; - json->buf[json->buflen] = '\0'; + memcpy(jsonc->buf + jsonc->buflen, str, len); + jsonc->buflen += len; + jsonc->buf[jsonc->buflen] = '\0'; debug_return_bool(true); } @@ -119,12 +119,12 @@ json_append_buf(struct json_container *json, const char *str) * Does not support unicode escapes. */ static bool -json_append_string(struct json_container *json, const char *str) +json_append_string(struct json_container *jsonc, const char *str) { char ch; debug_decl(json_append_string, SUDO_DEBUG_UTIL); - if (!json_append_buf(json, "\"")) + if (!json_append_buf(jsonc, "\"")) debug_return_bool(false); while ((ch = *str++) != '\0') { char buf[3], *cp = buf; @@ -157,29 +157,29 @@ json_append_string(struct json_container *json, const char *str) } *cp++ = ch; *cp++ = '\0'; - if (!json_append_buf(json, buf)) + if (!json_append_buf(jsonc, buf)) debug_return_bool(false); } - if (!json_append_buf(json, "\"")) + if (!json_append_buf(jsonc, "\"")) debug_return_bool(false); debug_return_bool(true); } bool -sudo_json_init_v1(struct json_container *json, int indent, bool minimal, +sudo_json_init_v1(struct json_container *jsonc, int indent, bool minimal, bool memfatal) { debug_decl(sudo_json_init, SUDO_DEBUG_UTIL); - memset(json, 0, sizeof(*json)); - json->indent_level = indent; - json->indent_increment = indent; - json->minimal = minimal; - json->memfatal = memfatal; - json->buf = malloc(64 * 1024); - if (json->buf == NULL) { - if (json->memfatal) { + memset(jsonc, 0, sizeof(*jsonc)); + jsonc->indent_level = indent; + jsonc->indent_increment = indent; + jsonc->minimal = minimal; + jsonc->memfatal = memfatal; + jsonc->buf = malloc(64 * 1024); + if (jsonc->buf == NULL) { + if (jsonc->memfatal) { sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } @@ -187,162 +187,162 @@ sudo_json_init_v1(struct json_container *json, int indent, bool minimal, "%s: %s", __func__, "unable to allocate memory"); debug_return_bool(false); } - *json->buf = '\0'; - json->bufsize = 64 * 1024; + *jsonc->buf = '\0'; + jsonc->bufsize = 64 * 1024; debug_return_bool(true); } void -sudo_json_free_v1(struct json_container *json) +sudo_json_free_v1(struct json_container *jsonc) { debug_decl(sudo_json_free, SUDO_DEBUG_UTIL); - free(json->buf); - memset(json, 0, sizeof(*json)); + free(jsonc->buf); + memset(jsonc, 0, sizeof(*jsonc)); debug_return; } bool -sudo_json_open_object_v1(struct json_container *json, const char *name) +sudo_json_open_object_v1(struct json_container *jsonc, const char *name) { debug_decl(sudo_json_open_object, SUDO_DEBUG_UTIL); /* Add comma if we are continuing an object/array. */ - if (json->need_comma) { - if (!json_append_buf(json, ",")) + if (jsonc->need_comma) { + if (!json_append_buf(jsonc, ",")) debug_return_bool(false); } - if (!json_new_line(json)) + if (!json_new_line(jsonc)) debug_return_bool(false); if (name != NULL) { - json_append_string(json, name); - if (!json_append_buf(json, json->minimal ? ":{" : ": {")) + json_append_string(jsonc, name); + if (!json_append_buf(jsonc, jsonc->minimal ? ":{" : ": {")) debug_return_bool(false); } else { - if (!json_append_buf(json, "{")) + if (!json_append_buf(jsonc, "{")) debug_return_bool(false); } - json->indent_level += json->indent_increment; - json->need_comma = false; + jsonc->indent_level += jsonc->indent_increment; + jsonc->need_comma = false; debug_return_bool(true); } bool -sudo_json_close_object_v1(struct json_container *json) +sudo_json_close_object_v1(struct json_container *jsonc) { debug_decl(sudo_json_close_object, SUDO_DEBUG_UTIL); - if (!json->minimal) { - json->indent_level -= json->indent_increment; - if (!json_new_line(json)) + if (!jsonc->minimal) { + jsonc->indent_level -= jsonc->indent_increment; + if (!json_new_line(jsonc)) debug_return_bool(false); } - if (!json_append_buf(json, "}")) + if (!json_append_buf(jsonc, "}")) debug_return_bool(false); debug_return_bool(true); } bool -sudo_json_open_array_v1(struct json_container *json, const char *name) +sudo_json_open_array_v1(struct json_container *jsonc, const char *name) { debug_decl(sudo_json_open_array, SUDO_DEBUG_UTIL); /* Add comma if we are continuing an object/array. */ - if (json->need_comma) { - if (!json_append_buf(json, ",")) + if (jsonc->need_comma) { + if (!json_append_buf(jsonc, ",")) debug_return_bool(false); } - if (!json_new_line(json)) + if (!json_new_line(jsonc)) debug_return_bool(false); if (name != NULL) { - json_append_string(json, name); - if (!json_append_buf(json, json->minimal ? ":[" : ": [")) + json_append_string(jsonc, name); + if (!json_append_buf(jsonc, jsonc->minimal ? ":[" : ": [")) debug_return_bool(false); } else { - if (!json_append_buf(json, "[")) + if (!json_append_buf(jsonc, "[")) debug_return_bool(false); } - json->indent_level += json->indent_increment; - json->need_comma = false; + jsonc->indent_level += jsonc->indent_increment; + jsonc->need_comma = false; debug_return_bool(true); } bool -sudo_json_close_array_v1(struct json_container *json) +sudo_json_close_array_v1(struct json_container *jsonc) { debug_decl(sudo_json_close_array, SUDO_DEBUG_UTIL); - if (!json->minimal) { - json->indent_level -= json->indent_increment; - if (!json_new_line(json)) + if (!jsonc->minimal) { + jsonc->indent_level -= jsonc->indent_increment; + if (!json_new_line(jsonc)) debug_return_bool(false); } - if (!json_append_buf(json, "]")) + if (!json_append_buf(jsonc, "]")) debug_return_bool(false); debug_return_bool(true); } static bool -sudo_json_add_value_int(struct json_container *json, const char *name, +sudo_json_add_value_int(struct json_container *jsonc, const char *name, struct json_value *value, bool as_object) { char numbuf[(((sizeof(long long) * 8) + 2) / 3) + 2]; debug_decl(sudo_json_add_value, SUDO_DEBUG_UTIL); /* Add comma if we are continuing an object/array. */ - if (json->need_comma) { - if (!json_append_buf(json, ",")) + if (jsonc->need_comma) { + if (!json_append_buf(jsonc, ",")) debug_return_bool(false); } - if (!json_new_line(json)) + if (!json_new_line(jsonc)) debug_return_bool(false); - json->need_comma = true; + jsonc->need_comma = true; if (as_object) { - if (!json_append_buf(json, json->minimal ? "{" : "{ ")) + if (!json_append_buf(jsonc, jsonc->minimal ? "{" : "{ ")) debug_return_bool(false); } /* name */ if (name != NULL) { - if (!json_append_string(json, name)) + if (!json_append_string(jsonc, name)) debug_return_bool(false); - if (!json_append_buf(json, json->minimal ? ":" : ": ")) + if (!json_append_buf(jsonc, jsonc->minimal ? ":" : ": ")) debug_return_bool(false); } /* value */ switch (value->type) { case JSON_STRING: - if (!json_append_string(json, value->u.string)) + if (!json_append_string(jsonc, value->u.string)) debug_return_bool(false); break; case JSON_ID: snprintf(numbuf, sizeof(numbuf), "%u", (unsigned int)value->u.id); - if (!json_append_buf(json, numbuf)) + if (!json_append_buf(jsonc, numbuf)) debug_return_bool(false); break; case JSON_NUMBER: snprintf(numbuf, sizeof(numbuf), "%lld", value->u.number); - if (!json_append_buf(json, numbuf)) + if (!json_append_buf(jsonc, numbuf)) debug_return_bool(false); break; case JSON_NULL: - if (!json_append_buf(json, "null")) + if (!json_append_buf(jsonc, "null")) debug_return_bool(false); break; case JSON_BOOL: - if (!json_append_buf(json, value->u.boolean ? "true" : "false")) + if (!json_append_buf(jsonc, value->u.boolean ? "true" : "false")) debug_return_bool(false); break; case JSON_ARRAY: @@ -354,7 +354,7 @@ sudo_json_add_value_int(struct json_container *json, const char *name, } if (as_object) { - if (!json_append_buf(json, json->minimal ? "}" : " }")) + if (!json_append_buf(jsonc, jsonc->minimal ? "}" : " }")) debug_return_bool(false); } @@ -362,27 +362,27 @@ sudo_json_add_value_int(struct json_container *json, const char *name, } bool -sudo_json_add_value_v1(struct json_container *json, const char *name, +sudo_json_add_value_v1(struct json_container *jsonc, const char *name, struct json_value *value) { - return sudo_json_add_value_int(json, name, value, false); + return sudo_json_add_value_int(jsonc, name, value, false); } bool -sudo_json_add_value_as_object_v1(struct json_container *json, const char *name, +sudo_json_add_value_as_object_v1(struct json_container *jsonc, const char *name, struct json_value *value) { - return sudo_json_add_value_int(json, name, value, true); + return sudo_json_add_value_int(jsonc, name, value, true); } char * -sudo_json_get_buf_v1(struct json_container *json) +sudo_json_get_buf_v1(struct json_container *jsonc) { - return json->buf; + return jsonc->buf; } unsigned int -sudo_json_get_len_v1(struct json_container *json) +sudo_json_get_len_v1(struct json_container *jsonc) { - return json->buflen; + return jsonc->buflen; } diff --git a/logsrvd/logsrvd_local.c b/logsrvd/logsrvd_local.c index a343d9f891..4d1f9d7dda 100644 --- a/logsrvd/logsrvd_local.c +++ b/logsrvd/logsrvd_local.c @@ -87,7 +87,7 @@ set_random_drop(const char *dropstr) } static bool -logsrvd_json_log_cb(struct json_container *json, void *v) +logsrvd_json_log_cb(struct json_container *jsonc, void *v) { struct logsrvd_info_closure *closure = v; struct json_value json_value; @@ -101,7 +101,7 @@ logsrvd_json_log_cb(struct json_container *json, void *v) case INFO_MESSAGE__VALUE_NUMVAL: json_value.type = JSON_NUMBER; json_value.u.number = info->u.numval; - if (!sudo_json_add_value(json, info->key, &json_value)) + if (!sudo_json_add_value(jsonc, info->key, &json_value)) goto bad; break; case INFO_MESSAGE__VALUE_STRVAL: @@ -112,7 +112,7 @@ logsrvd_json_log_cb(struct json_container *json, void *v) } json_value.type = JSON_STRING; json_value.u.string = info->u.strval; - if (!sudo_json_add_value(json, info->key, &json_value)) + if (!sudo_json_add_value(jsonc, info->key, &json_value)) goto bad; break; case INFO_MESSAGE__VALUE_STRLISTVAL: { @@ -124,7 +124,7 @@ logsrvd_json_log_cb(struct json_container *json, void *v) "local", info->key); break; } - if (!sudo_json_open_array(json, info->key)) + if (!sudo_json_open_array(jsonc, info->key)) goto bad; for (n = 0; n < strlist->n_strings; n++) { if (strlist->strings[n] == NULL) { @@ -134,10 +134,10 @@ logsrvd_json_log_cb(struct json_container *json, void *v) } json_value.type = JSON_STRING; json_value.u.string = strlist->strings[n]; - if (!sudo_json_add_value(json, NULL, &json_value)) + if (!sudo_json_add_value(jsonc, NULL, &json_value)) goto bad; } - if (!sudo_json_close_array(json)) + if (!sudo_json_close_array(jsonc)) goto bad; break; } @@ -150,15 +150,15 @@ logsrvd_json_log_cb(struct json_container *json, void *v) "local", info->key); break; } - if (!sudo_json_open_array(json, info->key)) + if (!sudo_json_open_array(jsonc, info->key)) goto bad; for (n = 0; n < numlist->n_numbers; n++) { json_value.type = JSON_NUMBER; json_value.u.number = numlist->numbers[n]; - if (!sudo_json_add_value(json, NULL, &json_value)) + if (!sudo_json_add_value(jsonc, NULL, &json_value)) goto bad; } - if (!sudo_json_close_array(json)) + if (!sudo_json_close_array(jsonc)) goto bad; break; } @@ -304,7 +304,7 @@ store_reject_local(RejectMessage *msg, uint8_t *buf, size_t len, static bool store_exit_info_json(int dfd, struct eventlog *evlog) { - struct json_container json = { 0 }; + struct json_container jsonc = { 0 }; struct json_value json_value; struct iovec iov[3]; bool ret = false; @@ -312,7 +312,7 @@ store_exit_info_json(int dfd, struct eventlog *evlog) off_t pos; debug_decl(store_exit_info_json, SUDO_DEBUG_UTIL); - if (!sudo_json_init(&json, 4, false, false)) + if (!sudo_json_init(&jsonc, 4, false, false)) goto done; fd = iolog_openat(dfd, "log.json", O_RDWR); @@ -327,38 +327,38 @@ store_exit_info_json(int dfd, struct eventlog *evlog) } if (sudo_timespecisset(&evlog->run_time)) { - if (!sudo_json_open_object(&json, "run_time")) + if (!sudo_json_open_object(&jsonc, "run_time")) goto done; json_value.type = JSON_NUMBER; json_value.u.number = evlog->run_time.tv_sec; - if (!sudo_json_add_value(&json, "seconds", &json_value)) + if (!sudo_json_add_value(&jsonc, "seconds", &json_value)) goto done; json_value.type = JSON_NUMBER; json_value.u.number = evlog->run_time.tv_nsec; - if (!sudo_json_add_value(&json, "nanoseconds", &json_value)) + if (!sudo_json_add_value(&jsonc, "nanoseconds", &json_value)) goto done; - if (!sudo_json_close_object(&json)) + if (!sudo_json_close_object(&jsonc)) goto done; } if (evlog->signal_name != NULL) { json_value.type = JSON_STRING; json_value.u.string = evlog->signal_name; - if (!sudo_json_add_value(&json, "signal", &json_value)) + if (!sudo_json_add_value(&jsonc, "signal", &json_value)) goto done; json_value.type = JSON_BOOL; json_value.u.boolean = evlog->dumped_core; - if (!sudo_json_add_value(&json, "dumped_core", &json_value)) + if (!sudo_json_add_value(&jsonc, "dumped_core", &json_value)) goto done; } json_value.type = JSON_NUMBER; json_value.u.number = evlog->exit_value; - if (!sudo_json_add_value(&json, "exit_value", &json_value)) + if (!sudo_json_add_value(&jsonc, "exit_value", &json_value)) goto done; /* Back up to overwrite the final "\n}\n" */ @@ -372,8 +372,8 @@ store_exit_info_json(int dfd, struct eventlog *evlog) /* Append the exit data and close the object. */ iov[0].iov_base = (char *)","; iov[0].iov_len = 1; - iov[1].iov_base = sudo_json_get_buf(&json); - iov[1].iov_len = sudo_json_get_len(&json); + iov[1].iov_base = sudo_json_get_buf(&jsonc); + iov[1].iov_len = sudo_json_get_len(&jsonc); iov[2].iov_base = (char *)"\n}\n"; iov[2].iov_len = 3; if (writev(fd, iov, 3) == -1) { @@ -391,7 +391,7 @@ store_exit_info_json(int dfd, struct eventlog *evlog) done: if (fd != -1) close(fd); - sudo_json_free(&json); + sudo_json_free(&jsonc); debug_return_bool(ret); } diff --git a/plugins/audit_json/audit_json.c b/plugins/audit_json/audit_json.c index 96ada081c8..b419ca3869 100644 --- a/plugins/audit_json/audit_json.c +++ b/plugins/audit_json/audit_json.c @@ -189,7 +189,7 @@ audit_json_open(unsigned int version, sudo_conv_t conversation, } static bool -add_key_value(struct json_container *json, const char *str) +add_key_value(struct json_container *jsonc, const char *str) { struct json_value json_value; const char *cp, *errstr; @@ -256,26 +256,26 @@ add_key_value(struct json_container *json, const char *str) json_value.u.string = cp; } - debug_return_bool(sudo_json_add_value(json, name, &json_value)); + debug_return_bool(sudo_json_add_value(jsonc, name, &json_value)); } static bool -add_array(struct json_container *json, const char *name, char * const * array) +add_array(struct json_container *jsonc, const char *name, char * const * array) { const char *cp; struct json_value json_value; debug_decl(add_array, SUDO_DEBUG_PLUGIN); - if (!sudo_json_open_array(json, name)) + if (!sudo_json_open_array(jsonc, name)) debug_return_bool(false); while ((cp = *array) != NULL) { json_value.type = JSON_STRING; json_value.u.string = cp; - if (!sudo_json_add_value(json, name, &json_value)) + if (!sudo_json_add_value(jsonc, name, &json_value)) debug_return_bool(false); array++; } - if (!sudo_json_close_array(json)) + if (!sudo_json_close_array(jsonc)) debug_return_bool(false); debug_return_bool(true); @@ -299,7 +299,7 @@ filter_key_value(const char *kv, const char * const * filter) } static bool -add_key_value_object(struct json_container *json, const char *name, +add_key_value_object(struct json_container *jsonc, const char *name, char * const * array, const char * const * filter) { char * const *cur; @@ -318,15 +318,15 @@ add_key_value_object(struct json_container *json, const char *name, } } if (!empty) { - if (!sudo_json_open_object(json, name)) + if (!sudo_json_open_object(jsonc, name)) goto bad; for (cur = array; (cp = *cur) != NULL; cur++) { if (filter_key_value(cp, filter)) continue; - if (!add_key_value(json, cp)) + if (!add_key_value(jsonc, cp)) goto bad; } - if (!sudo_json_close_object(json)) + if (!sudo_json_close_object(jsonc)) goto bad; } @@ -336,7 +336,7 @@ add_key_value_object(struct json_container *json, const char *name, } static bool -add_timestamp(struct json_container *json, struct timespec *ts) +add_timestamp(struct json_container *jsonc, struct timespec *ts) { struct json_value json_value; time_t secs = ts->tv_sec; @@ -348,22 +348,22 @@ add_timestamp(struct json_container *json, struct timespec *ts) if (gmtime_r(&secs, &gmt) == NULL) debug_return_bool(false); - sudo_json_open_object(json, "timestamp"); + sudo_json_open_object(jsonc, "timestamp"); json_value.type = JSON_NUMBER; json_value.u.number = ts->tv_sec; - sudo_json_add_value(json, "seconds", &json_value); + sudo_json_add_value(jsonc, "seconds", &json_value); json_value.type = JSON_NUMBER; json_value.u.number = ts->tv_nsec; - sudo_json_add_value(json, "nanoseconds", &json_value); + sudo_json_add_value(jsonc, "nanoseconds", &json_value); timebuf[sizeof(timebuf) - 1] = '\0'; len = strftime(timebuf, sizeof(timebuf), "%Y%m%d%H%M%SZ", &gmt); if (len != 0 && timebuf[sizeof(timebuf) - 1] == '\0'){ json_value.type = JSON_STRING; json_value.u.string = timebuf; - sudo_json_add_value(json, "iso8601", &json_value); + sudo_json_add_value(jsonc, "iso8601", &json_value); } timebuf[sizeof(timebuf) - 1] = '\0'; @@ -371,16 +371,16 @@ add_timestamp(struct json_container *json, struct timespec *ts) if (len != 0 && timebuf[sizeof(timebuf) - 1] == '\0'){ json_value.type = JSON_STRING; json_value.u.string = timebuf; - sudo_json_add_value(json, "localtime", &json_value); + sudo_json_add_value(jsonc, "localtime", &json_value); } - sudo_json_close_object(json); + sudo_json_close_object(jsonc); debug_return_bool(true); } static int -audit_write_json(struct json_container *json) +audit_write_json(struct json_container *jsonc) { struct stat sb; int ret = -1; @@ -410,7 +410,7 @@ audit_write_json(struct json_container *json) goto done; } - fputs(sudo_json_get_buf(json), state.log_fp); + fputs(sudo_json_get_buf(jsonc), state.log_fp); fputs("\n}\n", state.log_fp); fflush(state.log_fp); (void)sudo_lock_file(fileno(state.log_fp), SUDO_UNLOCK); @@ -426,7 +426,7 @@ audit_write_json(struct json_container *json) static int audit_write_exit_record(int exit_status, int error) { - struct json_container json; + struct json_container jsonc; struct json_value json_value; struct timespec now; int ret = -1; @@ -437,33 +437,33 @@ audit_write_exit_record(int exit_status, int error) goto done; } - if (!sudo_json_init(&json, 4, false, false)) + if (!sudo_json_init(&jsonc, 4, false, false)) goto oom; - if (!sudo_json_open_object(&json, "exit")) + if (!sudo_json_open_object(&jsonc, "exit")) goto oom; /* Write UUID */ json_value.type = JSON_STRING; json_value.u.string = state.uuid_str; - if (!sudo_json_add_value(&json, "uuid", &json_value)) + if (!sudo_json_add_value(&jsonc, "uuid", &json_value)) goto oom; /* Write time stamp */ - if (!add_timestamp(&json, &now)) + if (!add_timestamp(&jsonc, &now)) goto oom; if (error != 0) { /* Error executing command */ json_value.type = JSON_STRING; json_value.u.string = strerror(error); - if (!sudo_json_add_value(&json, "error", &json_value)) + if (!sudo_json_add_value(&jsonc, "error", &json_value)) goto oom; } else { if (WIFEXITED(exit_status)) { /* Command exited normally. */ json_value.type = JSON_NUMBER; json_value.u.number = WEXITSTATUS(exit_status); - if (!sudo_json_add_value(&json, "exit_value", &json_value)) + if (!sudo_json_add_value(&jsonc, "exit_value", &json_value)) goto oom; } else if (WIFSIGNALED(exit_status)) { /* Command killed by signal. */ @@ -472,37 +472,37 @@ audit_write_exit_record(int exit_status, int error) if (signo <= 0 || sig2str(signo, signame) == -1) { json_value.type = JSON_NUMBER; json_value.u.number = signo; - if (!sudo_json_add_value(&json, "signal", &json_value)) + if (!sudo_json_add_value(&jsonc, "signal", &json_value)) goto oom; } else { json_value.type = JSON_STRING; json_value.u.string = signame; // -V507 - if (!sudo_json_add_value(&json, "signal", &json_value)) + if (!sudo_json_add_value(&jsonc, "signal", &json_value)) goto oom; } /* Core dump? */ json_value.type = JSON_BOOL; json_value.u.boolean = WCOREDUMP(exit_status); - if (!sudo_json_add_value(&json, "dumped_core", &json_value)) + if (!sudo_json_add_value(&jsonc, "dumped_core", &json_value)) goto oom; /* Exit value */ json_value.type = JSON_NUMBER; json_value.u.number = WTERMSIG(exit_status) | 128; - if (!sudo_json_add_value(&json, "exit_value", &json_value)) + if (!sudo_json_add_value(&jsonc, "exit_value", &json_value)) goto oom; } } - if (!sudo_json_close_object(&json)) + if (!sudo_json_close_object(&jsonc)) goto oom; - ret = audit_write_json(&json); - sudo_json_free(&json); + ret = audit_write_json(&jsonc); + sudo_json_free(&jsonc); done: debug_return_int(ret); oom: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - sudo_json_free(&json); + sudo_json_free(&jsonc); debug_return_int(-1); } @@ -511,7 +511,7 @@ audit_write_record(const char *audit_str, const char *plugin_name, unsigned int plugin_type, const char *reason, char * const command_info[], char * const run_argv[], char * const run_envp[]) { - struct json_container json; + struct json_container jsonc; struct json_value json_value; struct timespec now; int ret = -1; @@ -522,14 +522,14 @@ audit_write_record(const char *audit_str, const char *plugin_name, goto done; } - if (!sudo_json_init(&json, 4, false, false)) + if (!sudo_json_init(&jsonc, 4, false, false)) goto oom; - if (!sudo_json_open_object(&json, audit_str)) + if (!sudo_json_open_object(&jsonc, audit_str)) goto oom; json_value.type = JSON_STRING; json_value.u.string = plugin_name; - if (!sudo_json_add_value(&json, "plugin_name", &json_value)) + if (!sudo_json_add_value(&jsonc, "plugin_name", &json_value)) goto oom; switch (plugin_type) { @@ -553,85 +553,85 @@ audit_write_record(const char *audit_str, const char *plugin_name, break; } json_value.type = JSON_STRING; - if (!sudo_json_add_value(&json, "plugin_type", &json_value)) + if (!sudo_json_add_value(&jsonc, "plugin_type", &json_value)) goto oom; /* error and reject audit events usually contain a reason. */ if (reason != NULL) { json_value.type = JSON_STRING; json_value.u.string = reason; - if (!sudo_json_add_value(&json, "reason", &json_value)) + if (!sudo_json_add_value(&jsonc, "reason", &json_value)) goto oom; } json_value.type = JSON_STRING; json_value.u.string = state.uuid_str; - if (!sudo_json_add_value(&json, "uuid", &json_value)) + if (!sudo_json_add_value(&jsonc, "uuid", &json_value)) goto oom; - if (!add_timestamp(&json, &now)) + if (!add_timestamp(&jsonc, &now)) goto oom; /* Write key=value objects. */ if (state.settings != NULL) { - if (!add_key_value_object(&json, "options", state.settings, settings_filter)) + if (!add_key_value_object(&jsonc, "options", state.settings, settings_filter)) goto oom; } else { sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, "missing settings list"); } if (state.user_info != NULL) { - if (!add_key_value_object(&json, "user_info", state.user_info, NULL)) + if (!add_key_value_object(&jsonc, "user_info", state.user_info, NULL)) goto oom; } else { sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, "missing user_info list"); } if (command_info != NULL) { - if (!add_key_value_object(&json, "command_info", command_info, NULL)) + if (!add_key_value_object(&jsonc, "command_info", command_info, NULL)) goto oom; } /* Write submit_optind before submit_argv */ json_value.type = JSON_NUMBER; json_value.u.number = state.submit_optind; - if (!sudo_json_add_value(&json, "submit_optind", &json_value)) + if (!sudo_json_add_value(&jsonc, "submit_optind", &json_value)) goto oom; if (state.submit_argv != NULL) { - if (!add_array(&json, "submit_argv", state.submit_argv)) + if (!add_array(&jsonc, "submit_argv", state.submit_argv)) goto oom; } else { sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, "missing submit_argv array"); } if (state.submit_envp != NULL) { - if (!add_array(&json, "submit_envp", state.submit_envp)) + if (!add_array(&jsonc, "submit_envp", state.submit_envp)) goto oom; } else { sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, "missing submit_envp array"); } if (run_argv != NULL) { - if (!add_array(&json, "run_argv", run_argv)) + if (!add_array(&jsonc, "run_argv", run_argv)) goto oom; } if (run_envp != NULL) { - if (!add_array(&json, "run_envp", run_envp)) + if (!add_array(&jsonc, "run_envp", run_envp)) goto oom; } - if (!sudo_json_close_object(&json)) + if (!sudo_json_close_object(&jsonc)) goto oom; - ret = audit_write_json(&json); - sudo_json_free(&json); + ret = audit_write_json(&jsonc); + sudo_json_free(&jsonc); done: debug_return_int(ret); oom: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - sudo_json_free(&json); + sudo_json_free(&jsonc); debug_return_int(-1); } diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 90f1e5fc62..cd92707448 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -413,7 +413,7 @@ int sudoers_hook_getenv(const char *name, char **value, void *closure); int sudoers_hook_putenv(char *string, void *closure); int sudoers_hook_setenv(const char *name, const char *value, int overwrite, void *closure); int sudoers_hook_unsetenv(const char *name, void *closure); -void register_env_file(void * (*ef_open)(const char *), void (*ef_close)(void *), char * (*ef_next)(void *, int *), bool system); +void register_env_file(void * (*ef_open)(const char *), void (*ef_close)(void *), char * (*ef_next)(void *, int *), bool sys); /* env_pattern.c */ bool matches_env_pattern(const char *pattern, const char *var, bool *full_match); diff --git a/src/env_hooks.c b/src/env_hooks.c index 442efb502e..eaacaa7d9d 100644 --- a/src/env_hooks.c +++ b/src/env_hooks.c @@ -57,7 +57,9 @@ getenv_unhooked(const char *name) return val; } -sudo_dso_public char * +sudo_dso_public char *getenv(const char *name); + +char * getenv(const char *name) { char *val = NULL; @@ -143,7 +145,9 @@ putenv_unhooked(PUTENV_CONST char *string) return rpl_putenv(string); } -sudo_dso_public int +sudo_dso_public int putenv(PUTENV_CONST char *string); + +int putenv(PUTENV_CONST char *string) { switch (process_hooks_putenv((char *)string)) { @@ -215,7 +219,9 @@ setenv_unhooked(const char *var, const char *val, int overwrite) return rpl_setenv(var, val, overwrite); } -sudo_dso_public int +sudo_dso_public int setenv(const char *var, const char *val, int overwrite); + +int setenv(const char *var, const char *val, int overwrite) { switch (process_hooks_setenv(var, val, overwrite)) { @@ -280,10 +286,14 @@ unsetenv_unhooked(const char *var) } #ifdef UNSETENV_VOID -sudo_dso_public void +# define UNSETENV_RTYPE void #else -sudo_dso_public int +# define UNSETENV_RTYPE int #endif + +sudo_dso_public UNSETENV_RTYPE unsetenv(const char *var); + +UNSETENV_RTYPE unsetenv(const char *var) { int ret; diff --git a/src/exec_intercept.c b/src/exec_intercept.c index ab446c4526..423dc0dfbb 100644 --- a/src/exec_intercept.c +++ b/src/exec_intercept.c @@ -218,8 +218,8 @@ intercept_cleanup(void) static bool prepare_listener(struct intercept_closure *closure) { - struct sockaddr_in sin; - socklen_t sin_len = sizeof(sin); + struct sockaddr_in sin4; + socklen_t sin4_len = sizeof(sin4); int sock; debug_decl(prepare_listener, SUDO_DEBUG_EXEC); @@ -234,15 +234,15 @@ prepare_listener(struct intercept_closure *closure) sudo_warn("socket"); goto bad; } - memset(&sin, 0, sizeof(sin)); - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - sin.sin_port = 0; - if (bind(sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) { + memset(&sin4, 0, sizeof(sin4)); + sin4.sin_family = AF_INET; + sin4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + sin4.sin_port = 0; + if (bind(sock, (struct sockaddr *)&sin4, sizeof(sin4)) == -1) { sudo_warn("bind"); goto bad; } - if (getsockname(sock, (struct sockaddr *)&sin, &sin_len) == -1) { + if (getsockname(sock, (struct sockaddr *)&sin4, &sin4_len) == -1) { sudo_warn("getsockname"); goto bad; } @@ -252,7 +252,7 @@ prepare_listener(struct intercept_closure *closure) } closure->listen_sock = sock; - intercept_listen_port = ntohs(sin.sin_port); + intercept_listen_port = ntohs(sin4.sin_port); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "%s: listening on port %hu", __func__, intercept_listen_port); @@ -1012,8 +1012,8 @@ intercept_accept_cb(int fd, int what, void *v) { struct intercept_closure *closure = v; struct sudo_event_base *evbase = sudo_ev_get_base(&closure->ev); - struct sockaddr_in sin; - socklen_t sin_len = sizeof(sin); + struct sockaddr_in sin4; + socklen_t sin4_len = sizeof(sin4); int client_sock, flags, on = 1; debug_decl(intercept_accept_cb, SUDO_DEBUG_EXEC); @@ -1026,7 +1026,7 @@ intercept_accept_cb(int fd, int what, void *v) debug_return; } - client_sock = accept(fd, (struct sockaddr *)&sin, &sin_len); + client_sock = accept(fd, (struct sockaddr *)&sin4, &sin4_len); if (client_sock == -1) { sudo_warn("accept"); goto bad; diff --git a/src/net_ifs.c b/src/net_ifs.c index afb9bba621..eff6c8e890 100644 --- a/src/net_ifs.c +++ b/src/net_ifs.c @@ -105,7 +105,7 @@ int get_net_ifs(char **addrinfo_out) { struct ifaddrs *ifa, *ifaddrs; - struct sockaddr_in *sin; + struct sockaddr_in *sin4; # ifdef HAVE_STRUCT_IN6_ADDR struct sockaddr_in6 *sin6; # endif @@ -156,19 +156,19 @@ get_net_ifs(char **addrinfo_out) switch (ifa->ifa_addr->sa_family) { case AF_INET: - sin = (struct sockaddr_in *)ifa->ifa_addr; - if (sin->sin_addr.s_addr == INADDR_ANY || sin->sin_addr.s_addr == INADDR_NONE) { + sin4 = (struct sockaddr_in *)ifa->ifa_addr; + if (sin4->sin_addr.s_addr == INADDR_ANY || sin4->sin_addr.s_addr == INADDR_NONE) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring unspecified AF_INET addr for %s", ifa->ifa_name); continue; } - if (inet_ntop(AF_INET, &sin->sin_addr, addrstr, sizeof(addrstr)) == NULL) { + if (inet_ntop(AF_INET, &sin4->sin_addr, addrstr, sizeof(addrstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET addr for %s", ifa->ifa_name); continue; } - sin = (struct sockaddr_in *)ifa->ifa_netmask; - if (inet_ntop(AF_INET, &sin->sin_addr, maskstr, sizeof(maskstr)) == NULL) { + sin4 = (struct sockaddr_in *)ifa->ifa_netmask; + if (inet_ntop(AF_INET, &sin4->sin_addr, maskstr, sizeof(maskstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET mask for %s", ifa->ifa_name); continue; @@ -315,7 +315,7 @@ get_net_ifs(char **addrinfo_out) */ for (i = 0; i < ifconf.ifc_len; ) { struct ifreq *ifr = (struct ifreq *)&ifconf.ifc_buf[i]; - struct sockaddr_in *sin; + struct sockaddr_in *sin4; /* Set i to the subscript of the next interface (no sa_len). */ i += sizeof(struct ifreq); @@ -329,13 +329,13 @@ get_net_ifs(char **addrinfo_out) } /* Store the address. */ - sin = (struct sockaddr_in *)&ifr->ifr_addr; - if (sin->sin_addr.s_addr == INADDR_ANY || sin->sin_addr.s_addr == INADDR_NONE) { + sin4 = (struct sockaddr_in *)&ifr->ifr_addr; + if (sin4->sin_addr.s_addr == INADDR_ANY || sin4->sin_addr.s_addr == INADDR_NONE) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring unspecified AF_INET addr for %s", ifr->ifr_name); continue; } - if (inet_ntop(AF_INET, &sin->sin_addr, addrstr, sizeof(addrstr)) == NULL) { + if (inet_ntop(AF_INET, &sin4->sin_addr, addrstr, sizeof(addrstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET addr for %s", ifr->ifr_name); continue; @@ -359,8 +359,8 @@ get_net_ifs(char **addrinfo_out) } /* Convert the mask to string form. */ - sin = (struct sockaddr_in *)&ifr->ifr_addr; - if (inet_ntop(AF_INET, &sin->sin_addr, maskstr, sizeof(maskstr)) == NULL) { + sin4 = (struct sockaddr_in *)&ifr->ifr_addr; + if (inet_ntop(AF_INET, &sin4->sin_addr, maskstr, sizeof(maskstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET mask for %s", ifr->ifr_name); continue; @@ -467,7 +467,7 @@ get_net_ifs(char **addrinfo_out) { struct lifconf lifconf; struct lifnum lifn; - struct sockaddr_in *sin; + struct sockaddr_in *sin4; struct sockaddr_in6 *sin6; char addrstr[INET6_ADDRSTRLEN], maskstr[INET6_ADDRSTRLEN]; char *addrinfo = NULL; @@ -540,13 +540,13 @@ get_net_ifs(char **addrinfo_out) /* Store the address. */ switch (family) { case AF_INET: - sin = (struct sockaddr_in *)&lifr->lifr_addr; - if (sin->sin_addr.s_addr == INADDR_ANY || sin->sin_addr.s_addr == INADDR_NONE) { + sin4 = (struct sockaddr_in *)&lifr->lifr_addr; + if (sin4->sin_addr.s_addr == INADDR_ANY || sin4->sin_addr.s_addr == INADDR_NONE) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring unspecified AF_INET addr for %s", lifr->lifr_name); continue; } - if (inet_ntop(AF_INET, &sin->sin_addr, addrstr, sizeof(addrstr)) == NULL) { + if (inet_ntop(AF_INET, &sin4->sin_addr, addrstr, sizeof(addrstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET addr for %s", lifr->lifr_name); continue; @@ -592,8 +592,8 @@ get_net_ifs(char **addrinfo_out) } switch (family) { case AF_INET: - sin = (struct sockaddr_in *)&lifr->lifr_addr; - if (inet_ntop(AF_INET, &sin->sin_addr, maskstr, sizeof(maskstr)) == NULL) { + sin4 = (struct sockaddr_in *)&lifr->lifr_addr; + if (inet_ntop(AF_INET, &sin4->sin_addr, maskstr, sizeof(maskstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET mask for %s", lifr->lifr_name); continue; @@ -654,7 +654,7 @@ get_net_ifs(char **addrinfo_out) { struct ifconf ifconf; struct ifreq *ifr; - struct sockaddr_in *sin; + struct sockaddr_in *sin4; # ifdef HAVE_STRUCT_IN6_ADDR struct sockaddr_in6 *sin6; # endif @@ -768,13 +768,13 @@ get_net_ifs(char **addrinfo_out) /* Store the address. */ switch (family) { case AF_INET: - sin = (struct sockaddr_in *)&ifr->ifr_addr; - if (sin->sin_addr.s_addr == INADDR_ANY || sin->sin_addr.s_addr == INADDR_NONE) { + sin4 = (struct sockaddr_in *)&ifr->ifr_addr; + if (sin4->sin_addr.s_addr == INADDR_ANY || sin4->sin_addr.s_addr == INADDR_NONE) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring unspecified AF_INET addr for %s", ifr->ifr_name); continue; } - if (inet_ntop(AF_INET, &sin->sin_addr, addrstr, sizeof(addrstr)) == NULL) { + if (inet_ntop(AF_INET, &sin4->sin_addr, addrstr, sizeof(addrstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET addr for %s", ifr->ifr_name); continue; @@ -824,8 +824,8 @@ get_net_ifs(char **addrinfo_out) /* Convert the mask to string form. */ switch (family) { case AF_INET: - sin = (struct sockaddr_in *)&ifr->ifr_addr; - if (inet_ntop(AF_INET, &sin->sin_addr, maskstr, sizeof(maskstr)) == NULL) { + sin4 = (struct sockaddr_in *)&ifr->ifr_addr; + if (inet_ntop(AF_INET, &sin4->sin_addr, maskstr, sizeof(maskstr)) == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "ignoring bad AF_INET mask for %s", ifr->ifr_name); continue; diff --git a/src/sudo_intercept_common.c b/src/sudo_intercept_common.c index d28c00184e..0dc3de53e4 100644 --- a/src/sudo_intercept_common.c +++ b/src/sudo_intercept_common.c @@ -358,7 +358,7 @@ intercept_connect(void) { int sock = -1; int on = 1; - struct sockaddr_in sin; + struct sockaddr_in sin4; debug_decl(intercept_connect, SUDO_DEBUG_EXEC); if (intercept_port == 0) { @@ -366,10 +366,10 @@ intercept_connect(void) goto done; } - memset(&sin, 0, sizeof(sin)); - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - sin.sin_port = htons(intercept_port); + memset(&sin4, 0, sizeof(sin4)); + sin4.sin_family = AF_INET; + sin4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + sin4.sin_port = htons(intercept_port); sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { @@ -380,7 +380,7 @@ intercept_connect(void) /* Send data immediately, we need low latency IPC. */ (void)setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)); - if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) == -1) { + if (connect(sock, (struct sockaddr *)&sin4, sizeof(sin4)) == -1) { sudo_warn("connect"); close(sock); sock = -1; diff --git a/src/sudo_plugin_int.h b/src/sudo_plugin_int.h index 63e4a7da31..7a15d7c26e 100644 --- a/src/sudo_plugin_int.h +++ b/src/sudo_plugin_int.h @@ -38,7 +38,7 @@ struct policy_plugin_1_0 { unsigned int type; unsigned int version; int (*open)(unsigned int version, sudo_conv_1_7_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const user_env[]); void (*close)(int exit_status, int error); /* wait status or error */ int (*show_version)(int verbose); @@ -46,16 +46,16 @@ struct policy_plugin_1_0 { char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[]); int (*list)(int argc, char * const argv[], int verbose, - const char *list_user); + const char *user); int (*validate)(void); - void (*invalidate)(int remove); + void (*invalidate)(int rmcred); int (*init_session)(struct passwd *pwd); }; struct io_plugin_1_0 { unsigned int type; unsigned int version; int (*open)(unsigned int version, sudo_conv_1_7_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], int argc, char * const argv[], char * const user_env[]); void (*close)(int exit_status, int error); @@ -70,7 +70,7 @@ struct io_plugin_1_1 { unsigned int type; unsigned int version; int (*open)(unsigned int version, sudo_conv_1_7_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[]); void (*close)(int exit_status, int error); /* wait status or error */ From fbd8de0276a828ba3037583b347d737e682b905a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Oct 2022 11:22:58 -0600 Subject: [PATCH 165/186] Silence a warning from the Solaris Studio compiler. --- src/load_plugins.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/load_plugins.c b/src/load_plugins.c index 8a7cbaf12d..5734602998 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -210,7 +210,7 @@ static struct generic_plugin * sudo_plugin_try_to_clone(void *so_handle, const char *symbol_name) { debug_decl(sudo_plugin_try_to_clone, SUDO_DEBUG_PLUGIN); - struct generic_plugin * plugin = NULL; + struct generic_plugin *plugin = NULL; plugin_clone_func *clone_func; char *clone_func_name = NULL; @@ -219,7 +219,8 @@ sudo_plugin_try_to_clone(void *so_handle, const char *symbol_name) goto cleanup; } - clone_func = sudo_dso_findsym(so_handle, clone_func_name); + clone_func = (plugin_clone_func *)sudo_dso_findsym(so_handle, + clone_func_name); if (clone_func) { plugin = (*clone_func)(); } From 8d5e59c8a8b156eaf3d991f05e531e671644f4c2 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Oct 2022 09:12:47 -0600 Subject: [PATCH 166/186] Update the description of intercept_verify --- plugins/sudoers/def_data.c | 2 +- plugins/sudoers/def_data.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index a5e98633d9..b8c1212d24 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -689,7 +689,7 @@ struct sudo_defs_types sudo_defs_table[] = { def_data_intercept_type, }, { "intercept_verify", T_FLAG, - N_("Whether to verify the command and arguments after execution"), + N_("Attempt to verify the command and arguments after execution"), NULL, }, { "apparmor_profile", T_STR, diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index 014cca064d..4d627e64b6 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -496,7 +496,7 @@ intercept_type dso trace intercept_verify T_FLAG - "Whether to verify the command and arguments after execution" + "Attempt to verify the command and arguments after execution" apparmor_profile T_STR "AppArmor profile to use in the new security context: %s" From 3bdb5854815e12abae564bb29ed60746ac85b881 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Oct 2022 09:12:48 -0600 Subject: [PATCH 167/186] Use getopt() and getopt_long() for sesh command line options. --- src/selinux.c | 35 ++++---- src/sesh.c | 233 ++++++++++++++++++++++++++++-------------------- src/sudo_edit.c | 82 ++++++++--------- 3 files changed, 193 insertions(+), 157 deletions(-) diff --git a/src/selinux.c b/src/selinux.c index b4d392ac98..50455f4d01 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -444,8 +444,7 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], { char **nargv; const char *sesh; - int argc, nargc, serrno; - bool login_shell = false; + int argc, len, nargc, serrno; debug_decl(selinux_execve, SUDO_DEBUG_SELINUX); sesh = sudo_conf_sesh_path(); @@ -461,8 +460,6 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], /* * Build new argv with sesh as argv[0]. - * If argv[0] ends in -noexec, sesh will disable execute - * for the command it runs. */ for (argc = 0; argv[argc] != NULL; argc++) continue; @@ -470,19 +467,15 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], errno = EINVAL; debug_return; } - nargv = reallocarray(NULL, argc + 4, sizeof(char *)); + nargv = reallocarray(NULL, 5 + argc + 1, sizeof(char *)); if (nargv == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return; } if (*argv[0] == '-') - login_shell = true; - if (ISSET(flags, CD_NOEXEC)) { - nargv[0] = (char *)(login_shell ? "-sesh-noexec" : "sesh-noexec"); - CLR(flags, CD_NOEXEC); - } else { - nargv[0] = (char *)(login_shell ? "-sesh" : "sesh"); - } + nargv[0] = (char *)"-sesh"; + else + nargv[0] = (char *)"sesh"; nargc = 1; if (ISSET(flags, CD_RBAC_SET_CWD)) { const char *prefix = ISSET(flags, CD_CWD_OPTIONAL) ? "+" : ""; @@ -491,19 +484,27 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], errno = EINVAL; debug_return; } - if (asprintf(&nargv[nargc++], "--chdir=%s%s", prefix, rundir) == -1) { + len = asprintf(&nargv[nargc++], "--directory=%s%s", prefix, rundir); + if (len == -1) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return; } } - if (fd != -1 && asprintf(&nargv[nargc++], "--execfd=%d", fd) == -1) { - sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return; + if (fd != -1) { + len = asprintf(&nargv[nargc++], "--execfd=%d", fd); + if (len == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return; + } + } + if (ISSET(flags, CD_NOEXEC)) { + CLR(flags, CD_NOEXEC); + nargv[nargc++] = (char *)"--noexec"; } + nargv[nargc++] = (char *)"--"; nargv[nargc++] = (char *)path; memcpy(&nargv[nargc], &argv[1], argc * sizeof(char *)); /* copies NULL */ - /* sesh will handle noexec for us. */ sudo_execve(-1, sesh, nargv, envp, -1, flags); serrno = errno; free(nargv); diff --git a/src/sesh.c b/src/sesh.c index ab4bc78720..314ceb98f4 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2008, 2010-2018, 2020-2021 Todd C. Miller + * Copyright (c) 2008, 2010-2018, 2020-2022 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 @@ -38,14 +38,48 @@ #else # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#ifdef HAVE_GETOPT_LONG +# include +# else +# include "compat/getopt.h" +#endif /* HAVE_GETOPT_LONG */ #include "sudo.h" #include "sudo_exec.h" #include "sudo_edit.h" +enum sesh_mode { + SESH_RUN_COMMAND, + SESH_EDIT_CREATE, + SESH_EDIT_INSTALL +}; + +static const char short_opts[] = "+cd:e:ihnw:"; +static struct option long_opts[] = { + { "edit-create", no_argument, NULL, 'c' }, + { "directory", required_argument, NULL, 'd' }, + { "execfd", required_argument, NULL, 'e' }, + { "edit-install", no_argument, NULL, 'i' }, + { "no-dereference", no_argument, NULL, 'h' }, + { "noexec", no_argument, NULL, 'n' }, + { "edit-checkdir", required_argument, NULL, 'w' }, + { NULL, no_argument, NULL, '\0' }, +}; + sudo_dso_public int main(int argc, char *argv[], char *envp[]); -static int sesh_sudoedit(int argc, char *argv[]); +static int sesh_sudoedit(enum sesh_mode mode, int flags, char *user, int argc, + char *argv[]); + +sudo_noreturn void +usage(void) +{ + (void)fprintf(stderr, + "usage: %s [-n] [-d directory] [-e fd] command [...]\n" + " %s [-cih] [-w uid:gids] file [...]\n", + getprogname(), getprogname()); + exit(EXIT_FAILURE); +} /* * Exit codes defined in sudo_exec.h: @@ -59,7 +93,11 @@ static int sesh_sudoedit(int argc, char *argv[]); int main(int argc, char *argv[], char *envp[]) { - int ret; + enum sesh_mode mode = SESH_RUN_COMMAND; + const char *errstr, *rundir = NULL; + int flags = CD_SUDOEDIT_FOLLOW; + char *edit_user = NULL; + int ch, ret, fd = -1; debug_decl(main, SUDO_DEBUG_MAIN); initprogname(argc > 0 ? argv[0] : "sesh"); @@ -68,8 +106,55 @@ main(int argc, char *argv[], char *envp[]) bindtextdomain(PACKAGE_NAME, LOCALEDIR); textdomain(PACKAGE_NAME); - if (argc < 2) - sudo_fatalx("%s", U_("requires at least one argument")); + while ((ch = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) { + switch (ch) { + case 'c': + if (mode != SESH_RUN_COMMAND) { + sudo_warnx("%s", + U_("Only one of the -c or -i options may be specified")); + usage(); + } + mode = SESH_EDIT_CREATE; + break; + case 'd': + rundir = optarg; + if (*rundir == '+') { + SET(flags, CD_CWD_OPTIONAL); + rundir++; + } + break; + case 'e': + fd = sudo_strtonum(optarg, 0, INT_MAX, &errstr); + if (errstr != NULL) + sudo_fatalx(U_("invalid file descriptor number: %s"), optarg); + break; + case 'i': + if (mode != SESH_RUN_COMMAND) { + sudo_warnx("%s", + U_("Only one of the -c or -i options may be specified")); + usage(); + } + mode = SESH_EDIT_INSTALL; + break; + case 'h': + CLR(flags, CD_SUDOEDIT_FOLLOW); + break; + case 'n': + SET(flags, CD_NOEXEC); + break; + case 'w': + SET(flags, CD_SUDOEDIT_CHECKDIR); + edit_user = optarg; + break; + default: + usage(); + break; + } + } + argc -= optind; + argv += optind; + if (argc == 0) + usage(); /* Read sudo.conf and initialize the debug subsystem. */ if (sudo_conf_read(NULL, SUDO_CONF_DEBUG) == -1) @@ -77,66 +162,56 @@ main(int argc, char *argv[], char *envp[]) sudo_debug_register(getprogname(), NULL, NULL, sudo_conf_debug_files(getprogname()), -1); - if (strcmp(argv[1], "-e") == 0) { - ret = sesh_sudoedit(argc, argv); + if (mode != SESH_RUN_COMMAND) { + if (rundir != NULL) { + sudo_warnx(U_("The -%c option may not be used in edit mode."), 'd'); + usage(); + } + if (fd != -1) { + sudo_warnx(U_("The -%c option may not be used in edit mode."), 'e'); + usage(); + } + if (ISSET(flags, CD_NOEXEC)) { + sudo_warnx(U_("The -%c option may not be used in edit mode."), 'n'); + usage(); + } + ret = sesh_sudoedit(mode, flags, edit_user, argc, argv); } else { bool login_shell; - char *cp, *cmnd; - int flags = 0; - int fd = -1; - - /* If the first char of argv[0] is '-', we are running a login shell. */ - login_shell = argv[0][0] == '-'; + char *cmnd; - /* If argv[0] ends in -noexec, pass the flag to sudo_execve() */ - if ((cp = strrchr(argv[0], '-')) != NULL && cp != argv[0]) { - if (strcmp(cp, "-noexec") == 0) - SET(flags, CD_NOEXEC); + if (!ISSET(flags, CD_SUDOEDIT_FOLLOW)) { + sudo_warnx(U_("The -%c option may only be used in edit mode."), + 'h'); + usage(); } - - /* If argv[1] is --chdir=dir, change to specified dir. */ - if (strncmp(argv[1], "--chdir=", sizeof("--chdir=") - 1) == 0) { - bool cwd_optional = false; - - /* If run dir starts with a '+', ignore chdir(2) failure. */ - cp = argv[1] + sizeof("--chdir=") - 1; - if (*cp == '+') { - cwd_optional = true; - cp++; - } - if (chdir(cp) == -1) { - sudo_warnx(U_("unable to change directory to %s"), cp); - if (!cwd_optional) - exit(EXIT_FAILURE); - } - argv++; - argc--; + if (edit_user != NULL) { + sudo_warnx(U_("The -%c option may only be used in edit mode."), + 'w'); + usage(); } - /* If argv[1] is --execfd=%d, extract the fd to exec with. */ - if (strncmp(argv[1], "--execfd=", sizeof("--execfd=") - 1) == 0) { - const char *errstr; + /* If the first char of argv[0] is '-', we are running a login shell. */ + login_shell = argv[0][0] == '-'; - cp = argv[1] + sizeof("--execfd=") - 1; - fd = sudo_strtonum(cp, 0, INT_MAX, &errstr); - if (errstr != NULL) - sudo_fatalx(U_("invalid file descriptor number: %s"), cp); - argv++; - argc--; + /* We must change the directory in sesh after the context changes. */ + if (rundir != NULL && chdir(rundir) == -1) { + sudo_warnx(U_("unable to change directory to %s"), rundir); + if (!ISSET(flags, CD_CWD_OPTIONAL)) + exit(EXIT_FAILURE); } - /* Shift argv and make a copy of the command to execute. */ - argv++; - argc--; + /* Make a copy of the command to execute. */ if ((cmnd = strdup(argv[0])) == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* If invoked as a login shell, modify argv[0] accordingly. */ if (login_shell) { - if ((cp = strrchr(argv[0], '/')) == NULL) - sudo_fatal(U_("unable to run %s as a login shell"), argv[0]); - *cp = '-'; - argv[0] = cp; + char *cp = strrchr(argv[0], '/'); + if (cp != NULL) { + *cp = '-'; + argv[0] = cp; + } } sudo_execve(fd, cmnd, argv, envp, -1, flags); sudo_warn(U_("unable to execute %s"), cmnd); @@ -356,59 +431,25 @@ sesh_edit_copy_tfiles(int edit_flags, struct sudo_cred *user_cred, } static int -sesh_sudoedit(int argc, char *argv[]) +sesh_sudoedit(enum sesh_mode mode, int flags, char *user, + int argc, char *argv[]) { - int edit_flags, post, ret; struct sudo_cred user_cred, run_cred; + int ret; debug_decl(sesh_sudoedit, SUDO_DEBUG_EDIT); 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 (argc > 2 && strcmp(argv[2], "-h") == 0) { - argv++; - argc--; - CLR(edit_flags, CD_SUDOEDIT_FOLLOW); // -V753 - } - - /* Check for -w flag (disallow directories writable by the user). */ - if (argc > 2 && strcmp(argv[2], "-w") == 0) { - SET(edit_flags, CD_SUDOEDIT_CHECKDIR); - - /* Parse uid:gid:gid1,gid2,... */ - if (argv[3] == NULL || !parse_user(argv[3], &user_cred)) - debug_return_int(SESH_ERR_FAILURE); - argv += 2; - argc -= 2; - } - - if (argc < 3) + /* Parse user for -w option, "uid:gid:gid1,gid2,..." */ + if (user != NULL && !parse_user(user, &user_cred)) debug_return_int(SESH_ERR_FAILURE); - /* - * We need to know whether we are performing the copy operation - * before or after the editing. Without this we would not know - * which files are temporary and which are the originals. - * post = 0 ... before - * post = 1 ... after - */ - if (strcmp(argv[2], "0") == 0) - post = 0; - else if (strcmp(argv[2], "1") == 0) - post = 1; - else /* invalid value */ - debug_return_int(SESH_ERR_INVALID); - - /* Align argv & argc to the beginning of the file list. */ - argv += 3; - argc -= 3; - - /* no files specified, nothing to do */ + /* No files specified, nothing to do. */ if (argc == 0) debug_return_int(SESH_SUCCESS); - /* odd number of paths specified */ + + /* Odd number of paths specified. */ if (argc & 1) debug_return_int(SESH_ERR_BAD_PATHS); @@ -441,8 +482,8 @@ sesh_sudoedit(int argc, char *argv[]) run_cred.groups = NULL; } - 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); + ret = mode == SESH_EDIT_CREATE ? + sesh_edit_create_tfiles(flags, &user_cred, &run_cred, argc, argv) : + sesh_edit_copy_tfiles(flags, &user_cred, &run_cred, argc, argv); debug_return_int(ret); } diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 7d48d7776b..c62644e076 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -423,7 +423,6 @@ selinux_edit_create_tfiles(struct command_details *command_details, if (nfiles < 1) debug_return_int(0); - /* Construct common args for sesh */ sesh_nargs = 6 + (nfiles * 2) + 1; sesh_args = sesh_ap = reallocarray(NULL, sesh_nargs, sizeof(char *)); if (sesh_args == NULL) { @@ -431,18 +430,18 @@ selinux_edit_create_tfiles(struct command_details *command_details, goto done; } *sesh_ap++ = "sesh"; - *sesh_ap++ = "-e"; + *sesh_ap++ = "--edit-create"; if (!ISSET(command_details->flags, CD_SUDOEDIT_FOLLOW)) - *sesh_ap++ = "-h"; + *sesh_ap++ = "--no-dereference"; 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++ = "--edit-checkdir"; *sesh_ap++ = user_str; } - *sesh_ap++ = "0"; + *sesh_ap++ = "--"; for (i = 0; i < nfiles; i++) { char *tfile, *ofile = files[i]; @@ -471,7 +470,7 @@ selinux_edit_create_tfiles(struct command_details *command_details, } *sesh_ap = NULL; - /* Run sesh -e [-h] 0 ... */ + /* Run sesh -c [-h] [-w userstr] ... */ error = selinux_run_helper(command_details->cred.uid, command_details->cred.gid, command_details->cred.ngroups, command_details->cred.groups, (char **)sesh_args, command_details->envp); @@ -523,6 +522,7 @@ selinux_edit_copy_tfiles(struct command_details *command_details, { const char **sesh_args, **sesh_ap; char *user_str = NULL; + bool run_helper = false; int i, error, sesh_nargs, ret = 1; int tfd = -1; struct timespec ts; @@ -532,9 +532,6 @@ selinux_edit_copy_tfiles(struct command_details *command_details, if (nfiles < 1) debug_return_int(0); - const int check_dir = ISSET(command_details->flags, CD_SUDOEDIT_CHECKDIR); - - /* Construct common args for sesh */ sesh_nargs = 5 + (nfiles * 2) + 1; sesh_args = sesh_ap = reallocarray(NULL, sesh_nargs, sizeof(char *)); if (sesh_args == NULL) { @@ -542,18 +539,17 @@ selinux_edit_copy_tfiles(struct command_details *command_details, goto done; } *sesh_ap++ = "sesh"; - *sesh_ap++ = "-e"; - if (check_dir) { + *sesh_ap++ = "--edit-install"; + 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++ = "--edit-checkdir"; *sesh_ap++ = user_str; } - *sesh_ap++ = "1"; + *sesh_ap++ = "--"; - /* Construct args for sesh -e 1 */ for (i = 0; i < nfiles; i++) { if (tfd != -1) close(tfd); @@ -575,6 +571,7 @@ selinux_edit_copy_tfiles(struct command_details *command_details, continue; } } + run_helper = true; *sesh_ap++ = tf[i].tfile; *sesh_ap++ = tf[i].ofile; if (fchown(tfd, command_details->cred.uid, command_details->cred.gid) != 0) { @@ -583,40 +580,37 @@ selinux_edit_copy_tfiles(struct command_details *command_details, } } *sesh_ap = NULL; - if (tfd != -1) - close(tfd); - /* - * check dir adds two more args to the array - */ - if ((!check_dir && sesh_ap - sesh_args > 3) - || (check_dir && sesh_ap - sesh_args > 5)) { - /* Run sesh -e 1 ... */ - error = selinux_run_helper(command_details->cred.uid, - command_details->cred.gid, command_details->cred.ngroups, - command_details->cred.groups, (char **)sesh_args, command_details->envp); - switch (error) { - case SESH_SUCCESS: - ret = 0; - break; - case SESH_ERR_NO_FILES: - sudo_warnx("%s", - U_("unable to copy temporary files back to their original location")); - break; - case SESH_ERR_SOME_FILES: - sudo_warnx("%s", - U_("unable to copy some of the temporary files back to their original location")); - break; - case SESH_ERR_KILLED: - sudo_warnx("%s", U_("sesh: killed by a signal")); - break; - default: - sudo_warnx(U_("sesh: unknown error %d"), error); - break; - } + if (!run_helper) + goto done; + + /* Run sesh -i ... */ + error = selinux_run_helper(command_details->cred.uid, + command_details->cred.gid, command_details->cred.ngroups, + command_details->cred.groups, (char **)sesh_args, command_details->envp); + switch (error) { + case SESH_SUCCESS: + ret = 0; + break; + case SESH_ERR_NO_FILES: + sudo_warnx("%s", + U_("unable to copy temporary files back to their original location")); + break; + case SESH_ERR_SOME_FILES: + sudo_warnx("%s", + U_("unable to copy some of the temporary files back to their original location")); + break; + case SESH_ERR_KILLED: + sudo_warnx("%s", U_("sesh: killed by a signal")); + break; + default: + sudo_warnx(U_("sesh: unknown error %d"), error); + break; } done: + if (tfd != -1) + close(tfd); /* Contents of tf will be freed by caller. */ free(sesh_args); free(user_str); From 3b205bc4120f5635d79a534258f0927df034db42 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Oct 2022 09:13:22 -0600 Subject: [PATCH 168/186] Update .pot files for 1.9.12 --- plugins/sudoers/po/sudoers.pot | 1493 +++++++++++++++++--------------- po/sudo.pot | 594 +++++++------ 2 files changed, 1092 insertions(+), 995 deletions(-) diff --git a/plugins/sudoers/po/sudoers.pot b/plugins/sudoers/po/sudoers.pot index ad07ede533..964702913e 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.11\n" +"Project-Id-Version: sudo 1.9.12\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\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:1218 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "" @@ -41,13 +41,13 @@ msgstr "" msgid "Sorry, try again." msgstr "" -#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 gram.y:365 -#: gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 gram.y:501 gram.y:511 -#: gram.y:523 gram.y:571 gram.y:580 gram.y:589 gram.y:598 gram.y:730 gram.y:738 -#: gram.y:749 gram.y:761 gram.y:780 gram.y:943 gram.y:948 gram.y:956 gram.y:970 -#: gram.y:976 gram.y:1098 gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 -#: gram.y:1162 gram.y:1171 gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 -#: gram.y:1816 lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 gram.y:366 +#: gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 gram.y:502 gram.y:512 +#: gram.y:524 gram.y:572 gram.y:581 gram.y:590 gram.y:599 gram.y:731 gram.y:739 +#: gram.y:750 gram.y:762 gram.y:781 gram.y:944 gram.y:949 gram.y:957 gram.y:971 +#: gram.y:977 gram.y:1099 gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 +#: gram.y:1163 gram.y:1172 gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 +#: gram.y:1827 lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 #: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 #: lib/iolog/iolog_filter.c:202 lib/iolog/iolog_filter.c:233 @@ -56,30 +56,43 @@ msgstr "" #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:650 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1743 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:213 +#: logsrvd/logsrvd_journal.c:214 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_journal.c:432 +#: logsrvd/logsrvd_local.c:215 logsrvd/logsrvd_local.c:216 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:279 +#: logsrvd/logsrvd_local.c:417 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:467 logsrvd/logsrvd_local.c:472 +#: logsrvd/logsrvd_local.c:473 logsrvd/logsrvd_queue.c:159 +#: logsrvd/logsrvd_queue.c:189 logsrvd/logsrvd_queue.c:266 +#: logsrvd/logsrvd_relay.c:444 logsrvd/logsrvd_relay.c:743 +#: logsrvd/logsrvd_relay.c:850 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1801 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 #: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 @@ -109,11 +122,11 @@ msgstr "" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1158 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -122,124 +135,125 @@ msgstr "" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 -#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 -#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 -#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 -#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 -#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 -#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 -#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 -#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 -#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 -#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 -#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 -#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 -#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 -#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 -#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 -#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 -#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 -#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 -#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 #: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 #: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 #: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 #: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 #: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "" -#: gram.y:622 +#: gram.y:623 msgid "a digest requires a path name" msgstr "" -#: gram.y:644 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "" -#: gram.y:650 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "" -#: gram.y:660 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "" -#: gram.y:666 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "" -#: gram.y:801 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "" -#: gram.y:824 +#: gram.y:825 msgid "invalid notbefore value" msgstr "" -#: gram.y:833 +#: gram.y:834 msgid "invalid notafter value" msgstr "" -#: gram.y:843 plugins/sudoers/policy.c:376 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "" -#: gram.y:845 plugins/sudoers/policy.c:378 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "" -#: gram.y:966 plugins/sudoers/sudoers.c:1014 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "" -#: gram.y:1220 plugins/sudoers/check_aliases.c:96 -#: plugins/sudoers/defaults.c:1275 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "" -#: gram.y:1270 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "" -#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 #: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 #: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 @@ -249,33 +263,48 @@ msgstr "" #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 -#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 @@ -304,11 +333,11 @@ msgstr "" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1157 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -317,46 +346,47 @@ msgstr "" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 -#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 -#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 -#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 -#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 -#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 -#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 -#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 -#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 -#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: 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:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 -#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 -#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 -#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 -#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 -#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 -#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 #: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 -#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -369,25 +399,25 @@ msgstr "" #: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 #: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 #: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 -#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 -#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 -#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 -#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 -#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 -#: toke.l:1226 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 +#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "" @@ -396,14 +426,14 @@ msgstr "" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 #: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 #: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 -#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 -#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 #: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 #: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 toke.l:987 @@ -446,7 +476,7 @@ msgstr "" msgid "%8s : (command continued) %s" msgstr "" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -561,14 +591,14 @@ msgstr "" msgid "%s exists but is not a directory (0%o)" msgstr "" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 -#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "" @@ -583,150 +613,156 @@ msgstr "" msgid "invalid timing file line: %s" msgstr "" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 -#: plugins/sudoers/policy.c:573 -msgid "unable to generate UUID" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" msgstr "" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "" -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "" -#: logsrvd/iolog_writer.c:780 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "" -#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "" -#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 -#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 #: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 -#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 -#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "" -#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "" -#: logsrvd/iolog_writer.c:839 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "" -#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "" -#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "" -#: logsrvd/logsrv_util.c:154 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "" -#: logsrvd/logsrv_util.c:161 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 -#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 -#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 -#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 -#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 -#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 -#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 -#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 -#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 -#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 -#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 -#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -735,633 +771,658 @@ msgstr "" msgid "unable to add event to queue" msgstr "" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "" -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "" -#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 -#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 -#: plugins/sudoers/log_client.c:1618 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 #, c-format msgid "unable to unpack %s size %zu" msgstr "" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "" -#: logsrvd/logsrvd.c:982 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "" -#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "" -#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:716 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "" -#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "" -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "" -#: logsrvd/logsrvd.c:1389 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "" -#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 -#: plugins/sudoers/log_client.c:276 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "" -#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "" -#: logsrvd/logsrvd.c:1718 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:180 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 #: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 -#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 -#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:1035 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 -#: logsrvd/logsrvd_journal.c:416 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1020 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 -#: logsrvd/logsrvd_journal.c:452 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "" -#: logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "" -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1504 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 -#: logsrvd/logsrvd_relay.c:784 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "" -#: logsrvd/logsrvd_relay.c:805 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "" -#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "" -#: logsrvd/logsrvd_relay.c:838 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "" -#: logsrvd/logsrvd_relay.c:904 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "" -#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 -#: logsrvd/logsrvd_relay.c:974 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 -#: plugins/sudoers/iolog.c:1024 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 -#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "" -#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 msgid "host name does not match certificate" msgstr "" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "" -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "" -#: logsrvd/tls_client.c:191 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "" -#: logsrvd/tls_client.c:205 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "" -#: logsrvd/tls_client.c:233 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "" -#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "" -#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "" -#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "" -#: logsrvd/tls_init.c:277 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "" -#: logsrvd/tls_init.c:284 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "" -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 -#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 -#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 -#: plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "" @@ -1498,7 +1559,7 @@ msgstr "" msgid "PAM account management error: %s" msgstr "" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "" @@ -1575,17 +1636,17 @@ msgstr "" msgid "unable to commit audit record" msgstr "" -#: plugins/sudoers/check.c:275 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "" -#: plugins/sudoers/check.c:278 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "" -#: plugins/sudoers/check.c:291 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1597,14 +1658,14 @@ msgid "" "\n" msgstr "" -#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 -#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "" -#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format msgid "%s: %s\n" msgstr "" @@ -1634,7 +1695,7 @@ msgstr "" msgid "order padding: %s: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "" @@ -1654,14 +1715,14 @@ msgstr "" msgid "%s: input and output files must be different" msgstr "" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 -#: plugins/sudoers/visudo.c:969 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "" @@ -1686,25 +1747,25 @@ msgstr "" msgid "invalid filter: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "" #: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:1501 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" "\n" msgstr "" -#: plugins/sudoers/cvtsudoers.c:1503 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -2145,369 +2206,393 @@ msgid "Log user's input for the command being run" msgstr "" #: plugins/sudoers/def_data.c:356 -msgid "Log the output of the command being run" +msgid "Log the command's standard input if not connected to a terminal" msgstr "" #: plugins/sudoers/def_data.c:360 -msgid "Compress I/O logs using zlib" +msgid "Log the user's terminal input for the command being run" msgstr "" #: plugins/sudoers/def_data.c:364 -msgid "Always run commands in a pseudo-tty" +msgid "Log the output of the command being run" msgstr "" #: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "" + +#: plugins/sudoers/def_data.c:380 +msgid "Compress I/O logs using zlib" +msgstr "" + +#: plugins/sudoers/def_data.c:384 +msgid "Always run commands in a pseudo-tty" +msgstr "" + +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "" -#: plugins/sudoers/def_data.c:372 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "" -#: plugins/sudoers/def_data.c:376 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "" -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "" -#: plugins/sudoers/def_data.c:400 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "" -#: plugins/sudoers/def_data.c:404 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:452 msgid "" "Check parent directories for writability when editing files with sudoedit" msgstr "" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "" -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "" -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:484 #, c-format msgid "" "Log entries larger than this value will be split into multiple syslog " "messages: %u" msgstr "" -#: plugins/sudoers/def_data.c:468 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:504 msgid "" "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:556 msgid "" "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "" -#: plugins/sudoers/def_data.c:564 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "" -#: plugins/sudoers/def_data.c:568 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "" -#: plugins/sudoers/def_data.c:572 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "" -#: plugins/sudoers/def_data.c:576 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "" -#: plugins/sudoers/def_data.c:580 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "" -#: plugins/sudoers/def_data.c:584 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "" -#: plugins/sudoers/def_data.c:588 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "" -#: plugins/sudoers/def_data.c:592 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "" -#: plugins/sudoers/def_data.c:596 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "" -#: plugins/sudoers/def_data.c:600 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "" -#: plugins/sudoers/def_data.c:604 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "" -#: plugins/sudoers/def_data.c:608 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "" -#: plugins/sudoers/def_data.c:612 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "" "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "" -#: plugins/sudoers/def_data.c:616 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "" -#: plugins/sudoers/def_data.c:620 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "" "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "" -#: plugins/sudoers/def_data.c:624 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "" -#: plugins/sudoers/def_data.c:628 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "" -#: plugins/sudoers/def_data.c:632 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "" -#: plugins/sudoers/def_data.c:636 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "" -#: plugins/sudoers/def_data.c:640 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "" -#: plugins/sudoers/def_data.c:644 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "" "The maximum number of processes that the user may run simultaneously: %s" msgstr "" -#: plugins/sudoers/def_data.c:648 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "" "The maximum size to which the process's resident set size may grow (in " "bytes): %s" msgstr "" -#: plugins/sudoers/def_data.c:652 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "" -#: plugins/sudoers/def_data.c:656 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "" -#: plugins/sudoers/def_data.c:660 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "" -#: plugins/sudoers/def_data.c:664 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "" -#: plugins/sudoers/def_data.c:668 +#: plugins/sudoers/def_data.c:688 #, c-format msgid "The mechanism used by the intercept and log_subcmds options: %s" msgstr "" -#: plugins/sudoers/def_data.c:672 +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "" + +#: plugins/sudoers/def_data.c:696 #, c-format msgid "AppArmor profile to use in the new security context: %s" msgstr "" @@ -2542,31 +2627,31 @@ msgstr "" msgid "value \"%s\" is invalid for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 -#: plugins/sudoers/policy.c:216 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format msgid "path name for \"%s\" too long" msgstr "" -#: plugins/sudoers/defaults.c:1133 +#: plugins/sudoers/defaults.c:1134 #, c-format msgid "values for \"%s\" must start with a '/', '~', or '*'" msgstr "" -#: plugins/sudoers/defaults.c:1140 +#: plugins/sudoers/defaults.c:1141 #, c-format msgid "values for \"%s\" must start with a '/'" msgstr "" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "" "sorry, you are not allowed to set the following environment variables: %s" @@ -2582,27 +2667,27 @@ msgstr "" msgid "%s: read error" msgstr "" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "" @@ -2625,10 +2710,10 @@ msgstr "" msgid "unable to update sequence file" msgstr "" -#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 -#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 -#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 -#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "" @@ -2638,25 +2723,25 @@ msgstr "" msgid "unable to create %s/%s" msgstr "" -#: plugins/sudoers/iolog.c:955 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "" -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 -#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 -#: plugins/sudoers/visudo.c:552 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "" -#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 -#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "" @@ -2681,7 +2766,7 @@ msgid "" "ldap_start_tls_s_np()" msgstr "" -#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "" @@ -2691,12 +2776,12 @@ msgstr "" msgid "%s: port too large" msgstr "" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "" @@ -2721,142 +2806,142 @@ msgstr "" msgid "unable to send audit message" msgstr "" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 -#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "" -#: plugins/sudoers/log_client.c:225 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "" -#: plugins/sudoers/log_client.c:247 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "" -#: plugins/sudoers/log_client.c:261 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "" -#: plugins/sudoers/log_client.c:270 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "" -#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "" -#: plugins/sudoers/log_client.c:538 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "" -#: plugins/sudoers/log_client.c:548 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "" -#: plugins/sudoers/log_client.c:1246 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "" -#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "" -#: plugins/sudoers/log_client.c:1876 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "" -#: plugins/sudoers/log_client.c:2024 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "" -#: plugins/sudoers/logging.c:300 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "" -#: plugins/sudoers/logging.c:302 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "" -#: plugins/sudoers/logging.c:323 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "" -#: plugins/sudoers/logging.c:326 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:329 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:332 +#: plugins/sudoers/logging.c:324 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:342 +#: plugins/sudoers/logging.c:334 msgid "This incident has been reported to the administrator.\n" msgstr "" -#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 -#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 -#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 -#: plugins/sudoers/sudoers.c:801 +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "" -#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" "Use \"sudo ./%s\" if this is the \"%s\" you wish to run." msgstr "" -#: plugins/sudoers/logging.c:395 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "" msgstr[1] "" -#: plugins/sudoers/logging.c:485 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "" -#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "" -#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 msgid "problem parsing sudoers" msgstr "" -#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format msgid "%s:%d:%d: %s" msgstr "" -#: plugins/sudoers/logging.c:1068 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "" @@ -2871,150 +2956,150 @@ msgstr "" msgid "digest for %s (%s) is not in %s form" msgstr "" -#: plugins/sudoers/parse.c:585 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" "LDAP Role: %s\n" msgstr "" -#: plugins/sudoers/parse.c:588 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" msgstr "" -#: plugins/sudoers/parse.c:590 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr "" -#: plugins/sudoers/parse.c:605 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr "" -#: plugins/sudoers/parse.c:615 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr "" -#: plugins/sudoers/parse.c:679 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr "" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "" -#: plugins/sudoers/parse.c:888 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "" -#: plugins/sudoers/parse.c:906 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "" -#: plugins/sudoers/parse.c:921 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "" -#: plugins/sudoers/policy.c:508 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:512 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:516 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:520 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "" -#: plugins/sudoers/policy.c:886 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "" -#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "" -#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 -#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "" -#: plugins/sudoers/policy.c:1262 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "" -#: plugins/sudoers/policy.c:1264 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "" -#: plugins/sudoers/policy.c:1268 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1271 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1273 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1307 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "" -#: plugins/sudoers/policy.c:1325 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "" @@ -3153,148 +3238,142 @@ msgstr "" msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: plugins/sudoers/sudoers.c:258 +#: plugins/sudoers/sudoers.c:263 #, c-format msgid "unable to get defaults from %s" msgstr "" -#: plugins/sudoers/sudoers.c:265 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "" -#: plugins/sudoers/sudoers.c:341 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "" -#: plugins/sudoers/sudoers.c:343 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "" -#: plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "" -#: plugins/sudoers/sudoers.c:369 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "" -#: plugins/sudoers/sudoers.c:421 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "" -#: plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "" -#: plugins/sudoers/sudoers.c:547 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "" -#: plugins/sudoers/sudoers.c:548 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "" -#: plugins/sudoers/sudoers.c:555 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "" -#: plugins/sudoers/sudoers.c:638 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "" -#: plugins/sudoers/sudoers.c:653 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "" -#: plugins/sudoers/sudoers.c:655 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "" -#: plugins/sudoers/sudoers.c:657 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "" -#: plugins/sudoers/sudoers.c:666 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "" -#: plugins/sudoers/sudoers.c:668 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "" -#: plugins/sudoers/sudoers.c:676 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:678 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "" -#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "" -#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 -#: plugins/sudoers/visudo.c:764 -#, c-format -msgid "unable to stat %s" -msgstr "" - -#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "" -#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:1147 toke.l:1252 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "" -#: plugins/sudoers/sudoers.c:1151 toke.l:1255 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:1184 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "" -#: plugins/sudoers/sudoers.c:1203 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "" -#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "" @@ -3392,24 +3471,24 @@ msgstr "" msgid "unknown search type %d" msgstr "" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" "\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3448,127 +3527,122 @@ msgid "" "Command unmatched" msgstr "" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "" -#: plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "" -#: plugins/sudoers/visudo.c:251 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "" -#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "" -#: plugins/sudoers/visudo.c:321 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "" -#: plugins/sudoers/visudo.c:397 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "" -#: plugins/sudoers/visudo.c:399 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "" -#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "" -#: plugins/sudoers/visudo.c:559 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:566 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:572 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:594 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:639 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "" -#: plugins/sudoers/visudo.c:652 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "" -#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "" -#: plugins/sudoers/visudo.c:803 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "" -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:821 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:841 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "" -#: plugins/sudoers/visudo.c:855 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3576,54 +3650,55 @@ msgid "" " (Q)uit and save changes to sudoers file (DANGER!)\n" msgstr "" -#: plugins/sudoers/visudo.c:901 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "" -#: plugins/sudoers/visudo.c:932 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "" -#: plugins/sudoers/visudo.c:943 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "" -#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "" -#: plugins/sudoers/visudo.c:1017 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "" -#: plugins/sudoers/visudo.c:1021 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "" -#: plugins/sudoers/visudo.c:1117 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "" -#: plugins/sudoers/visudo.c:1229 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "" -#: plugins/sudoers/visudo.c:1231 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" diff --git a/po/sudo.pot b/po/sudo.pot index 4d00bd8bf2..cc7a6307f2 100644 --- a/po/sudo.pot +++ b/po/sudo.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.11\n" +"Project-Id-Version: sudo 1.9.12\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -30,76 +30,75 @@ 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:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, 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:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 src/sudo.c:1133 +#: src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 src/sudo.c:2156 +#: src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "" @@ -113,21 +112,21 @@ msgstr "" msgid "%.*s exists but is not a directory (0%o)" msgstr "" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format -msgid "unable to open %.*s" +msgid "unable to mkdir %.*s" msgstr "" -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 #, c-format -msgid "unable to mkdir %.*s" +msgid "unable to open %.*s" msgstr "" #: lib/util/regex.c:103 @@ -138,8 +137,8 @@ msgstr "" msgid "Unknown signal" msgstr "" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "" @@ -151,86 +150,86 @@ msgstr "" msgid "value too small" msgstr "" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "" -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "" -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "" -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "" @@ -239,60 +238,59 @@ msgstr "" msgid "unable to restore current working directory" msgstr "" -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "" -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "" -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "" -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "" @@ -300,58 +298,84 @@ msgstr "" msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "" -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "" -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "" @@ -361,371 +385,360 @@ msgstr "" msgid "unexpected reply type on backchannel: %d" msgstr "" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "" -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "" -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "" -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 src/net_ifs.c:433 +#: src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 src/sudo_edit.c:398 +#: src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" +msgid "internal error, %s overflow" msgstr "" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "" -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "" - -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "" -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "" -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "" -#: src/parse_args.c:757 +#: src/parse_args.c:767 msgid "" "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "" -#: src/parse_args.c:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" "\n" msgstr "" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" "\n" msgstr "" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" msgstr "" -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "" -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "" -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "" "list user's privileges or check a specific command; use twice for longer " "format" msgstr "" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "" -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "" @@ -825,37 +838,42 @@ msgstr "" msgid "unable to set key creation context to %s" msgstr "" -#: src/sesh.c:72 -msgid "requires at least one argument" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" msgstr "" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 #, c-format -msgid "unable to run %s as a login shell" +msgid "The -%c option may not be used in edit mode." msgstr "" -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:184 src/sesh.c:189 +#, c-format +msgid "The -%c option may only be used in edit mode." +msgstr "" + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "" @@ -939,124 +957,128 @@ msgstr "" msgid "unable to determine tty" msgstr "" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "" "The \"no new privileges\" flag is set, which prevents sudo from running as " "root." msgstr "" -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "" "If sudo is running in a container, you may need to adjust the container " "configuration to disable the flag." msgstr "" -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "" -#: src/sudo.c:964 +#: src/sudo.c:957 #, 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:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "" -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "" -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "" -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "" @@ -1066,7 +1088,7 @@ msgstr "" msgid "%s left unmodified" msgstr "" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "" @@ -1079,38 +1101,38 @@ msgstr "" msgid "sesh: unable to create temporary files" msgstr "" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "" "unable to copy some of the temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "" From 23e1d32934b9f91e0a2b5eb0c578e73ba2b0d834 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Oct 2022 09:13:36 -0600 Subject: [PATCH 169/186] Update NEWS for 1.9.12. --- NEWS | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/NEWS b/NEWS index d528f08442..daf3671d82 100644 --- a/NEWS +++ b/NEWS @@ -99,6 +99,18 @@ What's new in Sudo 1.9.12 * Added the -I option to visudo which only edits the main sudoers file. Include files are not edited unless a syntax error is found. + * Fixed "sudo -l -U otheruser" output when the runas list is empty. + Previously, sudo would list the invoking user instead of the + list user. GitHub issue #183. + + * Fixed the display of command tags and options in "sudo -l" output + when the RunAs user or group changes. A new line is started for + RunAs changes which means we need to display the command tags + and options again. GitHub issue #184. + + * The sesh helper program now uses getopt_long(3) to parse the + command line options. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts From 0be0757d644447a3db3432058c9baa5e528f7180 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 13 Oct 2022 15:10:40 -0600 Subject: [PATCH 170/186] Add fchownat() for systems without it. --- lib/util/fchownat.c | 67 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 lib/util/fchownat.c diff --git a/lib/util/fchownat.c b/lib/util/fchownat.c new file mode 100644 index 0000000000..545a21e66c --- /dev/null +++ b/lib/util/fchownat.c @@ -0,0 +1,67 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2022 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" + +#ifndef HAVE_FCHOWNAT +int +sudo_fchownat(int dfd, const char *path, uid_t uid, gid_t gid, int flags) +{ + int odfd, ret; + + if (dfd == AT_FDCWD) { + if (flags & AT_SYMLINK_NOFOLLOW) + return lchown(path, uid, gid); + else + return chown(path, uid, gid); + } + + /* Save cwd */ + if ((odfd = open(".", O_RDONLY)) == -1) + return -1; + + if (fchdir(dfd) == -1) { + close(odfd); + return -1; + } + + if (flags & AT_SYMLINK_NOFOLLOW) + ret = lchown(path, uid, gid); + else + ret = chown(path, uid, gid); + + /* Restore cwd */ + if (fchdir(odfd) == -1) { + /* Should not happen */ + ret = -1; + } + close(odfd); + + return ret; +} +#endif /* HAVE_FCHOWNAT */ From 51a1a7d63fb0ac642b6686be150f825ebdea227b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 13 Oct 2022 17:04:24 -0600 Subject: [PATCH 171/186] Update embedded copy of zlib to version 1.2.13. Fixes CVE-2022-37434. --- lib/zlib/compress.c | 6 +- lib/zlib/crc32.c | 33 ++++--- lib/zlib/deflate.c | 218 +++++++++++++++++++++++--------------------- lib/zlib/deflate.h | 4 +- lib/zlib/gzlib.c | 2 +- lib/zlib/gzread.c | 8 +- lib/zlib/gzwrite.c | 2 +- lib/zlib/infback.c | 17 ++-- lib/zlib/inflate.c | 7 +- lib/zlib/inftrees.c | 4 +- lib/zlib/inftrees.h | 2 +- lib/zlib/trees.c | 123 +++++++++++++------------ lib/zlib/uncompr.c | 4 +- lib/zlib/zconf.h.in | 19 +++- lib/zlib/zlib.h | 20 ++-- lib/zlib/zutil.c | 16 ++-- lib/zlib/zutil.h | 1 + 17 files changed, 260 insertions(+), 226 deletions(-) diff --git a/lib/zlib/compress.c b/lib/zlib/compress.c index e2db404abf..2ad5326c14 100644 --- a/lib/zlib/compress.c +++ b/lib/zlib/compress.c @@ -19,7 +19,7 @@ memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ -int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) +int ZEXPORT compress2(dest, destLen, source, sourceLen, level) Bytef *dest; uLongf *destLen; const Bytef *source; @@ -65,7 +65,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) /* =========================================================================== */ -int ZEXPORT compress (dest, destLen, source, sourceLen) +int ZEXPORT compress(dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; @@ -78,7 +78,7 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) If the default memLevel or windowBits for deflateInit() is changed, then this function needs to be updated. */ -uLong ZEXPORT compressBound (sourceLen) +uLong ZEXPORT compressBound(sourceLen) uLong sourceLen; { return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + diff --git a/lib/zlib/crc32.c b/lib/zlib/crc32.c index a1bdce5c23..f8357b083f 100644 --- a/lib/zlib/crc32.c +++ b/lib/zlib/crc32.c @@ -98,13 +98,22 @@ # endif #endif +/* If available, use the ARM processor CRC32 instruction. */ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 +# define ARMCRC32 +#endif + /* Local functions. */ local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); -/* If available, use the ARM processor CRC32 instruction. */ -#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 -# define ARMCRC32 +#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) + local z_word_t byte_swap OF((z_word_t word)); +#endif + +#if defined(W) && !defined(ARMCRC32) + local z_crc_t crc_word OF((z_word_t data)); + local z_word_t crc_word_big OF((z_word_t data)); #endif #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) @@ -630,7 +639,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ - crc ^= 0xffffffff; + crc = (~crc) & 0xffffffff; /* Compute the CRC up to a word boundary. */ while (len && ((z_size_t)buf & 7) != 0) { @@ -645,8 +654,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) len &= 7; /* Do three interleaved CRCs to realize the throughput of one crc32x - instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three - CRCs are combined into a single CRC after each set of batches. */ + instruction per cycle. Each CRC is calculated on Z_BATCH words. The + three CRCs are combined into a single CRC after each set of batches. */ while (num >= 3 * Z_BATCH) { crc1 = 0; crc2 = 0; @@ -749,7 +758,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ - crc ^= 0xffffffff; + crc = (~crc) & 0xffffffff; #ifdef W @@ -1077,7 +1086,7 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2) #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ - return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; + return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); } /* ========================================================================= */ @@ -1086,7 +1095,7 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2) uLong crc2; z_off_t len2; { - return crc32_combine64(crc1, crc2, len2); + return crc32_combine64(crc1, crc2, (z_off64_t)len2); } /* ========================================================================= */ @@ -1103,14 +1112,14 @@ uLong ZEXPORT crc32_combine_gen64(len2) uLong ZEXPORT crc32_combine_gen(len2) z_off_t len2; { - return crc32_combine_gen64(len2); + return crc32_combine_gen64((z_off64_t)len2); } /* ========================================================================= */ -uLong crc32_combine_op(crc1, crc2, op) +uLong ZEXPORT crc32_combine_op(crc1, crc2, op) uLong crc1; uLong crc2; uLong op; { - return multmodp(op, crc1) ^ crc2; + return multmodp(op, crc1) ^ (crc2 & 0xffffffff); } diff --git a/lib/zlib/deflate.c b/lib/zlib/deflate.c index 691d810d40..aadd3571a1 100644 --- a/lib/zlib/deflate.c +++ b/lib/zlib/deflate.c @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; + " deflate 1.2.13 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -87,13 +87,7 @@ local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -#ifdef ASMV -# pragma message("Assembler code may have bugs -- use at your own risk") - void match_init OF((void)); /* asm code initialization */ - uInt longest_match OF((deflate_state *s, IPos cur_match)); -#else local uInt longest_match OF((deflate_state *s, IPos cur_match)); -#endif #ifdef ZLIB_DEBUG local void check_match OF((deflate_state *s, IPos start, IPos match, @@ -160,7 +154,7 @@ local const config configuration_table[10] = { * characters, so that a running hash key can be computed from the previous * key instead of complete recalculation each time. */ -#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) +#define UPDATE_HASH(s,h,c) (h = (((h) << s->hash_shift) ^ (c)) & s->hash_mask) /* =========================================================================== @@ -191,9 +185,9 @@ local const config configuration_table[10] = { */ #define CLEAR_HASH(s) \ do { \ - s->head[s->hash_size-1] = NIL; \ + s->head[s->hash_size - 1] = NIL; \ zmemzero((Bytef *)s->head, \ - (unsigned)(s->hash_size-1)*sizeof(*s->head)); \ + (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \ } while (0) /* =========================================================================== @@ -285,6 +279,8 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, if (windowBits < 0) { /* suppress zlib wrapper */ wrap = 0; + if (windowBits < -15) + return Z_STREAM_ERROR; windowBits = -windowBits; } #ifdef GZIP @@ -314,7 +310,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, s->hash_bits = (uInt)memLevel + 7; s->hash_size = 1 << s->hash_bits; s->hash_mask = s->hash_size - 1; - s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + s->hash_shift = ((s->hash_bits + MIN_MATCH-1) / MIN_MATCH); s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); @@ -340,11 +336,11 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, * sym_buf value to read moves forward three bytes. From that symbol, up to * 31 bits are written to pending_buf. The closest the written pending_buf * bits gets to the next sym_buf symbol to read is just before the last - * code is written. At that time, 31*(n-2) bits have been written, just - * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at - * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 + * code is written. At that time, 31*(n - 2) bits have been written, just + * after 24*(n - 2) bits have been consumed from sym_buf. sym_buf starts at + * 8*n bits into pending_buf. (Note that the symbol buffer fills when n - 1 * symbols are written.) The closest the writing gets to what is unread is - * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and + * then n + 14 bits. Here n is lit_bufsize, which is 16384 by default, and * can range from 128 to 32768. * * Therefore, at a minimum, there are 142 bits of space between what is @@ -390,7 +386,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, /* ========================================================================= * Check for a valid deflate stream state. Return 0 if ok, 1 if not. */ -local int deflateStateCheck (strm) +local int deflateStateCheck(strm) z_streamp strm; { deflate_state *s; @@ -413,7 +409,7 @@ local int deflateStateCheck (strm) } /* ========================================================================= */ -int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) +int ZEXPORT deflateSetDictionary(strm, dictionary, dictLength) z_streamp strm; const Bytef *dictionary; uInt dictLength; @@ -482,7 +478,7 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) +int ZEXPORT deflateGetDictionary(strm, dictionary, dictLength) z_streamp strm; Bytef *dictionary; uInt *dictLength; @@ -504,7 +500,7 @@ int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateResetKeep (strm) +int ZEXPORT deflateResetKeep(strm) z_streamp strm; { deflate_state *s; @@ -542,7 +538,7 @@ int ZEXPORT deflateResetKeep (strm) } /* ========================================================================= */ -int ZEXPORT deflateReset (strm) +int ZEXPORT deflateReset(strm) z_streamp strm; { int ret; @@ -554,7 +550,7 @@ int ZEXPORT deflateReset (strm) } /* ========================================================================= */ -int ZEXPORT deflateSetHeader (strm, head) +int ZEXPORT deflateSetHeader(strm, head) z_streamp strm; gz_headerp head; { @@ -565,7 +561,7 @@ int ZEXPORT deflateSetHeader (strm, head) } /* ========================================================================= */ -int ZEXPORT deflatePending (strm, pending, bits) +int ZEXPORT deflatePending(strm, pending, bits) unsigned *pending; int *bits; z_streamp strm; @@ -579,7 +575,7 @@ int ZEXPORT deflatePending (strm, pending, bits) } /* ========================================================================= */ -int ZEXPORT deflatePrime (strm, bits, value) +int ZEXPORT deflatePrime(strm, bits, value) z_streamp strm; int bits; int value; @@ -674,36 +670,50 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) } /* ========================================================================= - * For the default windowBits of 15 and memLevel of 8, this function returns - * a close to exact, as well as small, upper bound on the compressed size. - * They are coded as constants here for a reason--if the #define's are - * changed, then this function needs to be changed as well. The return - * value for 15 and 8 only works for those exact settings. + * For the default windowBits of 15 and memLevel of 8, this function returns a + * close to exact, as well as small, upper bound on the compressed size. This + * is an expansion of ~0.03%, plus a small constant. + * + * For any setting other than those defaults for windowBits and memLevel, one + * of two worst case bounds is returned. This is at most an expansion of ~4% or + * ~13%, plus a small constant. * - * For any setting other than those defaults for windowBits and memLevel, - * the value returned is a conservative worst case for the maximum expansion - * resulting from using fixed blocks instead of stored blocks, which deflate - * can emit on compressed data for some combinations of the parameters. + * Both the 0.03% and 4% derive from the overhead of stored blocks. The first + * one is for stored blocks of 16383 bytes (memLevel == 8), whereas the second + * is for stored blocks of 127 bytes (the worst case memLevel == 1). The + * expansion results from five bytes of header for each stored block. * - * This function could be more sophisticated to provide closer upper bounds for - * every combination of windowBits and memLevel. But even the conservative - * upper bound of about 14% expansion does not seem onerous for output buffer - * allocation. + * The larger expansion of 13% results from a window size less than or equal to + * the symbols buffer size (windowBits <= memLevel + 7). In that case some of + * the data being compressed may have slid out of the sliding window, impeding + * a stored block from being emitted. Then the only choice is a fixed or + * dynamic block, where a fixed block limits the maximum expansion to 9 bits + * per 8-bit byte, plus 10 bits for every block. The smallest block size for + * which this can occur is 255 (memLevel == 2). + * + * Shifts are used to approximate divisions, for speed. */ uLong ZEXPORT deflateBound(strm, sourceLen) z_streamp strm; uLong sourceLen; { deflate_state *s; - uLong complen, wraplen; + uLong fixedlen, storelen, wraplen; + + /* upper bound for fixed blocks with 9-bit literals and length 255 + (memLevel == 2, which is the lowest that may not use stored blocks) -- + ~13% overhead plus a small constant */ + fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) + + (sourceLen >> 9) + 4; - /* conservative upper bound for compressed data */ - complen = sourceLen + - ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; + /* upper bound for stored blocks with length 127 (memLevel == 1) -- + ~4% overhead plus a small constant */ + storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) + + (sourceLen >> 11) + 7; - /* if can't get parameters, return conservative bound plus zlib wrapper */ + /* if can't get parameters, return larger bound plus a zlib wrapper */ if (deflateStateCheck(strm)) - return complen + 6; + return (fixedlen > storelen ? fixedlen : storelen) + 6; /* compute wrapper length */ s = strm->state; @@ -740,11 +750,12 @@ uLong ZEXPORT deflateBound(strm, sourceLen) wraplen = 6; } - /* if not default parameters, return conservative bound */ + /* if not default parameters, return one of the conservative bounds */ if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return complen + wraplen; + return (s->w_bits <= s->hash_bits ? fixedlen : storelen) + wraplen; - /* default settings: return tight bound for that case */ + /* default settings: return tight bound for that case -- ~0.03% overhead + plus a small constant */ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + (sourceLen >> 25) + 13 - 6 + wraplen; } @@ -754,7 +765,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen) * IN assertion: the stream state is correct and there is enough room in * pending_buf. */ -local void putShortMSB (s, b) +local void putShortMSB(s, b) deflate_state *s; uInt b; { @@ -801,7 +812,7 @@ local void flush_pending(strm) } while (0) /* ========================================================================= */ -int ZEXPORT deflate (strm, flush) +int ZEXPORT deflate(strm, flush) z_streamp strm; int flush; { @@ -856,7 +867,7 @@ int ZEXPORT deflate (strm, flush) s->status = BUSY_STATE; if (s->status == INIT_STATE) { /* zlib header */ - uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt header = (Z_DEFLATED + ((s->w_bits - 8) << 4)) << 8; uInt level_flags; if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) @@ -1116,7 +1127,7 @@ int ZEXPORT deflate (strm, flush) } /* ========================================================================= */ -int ZEXPORT deflateEnd (strm) +int ZEXPORT deflateEnd(strm) z_streamp strm; { int status; @@ -1142,7 +1153,7 @@ int ZEXPORT deflateEnd (strm) * To simplify the source, this is not supported for 16-bit MSDOS (which * doesn't have enough memory anyway to duplicate compression states). */ -int ZEXPORT deflateCopy (dest, source) +int ZEXPORT deflateCopy(dest, source) z_streamp dest; z_streamp source; { @@ -1231,7 +1242,7 @@ local unsigned read_buf(strm, buf, size) /* =========================================================================== * Initialize the "longest match" routines for a new zlib stream */ -local void lm_init (s) +local void lm_init(s) deflate_state *s; { s->window_size = (ulg)2L*s->w_size; @@ -1252,11 +1263,6 @@ local void lm_init (s) s->match_length = s->prev_length = MIN_MATCH-1; s->match_available = 0; s->ins_h = 0; -#ifndef FASTEST -#ifdef ASMV - match_init(); /* initialize the asm code */ -#endif -#endif } #ifndef FASTEST @@ -1269,10 +1275,6 @@ local void lm_init (s) * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 * OUT assertion: the match length is not greater than s->lookahead. */ -#ifndef ASMV -/* For 80x86 and 680x0, an optimized version will be provided in match.asm or - * match.S. The code will be functionally equivalent. - */ local uInt longest_match(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ @@ -1297,10 +1299,10 @@ local uInt longest_match(s, cur_match) */ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; register ush scan_start = *(ushf*)scan; - register ush scan_end = *(ushf*)(scan+best_len-1); + register ush scan_end = *(ushf*)(scan + best_len - 1); #else register Bytef *strend = s->window + s->strstart + MAX_MATCH; - register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end1 = scan[best_len - 1]; register Byte scan_end = scan[best_len]; #endif @@ -1318,7 +1320,8 @@ local uInt longest_match(s, cur_match) */ if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); do { Assert(cur_match < s->strstart, "no future"); @@ -1336,43 +1339,44 @@ local uInt longest_match(s, cur_match) /* This code assumes sizeof(unsigned short) == 2. Do not use * UNALIGNED_OK if your compiler uses a different size. */ - if (*(ushf*)(match+best_len-1) != scan_end || + if (*(ushf*)(match + best_len - 1) != scan_end || *(ushf*)match != scan_start) continue; /* It is not necessary to compare scan[2] and match[2] since they are * always equal when the other bytes match, given that the hash keys * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at - * strstart+3, +5, ... up to strstart+257. We check for insufficient + * strstart + 3, + 5, up to strstart + 257. We check for insufficient * lookahead only every 4th comparison; the 128th check will be made - * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * at strstart + 257. If MAX_MATCH-2 is not a multiple of 8, it is * necessary to put more guard bytes at the end of the window, or * to check more often for insufficient lookahead. */ Assert(scan[2] == match[2], "scan[2]?"); scan++, match++; do { - } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + } while (*(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && scan < strend); /* The funny "do {}" generates better code on most compilers */ - /* Here, scan <= window+strstart+257 */ - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + /* Here, scan <= window + strstart + 257 */ + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); if (*scan == *match) scan++; - len = (MAX_MATCH - 1) - (int)(strend-scan); + len = (MAX_MATCH - 1) - (int)(strend - scan); scan = strend - (MAX_MATCH-1); #else /* UNALIGNED_OK */ - if (match[best_len] != scan_end || - match[best_len-1] != scan_end1 || - *match != *scan || - *++match != scan[1]) continue; + if (match[best_len] != scan_end || + match[best_len - 1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; - /* The check at best_len-1 can be removed because it will be made + /* The check at best_len - 1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that @@ -1382,7 +1386,7 @@ local uInt longest_match(s, cur_match) Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. + * the 256th check will be made at strstart + 258. */ do { } while (*++scan == *++match && *++scan == *++match && @@ -1391,7 +1395,8 @@ local uInt longest_match(s, cur_match) *++scan == *++match && *++scan == *++match && scan < strend); - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); len = MAX_MATCH - (int)(strend - scan); scan = strend - MAX_MATCH; @@ -1403,9 +1408,9 @@ local uInt longest_match(s, cur_match) best_len = len; if (len >= nice_match) break; #ifdef UNALIGNED_OK - scan_end = *(ushf*)(scan+best_len-1); + scan_end = *(ushf*)(scan + best_len - 1); #else - scan_end1 = scan[best_len-1]; + scan_end1 = scan[best_len - 1]; scan_end = scan[best_len]; #endif } @@ -1415,7 +1420,6 @@ local uInt longest_match(s, cur_match) if ((uInt)best_len <= s->lookahead) return (uInt)best_len; return s->lookahead; } -#endif /* ASMV */ #else /* FASTEST */ @@ -1436,7 +1440,8 @@ local uInt longest_match(s, cur_match) */ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); Assert(cur_match < s->strstart, "no future"); @@ -1446,7 +1451,7 @@ local uInt longest_match(s, cur_match) */ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; - /* The check at best_len-1 can be removed because it will be made + /* The check at best_len - 1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that @@ -1456,7 +1461,7 @@ local uInt longest_match(s, cur_match) Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. + * the 256th check will be made at strstart + 258. */ do { } while (*++scan == *++match && *++scan == *++match && @@ -1465,7 +1470,7 @@ local uInt longest_match(s, cur_match) *++scan == *++match && *++scan == *++match && scan < strend); - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (unsigned)(s->window_size - 1), "wild scan"); len = MAX_MATCH - (int)(strend - scan); @@ -1501,7 +1506,7 @@ local void check_match(s, start, match, length) z_error("invalid match"); } if (z_verbose > 1) { - fprintf(stderr,"\\[%d,%d]", start-match, length); + fprintf(stderr,"\\[%d,%d]", start - match, length); do { putc(s->window[start++], stderr); } while (--length != 0); } } @@ -1547,9 +1552,9 @@ local void fill_window(s) /* If the window is almost full and there is insufficient lookahead, * move the upper half to the lower one to make room in the upper half. */ - if (s->strstart >= wsize+MAX_DIST(s)) { + if (s->strstart >= wsize + MAX_DIST(s)) { - zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); + zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; @@ -1682,7 +1687,7 @@ local void fill_window(s) * * deflate_stored() is written to minimize the number of times an input byte is * copied. It is most efficient with large input and output buffers, which - * maximizes the opportunites to have a single copy from next_in to next_out. + * maximizes the opportunities to have a single copy from next_in to next_out. */ local block_state deflate_stored(s, flush) deflate_state *s; @@ -1892,7 +1897,7 @@ local block_state deflate_fast(s, flush) if (s->lookahead == 0) break; /* flush the current block */ } - /* Insert the string window[strstart .. strstart+2] in the + /* Insert the string window[strstart .. strstart + 2] in the * dictionary, and set hash_head to the head of the hash chain: */ hash_head = NIL; @@ -1940,7 +1945,7 @@ local block_state deflate_fast(s, flush) s->strstart += s->match_length; s->match_length = 0; s->ins_h = s->window[s->strstart]; - UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); + UPDATE_HASH(s, s->ins_h, s->window[s->strstart + 1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif @@ -1951,7 +1956,7 @@ local block_state deflate_fast(s, flush) } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } @@ -1995,7 +2000,7 @@ local block_state deflate_slow(s, flush) if (s->lookahead == 0) break; /* flush the current block */ } - /* Insert the string window[strstart .. strstart+2] in the + /* Insert the string window[strstart .. strstart + 2] in the * dictionary, and set hash_head to the head of the hash chain: */ hash_head = NIL; @@ -2037,17 +2042,17 @@ local block_state deflate_slow(s, flush) uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; /* Do not insert strings in hash table beyond this. */ - check_match(s, s->strstart-1, s->prev_match, s->prev_length); + check_match(s, s->strstart - 1, s->prev_match, s->prev_length); - _tr_tally_dist(s, s->strstart -1 - s->prev_match, + _tr_tally_dist(s, s->strstart - 1 - s->prev_match, s->prev_length - MIN_MATCH, bflush); /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not + * strstart - 1 and strstart are already inserted. If there is not * enough lookahead, the last two strings are not inserted in * the hash table. */ - s->lookahead -= s->prev_length-1; + s->lookahead -= s->prev_length - 1; s->prev_length -= 2; do { if (++s->strstart <= max_insert) { @@ -2065,8 +2070,8 @@ local block_state deflate_slow(s, flush) * single literal. If there was a match but the current match * is longer, truncate the previous match to a single literal. */ - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); if (bflush) { FLUSH_BLOCK_ONLY(s, 0); } @@ -2084,8 +2089,8 @@ local block_state deflate_slow(s, flush) } Assert (flush != Z_NO_FLUSH, "no flush?"); if (s->match_available) { - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); s->match_available = 0; } s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; @@ -2142,7 +2147,8 @@ local block_state deflate_rle(s, flush) if (s->match_length > s->lookahead) s->match_length = s->lookahead; } - Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (uInt)(s->window_size - 1), + "wild scan"); } /* Emit match if have run of MIN_MATCH or longer, else emit literal */ @@ -2157,7 +2163,7 @@ local block_state deflate_rle(s, flush) } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } @@ -2197,7 +2203,7 @@ local block_state deflate_huff(s, flush) /* Output a literal byte */ s->match_length = 0; Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; if (bflush) FLUSH_BLOCK(s, 0); diff --git a/lib/zlib/deflate.h b/lib/zlib/deflate.h index 17c226113b..1a06cd5f25 100644 --- a/lib/zlib/deflate.h +++ b/lib/zlib/deflate.h @@ -329,8 +329,8 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, # define _tr_tally_dist(s, distance, length, flush) \ { uch len = (uch)(length); \ ush dist = (ush)(distance); \ - s->sym_buf[s->sym_next++] = dist; \ - s->sym_buf[s->sym_next++] = dist >> 8; \ + s->sym_buf[s->sym_next++] = (uch)dist; \ + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \ s->sym_buf[s->sym_next++] = len; \ dist--; \ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ diff --git a/lib/zlib/gzlib.c b/lib/zlib/gzlib.c index dddaf26873..55da46a453 100644 --- a/lib/zlib/gzlib.c +++ b/lib/zlib/gzlib.c @@ -30,7 +30,7 @@ local gzFile gz_open OF((const void *, int, const char *)); The gz_strwinerror function does not change the current setting of GetLastError. */ -char ZLIB_INTERNAL *gz_strwinerror (error) +char ZLIB_INTERNAL *gz_strwinerror(error) DWORD error; { static char buf[1024]; diff --git a/lib/zlib/gzread.c b/lib/zlib/gzread.c index 884c9bfe4c..dd77381596 100644 --- a/lib/zlib/gzread.c +++ b/lib/zlib/gzread.c @@ -157,11 +157,9 @@ local int gz_look(state) the output buffer is larger than the input buffer, which also assures space for gzungetc() */ state->x.next = state->out; - if (strm->avail_in) { - memcpy(state->x.next, strm->next_in, strm->avail_in); - state->x.have = strm->avail_in; - strm->avail_in = 0; - } + memcpy(state->x.next, strm->next_in, strm->avail_in); + state->x.have = strm->avail_in; + strm->avail_in = 0; state->how = COPY; state->direct = 1; return 0; diff --git a/lib/zlib/gzwrite.c b/lib/zlib/gzwrite.c index a8ffc8f53d..eb8a0e5893 100644 --- a/lib/zlib/gzwrite.c +++ b/lib/zlib/gzwrite.c @@ -474,7 +474,7 @@ int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) #else /* !STDC && !Z_HAVE_STDARG_H */ /* -- see zlib.h -- */ -int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, +int ZEXPORTVA gzprintf(file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) gzFile file; const char *format; diff --git a/lib/zlib/infback.c b/lib/zlib/infback.c index fe85774888..8a14e52d20 100644 --- a/lib/zlib/infback.c +++ b/lib/zlib/infback.c @@ -66,6 +66,7 @@ int stream_size; state->window = window; state->wnext = 0; state->whave = 0; + state->sane = 1; return Z_OK; } @@ -605,25 +606,27 @@ void FAR *out_desc; break; case DONE: - /* inflate stream terminated properly -- write leftover output */ + /* inflate stream terminated properly */ ret = Z_STREAM_END; - if (left < state->wsize) { - if (out(out_desc, state->window, state->wsize - left)) - ret = Z_BUF_ERROR; - } goto inf_leave; case BAD: ret = Z_DATA_ERROR; goto inf_leave; - default: /* can't happen, but makes compilers happy */ + default: + /* can't happen, but makes compilers happy */ ret = Z_STREAM_ERROR; goto inf_leave; } - /* Return unused input */ + /* Write leftover output and return unused input */ inf_leave: + if (left < state->wsize) { + if (out(out_desc, state->window, state->wsize - left) && + ret == Z_STREAM_END) + ret = Z_BUF_ERROR; + } strm->next_in = next; strm->avail_in = have; return ret; diff --git a/lib/zlib/inflate.c b/lib/zlib/inflate.c index fcf5e10ab1..49934c9df0 100644 --- a/lib/zlib/inflate.c +++ b/lib/zlib/inflate.c @@ -168,6 +168,8 @@ int windowBits; /* extract wrap request from windowBits parameter */ if (windowBits < 0) { + if (windowBits < -15) + return Z_STREAM_ERROR; wrap = 0; windowBits = -windowBits; } @@ -764,8 +766,9 @@ int flush; if (copy > have) copy = have; if (copy) { if (state->head != Z_NULL && - state->head->extra != Z_NULL) { - len = state->head->extra_len - state->length; + state->head->extra != Z_NULL && + (len = state->head->extra_len - state->length) < + state->head->extra_max) { zmemcpy(state->head->extra + len, next, len + copy > state->head->extra_max ? state->head->extra_max - len : copy); diff --git a/lib/zlib/inftrees.c b/lib/zlib/inftrees.c index 09462a740b..57d2793bec 100644 --- a/lib/zlib/inftrees.c +++ b/lib/zlib/inftrees.c @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.12 Copyright 1995-2022 Mark Adler "; + " inflate 1.2.13 Copyright 1995-2022 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -62,7 +62,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 194, 65}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/lib/zlib/inftrees.h b/lib/zlib/inftrees.h index baa53a0b1a..f53665311c 100644 --- a/lib/zlib/inftrees.h +++ b/lib/zlib/inftrees.h @@ -38,7 +38,7 @@ typedef struct { /* Maximum size of the dynamic table. The maximum number of code structures is 1444, which is the sum of 852 for literal/length codes and 592 for distance codes. These values were found by exhaustive searches using the program - examples/enough.c found in the zlib distribtution. The arguments to that + examples/enough.c found in the zlib distribution. The arguments to that program are the number of symbols, the initial root table size, and the maximum bit length of a code. "enough 286 9 15" for literal/length codes returns returns 852, and "enough 30 6 15" for distance codes returns 592. diff --git a/lib/zlib/trees.c b/lib/zlib/trees.c index f73fd99c37..5f305c4722 100644 --- a/lib/zlib/trees.c +++ b/lib/zlib/trees.c @@ -193,7 +193,7 @@ local void send_bits(s, value, length) s->bits_sent += (ulg)length; /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * (16 - bi_valid) bits from value, leaving (width - (16 - bi_valid)) * unused bits in value. */ if (s->bi_valid > (int)Buf_size - length) { @@ -256,7 +256,7 @@ local void tr_static_init() length = 0; for (code = 0; code < LENGTH_CODES-1; code++) { base_length[code] = length; - for (n = 0; n < (1< dist code (0..29) */ dist = 0; for (code = 0 ; code < 16; code++) { base_dist[code] = dist; - for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ for ( ; code < D_CODES; code++) { base_dist[code] = dist << 7; - for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { _dist_code[256 + dist++] = (uch)code; } } - Assert (dist == 256, "tr_static_init: 256+dist != 512"); + Assert (dist == 256, "tr_static_init: 256 + dist != 512"); /* Construct the codes of the static literal tree */ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; @@ -312,7 +312,7 @@ local void tr_static_init() } /* =========================================================================== - * Genererate the file trees.h describing the static trees. + * Generate the file trees.h describing the static trees. */ #ifdef GEN_TREES_H # ifndef ZLIB_DEBUG @@ -321,7 +321,7 @@ local void tr_static_init() # define SEPARATOR(i, last, width) \ ((i) == (last)? "\n};\n\n" : \ - ((i) % (width) == (width)-1 ? ",\n" : ", ")) + ((i) % (width) == (width) - 1 ? ",\n" : ", ")) void gen_trees_header() { @@ -458,7 +458,7 @@ local void pqdownheap(s, tree, k) while (j <= s->heap_len) { /* Set j to the smallest of the two sons: */ if (j < s->heap_len && - smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + smaller(tree, s->heap[j + 1], s->heap[j], s->depth)) { j++; } /* Exit if v is smaller than both sons */ @@ -507,7 +507,7 @@ local void gen_bitlen(s, desc) */ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ - for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + for (h = s->heap_max + 1; h < HEAP_SIZE; h++) { n = s->heap[h]; bits = tree[tree[n].Dad].Len + 1; if (bits > max_length) bits = max_length, overflow++; @@ -518,7 +518,7 @@ local void gen_bitlen(s, desc) s->bl_count[bits]++; xbits = 0; - if (n >= base) xbits = extra[n-base]; + if (n >= base) xbits = extra[n - base]; f = tree[n].Freq; s->opt_len += (ulg)f * (unsigned)(bits + xbits); if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); @@ -530,10 +530,10 @@ local void gen_bitlen(s, desc) /* Find the first bit length which could increase: */ do { - bits = max_length-1; + bits = max_length - 1; while (s->bl_count[bits] == 0) bits--; - s->bl_count[bits]--; /* move one leaf down the tree */ - s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits + 1] += 2; /* move one overflow item as its brother */ s->bl_count[max_length]--; /* The brother of the overflow item also moves one step up, * but this does not affect bl_count[max_length] @@ -569,7 +569,7 @@ local void gen_bitlen(s, desc) * OUT assertion: the field code is set for all tree elements of non * zero code length. */ -local void gen_codes (tree, max_code, bl_count) +local void gen_codes(tree, max_code, bl_count) ct_data *tree; /* the tree to decorate */ int max_code; /* largest code with non zero frequency */ ushf *bl_count; /* number of codes at each bit length */ @@ -583,13 +583,13 @@ local void gen_codes (tree, max_code, bl_count) * without bit reversal. */ for (bits = 1; bits <= MAX_BITS; bits++) { - code = (code + bl_count[bits-1]) << 1; + code = (code + bl_count[bits - 1]) << 1; next_code[bits] = (ush)code; } /* Check that the bit counts in bl_count are consistent. The last code * must be all ones. */ - Assert (code + bl_count[MAX_BITS]-1 == (1<heap_len = 0, s->heap_max = HEAP_SIZE; @@ -652,7 +652,7 @@ local void build_tree(s, desc) } desc->max_code = max_code; - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + /* The elements heap[heap_len/2 + 1 .. heap_len] are leaves of the tree, * establish sub-heaps of increasing lengths: */ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); @@ -700,7 +700,7 @@ local void build_tree(s, desc) * Scan a literal or distance tree to determine the frequencies of the codes * in the bit length tree. */ -local void scan_tree (s, tree, max_code) +local void scan_tree(s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ @@ -714,10 +714,10 @@ local void scan_tree (s, tree, max_code) int min_count = 4; /* min repeat count */ if (nextlen == 0) max_count = 138, min_count = 3; - tree[max_code+1].Len = (ush)0xffff; /* guard */ + tree[max_code + 1].Len = (ush)0xffff; /* guard */ for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; + curlen = nextlen; nextlen = tree[n + 1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { @@ -745,7 +745,7 @@ local void scan_tree (s, tree, max_code) * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ -local void send_tree (s, tree, max_code) +local void send_tree(s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ @@ -758,11 +758,11 @@ local void send_tree (s, tree, max_code) int max_count = 7; /* max repeat count */ int min_count = 4; /* min repeat count */ - /* tree[max_code+1].Len = -1; */ /* guard already set */ + /* tree[max_code + 1].Len = -1; */ /* guard already set */ if (nextlen == 0) max_count = 138, min_count = 3; for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; + curlen = nextlen; nextlen = tree[n + 1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { @@ -773,13 +773,13 @@ local void send_tree (s, tree, max_code) send_code(s, curlen, s->bl_tree); count--; } Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count - 3, 2); } else if (count <= 10) { - send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count - 3, 3); } else { - send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count - 11, 7); } count = 0; prevlen = curlen; if (nextlen == 0) { @@ -807,8 +807,8 @@ local int build_bl_tree(s) /* Build the bit length tree: */ build_tree(s, (tree_desc *)(&(s->bl_desc))); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + /* opt_len now includes the length of the tree representations, except the + * lengths of the bit lengths codes and the 5 + 5 + 4 bits for the counts. */ /* Determine the number of bit length codes to send. The pkzip format @@ -819,7 +819,7 @@ local int build_bl_tree(s) if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; } /* Update opt_len to include the bit length tree and counts */ - s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; + s->opt_len += 3*((ulg)max_blindex + 1) + 5 + 5 + 4; Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", s->opt_len, s->static_len)); @@ -841,19 +841,19 @@ local void send_all_trees(s, lcodes, dcodes, blcodes) Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, "too many codes"); Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes-1, 5); - send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ for (rank = 0; rank < blcodes; rank++) { Tracev((stderr, "\nbl code %2d ", bl_order[rank])); send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); } Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + send_tree(s, (ct_data *)s->dyn_ltree, lcodes - 1); /* literal tree */ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + send_tree(s, (ct_data *)s->dyn_dtree, dcodes - 1); /* distance tree */ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); } @@ -866,7 +866,7 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) ulg stored_len; /* length of input block */ int last; /* one if this is the last block for a file */ { - send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ + send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */ bi_windup(s); /* align on byte boundary */ put_short(s, (ush)stored_len); put_short(s, (ush)~stored_len); @@ -877,7 +877,7 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; s->bits_sent += 2*16; - s->bits_sent += stored_len<<3; + s->bits_sent += stored_len << 3; #endif } @@ -943,14 +943,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) max_blindex = build_bl_tree(s); /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s->opt_len+3+7)>>3; - static_lenb = (s->static_len+3+7)>>3; + opt_lenb = (s->opt_len + 3 + 7) >> 3; + static_lenb = (s->static_len + 3 + 7) >> 3; Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, s->sym_next / 3)); - if (static_lenb <= opt_lenb) opt_lenb = static_lenb; +#ifndef FORCE_STATIC + if (static_lenb <= opt_lenb || s->strategy == Z_FIXED) +#endif + opt_lenb = static_lenb; } else { Assert(buf != (char*)0, "lost buf"); @@ -960,7 +963,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) #ifdef FORCE_STORED if (buf != (char*)0) { /* force stored block */ #else - if (stored_len+4 <= opt_lenb && buf != (char*)0) { + if (stored_len + 4 <= opt_lenb && buf != (char*)0) { /* 4: two words for the lengths */ #endif /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. @@ -971,21 +974,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) */ _tr_stored_block(s, buf, stored_len, last); -#ifdef FORCE_STATIC - } else if (static_lenb >= 0) { /* force static trees */ -#else - } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { -#endif - send_bits(s, (STATIC_TREES<<1)+last, 3); + } else if (static_lenb == opt_lenb) { + send_bits(s, (STATIC_TREES<<1) + last, 3); compress_block(s, (const ct_data *)static_ltree, (const ct_data *)static_dtree); #ifdef ZLIB_DEBUG s->compressed_len += 3 + s->static_len; #endif } else { - send_bits(s, (DYN_TREES<<1)+last, 3); - send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, - max_blindex+1); + send_bits(s, (DYN_TREES<<1) + last, 3); + send_all_trees(s, s->l_desc.max_code + 1, s->d_desc.max_code + 1, + max_blindex + 1); compress_block(s, (const ct_data *)s->dyn_ltree, (const ct_data *)s->dyn_dtree); #ifdef ZLIB_DEBUG @@ -1004,22 +1003,22 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) s->compressed_len += 7; /* align on byte boundary */ #endif } - Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - s->compressed_len-7*last)); + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len >> 3, + s->compressed_len - 7*last)); } /* =========================================================================== * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ -int ZLIB_INTERNAL _tr_tally (s, dist, lc) +int ZLIB_INTERNAL _tr_tally(s, dist, lc) deflate_state *s; unsigned dist; /* distance of matched string */ - unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ + unsigned lc; /* match length - MIN_MATCH or unmatched char (dist==0) */ { - s->sym_buf[s->sym_next++] = dist; - s->sym_buf[s->sym_next++] = dist >> 8; - s->sym_buf[s->sym_next++] = lc; + s->sym_buf[s->sym_next++] = (uch)dist; + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); + s->sym_buf[s->sym_next++] = (uch)lc; if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; @@ -1031,7 +1030,7 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_ltree[_length_code[lc] + LITERALS + 1].Freq++; s->dyn_dtree[d_code(dist)].Freq++; } return (s->sym_next == s->sym_end); @@ -1061,7 +1060,7 @@ local void compress_block(s, ltree, dtree) } else { /* Here, lc is the match length - MIN_MATCH */ code = _length_code[lc]; - send_code(s, code+LITERALS+1, ltree); /* send the length code */ + send_code(s, code + LITERALS + 1, ltree); /* send length code */ extra = extra_lbits[code]; if (extra != 0) { lc -= base_length[code]; @@ -1177,6 +1176,6 @@ local void bi_windup(s) s->bi_buf = 0; s->bi_valid = 0; #ifdef ZLIB_DEBUG - s->bits_sent = (s->bits_sent+7) & ~7; + s->bits_sent = (s->bits_sent + 7) & ~7; #endif } diff --git a/lib/zlib/uncompr.c b/lib/zlib/uncompr.c index f03a1a865e..f9532f46c1 100644 --- a/lib/zlib/uncompr.c +++ b/lib/zlib/uncompr.c @@ -24,7 +24,7 @@ Z_DATA_ERROR if the input data was corrupted, including if the input data is an incomplete zlib stream. */ -int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) +int ZEXPORT uncompress2(dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; @@ -83,7 +83,7 @@ int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) err; } -int ZEXPORT uncompress (dest, destLen, source, sourceLen) +int ZEXPORT uncompress(dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; diff --git a/lib/zlib/zconf.h.in b/lib/zlib/zconf.h.in index 799e5ffb87..e480913ab7 100644 --- a/lib/zlib/zconf.h.in +++ b/lib/zlib/zconf.h.in @@ -80,6 +80,9 @@ # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op # define crc32_z z_crc32_z # define deflate z_deflate # define deflateBound z_deflateBound @@ -391,6 +394,9 @@ # ifdef FAR # undef FAR # endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif # include /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ @@ -509,11 +515,18 @@ typedef uLong FAR uLongf; # undef _LARGEFILE64_SOURCE #endif -#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) -# define Z_HAVE_UNISTD_H +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif #endif #ifndef Z_SOLO -# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# if defined(Z_HAVE_UNISTD_H) # include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ # ifdef VMS # include /* for off_t */ diff --git a/lib/zlib/zlib.h b/lib/zlib/zlib.h index 4a98e38bf3..953cb5012d 100644 --- a/lib/zlib/zlib.h +++ b/lib/zlib/zlib.h @@ -1,5 +1,5 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.12, March 11th, 2022 + version 1.2.13, October 13th, 2022 Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler @@ -37,11 +37,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.12" -#define ZLIB_VERNUM 0x12c0 +#define ZLIB_VERSION "1.2.13" +#define ZLIB_VERNUM 0x12d0 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 12 +#define ZLIB_VER_REVISION 13 #define ZLIB_VER_SUBREVISION 0 /* @@ -276,7 +276,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. See deflatePending(), - which can be used if desired to determine whether or not there is more ouput + which can be used if desired to determine whether or not there is more output in that case. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to @@ -660,7 +660,7 @@ ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If deflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. deflateGetDictionary() may return a length less than the window size, even when more than the window size in input has been provided. It may return up @@ -915,7 +915,7 @@ ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If inflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the stream state is inconsistent. @@ -1437,12 +1437,12 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, In the event that the end of file is reached and only a partial item is available at the end, i.e. the remaining uncompressed data length is not a - multiple of size, then the final partial item is nevetheless read into buf + multiple of size, then the final partial item is nevertheless read into buf and the end-of-file flag is set. The length of the partial item read is not provided, but could be inferred from the result of gztell(). This behavior is the same as the behavior of fread() implementations in common libraries, but it prevents the direct use of gzfread() to read a concurrently written - file, reseting and retrying on end-of-file, when size is not 1. + file, resetting and retrying on end-of-file, when size is not 1. */ ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); @@ -1913,7 +1913,7 @@ ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); -ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF((z_streamp)); ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); #if defined(_WIN32) && !defined(Z_SOLO) diff --git a/lib/zlib/zutil.c b/lib/zlib/zutil.c index dcab28a0d5..9543ae825e 100644 --- a/lib/zlib/zutil.c +++ b/lib/zlib/zutil.c @@ -61,9 +61,11 @@ uLong ZEXPORT zlibCompileFlags() #ifdef ZLIB_DEBUG flags += 1 << 8; #endif + /* #if defined(ASMV) || defined(ASMINF) flags += 1 << 9; #endif + */ #ifdef ZLIB_WINAPI flags += 1 << 10; #endif @@ -119,7 +121,7 @@ uLong ZEXPORT zlibCompileFlags() # endif int ZLIB_INTERNAL z_verbose = verbose; -void ZLIB_INTERNAL z_error (m) +void ZLIB_INTERNAL z_error(m) char *m; { fprintf(stderr, "%s\n", m); @@ -214,7 +216,7 @@ local ptr_table table[MAX_PTR]; * a protected system like OS/2. Use Microsoft C instead. */ -voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { voidpf buf; ulg bsize = (ulg)items*size; @@ -240,7 +242,7 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) return buf; } -void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { int n; @@ -277,13 +279,13 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) # define _hfree hfree #endif -voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) { (void)opaque; return _halloc((long)items, size); } -void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { (void)opaque; _hfree(ptr); @@ -302,7 +304,7 @@ extern voidp calloc OF((uInt items, uInt size)); extern void free OF((voidpf ptr)); #endif -voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) +voidpf ZLIB_INTERNAL zcalloc(opaque, items, size) voidpf opaque; unsigned items; unsigned size; @@ -312,7 +314,7 @@ voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) (voidpf)calloc(items, size); } -void ZLIB_INTERNAL zcfree (opaque, ptr) +void ZLIB_INTERNAL zcfree(opaque, ptr) voidpf opaque; voidpf ptr; { diff --git a/lib/zlib/zutil.h b/lib/zlib/zutil.h index d9a20ae1bf..0bc7f4ecd1 100644 --- a/lib/zlib/zutil.h +++ b/lib/zlib/zutil.h @@ -193,6 +193,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); #endif /* common defaults */ From 6185c4f84b7d0925f191049d843382b1603d7eb2 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 14 Oct 2022 08:13:35 -0600 Subject: [PATCH 172/186] Don't define _LARGEFILE64_SOURCE or _LFS64_LARGEFILE. We don't need them and the missing prototype for crc32_combine_gen64() issue has been fixed upstream. --- lib/zlib/zconf.h.in | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/lib/zlib/zconf.h.in b/lib/zlib/zconf.h.in index e480913ab7..d23d7931d4 100644 --- a/lib/zlib/zconf.h.in +++ b/lib/zlib/zconf.h.in @@ -18,19 +18,6 @@ #undef _LARGE_FILES #undef const -/* - * Configure does not define _LARGEFILE64_SOURCE by default. - * We need to manually define it on systems that support large files. - */ -#if defined(__LP64__) || defined(_LARGE_FILES) || (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64) -# ifndef _LFS64_LARGEFILE -# define _LFS64_LARGEFILE 1 -# endif -# ifndef _LARGEFILE64_SOURCE -# define _LARGEFILE64_SOURCE 1 -# endif -#endif - /* We build sudo and its libs with -fvisibility=hidden where supported. */ #ifdef HAVE_DSO_VISIBILITY # if defined(__GNUC__) From 5dbb8ac6e46a18b377afeb9de44252c9e8300dd1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 14 Oct 2022 12:37:20 -0600 Subject: [PATCH 173/186] Updated translations from translationproject.org --- plugins/sudoers/po/de.mo | Bin 78597 -> 80080 bytes plugins/sudoers/po/de.po | 1551 +++++++++++----------- plugins/sudoers/po/fr.mo | Bin 82988 -> 84559 bytes plugins/sudoers/po/fr.po | 1547 ++++++++++++---------- plugins/sudoers/po/ja.mo | Bin 86746 -> 86736 bytes plugins/sudoers/po/ja.po | 2078 +++++++++++++++-------------- plugins/sudoers/po/ko.mo | Bin 78472 -> 79927 bytes plugins/sudoers/po/ko.po | 1557 +++++++++++----------- plugins/sudoers/po/pl.mo | Bin 76514 -> 77976 bytes plugins/sudoers/po/pl.po | 1551 +++++++++++----------- plugins/sudoers/po/ro.mo | Bin 79651 -> 81174 bytes plugins/sudoers/po/ro.po | 1552 ++++++++++++---------- plugins/sudoers/po/sr.mo | Bin 99815 -> 98181 bytes plugins/sudoers/po/sr.po | 1590 +++++++++++----------- plugins/sudoers/po/sv.mo | Bin 65932 -> 74658 bytes plugins/sudoers/po/sv.po | 2718 +++++++++++++++++++++++--------------- plugins/sudoers/po/uk.mo | Bin 103837 -> 105824 bytes plugins/sudoers/po/uk.po | 1545 ++++++++++++---------- po/cs.mo | Bin 24256 -> 24916 bytes po/cs.po | 618 +++++---- po/de.mo | Bin 25923 -> 26587 bytes po/de.po | 622 ++++----- po/fr.mo | Bin 25771 -> 26427 bytes po/fr.po | 618 +++++---- po/ja.mo | Bin 26669 -> 29391 bytes po/ja.po | 668 ++++++---- po/ka.mo | Bin 36091 -> 40144 bytes po/ka.po | 660 +++++---- po/ko.mo | Bin 26359 -> 27061 bytes po/ko.po | 622 ++++----- po/pl.mo | Bin 24847 -> 25451 bytes po/pl.po | 606 +++++---- po/ro.mo | Bin 25091 -> 25761 bytes po/ro.po | 629 ++++----- po/sr.mo | Bin 29405 -> 31656 bytes po/sr.po | 451 ++++--- po/sv.mo | Bin 20604 -> 24410 bytes po/sv.po | 854 +++++++----- po/uk.mo | Bin 33444 -> 34259 bytes po/uk.po | 618 +++++---- 40 files changed, 12246 insertions(+), 10409 deletions(-) diff --git a/plugins/sudoers/po/de.mo b/plugins/sudoers/po/de.mo index ae40a6aeefdfd2db30e7ab59f3813fa47ff5c0e6..4d62604033f87cb5647ab73004847e8dccf74b57 100644 GIT binary patch delta 16247 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 diff --git a/plugins/sudoers/po/de.po b/plugins/sudoers/po/de.po index 3f813136b3..8cbf7a0089 100644 --- a/plugins/sudoers/po/de.po +++ b/plugins/sudoers/po/de.po @@ -6,10 +6,10 @@ # Jochen Hein , 2001-2022. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.11b1\n" +"Project-Id-Version: sudoers 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 12:45+0200\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-11 19:01+0200\n" "Last-Translator: Jochen Hein \n" "Language-Team: German \n" "Language: de\n" @@ -20,7 +20,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.3\n" -#: confstr.sh:1 gram.y:1218 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "Syntax-Fehler" @@ -44,13 +44,13 @@ msgstr "*** Sicherheits-Information für %h ***" msgid "Sorry, try again." msgstr "Das hat nicht funktioniert, bitte nochmal probieren." -#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 -#: gram.y:365 gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 -#: gram.y:501 gram.y:511 gram.y:523 gram.y:571 gram.y:580 gram.y:589 -#: gram.y:598 gram.y:730 gram.y:738 gram.y:749 gram.y:761 gram.y:780 -#: gram.y:943 gram.y:948 gram.y:956 gram.y:970 gram.y:976 gram.y:1098 -#: gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 gram.y:1162 gram.y:1171 -#: gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 gram.y:1816 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 #: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 @@ -60,50 +60,64 @@ msgstr "Das hat nicht funktioniert, bitte nochmal probieren." #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 -#: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:168 plugins/sudoers/cvtsudoers.c:131 -#: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 -#: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 -#: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:862 -#: plugins/sudoers/cvtsudoers.c:870 plugins/sudoers/cvtsudoers.c:1365 -#: plugins/sudoers/cvtsudoers.c:1369 plugins/sudoers/cvtsudoers.c:1471 -#: plugins/sudoers/cvtsudoers_csv.c:183 plugins/sudoers/cvtsudoers_csv.c:246 -#: 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:376 -#: plugins/sudoers/cvtsudoers_ldif.c:430 plugins/sudoers/cvtsudoers_ldif.c:438 -#: plugins/sudoers/cvtsudoers_ldif.c:449 plugins/sudoers/cvtsudoers_ldif.c:456 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:481 -#: plugins/sudoers/cvtsudoers_ldif.c:489 plugins/sudoers/cvtsudoers_ldif.c:636 -#: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 +#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 +#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 #: plugins/sudoers/cvtsudoers_merge.c:446 @@ -113,11 +127,11 @@ msgstr "Das hat nicht funktioniert, bitte nochmal probieren." #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1158 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -126,124 +140,125 @@ msgstr "Das hat nicht funktioniert, bitte nochmal probieren." #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 -#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 -#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 -#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 -#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 -#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 -#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 -#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 -#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 -#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 -#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 -#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 -#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 -#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 -#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 -#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 -#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 -#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 -#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 -#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 #: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 #: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 #: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 #: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 #: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "Es kann kein Speicher mehr alloziert werden" -#: gram.y:622 +#: gram.y:623 msgid "a digest requires a path name" msgstr "Eine Prüfsumme erfordert einen Pfadnamen" -#: gram.y:644 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "Werte für »CWD« müssen mit »/«, »~« oder »*« beginnen" -#: gram.y:650 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "»CWD« (aktuelles Arbeitsverzeichnis) Pfad ist zu lang" -#: gram.y:660 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "Werte für »CHROOT« müssen mit »/«, »~« oder »*« beginnen" -#: gram.y:666 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "»CHROOT« Pfad ist zu lang" -#: gram.y:801 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "Syntaxfehler, das reservierte Wort »%s« wird als Aliasname verwendet" -#: gram.y:824 +#: gram.y:825 msgid "invalid notbefore value" msgstr "ungültiger Wert für »notbefore«" -#: gram.y:833 +#: gram.y:834 msgid "invalid notafter value" msgstr "ungültiger Wert für »notafter«" -#: gram.y:843 plugins/sudoers/policy.c:376 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "Wert für Timeout ist zu groß" -#: gram.y:845 plugins/sudoers/policy.c:378 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "ungültiger Wert für Timeout" -#: gram.y:966 plugins/sudoers/sudoers.c:1014 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "Der Befehl ist zu lang" -#: gram.y:1220 plugins/sudoers/check_aliases.c:96 -#: plugins/sudoers/defaults.c:1275 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1270 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "Alias »%s« ist bereits definiert" -#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 #: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 #: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 @@ -253,33 +268,48 @@ msgstr "Alias »%s« ist bereits definiert" #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 -#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 @@ -309,11 +339,11 @@ msgstr "Alias »%s« ist bereits definiert" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1157 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -322,46 +352,47 @@ msgstr "Alias »%s« ist bereits definiert" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 -#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 -#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 -#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 -#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 -#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 -#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 -#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 -#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 -#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: 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:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 -#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 -#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 -#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 -#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 -#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 -#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 #: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 -#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -374,25 +405,25 @@ msgstr "Alias »%s« ist bereits definiert" #: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 #: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 #: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 -#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 -#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 -#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 -#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 -#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 -#: toke.l:1226 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 +#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -401,14 +432,14 @@ msgstr "%s: %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 #: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 #: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 -#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 -#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 #: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 #: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 @@ -451,7 +482,7 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (Befehl fortgesetzt) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -566,14 +597,14 @@ msgstr "%s: Das Feld für die »runas«-Gruppe fehlt" msgid "%s exists but is not a directory (0%o)" msgstr "%s existiert, aber ist kein Verzeichnis (0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "Das Verzeichnis »%s« kann nicht erstellt werden" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 -#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "Ändern des Modus von %s auf 0%o gescheitert" @@ -588,151 +619,157 @@ msgstr "Fehler beim Lesen der Zeitdateizeile: %s" msgid "invalid timing file line: %s" msgstr "Ungültige Zeitdateizeile: %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 -#: plugins/sudoers/policy.c:573 -msgid "unable to generate UUID" -msgstr "UUID kann nicht generiert werden" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s: Protokollfehker: NULL-Schlüssel" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "%s: Protokollfehker: falscher Typ für %s" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s: Protokollfehker: Wert NULL gefunden in %s" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "UUID kann nicht generiert werden" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "%s: Protokollfehler: %s fehlt in der AcceptMessage" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "%s: Session-ID kann nicht formatiert werden" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "%s: %s ist nicht gesetzt" # Kann die Escape-Sequenzen nicht auflösen? -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "Kann den iolog-Pfad nicht erweitern: %s" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "Kann den iolog-Pfad »%s« nicht erstellen" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "Ungültiger I/O Dateideskriptor: %d" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "Fehler beim Schließen des I/O Dateideskriptors %d: %s" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "Fehler beim Leeren des I/O Dateideskriptors %d: %s" -#: logsrvd/iolog_writer.c:780 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "Ungültiges I/O log %s: »%s« wird verwendet, ist aber nicht vorhanden" -#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s; Der Wiederaufsetz-Punkt [%lld, %ld] kann nicht gefunden werden" -#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 -#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 #: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 -#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 -#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "Die Datei »%s« kann nicht geöffnet werden" -#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "Die Datei »%s/%s« kann nicht geöffnet werden" -#: logsrvd/iolog_writer.c:839 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "Fehler beim Kopieren von »%s/%s« nach »%s/%s«: %s" -#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "Die Datei »%s« kann nicht in »%s« umbenannt werden" -#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s: Der Wiederaufsetz-Punkt [%lld, %ld] kann nicht gefunden werden" -#: logsrvd/logsrv_util.c:154 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "Die I/O Logdatei %s/%s fehlt" -#: logsrvd/logsrv_util.c:161 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: kann nicht zur Position %zu springen" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "Verbindung zum Relay kann nicht aufgebaut werden" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "Server-Nachricht ist zu groß: %zu" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 -#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 -#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 -#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 -#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 -#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 -#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 -#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 -#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 -#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 -#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 -#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -741,635 +778,660 @@ msgstr "Server-Nachricht ist zu groß: %zu" msgid "unable to add event to queue" msgstr "Event kann nicht zur Warteschlange hinzugefügt werden" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "Unerwarteter Status %d für %s" # XXX geht das besser? -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "Fehler der State Machine" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "ungültige AcceptMessage" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "ungültige RejectMessage" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "ungültige ExitMessage" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "ungültige RestartMessage" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "ungültige AlertMessage" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "%s: unerwarteter IoBuffer" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "Protokollfehler" -#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 -#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 -#: plugins/sudoers/log_client.c:1618 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "Ungültiger IoBuffer" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "ungültige ChangeWindowSize" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "ungültiges CommandSusped" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 #, c-format msgid "unable to unpack %s size %zu" msgstr "Kann »%s« nicht auspacken, Größe %zu" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "unerwarteter type_case Wert %d in »%s« aus »%s«" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "unbekannter ClientMessage-Typ" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "Zeitablauf beim Senden zum Client %s" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "Schreib-Puffer fehlt für Client %s" -#: logsrvd/logsrvd.c:982 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "Zeitablauf beim Lesen vom Client %s" -#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "Dateiende (EOF) von %s ohne korrekten TLS-Abscluß" -#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:716 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "Client-Nachricht ist zu groß: %zu" -#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "Client-Nachricht ist zu groß" -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "ungültige ClientMessage" -#: logsrvd/logsrvd.c:1389 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "Kann die entfernte IP-Adresse nicht finden" -#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 -#: plugins/sudoers/log_client.c:276 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Kann die User-Daten nicht an das SSL-Objekt anhängen: %s" -#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "Konnte keinen Socket zum »Lauschen« einrichten" -#: logsrvd/logsrvd.c:1718 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "unerwartete Signal %d" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "sudo Log-Server" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "Optionen:" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "Pfad zur Konfigurationsdatei" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "Hilfe anzeigen und beenden" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "Nicht zum Hintergrundprozess werden, sondern im Vordergrund laufen" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "Wahrscheinlichkeit in Prozent für Verbindungsabbruch" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "Versionsinformation anzeigen und beenden" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C Version 1.3 oder höher ist notwendig" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "ungültiger Wert für »random drop«: %s" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:180 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s Version %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 #: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 -#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "Unbekannter Benutzer %s" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 -#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "Unbekannte Gruppe %s" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "Iolog mode %s kann nicht geparst werden" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "Ungültiger Wert für %s: %s" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "TLS ist nicht unterstützt" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: ist kein voll qualifizierter Pfad" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "Unbekannte Syslog-Facility %s" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "Unbekannte Syslog-Priorität %s" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s: %d »[« ohne schliessende Klammer »]«: %s" # XXX Geht das besser? -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "%s: %d unsinnige Zeichen nach »]«: %s" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s/%d Ungültiger Konfigurations-Abschnitt: %s" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s/%d Ungültige Konfigurationszeile: %s" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d erwartetder Section Name: %s" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] ungültiger Schlüssel: %s" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:1035 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "Die Protokolldatei kann nicht geöffnet werden %s" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "Server-SSL-Kontext kann nicht initialisiert werden" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "SSL-Kontext kann nicht initialisiert werden" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 -#: logsrvd/logsrvd_journal.c:416 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "Kann die Journal-Datei nicht anlegen" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1020 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "Die Datei »%s« kann nicht gesperrt werden" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "Die Journal-Datei »%s« kann nicht gesperrt werden" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "Die Journal-Datei kann nicht geöffnet werden" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 -#: logsrvd/logsrvd_journal.c:452 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "In die Logdatei kann nicht geschrieben werden" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "Die Journal-Datei kann nicht geöffnet werden" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "unerwartetes Dateiende beim Lesen der Journal-Datei" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "Fehler beim Lesen der Journal-Datei" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "Ungültige Journal-Datei - kann nicht neu starten" -#: logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "Kann nicht zu [%lld, %ld] in der Journaldatei »%s« springen" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "unerwarteter value_case Wert %d in »%s« aus »%s«" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "Fehler beim Parsen der AcceptMessage" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "Fehler beim Erstellen des Ein-/Ausgabe-Protokolls" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "Fehler beim Protokolliereb des Accept-Events" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "Fehler beim Parsen der RejectMessage" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "Fehler beim Protokollieren des Reject-Events" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "Fehler beim Protokollieren des Exit-Events" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "Das Log ist bereits abgeschlossen, kann nicht neu gestartet werden" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "Das Log konnte nicht wieder begonnen werden" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "Fehler beim Parsen der AlertMessage" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "Fehler beim Protokollieren des Alert-Events" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "Der Zeitstempel kann nicht formatiert werden, Länge %d" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "Zufällig die Verbindung beenden" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "Fehler beim Schreiben des IoBuffer" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "Fehler beim Schreiben der ChangeWindowSize" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "Fehler beim Schreiben des CommandSusped" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "TLS-Handshake mit dem Relay-Host fehlgeschlagen" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "Verbindung zum Relay-Host kann nicht aufgebaut werden" -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "%s: ungültiges ServerHello, fehlende server_id" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1504 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "ungültiges ServerHello" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "unbekannter ServerMessage-Typ" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "Zeitablauf beim Lesen vom Relay-Server »%s« (%s)" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "Zeitablauf beim Lesen vom Relay-Server" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "Der Name des Relay-Hosts passt nicht zum Zertifikat" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 -#: logsrvd/logsrvd_relay.c:784 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "Fehler beim Lesen vom Relay-Host" -#: logsrvd/logsrvd_relay.c:805 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "Vom Relay-Server kann nicht gelesen werden" -#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "Der Relay-Server hat die Verbindung geschlossen" -#: logsrvd/logsrvd_relay.c:838 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "Server-Nachricht ist zu groß" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "Zeitablauf beim Senden an den Relay-Server »%s« (%s)" -#: logsrvd/logsrvd_relay.c:904 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "Zeitablauf beim Senden an den Relay-Server" -#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 -#: logsrvd/logsrvd_relay.c:974 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "Fehler beim Schreiben des zum Relay-Server" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "sende sudo I/O-Log zu einem entfernten Server" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "Nur einen Accept-Event senden (kein I/O)" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "Zertifikatsbündel-Datei zur Verifikation des Server-Zertifikats" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "Zertifikatsdatei für TLS-Handshake" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "Rechner an den die Logs gesendet werden" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "Entfernte ID des I/O-Logs zum Wiederaufnehmen" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "Private Schlüsseldatei" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "Serverzertifikat nicht überprüfen" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "Portnummer für die Verbindung zum Host" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "Restarte die vorhergehende I/O-Log Übertragung" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "Weise das Kommando mit dem angegebenen Grund zurück" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "Beende den Transfer nach Erreichen dieser Zeit" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "Teste den Audit-Server durch senden ausgewählter I/O-Logs n-Mal parallel" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "Fehler beim Lookup %s:%s: %s" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "Kann die Server IP-Adresse nicht finden" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "Fehler beim Lesen %s/%s: %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 -#: plugins/sudoers/iolog.c:1024 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "unerwarteter I/O Event %d" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 -#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: unerwarteter Status %d" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "Fehler beim Empfangen der Nachricht vom Server: %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "Abbruch-Nachricht vom Server empfangen: %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: unerwarteter type_case Wert %d" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "Zeitablauf beim Lesen vom Server" -#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 msgid "host name does not match certificate" msgstr "Der Hostname passt nicht zum Zertifikat" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "unerwartetes Datei-Ende" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "Server-Nachricht ist zu groß: %u" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "Zeitablauf beim Senden an den Server" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "Sowohl Restart-Punkt als auch die I/O-Log ID sind notwendig" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "Ein Restart-Punkt kann nicht angegeben werden, wenn keine Ein/Ausgabe gesendet ist." -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "Vorzeitig beendet mit Status %d" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "Abgelaufene Zeit zum Server gesendet [%lld, %ld]" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "Commit Punkt vom Server empfangen [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "Timeout beim TLS-Handshake erreicht" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "Konnte den Event nicht setzen" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "TLS-Kommunikation fehlgeschlagen: %s" -#: logsrvd/tls_client.c:191 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "Kann kein SSL-Objekt anlegen: %s" -#: logsrvd/tls_client.c:205 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Kann den Socket nicht an das SSL-Objekt anhängen: %s" -#: logsrvd/tls_client.c:233 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "SSL-Kontext kann nicht initialisiert werden" -#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "Die TLS 1.2 Cyphersuite kann nicht auf »%s« gesetzt werden: %s" -#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "Die TLS 1.3 Cyphersuite kann nicht auf »%s« gesetzt werden: %s" -#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "Kann die Diffie-Hellman Parameter nicht setzen: %s" -#: logsrvd/tls_init.c:277 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "SSL-Kontext kann nicht erzeugt werden: %s" -#: logsrvd/tls_init.c:284 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "Kann die minimale Protokollversion nicht auf TLS 1.2 setzen: %s" -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 -#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 -#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 -#: plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "Die aktuelle Zeit kann nicht ausgelesen werden" @@ -1507,7 +1569,7 @@ msgstr "Das Konto ist abgelaufen oder in der PAM-Konfiguration fehlt der »accou msgid "PAM account management error: %s" msgstr "Fehler beim PAM-Account-Management: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "Der Benutzer existiert in der %s-Datenbank nicht" @@ -1580,17 +1642,17 @@ msgstr "Der Audit-Zustand kann nicht bestimmt werden" msgid "unable to commit audit record" msgstr "Audit-Satz kann nicht auf Platte geschrieben werden" -#: plugins/sudoers/check.c:275 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "Fehler beim Lesen der Belehrungsdatei %s" -#: plugins/sudoers/check.c:278 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "Ignoriere Belehrungsdatei %s: es ist keine reguläre Datei" -#: plugins/sudoers/check.c:291 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1610,14 +1672,14 @@ msgstr "" " #3) Mit großer Macht kommt große Verantwortung.\n" "\n" -#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 -#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "Unbekannte Benutzer-ID %u" -#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" @@ -1647,7 +1709,7 @@ msgstr "Start der Folge: %s: %s" msgid "order padding: %s: %s" msgstr "Auffüllen der Folge: %s: %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "%s-Grammatik Version %d\n" @@ -1667,14 +1729,14 @@ msgstr "Nicht unterstütztes Ausgabeformat %s" msgid "%s: input and output files must be different" msgstr "%s: Eingabe- und Ausgabedatei müssen unterschiedlich sein" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 -#: plugins/sudoers/visudo.c:969 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "Standardwerte für sudoers können nicht initialisiert werden" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" @@ -1699,18 +1761,18 @@ msgstr "ungültiger suppression Typ: %s" msgid "invalid filter: %s" msgstr "Ungültiger Filter: %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "Analyse der Datei %s gescheitert, unbekannter Fehler" #: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "In die Datei »%s« kann nicht geschrieben werden" -#: plugins/sudoers/cvtsudoers.c:1501 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1719,7 +1781,7 @@ msgstr "" "%s – zwischen sudoers Dateiformaten konvertieren\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1503 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -2174,361 +2236,385 @@ msgid "Log user's input for the command being run" msgstr "Benutzereingaben für den ausgeführten Befehl protokollieren" #: plugins/sudoers/def_data.c:356 +msgid "Log the command's standard input if not connected to a terminal" +msgstr "Standardeingabe des Kommandos protokollieren, wenn kein Terminal angebunden ist" + +#: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "Benutzereingaben am Terminal für den ausgeführten Befehl protokollieren" + +#: plugins/sudoers/def_data.c:364 msgid "Log the output of the command being run" msgstr "Die Ausgabe des ausgeführten Befehls protokollieren" -#: plugins/sudoers/def_data.c:360 +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "Standardausgabe des Kommandos protokollieren, wenn kein Terminal angebunden ist" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "Standarderror des Kommandos protokollieren, wenn kein Terminal angebunden ist<" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "Die Terminalausgabe des ausgeführten Befehls protokollieren" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "Ein-/Ausgabe-Protokolle mittels zlib protokollieren" -#: plugins/sudoers/def_data.c:364 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "Befehle immer in einem Pseudo-TTY ausführen" -#: plugins/sudoers/def_data.c:368 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plugin für Unterstützung von Nicht-Unix-Gruppen: %s" -#: plugins/sudoers/def_data.c:372 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Verzeichnis zur Speicherung der Ein-/Ausgabe-Protokolle: %s" -#: plugins/sudoers/def_data.c:376 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Datei zur Speicherung der Ein-/Ausgabe-Protokolle: %s" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Einen Eintrag in die utmp/utmpx-Datei einfügen, wenn ein Pseudo-TTY erzeugt wird" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Für den Eintrag in der utmp-Datei den runas-Benutzer verwenden, nicht den aufrufenden Benutzer" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "Menge der erlaubten Privilegien: %s" # XXX einschränkenden? -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "Menge der eingeschränkten Privilegien: %s" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "Befehle mit einem Pseudo-TTY im Hintergrund starten" -#: plugins/sudoers/def_data.c:400 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "Verwendeter PAM-Service-Name: %s" -#: plugins/sudoers/def_data.c:404 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "PAM-Service-Name für Anmelde-Shells: %s" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "PAM-Service-Name für sudo-Aufruf mit der Option »-A«: %s" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "Versuchen, die PAM-Anmeldedaten für den Ziel-Benutzer zu bekommen" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "Eine neue PAM-Sitzung erzeugen, um den Befehl auszuführen" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "Ausführen vom PAM-Account-Management" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Maximale Sequenznummer des Ein-/Ausgabe-Protokolls: %s" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "Unterstützung für netgroups in sudoers aktivieren" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:452 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Prüfe die übergeordneten Verzeichnisse auf Schreibbarkeit beim Editieren von Dateien mit »sudoedit«" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Folge symbolischen Links beim Editieren von Dateien mit sudoedit" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "Frage das Group-Plugin nach unbekannten System-Gruppen" -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Prüfe die Netgroup-Zuordnung aufgrund des gesamten Tupels: Benutzer, Host und Domain" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Erlaubt das Ausführen von Kommandos, auch wenn kein Audit-Log geschrieben werden kann" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Erlaubt das Ausführen von Kommandos, auch wenn kein I/O-Log geschrieben werden kann" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Erlaubt das Ausführen von Kommandos, auch wenn kein Log geschrieben werden kann" -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Beim Auflösen von Gruppen in der sudoers nach der Guppen-ID suchen, nicht nach dem Gruppenname" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:484 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Log-Einträge größer als dieser Wert werden auf mehrere Syslog Einträge verteilt: %u" -#: plugins/sudoers/def_data.c:468 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Eigentümer der I/O Logdateien: %s" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Gruppe der I/O Logdateien: %s" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Dateimode der I/O Logdatei: 0%o" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Führe Kommandos mit Hilfe eines Dateideskriptors anstelle des Pfades aus: %s" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:504 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignoriere unbekannte Default-Einträge in der Datei »sudoers« anstatt eine Warnung auszugeben" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Laufzeit in Sekunde, nach der das Kommando abgebrochen wird: %u" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "Erlaube dem Benutzer per Kommandozeile einen Timeout anzugeben" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Schreibe Log-Daten direkt ohne zu puffern" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "Protokolliere auch die Prozess-ID beim Schreiben ins Systemlog" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Typ des Authentifizierungszeitstempelprotokolls: %s" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "Fehler bei der Authentifizierung: %s" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "Ignoriere Groß-/Kleinschreibung beim Matchen von Benutzernamen" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "Ignoriere Groß-/Kleinschreibung beim Matchen von Gruppennamen" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "Protokolliere von sudo erlaubte Kommandos" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "Protokolliere von sudo verweigerte Kommandos" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "Sudo Log Server mit optionalem Port für die Verbindung" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Sudo Log-Server Timeout in Secunden: %u" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:556 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Verwende die SO_KEEPALIVE Socket Option für die Verbindung zum Logserver" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Pfad zur Zertifikats-Bündel-Datei des Audit Servers: %s" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Pfad zur sudoers Zertifikats-Datei: %s" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Pfad zur sudoers Datei mit dem privaten Schlüssel: %s" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "Prüfe das Log-Server-Zertifikat auf Gültigkeit" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Erlaube die Verwendung eines unbekannten »runas« Benutzers oder Gruppen-ID" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "Nur die Ausführung von Kommandos erlauben für Benutzer mit einer gültigen Shell" -#: plugins/sudoers/def_data.c:564 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "Setze den PAM remote Benutzer auf den Benutzer, der sudo ausführt" -#: plugins/sudoers/def_data.c:568 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "Setze den PAM remote Rechner auf den lokalen Hostname" -#: plugins/sudoers/def_data.c:572 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "Arbeitsverzeichnis um vor Ausführung des Kommandos dorthin zu wechseln: %s" -#: plugins/sudoers/def_data.c:576 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Root-Verzeichnis zur Verwendung, bevor ein Befehl ausgeführt wird: %s" -#: plugins/sudoers/def_data.c:580 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "Das Format der zu schreibenden Logs: %s" -#: plugins/sudoers/def_data.c:584 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "Schalte SELinux RBAC Support ein" -#: plugins/sudoers/def_data.c:588 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "Pfad zur Datei die beim ersten sudo-Lauf erzeugt wird: %s" -#: plugins/sudoers/def_data.c:592 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "Weitere Kommando abfangen und sudoers Restriktionen auf sie anwenden" -#: plugins/sudoers/def_data.c:596 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "Protokolliere von diesem Kommando gestartete Kind-Prozesse" -#: plugins/sudoers/def_data.c:600 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "Den Exitcode des ausgeführten Befehls protokollieren" # XXX Check! -#: plugins/sudoers/def_data.c:604 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "Folgende Kommando in einer nachverfolgten Sitzung müssen authentifiziert werden" -#: plugins/sudoers/def_data.c:608 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "Erlaube einem abgefangenen Kommando die Ausführung von setuid oder setgid Programmen" -#: plugins/sudoers/def_data.c:612 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "Die maximale Größe zu der der Adressbereich des Prozesse wachsen kann (in Bytes): %s" -#: plugins/sudoers/def_data.c:616 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "Die maximale Größe eines erzeugten Core Dumps (in Bytes): %s" -#: plugins/sudoers/def_data.c:620 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "Die maximale CPU Zeit die vom Prozess genutzt werden kann (in Sekunden): %s" -#: plugins/sudoers/def_data.c:624 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "Die maximale Größe des Data Segments für den Prozess (in Bytes): %s" -#: plugins/sudoers/def_data.c:628 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "Die maximale Dateigröße für den Prozess (in Bytes): %s" -#: plugins/sudoers/def_data.c:632 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "Die maximale Anzahl von Sperren des Prozesses: %s" -#: plugins/sudoers/def_data.c:636 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "Die maximale gesperrte Speichergröße des Prozesses (in Bytes): %s" -#: plugins/sudoers/def_data.c:640 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "Die maximale Anzahl offener Dateien des Prozesses: %s" -#: plugins/sudoers/def_data.c:644 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "Die maximale Anzahl von gleichzeitige laufenden Prozessen des Benutzers: %s" -#: plugins/sudoers/def_data.c:648 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "Die maximle Größe des residenten Speichers vom Prozess (in Bytes): %s" -#: plugins/sudoers/def_data.c:652 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "Die maximale Größe des Prozess-Stacks (in Bytes): %s" -#: plugins/sudoers/def_data.c:656 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "Authentifzierung auch im nicht-interaktiven Modus versuchen" -#: plugins/sudoers/def_data.c:660 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "Klartext-Passwörter im Ein-Ausgabe-Log als Eingabe protokollieren" -#: plugins/sudoers/def_data.c:664 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "Liste von regulären Ausdrücken zum Matchen des Passwort-Prompts" -#: plugins/sudoers/def_data.c:668 +#: plugins/sudoers/def_data.c:688 #, c-format msgid "The mechanism used by the intercept and log_subcmds options: %s" msgstr "Der Mechanismus für »intercept« und »log_subcmds« Optionen: %s" -#: plugins/sudoers/def_data.c:672 +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "Versuche das Kommando und die Argumente nach der Ausführung zu verifizieren" + +#: plugins/sudoers/def_data.c:696 #, c-format msgid "AppArmor profile to use in the new security context: %s" msgstr "Im neuen Security-Kontext von AppArmor wird diese Rolle verwendet: %s" @@ -2563,31 +2649,31 @@ msgstr "Ungültiger »Defaults« Typ 0x%x für Option »%s«" msgid "value \"%s\" is invalid for option \"%s\"" msgstr "Der Wert »%s« ist für die Option »%s« ungültig" -#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 -#: plugins/sudoers/policy.c:216 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format msgid "path name for \"%s\" too long" msgstr "Pfadname für »%s« ist zu lang" -#: plugins/sudoers/defaults.c:1133 +#: plugins/sudoers/defaults.c:1134 #, c-format msgid "values for \"%s\" must start with a '/', '~', or '*'" msgstr "Werte für »%s« müssen mit »/«, »~« oder »*« beginnen" -#: plugins/sudoers/defaults.c:1140 +#: plugins/sudoers/defaults.c:1141 #, c-format msgid "values for \"%s\" must start with a '/'" msgstr "Werte für »%s« müssen mit einem »/« beginnen" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp ist beschädigt, die Längen passen nicht" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "Das Environment kann nicht neu erstellt werden" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "Leider dürfen die folgenden Umgebungsvariablen nicht gesetzt werden: %s" @@ -2602,27 +2688,27 @@ msgstr "Prüfsummentyp %d wird für %s nicht unterstützt" msgid "%s: read error" msgstr "%s: Fehler beim Lesen" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "%s muss der uid %d gehören" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "%s darf nur für den Eigentümer der Datei schreibbar sein" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "Laden von %s fehlgeschlagen: %s" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "Das Symbol »group_plugin« kann in %s nicht gefunden werden" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: Die Major-Version %d des Group-Plugins ist inkompatibel, erwartet wird %d" @@ -2645,10 +2731,10 @@ msgstr "Lokale IP-Adresse und Netzmaske:\n" msgid "unable to update sequence file" msgstr "Kann die Sequenz-Datei nicht aktualisieren" -#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 -#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 -#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 -#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "In die I/O Logdatei kann nicht geschrieben werden: %s" @@ -2658,25 +2744,25 @@ msgstr "In die I/O Logdatei kann nicht geschrieben werden: %s" msgid "unable to create %s/%s" msgstr "Die Datei %s%s kann nicht erstellt werden" -#: plugins/sudoers/iolog.c:955 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: Interner Fehler, Logdatei für Event %d nicht geöffnet" -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 -#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 -#: plugins/sudoers/visudo.c:552 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "Die Uhrzeit kann nicht ausgelesen werden" -#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 -#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: Interner Fehler, ungültiges Signal %d" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "starttls wird für ldaps nicht unterstützt" @@ -2699,7 +2785,7 @@ msgstr "LDAP kann nicht initialisiert werden: %s" msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls ist angegeben, aber die LDAP-Bibliotheken unterstützen ldap_start_tls_s() und ldap_start_tls_s_np() nicht" -#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "Ungültiges »sudoOrder« Attribut: %s" @@ -2709,12 +2795,12 @@ msgstr "Ungültiges »sudoOrder« Attribut: %s" msgid "%s: port too large" msgstr "%s: Portnummer ist zu groß" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "LDAP-Adresstyp wird nicht unterstützt: %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap- und ldaps-Adressen können nicht zusammen verwendet werden" @@ -2739,113 +2825,113 @@ msgstr "Das Audit-System kann nicht geöffnet werden" msgid "unable to send audit message" msgstr "Die Audit-Nachricht kann nicht gesendet werden" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 -#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "Fehler in der Event-Schleife" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Erzeugen eines neuen SSL_CTX Objektes fehlgeschlagen: %s" -#: plugins/sudoers/log_client.c:225 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "Kann das CA-Bundle »%s« nicht laden" -#: plugins/sudoers/log_client.c:247 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "Laden von Zertifikat »%s« fehlgeschlagen" -#: plugins/sudoers/log_client.c:261 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "Laden des privaten Schlüssels »%s« fehlgeschlagen" -#: plugins/sudoers/log_client.c:270 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Kann kein SSL-Objekt anlegen: %s" -#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "TLS Verbindung zu %s:%s fehlgeschlagen: %s" -#: plugins/sudoers/log_client.c:538 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "TLS Initialisierung war nicht erfolgreich" -#: plugins/sudoers/log_client.c:548 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "TLS Handshake war nicht erfolgreich" -#: plugins/sudoers/log_client.c:1246 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: Interner Fehler, ungültiger Exit-Status %d" -#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "Verbindung zum Logserver verloren" -#: plugins/sudoers/log_client.c:1876 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "Schreib-Puffer fehlt" -#: plugins/sudoers/log_client.c:2024 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "Verbindung zum Logserver kann nicht aufgebaut werden" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "Der Benutzer ist NICHT in der sudoers-Datei enthalten" -#: plugins/sudoers/logging.c:300 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "Der Benutzer ist NICHT auf dem Rechner autorisiert" -#: plugins/sudoers/logging.c:302 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "Der Befehl ist nicht erlaubt" -#: plugins/sudoers/logging.c:323 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "" "»%s« ist nicht in der sudoers-Datei.\n" "\n" -#: plugins/sudoers/logging.c:326 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "»%s« darf sudo auf dem Rechner »%s« nicht ausführen.\n" -#: plugins/sudoers/logging.c:329 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Leider darf der Benutzer %s sudo für %s nicht verwenden.\n" -#: plugins/sudoers/logging.c:332 +#: plugins/sudoers/logging.c:324 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Leider darf der Benutzer %s »%s%s%s« als %s%s%s auf %s nicht ausführen.\n" -#: plugins/sudoers/logging.c:342 +#: plugins/sudoers/logging.c:334 msgid "This incident has been reported to the administrator.\n" msgstr "Dieser Vorfall wurde an den Administrator gemeldet.\n" -#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 -#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 -#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 -#: plugins/sudoers/sudoers.c:801 +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s: Befehl nicht gefunden" -#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2854,31 +2940,31 @@ msgstr "" "Im aktuellen Verzeichnis ».« gefundenes »%s« wird ignoriert.\n" "Verwenden Sie »sudo ./%s«, wenn dies der gewünschte Befehl »%s« ist." -#: plugins/sudoers/logging.c:395 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u Fehlversuch bei der Passwort-Eingabe" msgstr[1] "%u Fehlversuche bei der Passwort-Eingabe" -#: plugins/sudoers/logging.c:485 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "Fehler bei der Authentifizierung" -#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "Ein Passwort ist notwendig" -#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 msgid "problem parsing sudoers" msgstr "Problem beim Auswerten der sudoers-Datei" -#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format msgid "%s:%d:%d: %s" msgstr "%s:%d:%d: %s" -#: plugins/sudoers/logging.c:1068 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "In die Logdatei kann nicht geschrieben werden: %s" @@ -2893,7 +2979,7 @@ msgstr "Prüfsumme für %s (%s) ungültige Länge %zu, %zu erwartet" msgid "digest for %s (%s) is not in %s form" msgstr "Prüfsumme für %s (%s) ist nicht in der Form %s" -#: plugins/sudoers/parse.c:585 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2902,7 +2988,7 @@ msgstr "" "\n" "LDAP-Rolle: %s\n" -#: plugins/sudoers/parse.c:588 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2910,110 +2996,110 @@ msgstr "" "\n" "Sudoers-Eintrag:\n" -#: plugins/sudoers/parse.c:590 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:605 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:615 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " Optionen: " -#: plugins/sudoers/parse.c:679 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " Befehle:\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Passende Defaults-Einträge für %s auf %s:\n" -#: plugins/sudoers/parse.c:888 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas und befehlsspezifische Standardwerte für %s:\n" -#: plugins/sudoers/parse.c:906 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Der Benutzer %s darf die folgenden Befehle auf %s ausführen:\n" -#: plugins/sudoers/parse.c:921 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Der Benutzer %s darf sudo auf dem Rechner %s nicht ausführen.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "ignoriere die unvollständige sudoRole: cn: %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "Ungültiges LDIF-Attribut: %s" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "ungültige Option »%.*s« durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "Die Netzwerkadressliste kann nicht eingelesen werden" -#: plugins/sudoers/policy.c:508 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "Benutzername nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:512 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "User-ID nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:516 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "Gruppen-ID nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:520 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "Hostname nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "Ungültiges Arbeitsverzeichnis: %s" -#: plugins/sudoers/policy.c:886 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "Ungültiges »chroot« Verzeichnis: %s" -#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "%s kann nicht ausgeführt werden" -#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 -#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: ungültige Mode-Flags vom sudo-Frontend: 0x%x" -#: plugins/sudoers/policy.c:1262 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers-Policy-Plugin Version %s\n" -#: plugins/sudoers/policy.c:1264 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-Datei-Grammatik-Version %d\n" -#: plugins/sudoers/policy.c:1268 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -3022,27 +3108,27 @@ msgstr "" "\n" "Sudoers-Pfad: %s\n" -#: plugins/sudoers/policy.c:1271 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch-Pfad: %s\n" -#: plugins/sudoers/policy.c:1273 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf-Pfad: %s\n" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret-Pfad: %s\n" -#: plugins/sudoers/policy.c:1307 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "Der Hook vom Typ %d kann nicht registriert werden (Version %d.%d)" -#: plugins/sudoers/policy.c:1325 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "Der Hook vom Typ %d kann nicht deregistriert werden (Version %d.%d)" @@ -3181,148 +3267,142 @@ msgstr "Die SSS-Quelle kann nicht initialisiert werden. Ist SSSD auf dem Rechner msgid "unable to find symbol \"%s\" in %s" msgstr "Das Symbol »%s« kann in %s nicht gefunden werden" -#: plugins/sudoers/sudoers.c:258 +#: plugins/sudoers/sudoers.c:263 #, c-format msgid "unable to get defaults from %s" msgstr "Kann die Defaults von »%s« nicht bekommen" -#: plugins/sudoers/sudoers.c:265 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "Keine gültige sudoers-Quelle gefunden, Programmende" -#: plugins/sudoers/sudoers.c:341 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "Der Benutzer darf das root-Verzeichnis nicht auf »%s« ändern" -#: plugins/sudoers/sudoers.c:343 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "Sie dürfen die Option -R nicht mit dem Kommando »%s« verwenden" -#: plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "Der Benutzer darf das Verzeichnis nicht auf %s ändern" -#: plugins/sudoers/sudoers.c:369 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "Sie dürfen die Option -C nicht mit dem Kommando »%s« verwenden" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "Kein Kommando angegeben" -#: plugins/sudoers/sudoers.c:421 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers gibt an, dass root sudo nicht verwenden darf" -#: plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "Der Benutzer darf das »closefrom«-Limit nicht überschreiben" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "Sie dürfen die Option -C nicht verwenden" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "Zeitstempelbesitzer (%s): Benutzer existiert nicht" -#: plugins/sudoers/sudoers.c:547 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "Kein tty" -#: plugins/sudoers/sudoers.c:548 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "Sie müssen ein TTY haben, um sudo zu verwenden" -#: plugins/sudoers/sudoers.c:555 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "Ungültiger Shell für den Benutzer %s: %s" -#: plugins/sudoers/sudoers.c:638 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "Befehl ist im aktuellen Verzeichnis" -#: plugins/sudoers/sudoers.c:653 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "»cd\"« ist ein Shell-internes Kommando, das nicht direkt gestartet werden kann." -#: plugins/sudoers/sudoers.c:655 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "Die Option »-s« kann zum Start einer privilegierten Shell verwendet werden." -#: plugins/sudoers/sudoers.c:657 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "Die Option »-D« kann zum Start des Programms im angegebenen Verzeichnis verwendet werden." -#: plugins/sudoers/sudoers.c:666 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "Der Benutzer darf keinen Kommand-Timeout angeben" -#: plugins/sudoers/sudoers.c:668 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "Sie dürfen keinen Timeout angeben" -#: plugins/sudoers/sudoers.c:676 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "Der Benutzer darf das Environment nicht erhalten" -#: plugins/sudoers/sudoers.c:678 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "Sie dürfen das Environment nicht erhalten" -#: plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "»sudoedit« muss nicht mittels »sudo« aufgerufen werden" -#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "Die Datei »%s« kann nicht gelesen werden" -#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 -#: plugins/sudoers/visudo.c:764 -#, c-format -msgid "unable to stat %s" -msgstr "stat konnte nicht auf %s angewendet werden" - -#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s gehört UID %u, sollte UID %u gehören" -#: plugins/sudoers/sudoers.c:1147 toke.l:1252 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "%s ist für alle beschreibbar (world writable)" -#: plugins/sudoers/sudoers.c:1151 toke.l:1255 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s gehört GID %u, sollte allerdings %u gehören" -#: plugins/sudoers/sudoers.c:1184 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "Nur root kann »-c %s« verwenden" -#: plugins/sudoers/sudoers.c:1203 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "Unbekannte Anmeldeklasse »%s«" -#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "Hostname %s kann nicht aufgelöst werden" @@ -3422,17 +3502,17 @@ msgstr "Ungültiges nachgestelltes »!«" msgid "unknown search type %d" msgstr "Unbekannter Suchtyp %d" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "Aufruf: %s [-hnRS] [-d Verzeichnis] [-m Max_Wartezeit] [-s Geschwindigkeitsfaktor] ID\n" -#: plugins/sudoers/sudoreplay.c:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "Aufruf: %s [-h] [-d Verzeichnis] -l [Suchausdruck]\n" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -3441,7 +3521,7 @@ msgstr "" "%s – sudo-Sitzungsprotokolle abspielen\n" "\n" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3502,127 +3582,122 @@ msgstr "" "\n" "Befehl nicht erkannt" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s ist für die Gruppe beschreibbar" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "Die Zeitstempeldatei kann nicht auf %lld Bytes abgeschnitten werden" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "Zeitstempel aus der Zukunft wird ignoriert" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "Zeitstempel ist zu weit in der Zukunft: %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "Die Zeitstempeldatei »%s« kann nicht gesperrt werden" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "Pfad zur Belehrung ist zu lang: %s/%s" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "»sudoedit« sollte nicht mit einem Pfad angegeben werden" -#: plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "Die Option »-x» wird in einer zukünftigen Version entfernt" -#: plugins/sudoers/visudo.c:251 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "Bitte verwenden Sie stattdessen das Programm »cvtsudoers«" -#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "Drücken Sie die Eingabetaste, um %s zu bearbeiten: " -#: plugins/sudoers/visudo.c:321 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "Inhalt der Editor-Sitzung bleibt in »%s« erhalten" -#: plugins/sudoers/visudo.c:397 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "Der angegebene Editor (%s) ist nicht vorhanden" -#: plugins/sudoers/visudo.c:399 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "Kein Editor gefunden (Pfad zum Editor = %s)" -#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "stat konnte nicht auf %s angewendet werden" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "Schreibfehler" -#: plugins/sudoers/visudo.c:559 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "Anwenden von stat auf die temporäre Datei (%s) gescheitert, %s ist unverändert" -#: plugins/sudoers/visudo.c:566 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "Leere temporäre Datei (%s), %s ist unverändert" -#: plugins/sudoers/visudo.c:572 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "Editor-Aufruf (%s) ist gescheitert, %s ist unverändert" -#: plugins/sudoers/visudo.c:594 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s unverändert" -#: plugins/sudoers/visudo.c:639 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "Erneutes Öffnen der temporären Datei (%s) gescheitert, %s ist unverändert." -#: plugins/sudoers/visudo.c:652 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "Analyse der temporären Datei (%s) gescheitert, unbekannter Fehler" -#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "Festlegen von (uid, gid) von %s auf (%u, %u) gescheitert" -#: plugins/sudoers/visudo.c:803 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s und %s befinden sich nicht im gleichen Dateisystem, werden mit mv umbenannt" -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "Befehl gescheitert: »%s %s %s«, %s unverändert" -#: plugins/sudoers/visudo.c:821 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "Fehler beim Umbenennen von %s, %s unverändert" -#: plugins/sudoers/visudo.c:841 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "Was jetzt? " -#: plugins/sudoers/visudo.c:855 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3634,42 +3709,42 @@ msgstr "" " Beenden, ohne die Änderungen an der sudoers-Datei zu speichern (mit x)\n" " Beenden und Änderungen an der sudoers-Datei speichern (mit Q, VORSICHT!)\n" -#: plugins/sudoers/visudo.c:901 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" -#: plugins/sudoers/visudo.c:932 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: Falsche Besitzer-(uid, gid), sollte (%u, %u) sein\n" -#: plugins/sudoers/visudo.c:943 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: Falsche Zugriffsrechte, sollte Modus 0%o sein\n" -#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s: Analyse OK\n" -#: plugins/sudoers/visudo.c:1017 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s ist in Verwendung, versuchen Sie es später erneut" # XXX -#: plugins/sudoers/visudo.c:1021 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "Trotzdem ändern? [y/N]" -#: plugins/sudoers/visudo.c:1117 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "Warnung: %s:%d:%d: nicht verwendet: %s »%s«" -#: plugins/sudoers/visudo.c:1229 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3678,25 +3753,27 @@ msgstr "" "%s – Die sudoers-Datei sicher bearbeiten\n" "\n" -#: plugins/sudoers/visudo.c:1231 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" msgstr "" "\n" "Optionen:\n" -" -c, --check nur den Prüf-Modus verwenden\n" -" -f, --file=sudoers gibt den Namen der sudoers Datei an\n" -" -h, --help diese Hilfe anzeigen und beenden\n" -" -q, --quiet weniger ausführliche Syntaxfehler-Meldungen\n" -" -s, --strict strikte Syntax-Prüfung\n" -" -V, --version Versionsinformation anzeigen und beenden\n" +" -c, --check nur den Prüf-Modus verwenden\n" +" -f, --file=sudoers gibt den Namen der sudoers Datei an\n" +" -h, --help diese Hilfe anzeigen und beenden\n" +" -I, --no-includes Include-Dateien nicht editieren\n" +" -q, --quiet weniger ausführliche Syntaxfehler-Meldungen\n" +" -s, --strict strikte Syntax-Prüfung\n" +" -V, --version Versionsinformation anzeigen und beenden\n" #: toke.l:189 msgid "empty string" diff --git a/plugins/sudoers/po/fr.mo b/plugins/sudoers/po/fr.mo index b135c7e1d1d1b9df131aa680d3fd183ba209c9ae..1c345360a7b503c7a5c2f66c536417ee2e883ed9 100644 GIT binary patch delta 16280 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 A#{d8T delta 15151 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 P@A@b7!0H&+{zCr;3I`Vx diff --git a/plugins/sudoers/po/fr.po b/plugins/sudoers/po/fr.po index 798bf040d9..d6e29d0909 100644 --- a/plugins/sudoers/po/fr.po +++ b/plugins/sudoers/po/fr.po @@ -5,10 +5,10 @@ # Frédéric Marchal , 2022 msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.11b1\n" +"Project-Id-Version: sudoers 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 12:13+0200\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-12 14:05+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -18,7 +18,7 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n >= 2);\n" -#: confstr.sh:1 gram.y:1218 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "erreur de syntaxe" @@ -42,13 +42,13 @@ msgstr "*** Informations de sécurité pour %h ***" msgid "Sorry, try again." msgstr "Désolé, essayez de nouveau." -#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 -#: gram.y:365 gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 -#: gram.y:501 gram.y:511 gram.y:523 gram.y:571 gram.y:580 gram.y:589 -#: gram.y:598 gram.y:730 gram.y:738 gram.y:749 gram.y:761 gram.y:780 -#: gram.y:943 gram.y:948 gram.y:956 gram.y:970 gram.y:976 gram.y:1098 -#: gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 gram.y:1162 gram.y:1171 -#: gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 gram.y:1816 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 #: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 @@ -58,50 +58,64 @@ msgstr "Désolé, essayez de nouveau." #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 -#: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:168 plugins/sudoers/cvtsudoers.c:131 -#: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 -#: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 -#: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:862 -#: plugins/sudoers/cvtsudoers.c:870 plugins/sudoers/cvtsudoers.c:1365 -#: plugins/sudoers/cvtsudoers.c:1369 plugins/sudoers/cvtsudoers.c:1471 -#: plugins/sudoers/cvtsudoers_csv.c:183 plugins/sudoers/cvtsudoers_csv.c:246 -#: 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:376 -#: plugins/sudoers/cvtsudoers_ldif.c:430 plugins/sudoers/cvtsudoers_ldif.c:438 -#: plugins/sudoers/cvtsudoers_ldif.c:449 plugins/sudoers/cvtsudoers_ldif.c:456 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:481 -#: plugins/sudoers/cvtsudoers_ldif.c:489 plugins/sudoers/cvtsudoers_ldif.c:636 -#: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 +#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 +#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 #: plugins/sudoers/cvtsudoers_merge.c:446 @@ -111,11 +125,11 @@ msgstr "Désolé, essayez de nouveau." #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1158 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -124,124 +138,125 @@ msgstr "Désolé, essayez de nouveau." #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 -#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 -#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 -#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 -#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 -#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 -#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 -#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 -#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 -#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 -#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 -#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 -#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 -#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 -#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 -#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 -#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 -#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 -#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 -#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 #: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 #: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 #: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 #: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 #: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "impossible d'allouer la mémoire" -#: gram.y:622 +#: gram.y:623 msgid "a digest requires a path name" msgstr "un résumé (digest) nécessite un chemin d'accès" -#: gram.y:644 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "les valeurs de « CWD » doivent commencer par « / », « ~ » ou « * »" -#: gram.y:650 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "chemin trop long pour « CWD »" -#: gram.y:660 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "les valeurs de « CHROOT » doivent commencer par « / », « ~ » ou « * »" -#: gram.y:666 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "chemin trop long pour « CHROOT »" -#: gram.y:801 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "erreur de syntaxe, le mot réservé %s est utilisé comme un nom de synonyme" -#: gram.y:824 +#: gram.y:825 msgid "invalid notbefore value" msgstr "valeur « notbefore » (pas avant) invalide" -#: gram.y:833 +#: gram.y:834 msgid "invalid notafter value" msgstr "valeur « notafter » (pas après) invalide" -#: gram.y:843 plugins/sudoers/policy.c:376 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "valeur trop grande pour le délai d'expiration" -#: gram.y:845 plugins/sudoers/policy.c:378 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "valeur invalide pour le délai d'expiration" -#: gram.y:966 plugins/sudoers/sudoers.c:1014 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "commande trop longue" -#: gram.y:1220 plugins/sudoers/check_aliases.c:96 -#: plugins/sudoers/defaults.c:1275 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1270 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "L'alias « %s » est déjà défini" -#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 #: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 #: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 @@ -251,33 +266,48 @@ msgstr "L'alias « %s » est déjà défini" #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 -#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 @@ -307,11 +337,11 @@ msgstr "L'alias « %s » est déjà défini" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1157 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -320,46 +350,47 @@ msgstr "L'alias « %s » est déjà défini" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 -#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 -#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 -#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 -#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 -#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 -#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 -#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 -#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 -#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: 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:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 -#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 -#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 -#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 -#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 -#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 -#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 #: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 -#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -372,25 +403,25 @@ msgstr "L'alias « %s » est déjà défini" #: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 #: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 #: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 -#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 -#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 -#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 -#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 -#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 -#: toke.l:1226 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 +#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s : %s" @@ -399,14 +430,14 @@ msgstr "%s : %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 #: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 #: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 -#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 -#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 #: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 #: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 @@ -449,7 +480,7 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (suite de la commande) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -564,14 +595,14 @@ msgstr "%s: il manque le champ précisant le groupe effectif (runas)" msgid "%s exists but is not a directory (0%o)" msgstr "%s existe mais n'est pas un répertoire (0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "création du répertoire (mkdir) %s impossible" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 -#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "impossible de changer le mode de %s pour lui affecter 0%o" @@ -586,150 +617,156 @@ msgstr "erreur de lecture dans le fichier de timing : %s" msgid "invalid timing file line: %s" msgstr "ligne invalide dans le fichier de timing : %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 -#: plugins/sudoers/policy.c:573 -msgid "unable to generate UUID" -msgstr "impossible de générer le UUID" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s : erreur de protocole : clé NULL" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "%s : erreur de protocole : mauvais type pour %s" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s : erreur de protocole : valeur NULL trouvée dans %s" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "impossible de générer le UUID" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "%s : erreur de protocole : %s est manquant dans AcceptMessage" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "%s : impossible de formater l'id de session" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "%s : %s n'est pas défini" -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "impossible de développer le chemin iolog %s" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "impossible de créer le chemin iolog %s" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "iofd %d invalide" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "erreur à la fermeture du iofd %d : %s" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "erreur lors de la vidange du iofd %d : %s" -#: logsrvd/iolog_writer.c:780 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "journal E/S %s invalide : il est fait référence à %s alors qu'il n'est pas présent" -#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s : impossible de trouver le point de redémarrage [%lld, %ld]" -#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 -#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 #: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 -#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 -#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "ouverture de %s impossible" -#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "ouverture de %si/%s impossible" -#: logsrvd/iolog_writer.c:839 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "impossible de copier %s/%s vers %s/%s : %s" -#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "impossible de renommer %s en %s" -#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s : impossible de trouver le point de redémarrage [%lld, %ld]" -#: logsrvd/logsrv_util.c:154 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "fichier du journal E/S %s/%s manquant" -#: logsrvd/logsrv_util.c:161 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s : impossible d'examiner vers l'avant de %zu" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "impossible de se connecter au relai" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "message serveur trop grand : %zu" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 -#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 -#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 -#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 -#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 -#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 -#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 -#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 -#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 -#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 -#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 -#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -738,633 +775,658 @@ msgstr "message serveur trop grand : %zu" msgid "unable to add event to queue" msgstr "impossible d'ajouter l'événement à la queue" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "état %d inattendu pour %s" -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "erreur de la machine à états" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "AcceptMessage invalide" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "RejectMessage invalide" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "ExitMessage invalide" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "RestartMessage invalide" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "AlertMessage invalide" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "%s : IoBuffer inattendu" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "erreur protocole" -#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 -#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 -#: plugins/sudoers/log_client.c:1618 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "IoBuffer invalide" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "ChangeWindowSize invalide" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "CommandSuspend invalide" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 #, c-format msgid "unable to unpack %s size %zu" msgstr "impossible de décompresser %s avec une taille de %zu" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "valeur type_case %d inattendue dans %s de %s" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "type de ClientMessage non reconnu" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "délai d'attente expiré durant l'écriture vers le client %s" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "tampon d'écriture manquant pour le client %s" -#: logsrvd/logsrvd.c:982 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "délai d'attente expiré durant la lecture depuis le client %s" -#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "Fin de fichier reçu de %s sans suivre la procédure d'arrêt TLS" -#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:716 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "message client trop grand : %zu" -#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "message client trop grand" -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "ClientMessage invalide" -#: logsrvd/logsrvd.c:1389 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "impossible d'obtenir l'adresse IP distante" -#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 -#: plugins/sudoers/log_client.c:276 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Impossible d'attacher les données utilisateur à l'objet ssl : %s" -#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "configuration du socket d'écoute impossible" -#: logsrvd/logsrvd.c:1718 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "signal %d inattendu" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "serveur de journalisation de sudo" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "Options :" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "chemin du fichier de configuration" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "afficher le message d'aide et quitter" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "ne pas cloner, exécuter à l'avant plan" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "pourcentage de chance que les connections soient abandonnées" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "afficher l'information de version et quitter" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Version 1.3 ou supérieure de Protobuf-C requise" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "valeur d'abandon aléatoire invalide : %s" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:180 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 #: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 -#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "utilisateur %s inconnu" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 -#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "groupe %s inconnu" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "impossible d'analyser le mode iolog %s" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "valeur invalide pour %s : %s" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "TLS non supporté" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s  n'est pas un chemin totalement défini" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "catégorie syslog %s inconnue" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "priorité syslog %s inconnue" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d « [ » sans correspondant : %s" -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "%s:%d charabia après « ] » : %s" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d section de configuration invalide : %s" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d ligne de configuration invalide : %s" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d nom de section attendu : %s" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] clé illégale : %s" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:1035 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "ouverture du fichier de journalisation %s impossible" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "impossible d'initialiser le contexte TLS du serveur : %s" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "impossible d'initialiser le contexte TLS du relai : %s" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 -#: logsrvd/logsrvd_journal.c:416 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "impossible de créer le fichier de journalisation" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1020 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "impossible de verrouiller %s" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "verrouillage du fichier de journalisation impossible : %s" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "impossible d'ouvrir le fichier de journalisation" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 -#: logsrvd/logsrvd_journal.c:452 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "impossible d'écrire le fichier de journalisation" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "impossible de renommer le fichier de journalisation" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "fin de fichier inattendue en lisant le fichier de journalisation" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "erreur de lecture dans le fichier de journalisation" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "fichier de journalisation invalide, impossible de redémarrer" -#: logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "impossible de déplacer le pointeur vers [%lld, %ld] dans le fichier de journalisation %s" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "valeur value_case %d inattendue dans %s de %s" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "erreur de l'analyse de AcceptMessage" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "erreur lors de la création du journal des E/S" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "erreur en écrivant l'événement d'acceptation dans le journal" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "erreur de l'analyse de RejectMessage" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "erreur en écrivant l'événement de rejet dans le journal" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "erreur lors de l'écriture de l'événement de sortie dans le journal" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "l'enregistrement du journal est déjà terminé, impossible de redémarrer" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "impossible de redémarrer l'enregistrement du journal" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "erreur de l'analyse de AlertMessage" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "erreur lors de l'écriture de l'événement d'alerte dans le journal" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "impossible de formater le tampon de minutage, longueur %d" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "%s/%s : %s" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "connexion abandonnée aléatoirement" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "erreur d'écriture dans IoBuffer" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "erreur de l'écriture de ChangeWindowSize" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "erreur de l'écriture de CommandSuspend" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "la négociation TLS avec l'hôte relai a échouée" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "impossible de se connecter à l'hôte relai" -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "%s : ServerHello invalide, le server_id manque" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1504 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "ServerHello invalide" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "type de ServerMessage non reconnu" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "délai d'attente expiré durant la lecture depuis le relai %s (%s)" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "délai d'attente expiré durant la lecture depuis le relai" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "le nom de l'hôte relai ne correspond pas au certificat" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 -#: logsrvd/logsrvd_relay.c:784 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "erreur de lecture depuis le relai" -#: logsrvd/logsrvd_relay.c:805 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "impossible de lire depuis le relai" -#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "le serveur relai a fermé la connexion" -#: logsrvd/logsrvd_relay.c:838 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "message serveur trop grand" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "délai d'attente expiré durant l'écriture vers le relai %s (%s)" -#: logsrvd/logsrvd_relay.c:904 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "délai d'attente expiré durant l'écriture vers le relai" -#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 -#: logsrvd/logsrvd_relay.c:974 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "erreur d'écriture dans le relai" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "envoyer le journal des E/S de sudo au serveur distant" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "uniquement envoyer un événement d'acceptation (pas d'E/S)" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "fichier de trousseau de certificats pour vérifier le certificat du serveur" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "fichier de certificat pour la négociation TLS" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "hôte auquel envoyer les journaux" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "ID distant du journal des E/S à compléter" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "fichier de clé privée" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "ne pas vérifier le certificat du serveur" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "port à utiliser lors de la connexion à l'hôte" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "redémarrer le transfert de journaux E/S précédent" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "rejeter la commande avec la raison fournie" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "arrêter le transfert après avoir atteint ce temps" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "tester le serveur d'audit en envoyant le journal des E/S sélectionné n fois en parallèle" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "impossible de rechercher %s:%s : %s" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "impossible d'obtenir l'adresse IP du serveur" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "impossible de lire %s/%s : %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 -#: plugins/sudoers/iolog.c:1024 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "événement d'E/S %d inattendu" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 -#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: état %d inattendu" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "message d'erreur reçu du serveur : %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "message d'interruption reçu du serveur : %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: valeur type_case %d inattendue" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "délai d'attente expiré durant la lecture depuis le serveur" -#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 msgid "host name does not match certificate" msgstr "le nom de l'hôte ne correspond pas au certificat" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "fin de fichier prématurée" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "message serveur trop grand : %u" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "délai d'attente expiré durant l'écriture vers le serveur" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "le point de redémarrage et le ID iolog doivent être spécifiés tous les deux" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "un point de redémarrage ne peut pas être placé quand aucune E/S est envoyée" -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "terminé prématurément avec l'état %d" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "temps écoulé envoyé au serveur [%lld, %ld]" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "point d'enregistrement reçu du serveur [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "le délai de la négociation TLS a expiré" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "impossible de définir l'événement" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "la communication TLS a échoué : %s" -#: logsrvd/tls_client.c:191 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "impossible d'allouer l'objet ssl : %s" -#: logsrvd/tls_client.c:205 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Impossible d'attacher le socket à l'objet ssl : %s" -#: logsrvd/tls_client.c:233 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "impossible d'initialiser le contexte TLS" -#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "impossible de sélectionner la suite de chiffrement %s pour TLS 1.2 : %s" -#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "impossible de sélectionner la suite de chiffrement %s pour TLS 1.3 : %s" -#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "impossible de définir les paramètres diffie-hellman : %s" -#: logsrvd/tls_init.c:277 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "impossible de créer le contexte TLS : %s" -#: logsrvd/tls_init.c:284 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "impossible de définir TLS 1.2 comme étant la version minimale du protocole : %s" -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 -#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 -#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 -#: plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "récupération de l'heure du jour impossible" @@ -1501,7 +1563,7 @@ msgstr "Le compte a expiré, ou la section « account » du module PAM n'est p msgid "PAM account management error: %s" msgstr "Erreur de gestion du compte PAM : %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "votre compte n'existe pas dans la base de données %s" @@ -1574,17 +1636,17 @@ msgstr "Identification de la condition d'audit impossible" msgid "unable to commit audit record" msgstr "impossible d'enregistrer l'enregistrement d'audit" -#: plugins/sudoers/check.c:275 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "erreur de lecture dans le fichier des recommandations d'usage : %s" -#: plugins/sudoers/check.c:278 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "le fichier des recommandations d'usage %s est ignoré : il n'est pas un fichier ordinaire" -#: plugins/sudoers/check.c:291 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1604,14 +1666,14 @@ msgstr "" " #3) De grands pouvoirs confèrent de grandes responsabilités.\n" "\n" -#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 -#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "identifiant utilisateur %u inconnu" -#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format msgid "%s: %s\n" msgstr "%s : %s\n" @@ -1641,7 +1703,7 @@ msgstr "ordre de départ : %s : %s" msgid "order padding: %s: %s" msgstr "remplissage de l'ordre : %s : %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "Version de la grammaire de %s : %d\n" @@ -1661,14 +1723,14 @@ msgstr "format de sortie %s non supporté" msgid "%s: input and output files must be different" msgstr "%s : les fichiers d'entrée et de sortie doivent être différents" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 -#: plugins/sudoers/visudo.c:969 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "initialisation des valeurs par défaut de sudoers impossible" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s : %s : %s : %s" @@ -1693,18 +1755,18 @@ msgstr "type de suppression invalide : %s" msgid "invalid filter: %s" msgstr "filtre invalide : %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "échec lors de l'analyse grammaticale de %s, erreur inconnue" #: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "écriture impossible dans %s" -#: plugins/sudoers/cvtsudoers.c:1501 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1713,7 +1775,7 @@ msgstr "" "%s - convertir entre des formats de fichiers sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1503 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -2165,362 +2227,386 @@ msgstr "L'umask indiqué dans sudoers se substituera à celui de l'utilisateur, #: plugins/sudoers/def_data.c:352 msgid "Log user's input for the command being run" -msgstr "Consignation des saisies des utilisateur dans le journal pour la commande en cours d'exécution" +msgstr "Consignation des saisies de l'utilisateur dans le journal pour la commande en cours d'exécution" #: plugins/sudoers/def_data.c:356 +msgid "Log the command's standard input if not connected to a terminal" +msgstr "Consigne l'entrée standard de la commande dans le journal si elle n'est pas connectée à un terminal" + +#: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "Consignation des saisies du terminal de l'utilisateur dans le journal pour la commande en cours d'exécution" + +#: plugins/sudoers/def_data.c:364 msgid "Log the output of the command being run" msgstr "Consignation du retour de la commande en cours d'exécution dans le journal" -#: plugins/sudoers/def_data.c:360 +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "Consigne la sortie standard de la commande dans le journal si elle n'est pas connectée à un terminal" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "Consigne l'erreur standard de la commande dans le journal si elle n'est pas connectée à un terminal" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "Consigne dans le journal la sortie envoyée sur le terminal par la commande en cours d'exécution" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "Compression des informations renvoyées par les opérations d'E/S avec zlib" -#: plugins/sudoers/def_data.c:364 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "Exécute toujours les commandes dans un pseudo-terminal (tty)" -#: plugins/sudoers/def_data.c:368 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Greffon pour la prise en charge des groupes non-Unix : %s" -#: plugins/sudoers/def_data.c:372 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Répertoire dans lequel les informations renvoyées par les opérations d'entrée/sortie seront stockées : %s" -#: plugins/sudoers/def_data.c:376 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fichier dans lequel les informations renvoyées par les opérations d'entrée/sortie seront stockées : %s" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Ajout d'une entrée au fichier utmp/utmpx lors de l'allocation d'un pseudo-terminal" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Conservation dans utmp du nom de l'utilisateur runas, et non de celui de l'utilisateur appelant sudo" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "Ensemble des privilèges permis : %s" -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "Ensemble des privilèges limités : %s" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "Exécution des commandes sur un pseudo-terminal en tâche de fond" -#: plugins/sudoers/def_data.c:400 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "Nom de service PAM à utiliser : %s" -#: plugins/sudoers/def_data.c:404 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Nom de service PAM à utiliser pour les interpréteurs de commandes : %s" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "Nom de service PAM à utiliser quand sudo est exécuté avec l'option -A : %s" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "Tentative de création des données d'identification PAM pour l'utilisateur cible" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "Création d'une nouvelle session PAM pour l'exécution de la commande" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "Réaliser la gestion de la validation du compte PAM" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Numéro de séquence maximum dans le journal E/S : %s" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "Activation de la prise en charge de netgroup par sudoers" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:452 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Vérification que les droits du répertoire parent autorisent la modification des fichiers avec sudoedit" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Suivre les liens symboliques lors de l'édition des fichiers avec sudoedit" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "Interroge le greffon de groupe pour les groupes système inconnus" -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Faire correspondre les netgroups sur base du tuple entier: utilisateur, hôte et domaine" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Autoriser l'exécution des commandes même si sudo ne sait pas écrire dans le journal d'audit" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Autoriser l'exécution des commandes même si sudo ne sait pas écrire dans le journal des E/S" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Autoriser l'exécution des commandes même si sudo ne sait pas écrire dans le fichier journal" -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Résoudre les groupes dans sudoers et établir la correspondance sur le ID de groupe au lieu du nom" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:484 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Les entrées du journal plus longues que cette valeur seront scindées en plusieurs messages dans syslog : %u" -#: plugins/sudoers/def_data.c:468 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Utilisateur qui possèdera les fichiers journaux des E/S : %s" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Groupe qui possèdera les fichiers journaux des E/S : %s" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Mode de permission à utiliser sur les fichiers de journaux des E/S : 0%o" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Exécuter les commandes par descripteur de fichier plutôt que par chemin : %s" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:504 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignorer les entrées « Defaults » inconnues dans sudoers au lieu d'afficher un avertissement" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Temps en secondes après lequel la commande sera terminée : %u" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "Autoriser l'utilisateur à spécifier un délai d'expiration sur la ligne de commande" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Forcer l'écriture des données du journal d'E/S sur disque immédiatement au lieu de les garde dans un tampon" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "Inclure le ID du processus lors de la journalisation via syslog" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Type de l'enregistrement de l'horodatage de l'authentification : %s" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "Message de l'échec de l'authentification : %s" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "Ignorer la casse lors de la correspondance des noms d'utilisateurs" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "Ignorer la casse lors de la correspondance des noms de groupes" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "Écrire dans le journal lorsqu'une commande est autorisée par sudoers" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "Écrire dans le journal lorsqu'une commande est interdite par sudoers" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "Serveur(s) des journaux sudo auquel se connecter avec un port facultatif" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Délai d'expiration du serveur des journaux sudo en seconde : %u" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:556 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Activer l'option SO_KEEPALIVE du socket sur le socket connecté au serveur de journal" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Emplacement du fichier du paquet du CA d'audit du serveur : %s" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Emplacement du fichier de certificat de sudoers : %s" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Emplacement du fichier de clé privée de sudoers : %s" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "Vérifier que le certificat du serveur contenant le journal est valide" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Autoriser l'utilisation d'ID d'utilisateurs ou de groupe inconnus dans runas" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "Uniquement autoriser l'exécutions de commandes en tant qu'un utilisateur avec un interpréteur de commande valide" -#: plugins/sudoers/def_data.c:564 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "Définir l'utilisateur distant de pam à l'utilisateur qui exécute sudo" -#: plugins/sudoers/def_data.c:568 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "Définir l'hôte distant de pam au nom de l'hôte local" -#: plugins/sudoers/def_data.c:572 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "Le répertoire de travail à utiliser avant d'exécuter la commande : %s" -#: plugins/sudoers/def_data.c:576 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Le répertoire racine à utiliser avant d'exécuter la commande : %s" -#: plugins/sudoers/def_data.c:580 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "Format des journaux à produire : %s" -#: plugins/sudoers/def_data.c:584 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "Activer le support pour SELinux RBAC" -#: plugins/sudoers/def_data.c:588 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "Chemin vers le fichier qui est créé la première fois que sudo est exécuté : %s" -#: plugins/sudoers/def_data.c:592 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "Intercepter les commandes suivantes et leur appliquer les restrictions sudoers" -#: plugins/sudoers/def_data.c:596 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "Consigner les sous-commandes exécutées par la commande originale" -#: plugins/sudoers/def_data.c:600 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "Consigner le code de retour des commandes" -#: plugins/sudoers/def_data.c:604 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "Les commandes ultérieures dans une session interceptée doivent être authentifiées" -#: plugins/sudoers/def_data.c:608 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "Autoriser une commande interceptée à exécuter des programmes avec le fanion setuid ou setgid activé" -#: plugins/sudoers/def_data.c:612 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "La taille maximale à laquelle l'espace d'adresses du processus peut grandir (en octets) : %s" -#: plugins/sudoers/def_data.c:616 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "La taille de la plus grande vidange système qui peut être créée (en octets) : %s" -#: plugins/sudoers/def_data.c:620 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "Le temps CPU maximum que le processus peut utiliser (en secondes) : %s" -#: plugins/sudoers/def_data.c:624 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "La taille maximale du segment de données pour le processus (en octets) : %s" -#: plugins/sudoers/def_data.c:628 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "La taille la plus grande d'un fichier que le processus peut créer (en octets) : %s" -#: plugins/sudoers/def_data.c:632 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "Le nombre maximum de verrous que le processus peut établir : %s" -#: plugins/sudoers/def_data.c:636 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "La taille maximale que le processus peut verrouiller en mémoire (en octets) : %s" -#: plugins/sudoers/def_data.c:640 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "Le nombre maximum de fichiers que le processus peut garder ouverts : %s" -#: plugins/sudoers/def_data.c:644 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "Le nombre maximum de processus que l'utilisateur peut exécuter simultanément : %s" -#: plugins/sudoers/def_data.c:648 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "La taille maximale à laquelle l'ensemble résident du processus peut grandir (en octets) : %s" -#: plugins/sudoers/def_data.c:652 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "La taille maximale à laquelle la pile du processus peut grandir (en octets) : %s" -#: plugins/sudoers/def_data.c:656 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "Tenter une authentification même dans le mode non interactif" -#: plugins/sudoers/def_data.c:660 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "Stocker le mot de passe en clair dans l'entrée du journal des E/S" -#: plugins/sudoers/def_data.c:664 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "Liste des expressions régulières à utiliser lors de la recherche de correspondance de l'invite du mot de passe" -#: plugins/sudoers/def_data.c:668 +#: plugins/sudoers/def_data.c:688 #, c-format msgid "The mechanism used by the intercept and log_subcmds options: %s" msgstr "Le mécanisme utilisé par les options intercept et log_subcmds : %s" -#: plugins/sudoers/def_data.c:672 +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "Tentative de vérifier la commande et les arguments après l'exécution" + +#: plugins/sudoers/def_data.c:696 #, c-format msgid "AppArmor profile to use in the new security context: %s" msgstr "Profil AppArmor à utiliser dans le nouveau contexte de sécurité : %s" @@ -2555,31 +2641,31 @@ msgstr "type Defaults 0x%x invalide pour l'option «␣%s␣»" msgid "value \"%s\" is invalid for option \"%s\"" msgstr "la valeur « %s » ne convient pas pour l'option « %s »" -#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 -#: plugins/sudoers/policy.c:216 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format msgid "path name for \"%s\" too long" msgstr "chemin trop long pour « %s »" -#: plugins/sudoers/defaults.c:1133 +#: plugins/sudoers/defaults.c:1134 #, c-format msgid "values for \"%s\" must start with a '/', '~', or '*'" msgstr "les valeurs de « %s » doivent commencer par « / », « ~ » ou « * »" -#: plugins/sudoers/defaults.c:1140 +#: plugins/sudoers/defaults.c:1141 #, c-format msgid "values for \"%s\" must start with a '/'" msgstr "les valeurs de « %s » doivent commencer par « / »" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv : envp est corrompu, longueur incorrecte" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "impossible de créer à nouveau l'environnement" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "désolé, vous n'êtes pas autorisé à définir ces variables d'environnement : %s" @@ -2594,27 +2680,27 @@ msgstr "le type résumé (digest type) %d pour n'est pas autorisé pour %s" msgid "%s: read error" msgstr "%s : erreur en lecture" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "%s doit appartenir à l'utilisateur (uid) %d" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "seul le propriétaire doit avoir le droit en écriture sur %s" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "chargement de %s impossible : %s" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "le symbole « group_plugin » est introuvable dans %s" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s : la version majeure %d du greffon group est incompatible, la version attendue est %d" @@ -2637,10 +2723,10 @@ msgstr "Couples adresse IP locale/masque de sous-réseau :\n" msgid "unable to update sequence file" msgstr "mise à jour du fichier de séquence impossible" -#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 -#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 -#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 -#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "impossible d'écrire dans le journal des E/S : %s" @@ -2650,25 +2736,25 @@ msgstr "impossible d'écrire dans le journal des E/S : %s" msgid "unable to create %s/%s" msgstr "impossible de créer %s/%s" -#: plugins/sudoers/iolog.c:955 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: erreur interne, le fichier journal des E/S pour l'événement %d n'est pas ouvert" -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 -#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 -#: plugins/sudoers/visudo.c:552 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "lecture de l'horloge impossible" -#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 -#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: erreur interne, signal %d invalide" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "starttls n'est pas pris en charge lors de l'utilisation de ldap" @@ -2691,7 +2777,7 @@ msgstr "initialisation de LDAP impossible : %s" msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls est spécifié mais les bibliothèques LDAP ne gèrent pas ldap_start_tls_s() ou ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "attribut sudoOrder invalide : %s" @@ -2701,12 +2787,12 @@ msgstr "attribut sudoOrder invalide : %s" msgid "%s: port too large" msgstr "%s: port trop grand" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "type d'uri LDAP non pris en charge : %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "fusion des URIs ldap et ldaps impossible" @@ -2731,111 +2817,111 @@ msgstr "ouverture du fichier d'audit du système impossible" msgid "unable to send audit message" msgstr "envoi du message d'audit impossible" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 -#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "erreur dans la boucle des événements" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "La création du nouvel objet SSL_CTX a échoué : %s" -#: plugins/sudoers/log_client.c:225 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "impossible de charger le paquet de l'autorité du certificat %s" -#: plugins/sudoers/log_client.c:247 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "impossible de charger le certificat %s" -#: plugins/sudoers/log_client.c:261 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "impossible de charger la clé privée %s" -#: plugins/sudoers/log_client.c:270 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Impossible d'allouer l'objet ssl : %s" -#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "la connexion TLS à %s:%s a échoué : %s" -#: plugins/sudoers/log_client.c:538 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "l'initialisation TLS n'a pas réussi" -#: plugins/sudoers/log_client.c:548 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "la négociation TLS n'a pas réussi" -#: plugins/sudoers/log_client.c:1246 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: erreur interne, statut de sortie %d invalide" -#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "perte de la connexion au serveur de journalisation" -#: plugins/sudoers/log_client.c:1876 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "tampon d'écriture manquant" -#: plugins/sudoers/log_client.c:2024 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "impossible de se connecter au serveur de journal" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "l'utilisateur n'apparaît PAS dans sudoers" -#: plugins/sudoers/logging.c:300 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "l'utilisateur n'est PAS autorisé sur cet hôte" -#: plugins/sudoers/logging.c:302 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "commande non autorisée" -#: plugins/sudoers/logging.c:323 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "%s n'est pas dans le fichier sudoers.\n" -#: plugins/sudoers/logging.c:326 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "%s n'est pas autorisé à exécuter sudo sur %s.\n" -#: plugins/sudoers/logging.c:329 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Désolé, l'utilisateur %s ne peut pas utiliser sudo sur %s.\n" -#: plugins/sudoers/logging.c:332 +#: plugins/sudoers/logging.c:324 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Désolé, l'utilisateur %s n'est pas autorisé à exécuter « %s%s%s » en tant que %s%s%s sur %s.\n" -#: plugins/sudoers/logging.c:342 +#: plugins/sudoers/logging.c:334 msgid "This incident has been reported to the administrator.\n" msgstr "Cet incident a été signalé à l'administrateur.\n" -#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 -#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 -#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 -#: plugins/sudoers/sudoers.c:801 +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s : commande introuvable" -#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2844,31 +2930,31 @@ msgstr "" "« %s » trouvé dans « . » n'a pas été exécuté\n" "Utilisez « sudo ./%s » si c'est bien la version de « %s » que vous souhaitez exécuter." -#: plugins/sudoers/logging.c:395 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u saisie de mot de passe incorrecte" msgstr[1] "%u saisies de mots de passe incorrectes" -#: plugins/sudoers/logging.c:485 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "échec de l'authentification" -#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "il est nécessaire de saisir un mot de passe" -#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 msgid "problem parsing sudoers" msgstr "problème lors de l'analyse syntaxique de sudoers" -#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format msgid "%s:%d:%d: %s" msgstr "%s:%d:%d: %s" -#: plugins/sudoers/logging.c:1068 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "impossible d'écrire le fichier journal : %s" @@ -2883,7 +2969,7 @@ msgstr "le résumé (digest) de %s (%s) a la mauvaise longueur %zu, %zu attendue msgid "digest for %s (%s) is not in %s form" msgstr "le résume (digest) de %s (%s) n'est pas dans le forme %s" -#: plugins/sudoers/parse.c:585 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2892,7 +2978,7 @@ msgstr "" "\n" "Rôle LDAP : %s\n" -#: plugins/sudoers/parse.c:588 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2900,110 +2986,110 @@ msgstr "" "\n" "Entrée sudoers :\n" -#: plugins/sudoers/parse.c:590 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " RunAsUsers : " -#: plugins/sudoers/parse.c:605 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " RunAsGroups : " -#: plugins/sudoers/parse.c:615 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " Options : " -#: plugins/sudoers/parse.c:679 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " Commandes :\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Entrées Defaults correspondant pour %s sur %s :\n" -#: plugins/sudoers/parse.c:888 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Paramètres par défaut de runas ou spécifiques aux commandes pour %s :\n" -#: plugins/sudoers/parse.c:906 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "L'utilisateur %s peut utiliser les commandes suivantes sur %s :\n" -#: plugins/sudoers/parse.c:921 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "L'utilisateur %s n'est pas autorisé à exécuter sudo sur %s.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "le sudoRole incomplet est ignoré : cn : %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "attribut LDIF invalide : %s" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "%.*s invalide défini par l'interface utilisateur de sudo" -#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "impossible d'analyser la liste des adresses réseau" -#: plugins/sudoers/policy.c:508 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "nom d'utilisateur pas défini par l'interface utilisateur de sudo" -#: plugins/sudoers/policy.c:512 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "ID utilisateur pas défini par l'interface utilisateur de sudo" -#: plugins/sudoers/policy.c:516 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "ID de groupe pas défini par l'interface utilisateur de sudo" -#: plugins/sudoers/policy.c:520 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "nom d'hôte pas défini par l'interface utilisateur de sudo" -#: plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "répertoire de travail invalide : %s" -#: plugins/sudoers/policy.c:886 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "répertoire chroot invalide : %s" -#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "exécution de %s impossible" -#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 -#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: fanions de mode invalides dans l'interface utilisateur de sudo : 0x%x" -#: plugins/sudoers/policy.c:1262 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "La version du greffon de politique de sudoers est %s\n" -#: plugins/sudoers/policy.c:1264 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "La version de la grammaire du fichier sudoers est %d\n" -#: plugins/sudoers/policy.c:1268 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -3012,27 +3098,27 @@ msgstr "" "\n" "Chemin d'accès à sudoers : %s\n" -#: plugins/sudoers/policy.c:1271 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "chemin d'accès à nsswitch : %s\n" -#: plugins/sudoers/policy.c:1273 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "chemin d'accès à ldap.conf : %s\n" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "chemin d'accès à ldap.secret : %s\n" -#: plugins/sudoers/policy.c:1307 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "activation d'un point d'ancrage de type %d (version %d.%d) impossible" -#: plugins/sudoers/policy.c:1325 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "désactivation d'un point d'ancrage de type %d (version %d.%d) impossible" @@ -3171,148 +3257,142 @@ msgstr "initialisation de la source SSS impossible. SSSD est-il installé sur ce msgid "unable to find symbol \"%s\" in %s" msgstr "Le symbole « %s » est introuvable dans %s" -#: plugins/sudoers/sudoers.c:258 +#: plugins/sudoers/sudoers.c:263 #, c-format msgid "unable to get defaults from %s" msgstr "impossible d'obtenir les valeurs par défaut pour %s" -#: plugins/sudoers/sudoers.c:265 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "aucune source sudoers valide n'a été trouvée, fin d'exécution" -#: plugins/sudoers/sudoers.c:341 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "l'utilisateur n'est pas autorisé à changer le répertoire racine en %s" -#: plugins/sudoers/sudoers.c:343 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "vous n'êtes pas autorisé à utiliser l'option -R avec %s" -#: plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "l'utilisateur n'est pas autorisé à changer de répertoire vers %s" -#: plugins/sudoers/sudoers.c:369 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "vous n'êtes pas autorisé à utiliser l'option -D avec %s" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "aucune commande spécifiée" -#: plugins/sudoers/sudoers.c:421 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "il est précisé dans sudoers que root n'est pas autorisé à utiliser sudo" -#: plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "l'utilisateur n'est pas autorisé à outrepasser la limite closeform" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "vous n'êtes pas autorisé à utiliser l'option -C" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "propriétaire du fichier d'horodatage (%s) : utilisateur inconnu" -#: plugins/sudoers/sudoers.c:547 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "pas de terminal tty" -#: plugins/sudoers/sudoers.c:548 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "désolé, vous devez avoir un terminal tty pour exécuter sudo" -#: plugins/sudoers/sudoers.c:555 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "interpréteur de commande invalide pour l'utilisateur %s : %s" -#: plugins/sudoers/sudoers.c:638 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "commande dans le répertoire courant" -#: plugins/sudoers/sudoers.c:653 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "« cd » est une commande interne du shell, elle ne peut pas être exécutée directement." -#: plugins/sudoers/sudoers.c:655 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "l'option -s peut être utilisée pour exécuter un shell privilégié." -#: plugins/sudoers/sudoers.c:657 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "l'option -D peut être utilisée pour exécuter une commande dans un répertoire spécifique." -#: plugins/sudoers/sudoers.c:666 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "l'utilisateur n'est pas autorisé à définir un délai d'expiration de la commande" -#: plugins/sudoers/sudoers.c:668 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "désolé, vous n'êtes pas autorisé à définir un délai d'expiration de la commande" -#: plugins/sudoers/sudoers.c:676 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "l'utilisateur n'est pas autorisé à conserver l'environnement" -#: plugins/sudoers/sudoers.c:678 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "désolé, vous n'êtes pas autorisé à conserver l'environnement" -#: plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit n'a pas besoin d'être exécuté via sudo" -#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "lecture de %s impossible" -#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 -#: plugins/sudoers/visudo.c:764 -#, c-format -msgid "unable to stat %s" -msgstr "impossible d'appliquer la fonction stat à %s" - -#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s n'est pas un fichier ordinaire" -#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "Le fichier %s est la propriété de l'utilisateur (uid) %u, alors qu'il devrait appartenir à %u" -#: plugins/sudoers/sudoers.c:1147 toke.l:1252 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "Le fichier %s est ouvert en écriture pour tous" -#: plugins/sudoers/sudoers.c:1151 toke.l:1255 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "Le fichier %s a pour groupe (gid) %u, alors qu'il devrait appartenir au groupe %u" -#: plugins/sudoers/sudoers.c:1184 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "« -c %s » est réservé à l'utilisateur root" -#: plugins/sudoers/sudoers.c:1203 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "classe de connexion %s inconnue" -#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "impossible de résoudre l'hôte %s" @@ -3410,17 +3490,17 @@ msgstr "« ! » n'est pas autorisé en fin d'expression" msgid "unknown search type %d" msgstr "type de recherche %d inconnu" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "utilisation : %s [-hnRS] [-d répertoire] [-m nombre] [-s nombre] ID\n" -#: plugins/sudoers/sudoreplay.c:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "utilisation : %s [-h] [-d répertoire] -l [expression recherchée]\n" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -3429,7 +3509,7 @@ msgstr "" "%s - rejeu du journal de la session sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3486,127 +3566,122 @@ msgstr "" "\n" "Commande sans correspondance" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s est accessible en écriture pour les membres du groupe" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "impossible de tronquer le fichier d'horodatage à %lld octets" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "un horodatage dans le futur a été ignoré" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "l'horodatage est trop avancé dans le future : %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "verrouillage du fichier d'horodatage %s impossible" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "le chemin d'accès au fichier d'état de la recommandation est trop long : %s/%s" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "sudoedit ne devrait pas être spécifié avec un chemin" -#: plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "l'option -x sera supprimée dans une version ultérieure" -#: plugins/sudoers/visudo.c:251 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "envisagez plutôt l'utilisation de l'utilitaire cvtsudoers" -#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "appuyer sur entrée pour éditer %s : " -#: plugins/sudoers/visudo.c:321 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "le contenu de la session d'édition a été laissé dans %s" -#: plugins/sudoers/visudo.c:397 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "l'éditeur indiqué (%s) n'existe pas" -#: plugins/sudoers/visudo.c:399 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "aucun éditeur trouvé (chemin d'accès à l'éditeur : %s)" -#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "impossible d'appliquer la fonction stat à %s" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "erreur en écriture" -#: plugins/sudoers/visudo.c:559 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "impossible d'appliquer la fonction stat au fichier temporaire (%s), %s n'a pas été modifié" -#: plugins/sudoers/visudo.c:566 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "fichier temporaire vide (%s), %s n'a pas été modifié" -#: plugins/sudoers/visudo.c:572 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "l'éditeur (%s) a échoué, %s n'a pas été modifié" -#: plugins/sudoers/visudo.c:594 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s n'a pas été modifié" -#: plugins/sudoers/visudo.c:639 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "impossible de rouvrir le fichier temporaire (%s), %s n'a pas été modifié." -#: plugins/sudoers/visudo.c:652 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "impossible d'analyser le fichier temporaire (%s), erreur inconnue" -#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "impossible de définir (uid, gid) de %s à (%u, %u)" -#: plugins/sudoers/visudo.c:803 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s et %s ne sont pas dans le même système de fichiers, tentative de renommage à l'aide de la commande mv" -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "la commande a échoué : « %s %s %s », %s n'a pas été modifié" -#: plugins/sudoers/visudo.c:821 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "erreur lors du renommage de %s, %s n'a pas été modifié" -#: plugins/sudoers/visudo.c:841 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "Et maintenant ?" -#: plugins/sudoers/visudo.c:855 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3618,41 +3693,41 @@ msgstr "" " e(x)it sans sauvegarde des modifications apportées au fichier sudoers\n" " (Q)uitter et sauvegarder les modifications apportées au fichier sudoers (DANGER!)\n" -#: plugins/sudoers/visudo.c:901 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "exécution de %s impossible" -#: plugins/sudoers/visudo.c:932 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s : mauvais propriétaire (uid, gid), celui-ci devrait être (%u,%u)\n" -#: plugins/sudoers/visudo.c:943 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s : mauvais droits d'utilisation, le mode devrait être 0%o\n" -#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s : analyse réussie\n" -#: plugins/sudoers/visudo.c:1017 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s n'est pas disponible, réessayez plus tard" -#: plugins/sudoers/visudo.c:1021 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "Éditer quand même ? [y/N]" -#: plugins/sudoers/visudo.c:1117 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "Attention : %s:%d:%d: %s « %s » n'est pas utilisé" -#: plugins/sudoers/visudo.c:1229 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3661,13 +3736,14 @@ msgstr "" "%s - édite le fichier sudoers en toute sécurité\n" "\n" -#: plugins/sudoers/visudo.c:1231 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" @@ -3677,6 +3753,7 @@ msgstr "" " -c, --check mode de validation\n" " -f, --file=fichier précise l'emplacement du fichier sudoers\n" " -h, --help affiche l'aide puis termine l'exécution\n" +" -I, --no-includes ne pas éditer les fichiers inclus\n" " -q, --quiet moins de messages d'erreur de syntaxe (mode silencieux)\n" " -s, --strict validation stricte de la syntaxe\n" " -V, --version affiche la version, puis termine l'exécution\n" @@ -3713,6 +3790,12 @@ msgstr "saut de ligne inattendu dans la chaîne" msgid "too many levels of includes" msgstr "nombre de niveaux d'inclusions trop élevé" +#~ msgid "%s is group writable" +#~ msgstr "%s est accessible en écriture pour les membres du groupe" + +#~ msgid "lecture status path too long: %s/%s" +#~ msgstr "le chemin d'accès au fichier d'état de la recommandation est trop long : %s/%s" + #~ msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" #~ msgstr "Attention : %s:%d:%d: boucle dans %s « %s »" diff --git a/plugins/sudoers/po/ja.mo b/plugins/sudoers/po/ja.mo index 9ec66413dc87fd015b01395a5587d18875f03103..8d864ec042e9303111a7e0c9a6e6bffa53e2a5b2 100644 GIT binary patch delta 17141 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 YyXjm9@3gl%cpH8&Ag9Ox*ZH9T0!Bu)1poj5 delta 16956 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�|GkOWNhBr|46>gggO~7uHw_+o_hHbI(A135O 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, 2012, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.10b1\n" +"Project-Id-Version: sudoers 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-02-11 18:33-0700\n" -"PO-Revision-Date: 2022-02-14 23:39+0900\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-15 08:41+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -16,11 +16,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-Basepath: sudo-1.9.9b1\n" +"X-Poedit-Basepath: sudo-1.9.12b2\n" "X-Generator: Poedit 2.4.2\n" "X-Poedit-SearchPath-0: .\n" -#: confstr.sh:1 gram.y:1198 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "構文エラー" @@ -44,66 +44,80 @@ msgstr "*** %h のセキュリティ情報 ***" msgid "Sorry, try again." msgstr "残念、また試してください。" -#: gram.y:233 gram.y:300 gram.y:309 gram.y:318 gram.y:328 gram.y:338 -#: gram.y:362 gram.y:389 gram.y:398 gram.y:406 gram.y:415 gram.y:424 -#: gram.y:498 gram.y:508 gram.y:520 gram.y:564 gram.y:573 gram.y:582 -#: gram.y:591 gram.y:718 gram.y:726 gram.y:737 gram.y:749 gram.y:768 -#: gram.y:923 gram.y:928 gram.y:936 gram.y:950 gram.y:956 gram.y:1078 -#: gram.y:1087 gram.y:1095 gram.y:1104 gram.y:1113 gram.y:1142 gram.y:1151 -#: gram.y:1159 gram.y:1252 gram.y:1382 gram.y:1748 gram.y:1798 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 -#: lib/eventlog/eventlog.c:804 lib/eventlog/eventlog.c:881 -#: lib/eventlog/eventlog.c:1176 lib/iolog/iolog_filter.c:142 -#: lib/iolog/iolog_filter.c:204 lib/iolog/iolog_filter.c:233 +#: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 +#: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 +#: lib/iolog/iolog_filter.c:202 lib/iolog/iolog_filter.c:233 #: lib/iolog/iolog_json.c:150 lib/iolog/iolog_json.c:382 #: lib/iolog/iolog_json.c:412 lib/iolog/iolog_json.c:555 #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1011 logsrvd/logsrvd.c:1073 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:425 -#: logsrvd/logsrvd_journal.c:427 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:843 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:118 -#: plugins/sudoers/auth/kerb5.c:146 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:134 plugins/sudoers/cvtsudoers.c:131 -#: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 -#: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 -#: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:758 -#: plugins/sudoers/cvtsudoers.c:873 plugins/sudoers/cvtsudoers.c:881 -#: plugins/sudoers/cvtsudoers.c:1376 plugins/sudoers/cvtsudoers.c:1380 -#: plugins/sudoers/cvtsudoers.c:1482 plugins/sudoers/cvtsudoers_csv.c:183 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 #: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 #: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 -#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:469 -#: plugins/sudoers/cvtsudoers_ldif.c:477 plugins/sudoers/cvtsudoers_ldif.c:624 -#: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 #: plugins/sudoers/cvtsudoers_merge.c:446 @@ -111,53 +125,52 @@ msgstr "残念、また試してください。" #: plugins/sudoers/cvtsudoers_merge.c:553 #: plugins/sudoers/cvtsudoers_merge.c:564 #: plugins/sudoers/cvtsudoers_merge.c:633 -#: plugins/sudoers/cvtsudoers_merge.c:1150 -#: plugins/sudoers/cvtsudoers_merge.c:1223 plugins/sudoers/defaults.c:468 -#: plugins/sudoers/defaults.c:690 plugins/sudoers/defaults.c:1051 -#: plugins/sudoers/defaults.c:1243 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/cvtsudoers_merge.c:1158 +#: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:264 -#: plugins/sudoers/iolog.c:664 plugins/sudoers/iolog.c:690 -#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:433 -#: plugins/sudoers/ldap.c:443 plugins/sudoers/ldap.c:448 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:464 -#: plugins/sudoers/ldap.c:760 plugins/sudoers/ldap.c:924 -#: plugins/sudoers/ldap.c:1340 plugins/sudoers/ldap.c:1766 -#: plugins/sudoers/ldap.c:1803 plugins/sudoers/ldap.c:1884 -#: plugins/sudoers/ldap.c:2019 plugins/sudoers/ldap.c:2120 -#: plugins/sudoers/ldap.c:2136 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 +#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 +#: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:755 plugins/sudoers/ldap.c:919 +#: plugins/sudoers/ldap.c:1335 plugins/sudoers/ldap.c:1761 +#: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 +#: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 +#: plugins/sudoers/ldap.c:2131 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:390 plugins/sudoers/log_client.c:703 -#: plugins/sudoers/log_client.c:724 plugins/sudoers/log_client.c:1444 -#: plugins/sudoers/log_client.c:1662 plugins/sudoers/log_client.c:1989 -#: plugins/sudoers/log_client.c:2045 plugins/sudoers/logging.c:104 -#: plugins/sudoers/logging.c:185 plugins/sudoers/logging.c:469 -#: plugins/sudoers/logging.c:489 plugins/sudoers/logging.c:628 -#: plugins/sudoers/match_command.c:324 plugins/sudoers/match_command.c:567 -#: plugins/sudoers/match_command.c:616 plugins/sudoers/match_command.c:688 -#: plugins/sudoers/match_command.c:736 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:201 plugins/sudoers/parse.c:218 -#: plugins/sudoers/parse.c:250 plugins/sudoers/parse.c:267 -#: plugins/sudoers/parse.c:290 plugins/sudoers/parse.c:301 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 #: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 #: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 #: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 #: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 -#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:597 -#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 -#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 -#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 -#: plugins/sudoers/policy.c:570 plugins/sudoers/policy.c:952 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -167,138 +180,153 @@ msgstr "残念、また試してください。" #: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 #: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 #: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 -#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:111 -#: plugins/sudoers/stubs.c:119 plugins/sudoers/sudoers.c:335 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:429 -#: plugins/sudoers/sudoers.c:438 plugins/sudoers/sudoers.c:479 -#: plugins/sudoers/sudoers.c:842 plugins/sudoers/sudoers.c:980 -#: plugins/sudoers/sudoers.c:1039 plugins/sudoers/sudoers.c:1305 -#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 -#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 -#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 -#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/testsudoers.c:580 plugins/sudoers/timestamp.c:424 -#: plugins/sudoers/timestamp.c:468 plugins/sudoers/timestamp.c:980 -#: plugins/sudoers/timestamp.c:1118 plugins/sudoers/toke_util.c:78 -#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 -#: plugins/sudoers/toke_util.c:161 plugins/sudoers/toke_util.c:200 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 -#: plugins/sudoers/visudo.c:344 plugins/sudoers/visudo.c:350 -#: plugins/sudoers/visudo.c:456 plugins/sudoers/visudo.c:632 -#: plugins/sudoers/visudo.c:962 plugins/sudoers/visudo.c:1035 toke.l:1015 -#: toke.l:1147 toke.l:1218 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 +#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 +#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 +#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 +#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 +#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "メモリ割り当てを行えませんでした" -#: gram.y:615 +#: gram.y:623 msgid "a digest requires a path name" msgstr "認証方式にはパスが必要です" -#: gram.y:637 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "\"CWD\" の値は '/', '~', または '*' で開始しなければいけません" -#: gram.y:643 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "\"CWD\" パスが長すぎます" -#: gram.y:653 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "\"CHROOT\" の値は '/', '~', または '*' で開始しなければいけません" -#: gram.y:659 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "\"CHROOT\" パスが長すぎます" -#: gram.y:788 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "構文エラー、予約語 %s がエイリアス名に使われています" -#: gram.y:811 +#: gram.y:825 msgid "invalid notbefore value" msgstr "notbefore の値が無効です" -#: gram.y:820 +#: gram.y:834 msgid "invalid notafter value" msgstr "notafter の値が無効です" -#: gram.y:830 plugins/sudoers/policy.c:353 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "制限時間の値が大き過ぎます" -#: gram.y:832 plugins/sudoers/policy.c:355 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "時間制限値が無効です" -#: gram.y:946 plugins/sudoers/sudoers.c:998 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "コマンド名が長すぎます" -#: gram.y:1200 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1250 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "別名 \"%s\" はすでに定義されています" -#: gram.y:1748 gram.y:1798 lib/eventlog/eventlog.c:309 -#: lib/eventlog/eventlog.c:804 lib/eventlog/eventlog.c:877 -#: lib/eventlog/eventlog.c:880 lib/eventlog/eventlog.c:1176 -#: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:204 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 +#: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 +#: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 +#: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 #: lib/iolog/iolog_filter.c:232 lib/iolog/iolog_json.c:150 #: lib/iolog/iolog_json.c:381 lib/iolog/iolog_json.c:412 #: lib/iolog/iolog_json.c:555 lib/iolog/iolog_legacy.c:100 #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1084 logsrvd/logsrvd.c:1400 logsrvd/logsrvd.c:1406 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:425 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:293 logsrvd/tls_init.c:314 -#: logsrvd/tls_init.c:324 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:134 +#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 #: plugins/sudoers/cvtsudoers.c:191 plugins/sudoers/cvtsudoers.c:202 #: plugins/sudoers/cvtsudoers.c:332 plugins/sudoers/cvtsudoers.c:536 #: plugins/sudoers/cvtsudoers.c:669 plugins/sudoers/cvtsudoers.c:687 -#: plugins/sudoers/cvtsudoers.c:758 plugins/sudoers/cvtsudoers.c:873 -#: plugins/sudoers/cvtsudoers.c:880 plugins/sudoers/cvtsudoers.c:1376 -#: plugins/sudoers/cvtsudoers.c:1380 plugins/sudoers/cvtsudoers.c:1482 -#: plugins/sudoers/cvtsudoers_csv.c:182 plugins/sudoers/cvtsudoers_csv.c:245 -#: 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:375 -#: plugins/sudoers/cvtsudoers_ldif.c:429 plugins/sudoers/cvtsudoers_ldif.c:437 -#: plugins/sudoers/cvtsudoers_ldif.c:448 plugins/sudoers/cvtsudoers_ldif.c:455 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:476 -#: plugins/sudoers/cvtsudoers_ldif.c:623 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:869 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:182 +#: plugins/sudoers/cvtsudoers_csv.c:245 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:375 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:437 plugins/sudoers/cvtsudoers_ldif.c:448 +#: plugins/sudoers/cvtsudoers_ldif.c:455 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:480 plugins/sudoers/cvtsudoers_ldif.c:488 +#: plugins/sudoers/cvtsudoers_ldif.c:635 plugins/sudoers/cvtsudoers_merge.c:47 #: plugins/sudoers/cvtsudoers_merge.c:51 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 @@ -309,93 +337,93 @@ msgstr "別名 \"%s\" はすでに定義されています" #: plugins/sudoers/cvtsudoers_merge.c:564 #: plugins/sudoers/cvtsudoers_merge.c:630 #: plugins/sudoers/cvtsudoers_merge.c:633 -#: plugins/sudoers/cvtsudoers_merge.c:1149 -#: plugins/sudoers/cvtsudoers_merge.c:1223 plugins/sudoers/defaults.c:468 -#: plugins/sudoers/defaults.c:690 plugins/sudoers/defaults.c:1051 -#: plugins/sudoers/defaults.c:1243 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/cvtsudoers_merge.c:1157 +#: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:264 -#: plugins/sudoers/iolog.c:664 plugins/sudoers/iolog.c:690 -#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:433 -#: plugins/sudoers/ldap.c:443 plugins/sudoers/ldap.c:448 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:464 -#: plugins/sudoers/ldap.c:760 plugins/sudoers/ldap.c:924 -#: plugins/sudoers/ldap.c:1340 plugins/sudoers/ldap.c:1766 -#: plugins/sudoers/ldap.c:1803 plugins/sudoers/ldap.c:1884 -#: plugins/sudoers/ldap.c:2019 plugins/sudoers/ldap.c:2120 -#: plugins/sudoers/ldap.c:2136 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 +#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 +#: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:755 plugins/sudoers/ldap.c:919 +#: plugins/sudoers/ldap.c:1335 plugins/sudoers/ldap.c:1761 +#: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 +#: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 +#: plugins/sudoers/ldap.c:2131 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:221 plugins/sudoers/log_client.c:242 -#: plugins/sudoers/log_client.c:255 plugins/sudoers/log_client.c:390 -#: plugins/sudoers/log_client.c:703 plugins/sudoers/log_client.c:724 -#: plugins/sudoers/log_client.c:1444 plugins/sudoers/log_client.c:1662 -#: plugins/sudoers/log_client.c:1989 plugins/sudoers/log_client.c:2045 -#: plugins/sudoers/logging.c:104 plugins/sudoers/logging.c:184 -#: plugins/sudoers/logging.c:185 plugins/sudoers/logging.c:468 -#: plugins/sudoers/logging.c:488 plugins/sudoers/logging.c:628 -#: plugins/sudoers/match_command.c:323 plugins/sudoers/match_command.c:566 -#: plugins/sudoers/match_command.c:615 plugins/sudoers/match_command.c:688 -#: plugins/sudoers/match_command.c:735 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:200 plugins/sudoers/parse.c:217 -#: plugins/sudoers/parse.c:249 plugins/sudoers/parse.c:266 -#: plugins/sudoers/parse.c:289 plugins/sudoers/parse.c:300 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 #: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 #: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:597 -#: plugins/sudoers/parse_ldif.c:626 plugins/sudoers/parse_ldif.c:651 -#: plugins/sudoers/parse_ldif.c:709 plugins/sudoers/parse_ldif.c:726 -#: plugins/sudoers/parse_ldif.c:754 plugins/sudoers/parse_ldif.c:761 -#: plugins/sudoers/policy.c:152 plugins/sudoers/policy.c:161 -#: plugins/sudoers/policy.c:170 plugins/sudoers/policy.c:197 -#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:353 -#: plugins/sudoers/policy.c:355 plugins/sudoers/policy.c:391 -#: plugins/sudoers/policy.c:400 plugins/sudoers/policy.c:448 -#: plugins/sudoers/policy.c:458 plugins/sudoers/policy.c:467 -#: plugins/sudoers/policy.c:476 plugins/sudoers/policy.c:570 -#: plugins/sudoers/policy.c:952 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/set_perms.c:363 plugins/sudoers/set_perms.c:706 -#: plugins/sudoers/set_perms.c:1073 plugins/sudoers/set_perms.c:1380 -#: plugins/sudoers/set_perms.c:1549 plugins/sudoers/sssd.c:144 -#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 -#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 -#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 -#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:111 -#: plugins/sudoers/stubs.c:119 plugins/sudoers/sudoers.c:335 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:429 -#: plugins/sudoers/sudoers.c:438 plugins/sudoers/sudoers.c:479 -#: plugins/sudoers/sudoers.c:842 plugins/sudoers/sudoers.c:980 -#: plugins/sudoers/sudoers.c:1039 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 +#: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/set_perms.c:363 +#: plugins/sudoers/set_perms.c:706 plugins/sudoers/set_perms.c:1073 +#: plugins/sudoers/set_perms.c:1380 plugins/sudoers/set_perms.c:1549 +#: plugins/sudoers/sssd.c:144 plugins/sudoers/sssd.c:185 +#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 +#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 +#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 #: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 #: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 #: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 #: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/testsudoers.c:580 plugins/sudoers/timestamp.c:424 -#: plugins/sudoers/timestamp.c:468 plugins/sudoers/timestamp.c:980 -#: plugins/sudoers/timestamp.c:1118 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 #: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 #: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 -#: plugins/sudoers/visudo.c:344 plugins/sudoers/visudo.c:350 -#: plugins/sudoers/visudo.c:456 plugins/sudoers/visudo.c:632 -#: plugins/sudoers/visudo.c:962 plugins/sudoers/visudo.c:1035 toke.l:1015 -#: toke.l:1147 toke.l:1210 toke.l:1218 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -404,16 +432,18 @@ msgstr "%s: %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:580 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 -#: plugins/sudoers/ldap.c:531 plugins/sudoers/ldap.c:764 -#: plugins/sudoers/ldap.c:1137 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/policy.c:740 -#: plugins/sudoers/policy.c:751 plugins/sudoers/prompt.c:168 -#: plugins/sudoers/serialize_list.c:62 plugins/sudoers/serialize_list.c:71 -#: plugins/sudoers/strvec_join.c:62 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/toke_util.c:213 toke.l:979 toke.l:1181 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 +#: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 +#: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 +#: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 +#: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 +#: toke.l:987 toke.l:1189 #, c-format msgid "internal error, %s overflow" msgstr "内部エラー、%s がオーバーフローしました" @@ -428,31 +458,31 @@ msgstr "標準入力を複製できません: %m" msgid "unable to execute %s: %m" msgstr "%s を実行できません: %m" -#: lib/eventlog/eventlog.c:456 plugins/sudoers/auth/aix_auth.c:198 +#: lib/eventlog/eventlog.c:463 plugins/sudoers/auth/aix_auth.c:198 msgid "unable to fork" msgstr "fork できません" -#: lib/eventlog/eventlog.c:464 lib/eventlog/eventlog.c:518 +#: lib/eventlog/eventlog.c:473 lib/eventlog/eventlog.c:538 #, c-format msgid "unable to fork: %m" msgstr "fork できません: %m" -#: lib/eventlog/eventlog.c:508 +#: lib/eventlog/eventlog.c:528 #, c-format msgid "unable to open pipe: %m" msgstr "パイプを開けません: %m" -#: lib/eventlog/eventlog.c:1007 +#: lib/eventlog/eventlog.c:1030 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: lib/eventlog/eventlog.c:1036 +#: lib/eventlog/eventlog.c:1059 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (コマンド継続中) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1296 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -567,14 +597,14 @@ msgstr "%s: runasグループ名フィールドがありません" msgid "%s exists but is not a directory (0%o)" msgstr "%s が存在しますがディレクトリではありません (0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:807 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "ディレクトリ %s を作成できません" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:731 -#: plugins/sudoers/visudo.c:765 plugins/sudoers/visudo.c:771 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "%s のアクセス権限のモードを 0%o に変更できません" @@ -589,150 +619,156 @@ msgstr "タイミングファイルの読み込みエラー: %s" msgid "invalid timing file line: %s" msgstr "無効なタイミングファイルの行です: %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:804 -#: plugins/sudoers/policy.c:550 -msgid "unable to generate UUID" -msgstr "uuid を生成できません" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s: プロトコルエラー: key が NULL です" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "%s: プロトコルエラー: %s の型としては間違っています" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s: プロトコルエラー: %s に NULL値が入っています" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "uuid を生成できません" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "%s: プロトコルエラー: %s が AcceptMessage にありません" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "%s: セッションIDを整形できません" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "%s: %s は設定されていません" -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "iolog のパス %s を伸長できません" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "iolog のパス %s を作成できません" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "無効な iofd %d です" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "iofd %d を閉じる際にエラーが発生しました: %s" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "iofd %d をフラッシュする際にエラーが発生しました: %s" -#: logsrvd/iolog_writer.c:777 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "無効な I/O ログ %s: %s が参照されていますが存在しません" -#: logsrvd/iolog_writer.c:789 logsrvd/logsrvd_journal.c:377 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s: 復元ポイントが見つかりません [%lld, %ld]" -#: logsrvd/iolog_writer.c:811 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:245 -#: plugins/sudoers/check.c:273 plugins/sudoers/cvtsudoers.c:730 -#: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1442 -#: plugins/sudoers/cvtsudoers_csv.c:681 plugins/sudoers/cvtsudoers_json.c:885 -#: plugins/sudoers/cvtsudoers_ldif.c:697 plugins/sudoers/sudoers.c:1092 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:949 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 +#: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "%s を開けません" -#: logsrvd/iolog_writer.c:823 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "%s/%s を開けません" -#: logsrvd/iolog_writer.c:836 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "%s/%s から %s/%s にコピーできません: %s" -#: logsrvd/iolog_writer.c:865 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "%s から %s に名前を変更できません" -#: logsrvd/logsrv_util.c:139 logsrvd/logsrv_util.c:168 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s: 復元ポイントが見つかりません [%lld, %ld]" -#: logsrvd/logsrv_util.c:151 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "I/O ログファイル %s/%s がありません。" -#: logsrvd/logsrv_util.c:158 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: 前方検索できません %zu" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "リレーに接続できません" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:835 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "サーバーメッセージが大き過ぎます: %zu" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1010 -#: logsrvd/logsrvd.c:1134 logsrvd/logsrvd.c:1307 logsrvd/logsrvd.c:1325 -#: logsrvd/logsrvd.c:1423 logsrvd/logsrvd.c:1546 logsrvd/logsrvd.c:1730 -#: logsrvd/logsrvd_journal.c:489 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1121 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:209 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1027 plugins/sudoers/iolog.c:1160 -#: plugins/sudoers/iolog.c:1258 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 -#: plugins/sudoers/log_client.c:395 plugins/sudoers/log_client.c:599 -#: plugins/sudoers/log_client.c:606 plugins/sudoers/log_client.c:1131 -#: plugins/sudoers/log_client.c:1413 plugins/sudoers/log_client.c:1454 -#: plugins/sudoers/log_client.c:1462 plugins/sudoers/log_client.c:1618 -#: plugins/sudoers/log_client.c:1734 plugins/sudoers/log_client.c:2053 -#: plugins/sudoers/log_client.c:2061 plugins/sudoers/logging.c:142 -#: plugins/sudoers/logging.c:199 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -741,621 +777,658 @@ msgstr "サーバーメッセージが大き過ぎます: %zu" msgid "unable to add event to queue" msgstr "イベントをキューに追加できません" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "予期しない状態 %d (%sの)" -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "状態マシンエラー" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "無効な AcceptMessage" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "無効な RejectMessage" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "無効な ExitMessage" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "無効な RestartMessage" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "無効な AlertMessage" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "%s: 予期しない IoBuffer" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "プロトコルエラーです" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "無効な IoBuffer です" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "無効な ChangeWindowSize" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "無効な CommandSuspend" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 +#, c-format +msgid "unable to unpack %s size %zu" +msgstr "%s を伸長できません (長さ %zu )" + +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "予期しない type_case の値 %d が %s の中にあります、 %s から出てきたものです。" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "認識できないクライアントメッセージのタイプです" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "クライアント %s への書き込みがタイムアウト" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:907 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "クライアント %s への書き込みバッファがありません" -#: logsrvd/logsrvd.c:981 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "クライアント %s からの読み込みがタイムアウト" -#: logsrvd/logsrvd.c:1022 logsrvd/logsrvd_relay.c:771 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "%s からの EOF が適切な TLS 通信の終了なしに現れました" -#: logsrvd/logsrvd.c:1065 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:709 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "クライアントメッセージが大き過ぎます: %zu" -#: logsrvd/logsrvd.c:1066 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "クライアントメッセージが大き過ぎます" -#: logsrvd/logsrvd.c:1084 logsrvd/logsrvd.c:1085 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "無効な ClientMessage" -#: logsrvd/logsrvd.c:1386 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "リモートIPアドレスを取得できません" -#: logsrvd/logsrvd.c:1415 logsrvd/tls_client.c:196 -#: plugins/sudoers/log_client.c:270 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "ユーザーデータをSSLオブジェクトに添付することができません: %s" -#: logsrvd/logsrvd.c:1596 logsrvd/logsrvd.c:1948 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "接続待ちソケットを準備できません" -#: logsrvd/logsrvd.c:1713 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "予期しないシグナル %d" -#: logsrvd/logsrvd.c:1850 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "Sudo ログサーバー" -#: logsrvd/logsrvd.c:1852 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "オプション:" -#: logsrvd/logsrvd.c:1854 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "設定ファイルのパス" -#: logsrvd/logsrvd.c:1856 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "ヘルプメッセージを表示して終了する" -#: logsrvd/logsrvd.c:1858 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "フォークせずに、フォアグラウンドで実行する" -#: logsrvd/logsrvd.c:1860 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "接続が切れる割合(%)" -#: logsrvd/logsrvd.c:1862 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "バージョン情報を表示して終了する" -#: logsrvd/logsrvd.c:1912 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C バージョン 1.3 以上が必要です" -#: logsrvd/logsrvd.c:1928 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "無効な乱数ドロップ値です: %s" -#: logsrvd/logsrvd.c:1931 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:177 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s バージョン %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:335 -#: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:120 -#: plugins/sudoers/policy.c:1188 plugins/sudoers/sudoers.c:486 -#: plugins/sudoers/sudoers.c:1347 plugins/sudoers/testsudoers.c:215 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 +#: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "不明なユーザー %s" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:145 -#: plugins/sudoers/sudoers.c:491 plugins/sudoers/sudoers.c:1381 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "不明なグループ %s" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "iolog モード %s を解析できません" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "%s には無効な値: %s" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "TLS がサポートされていません" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: 完全修飾パスではありません" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "未知の syslog ファシリティ %s" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "未知の syslog プライオリティ %s" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d 対応しない '[': %s" -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "%s:%d ']' の後に余計なものがあります: %s" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d 無効な config セクション: %s" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d 無効な設定の行: %s" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d セクション名が必要です: %s" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] 適合しないキー: %s" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:857 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "ログファイル %s を開けません" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "サーバーTLSコンテキストを初期化できません" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "リレーTLSコンテキストを初期化できません" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:416 -#: logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "ジャーナルファイルを作成できません" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1007 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "%s をロックできません" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "ジャーナルファイルをロックできません" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "ジャーナルファイルを開けません" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:452 -#: logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "ジャーナルファイルへ書き込むことができません" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "ジャーナルファイルの名前を変更できません" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "ジャーナルファイルの予期せぬところにEOF" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "ジャーナルファイルの読み込みエラー" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:376 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "無効なジャーナルファイル、再スタートできません" -#: logsrvd/logsrvd_journal.c:435 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "[%lld, %ld] が見つかりません、 ジャーナルファイル %s で探索中" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "予期しない value_case の値 %d が %s の中にあります、 %s から出てきたものです。" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "AcceptMessage の解析中にエラー" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "I/O ログの作成でエラー" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "accept イベントのログ記録でエラー" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "RejectMessage の解析でエラー" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "reject イベントのログ記録でエラー" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "exit イベントのログ記録でエラー" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "ログは完了しているので、再開できません" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "ログを再開できません" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "AlertMessage の解析中にエラー" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "alert イベントのログ記録でエラー" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "タイミングバッファーを書式整形できません、長さ %d" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "不規則に接続が落ちています" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "IoBuffer の書き込みでエラー" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "ChangeWindowSize の書き込みでエラー" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "CommandSuspend の書き込みでエラー" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "リレーホストへのTLS ハンドシェイクが失敗" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "リレーホストに接続できません" -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "%s: 無効な ServerHello です、server_id がありません" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1497 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "無効な ServerHello です" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "認識できない ServerMessage のタイプです" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "リレー %s (%s) からの読み込みがタイムアウト" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "リレーからの読み込みがタイムアウト" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "リレーホスト名が証明書と一致しません" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:776 -#: logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "リレーからの読み込みでエラー" -#: logsrvd/logsrvd_relay.c:803 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "リレーから読み込めません" -#: logsrvd/logsrvd_relay.c:818 logsrvd/logsrvd_relay.c:936 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "リレーサーバーが接続を閉じました" -#: logsrvd/logsrvd_relay.c:836 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "サーバーメッセージが大き過ぎます" -#: logsrvd/logsrvd_relay.c:900 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "リレー %s (%s) への書き込みがタイムアウト" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "リレーへの書き込みがタイムアウト" -#: logsrvd/logsrvd_relay.c:955 logsrvd/logsrvd_relay.c:961 -#: logsrvd/logsrvd_relay.c:971 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "リレーへの書き込みでエラー" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "sudo I/O ログをリモートサーバーに送る" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "受け取りイベントのみを送る (I/O なし)" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "サーバーの証明書を検証するために突き合わせる証明書バンドルファイル" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "TLSハンドシェイクのための証明書ファイル" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "ログの送り先とするホスト" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "復元するI/O ログのリモート ID" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "プライベート鍵ファイル" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "サーバーの証明書を検証しない" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "ホストに接続するのに使用するポート" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "以前の I/O ログ転送を再開する" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "与えられた理由によりコマンドを拒否する" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "この時間になったら転送を止める" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "選んだ I/O ログを n 重に並列送信することで監査サーバーを試験する" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:441 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "警告: %s:%s を参照できません: %s" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "サーバーのIPアドレスを取得できません" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "%s/%s から読み込むことができません: %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:945 -#: plugins/sudoers/iolog.c:1020 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "予期しない I/O イベント %d" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1146 plugins/sudoers/log_client.c:1423 -#: plugins/sudoers/log_client.c:1491 plugins/sudoers/log_client.c:1530 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: 予期しない状態 %d" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1576 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "サーバからエラーメッセージを受け取りました: %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1589 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "サーバから中断メッセージを受け取りました: %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1639 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: 予期しない type_case の値 %d" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "サーバーからの読み込みがタイムアウト" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 +msgid "host name does not match certificate" +msgstr "ホスト名が証明書と一致しません" + +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "早すぎるファイル終端 (EOF)" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1800 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "サーバーメッセージが大き過ぎます: %u" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "サーバーへの書き込みがタイムアウト" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "再開するポイントとIOログIDを指定する必要があります" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "I/Oが送られない場合は再開するポイントを設定できません" -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "ステータス %d で予期せぬ終了をしました" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "サーバーに送られた経過時間 [%lld, %ld]" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "サーバーから受け取ったコミットポイント [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:304 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "TLS ハンドシェイクでタイムアウトが発生" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:326 plugins/sudoers/log_client.c:342 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "イベントを設定できません" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "TLS接続に失敗しました: %s" -#: logsrvd/tls_client.c:190 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "SSLオブジェクトを割り当てることができません: %s" -#: logsrvd/tls_client.c:203 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "ソケットをSSLオブジェクトに取り付けることができません: %s" -#: logsrvd/tls_client.c:231 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "TLS コンテキストを初期化できません" -#: logsrvd/tls_init.c:127 logsrvd/tls_init.c:135 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "TLS 1.2 暗号化スイートを %s に設定できません: %s" -#: logsrvd/tls_init.c:155 logsrvd/tls_init.c:163 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "TLS 1.3 暗号化スイートを %s に設定できません: %s" -#: logsrvd/tls_init.c:195 logsrvd/tls_init.c:216 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "ディフィー・ヘルマン パラメーターを設定できません: %s" -#: logsrvd/tls_init.c:272 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "TLS コンテキストを作成できません: %s" -#: logsrvd/tls_init.c:278 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "プロトコルの最小バージョンを TLS 1.2 に設定できません: %s" -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:979 plugins/sudoers/log_client.c:1028 -#: plugins/sudoers/log_client.c:1077 plugins/sudoers/log_client.c:1203 -#: plugins/sudoers/logging.c:552 plugins/sudoers/logging.c:649 -#: plugins/sudoers/logging.c:811 plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "時刻を取得できません" @@ -1411,47 +1484,47 @@ msgstr "" "認証サーバーエラーです:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:110 +#: plugins/sudoers/auth/kerb5.c:115 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: プリンシパルを文字列('%s')に変換できません: %s" -#: plugins/sudoers/auth/kerb5.c:162 +#: plugins/sudoers/auth/kerb5.c:164 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: '%s' を構文解析できません: %s" -#: plugins/sudoers/auth/kerb5.c:171 +#: plugins/sudoers/auth/kerb5.c:173 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: 資格情報キャッシュ を解決できません: %s" -#: plugins/sudoers/auth/kerb5.c:220 +#: plugins/sudoers/auth/kerb5.c:222 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: オプションを設定できません: %s" -#: plugins/sudoers/auth/kerb5.c:235 +#: plugins/sudoers/auth/kerb5.c:237 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: 資格情報を取得できません: %s" -#: plugins/sudoers/auth/kerb5.c:248 +#: plugins/sudoers/auth/kerb5.c:250 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: 資格情報キャッシュ を初期化できません: %s" -#: plugins/sudoers/auth/kerb5.c:251 +#: plugins/sudoers/auth/kerb5.c:253 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: 資格情報をキャッシュできません: %s" -#: plugins/sudoers/auth/kerb5.c:315 +#: plugins/sudoers/auth/kerb5.c:317 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: ホストプリンシパルを取得できません: %s" -#: plugins/sudoers/auth/kerb5.c:329 +#: plugins/sudoers/auth/kerb5.c:331 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: TGT を検証できません! おそらく攻撃です!: %s" @@ -1492,7 +1565,7 @@ msgstr "アカウントの期限切れ、または sudo 用の PAM 設定に \"a msgid "PAM account management error: %s" msgstr "PAM アカウント管理エラーです: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:255 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "あなたは %s データベース内に存在しません" @@ -1533,27 +1606,27 @@ msgstr "SecurID 用のパスコード長が無効です" msgid "unable to initialize SIA session" msgstr "SIA セッションを初期化できません" -#: plugins/sudoers/auth/sudo_auth.c:134 +#: plugins/sudoers/auth/sudo_auth.c:135 msgid "invalid authentication methods" msgstr "無効な認証方法" -#: plugins/sudoers/auth/sudo_auth.c:136 +#: plugins/sudoers/auth/sudo_auth.c:137 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "無効な認証方法が sudo のコンパイル時に組み込まれています! スタンドアローンと非スタンドアローン認証を混在させてはいけません。" -#: plugins/sudoers/auth/sudo_auth.c:257 plugins/sudoers/auth/sudo_auth.c:309 +#: plugins/sudoers/auth/sudo_auth.c:258 plugins/sudoers/auth/sudo_auth.c:310 msgid "no authentication methods" msgstr "認証方法がありません" -#: plugins/sudoers/auth/sudo_auth.c:259 +#: plugins/sudoers/auth/sudo_auth.c:260 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "認証方法が sudo のコンパイル時に組み込まれていません! 認証を無効にする場合には、configure オプションで --disable-authentication を指定してください。" -#: plugins/sudoers/auth/sudo_auth.c:311 +#: plugins/sudoers/auth/sudo_auth.c:312 msgid "Unable to initialize authentication methods." msgstr "認証方法を初期化できません。" -#: plugins/sudoers/auth/sudo_auth.c:482 +#: plugins/sudoers/auth/sudo_auth.c:486 msgid "Authentication methods:" msgstr "認証方法:" @@ -1565,17 +1638,17 @@ msgstr "監査条件を決定できませんでした" msgid "unable to commit audit record" msgstr "監査レコードをコミットできません" -#: plugins/sudoers/check.c:263 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "講義ファイル %s の読み込みエラー" -#: plugins/sudoers/check.c:269 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "講義ファイル %s を無視します: 通常ファイルではありません" -#: plugins/sudoers/check.c:282 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1595,32 +1668,27 @@ msgstr "" " #3) 大いなる力には大いなる責任が伴うこと。\n" "\n" -#: plugins/sudoers/check.c:330 plugins/sudoers/check.c:340 -#: plugins/sudoers/sudoers.c:885 plugins/sudoers/sudoers.c:906 -#: plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "不明な uid %u" -#: plugins/sudoers/check_aliases.c:92 -#, c-format -msgid "Error: %s:%d:%d: cycle in %s \"%s\"" -msgstr "エラー: %s:%d:%d: %s \"%s\" でエイリアス定義が循環しています" - -#: plugins/sudoers/check_aliases.c:93 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format -msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" -msgstr "警告: %s:%d:%d: %s \"%s\" でエイリアス定義が循環しています" +msgid "%s: %s\n" +msgstr "%s: %s\n" -#: plugins/sudoers/check_aliases.c:97 +#: plugins/sudoers/check_aliases.c:133 #, c-format -msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "エラー: %s:%d:%d: %s \"%s\" は参照されているのに定義されていません" +msgid "cycle in %s \"%s\"" +msgstr "循環を発見 %s \"%s\"" -#: plugins/sudoers/check_aliases.c:98 +#: plugins/sudoers/check_aliases.c:136 #, c-format -msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "警告: %s:%d:%d: %s \"%s\" は参照されているのに定義されていません" +msgid "%s \"%s\" referenced but not defined" +msgstr "%s \"%s\" は参照されているのに定義されていません" #: plugins/sudoers/cvtsudoers.c:209 #, c-format @@ -1637,7 +1705,7 @@ msgstr "開始の order: %s: %s" msgid "order padding: %s: %s" msgstr "order の増分: %s: %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:179 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "%s 文法バージョン %d\n" @@ -1657,14 +1725,14 @@ msgstr "サポートされてない出力形式です %s" msgid "%s: input and output files must be different" msgstr "%s: 入力ファイルと出力ファイルは別である必要があります" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:159 -#: plugins/sudoers/sudoers.c:205 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:261 plugins/sudoers/visudo.c:620 -#: plugins/sudoers/visudo.c:953 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "sudoers のデフォルト値を初期化できません" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" @@ -1689,28 +1757,18 @@ msgstr "無効な抑制の指定です: %s" msgid "invalid filter: %s" msgstr "無効なフィルターです: %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:958 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "%s ファイルの構文解析に失敗しました。不明なエラーです" -#: plugins/sudoers/cvtsudoers.c:762 -#, c-format -msgid "parse error in %s near line %d\n" -msgstr "%s 内 %d 行付近で構文解析エラーが発生しました\n" - -#: plugins/sudoers/cvtsudoers.c:765 -#, c-format -msgid "parse error in %s\n" -msgstr "%s 内で構文解析エラーが発生しました\n" - -#: plugins/sudoers/cvtsudoers.c:1489 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "%s へ書き込むことができません" -#: plugins/sudoers/cvtsudoers.c:1512 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1719,7 +1777,7 @@ msgstr "" "%s - sudoers ファイル形式間での変換を行う\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1514 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -1760,31 +1818,31 @@ msgstr "" " -V, --version バージョン情報を表示して終了する" #: plugins/sudoers/cvtsudoers_csv.c:452 plugins/sudoers/cvtsudoers_csv.c:466 -#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:669 +#: plugins/sudoers/cvtsudoers_json.c:657 plugins/sudoers/cvtsudoers_json.c:672 #: plugins/sudoers/cvtsudoers_ldif.c:347 plugins/sudoers/cvtsudoers_ldif.c:360 -#: plugins/sudoers/ldap.c:515 +#: plugins/sudoers/ldap.c:510 msgid "unable to get GMT time" msgstr "GMT 時刻を取得できません" #: plugins/sudoers/cvtsudoers_csv.c:457 plugins/sudoers/cvtsudoers_csv.c:471 -#: plugins/sudoers/cvtsudoers_json.c:659 plugins/sudoers/cvtsudoers_json.c:674 +#: plugins/sudoers/cvtsudoers_json.c:662 plugins/sudoers/cvtsudoers_json.c:677 #: plugins/sudoers/cvtsudoers_ldif.c:352 plugins/sudoers/cvtsudoers_ldif.c:365 -#: plugins/sudoers/ldap.c:523 +#: plugins/sudoers/ldap.c:518 msgid "unable to format timestamp" msgstr "タイムスタンプを書式整形できません" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:515 -#: plugins/sudoers/cvtsudoers_json.c:725 plugins/sudoers/defaults.c:190 +#: plugins/sudoers/cvtsudoers_json.c:728 #, c-format msgid "%s:%d:%d: unknown defaults entry \"%s\"" msgstr "%s:%d:%d: 未知のデフォルト項目 \"%s\" です" -#: plugins/sudoers/cvtsudoers_ldif.c:649 +#: plugins/sudoers/cvtsudoers_ldif.c:661 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "sudoers の項目が多すぎます、最大は %u です。" -#: plugins/sudoers/cvtsudoers_ldif.c:692 +#: plugins/sudoers/cvtsudoers_ldif.c:704 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "SUDOERS_BASE 環境変数が設定されておらず -b オプションも指定されていません。" @@ -1829,805 +1887,790 @@ msgstr "%s:%d:%d: Defaults \"%s\" をホストに特有のものにできませ msgid "%s:%d:%d: removing Defaults \"%s\" overridden by subsequent entries" msgstr "%s:%d:%d: 後続のエントリーで上書きされた Defaults の \"%s\" を削除しています" -#: plugins/sudoers/cvtsudoers_merge.c:1080 +#: plugins/sudoers/cvtsudoers_merge.c:1088 #, c-format msgid "%s:%d:%d: merging userspec into %s:%d:%d" msgstr "%s:%d:%d: userspec を %s:%d:%d に併合しています" -#: plugins/sudoers/cvtsudoers_merge.c:1174 +#: plugins/sudoers/cvtsudoers_merge.c:1182 #, c-format msgid "%s:%d:%d: removing userspec overridden by subsequent entries" msgstr "%s:%d:%d: 後続のエントリーで上書きされた userspec を削除しています" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:56 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "ログ記録時に syslog を使用する場合の syslog ファシリティ: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:60 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "ログ記録時に syslog を使用する場合の syslog プライオリティ: %s" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:64 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "ユーザー認証に失敗したと時に使用される syslog プライオリティ: %s" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:68 msgid "Put OTP prompt on its own line" msgstr "ワンタイムパスワード入力要求をそれのみの行に表示します" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:72 msgid "Ignore '.' in $PATH" msgstr "$PATH 内にある '.' を無視します" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:76 msgid "Always send mail when sudo is run" msgstr "sudo を実行した時に、常にメールを送信します" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if user authentication fails" msgstr "ユーザー認証に失敗した場合にメールを送信します" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user is not in sudoers" msgstr "ユーザー他 sudoers 内に存在しない場合にメールを送信します" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:88 msgid "Send mail if the user is not in sudoers for this host" msgstr "ユーザーがこのホスト用の sudoers 内に存在しない場合にメールを送信します" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:92 msgid "Send mail if the user is not allowed to run a command" msgstr "ユーザーが許可されていないコマンドを実行しようとした場合にメールを送信します" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:96 msgid "Send mail if the user tries to run a command" msgstr "ユーザーがマンドを実行しようとした場合にメールを送信します" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:100 msgid "Use a separate timestamp for each user/tty combo" msgstr "ユーザー/tty の組み合わせごとに分離したタイムスタンプを使用します" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:104 msgid "Lecture user the first time they run sudo" msgstr "ユーザーが最初に sudo を実行した時に講義を行う" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:108 #, c-format msgid "File containing the sudo lecture: %s" msgstr "sudo の講義が含まれているファイル: %s" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:112 msgid "Require users to authenticate by default" msgstr "デフォルトでユーザーが認証されていることを必要とします" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:116 msgid "Root may run sudo" msgstr "root が sudo を実行するかもしれません" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:120 msgid "Log the hostname in the (non-syslog) log file" msgstr " ログファイル (syslog 以外) に記録する時にホスト名を含めます" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:124 msgid "Log the year in the (non-syslog) log file" msgstr "ログファイル (syslog 以外) に記録する時に年情報を含めます" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:128 msgid "If sudo is invoked with no arguments, start a shell" msgstr "sudo を引数無しで起動した場合、シェルを開始します" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:132 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "シェルを -s で開始した時に $HOME を変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:136 msgid "Always set $HOME to the target user's home directory" msgstr "$HOME を常に変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:140 msgid "Allow some information gathering to give useful error messages" msgstr "役に立つエラーメッセージを表示するためにいくつかの情報を収集することを許可します" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:144 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "sudoers ファイルに完全修飾ホスト名 (FQDN) を要求します" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:148 msgid "Insult the user when they enter an incorrect password" msgstr "間違ったパスワードを入力した時にユーザーを侮辱します" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:152 msgid "Only allow the user to run sudo if they have a tty" msgstr "tty がある場合のみ sudo の実行を許可します" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:156 msgid "Visudo will honor the EDITOR environment variable" msgstr "visudo が EDITOR 環境変数を尊重して使用します" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:160 msgid "Prompt for root's password, not the users's" msgstr "ユーザーのパスワードではなく、root のパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:164 msgid "Prompt for the runas_default user's password, not the users's" msgstr "ユーザーのパスワードではなく、 runas_default ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:168 msgid "Prompt for the target user's password, not the users's" msgstr "現在のユーザーのパスワードではなく、変更先ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:172 msgid "Apply defaults in the target user's login class if there is one" msgstr "変更先ユーザーのログインクラスのデフォルトが存在する場合は、デフォルトを適用します" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:176 msgid "Set the LOGNAME and USER environment variables" msgstr "LOGNAME および USER 環境変数を設定します" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:180 msgid "Only set the effective uid to the target user, not the real uid" msgstr "実効ユーザーIDのみ変更先ユーザーの UID に設定し、実ユーザーIDは変更しない" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:184 msgid "Don't initialize the group vector to that of the target user" msgstr "グループベクトルを変更先ユーザーの値で初期化しない" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "ログファイルの行頭から改行までの長さ (0 の場合は改行しない): %u" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "認証タイムスタンプのタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "パスワード入力要求のタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Number of tries to enter a password: %u" msgstr "パスワード入力の試行回数: %u" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "使用する umask 値 (0777 の場合はユーザーの設定値を使用します): 0%o" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Path to log file: %s" msgstr "ログファイルのパス: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Path to mail program: %s" msgstr "メールプログラムのパス: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Flags for mail program: %s" msgstr "メールプログラムの引数フラグ: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Address to send mail to: %s" msgstr "メールの送信先アドレス: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Address to send mail from: %s" msgstr "メールの送信元アドレス: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Subject line for mail messages: %s" msgstr "メールの件名 (Subject) 行: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Incorrect password message: %s" msgstr "パスワードを間違った時のメッセージ: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Path to lecture status dir: %s" msgstr "受講状況ディレクトリのパス: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリのパス: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:244 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリの所有者: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "パスワード入力と PATH の要求が免除されるグループに属するユーザー: %s" -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Default password prompt: %s" msgstr "パスワード入力要求時に表示される文字列: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:256 msgid "If set, passprompt will override system prompt in all cases." msgstr "設定した場合、すべての場合において passprompt がシステムの入力要求表示を上書きします" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "Default user to run commands as: %s" msgstr "コマンドを実行するデフォルトの変更先ユーザー: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "ユーザーの $PATH を上書きする時の値: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:268 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo で使用されるエディターのパス: %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:272 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "'list' 疑似コマンド使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "'verify' 疑似コマンドを使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:280 msgid "Preload the sudo_noexec library which replaces the exec functions" msgstr "exec 関数群を置き換える sudo_noexec ライブラリ事前ロードします" # do はたぶん強調の do -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:284 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "LDAP ディレクトリが実行中の場合、ローカルの sudoers ファイルを無視します" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:288 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "%d 以上の値をもつファイル記述子をコマンド実行前に閉じます" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:292 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "設定しても、ユーザーが \"closefrom\" の値を -C オプションで上書きするかもしれません" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:296 msgid "Allow users to set arbitrary environment variables" msgstr "ユーザーが任意の環境変数を設定することを許可します" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:300 msgid "Reset the environment to a default set of variables" msgstr "環境変数の集合をデフォルトに設定します" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:304 msgid "Environment variables to check for safety:" msgstr "安全性の確認を行う環境変数:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:308 msgid "Environment variables to remove:" msgstr "削除する環境変数:" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:312 msgid "Environment variables to preserve:" msgstr "保護する環境変数:" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux の役割: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux のタイプ: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:324 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 固有の環境ファイルのパス: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:328 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "制限付きsudo 固有の環境ファイルのパス: %s" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:332 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "sudoers を構文解析する時に使用するロケール: %s" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:336 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "パスワードが表示されてしまう状態であっても sudo がパスワード入力を要求することを許可します" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:340 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "パスワード入力要求でユーザーの入力があった時に、視覚的なフィードバックを提供します" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:344 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "ファイルシステムにアクセスしないがより正確では無い、素早い一致確認処理を行います" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:348 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "sudoers で指定した umask 値でユーザーの umask 値を上書きします (ユーザーの umask 値より緩い場合でも)" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:352 msgid "Log user's input for the command being run" msgstr "コマンドを実行した時のユーザー入力をログに記録します" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:356 +msgid "Log the command's standard input if not connected to a terminal" +msgstr "端末に接続していない場合にコマンドの標準入力をログに記録します" + +#: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "コマンドを実行した時のユーザーの端末入力をログに記録します" + +#: plugins/sudoers/def_data.c:364 msgid "Log the output of the command being run" msgstr "コマンドを実行した時の出力をログに記録します" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "端末に接続していない場合にコマンドの標準出力をログに記録します" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "端末に接続していない場合にコマンドの標準エラー出力をログに記録します" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "コマンドを実行した時の端末出力をログに記録します" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "I/O ログを zlib を使用して圧縮します" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "常に疑似 tty 内でコマンドを実行します" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "UNIX 以外のグループをサポートするためのプラグインです:%s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "入出力 (I/O) ログを保存するディレクトリです:%s" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "入出力 (I/O) ログを保存するファイルです:%s" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "pty を割り当てた時に utmp/utmpx ファイルに記録を加えます" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "utmp に記録するユーザーを、実行したユーザーではなく、変更後のユーザーにします" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "許容される権限の集合: %s" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "制限される権限の集合: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "コマンドを pty でバックグラウンドで実行する" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "利用する PAM サービス名: %s" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "ログインシェルで利用する PAM サービス名: %s" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "sudo が -A オプション付きで実行されたときに使う PAM サービス名: %s" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "ターゲットユーザーの PAM 資格情報による認証を試みる" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "実行するコマンドのために新しい PAM セッションを生成する" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "PAM アカウント検証管理を実行しています" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "I/O ログシーケンス番号の最大値: %s" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "sudoers のネットグループサポートを有効にする" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:452 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "ファイルを sudoedit で編集するときに親ディレクトリが書き込み可能か確かめる" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "ファイルを sudoedit で編集するときにシンボリックリンクを追う" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "不明なシステムグループについて、グループプラグインに問い合わせる" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "ネットグループについて、すべてのタプル(ユーザー、ホスト、ドメイン)を基に判定する" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "監査ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "I/O ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "グループの照合を sudoers の中で行い、グループ名でなくグループIDを用いる" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:484 #, 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:462 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "I/O ログの所有者となるユーザー: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "I/O ログの所有者となるグループ: %s" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "I/O ログのファイルモード: 0%o" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "コマンドの実行時にパスでなくファイル記述子を使う: %s" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:504 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "sudoers の中の未知の Defaults エントリーを無視し、警告を出さない" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "コマンドが中断されるまでの経過時間を秒で指定する: %u" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "ユーザーがコマンド実行の制限時間をコマンドラインで指定できるようにする" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "I/O ログのデータをバッファせずに、即ディスクにフラッシュする" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "syslog へのログ記録時にプロセスIDを含める" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "認証タイムスタンプのタイプ: %s" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "認証失敗メッセージ: %s" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "ユーザー名の検索で大文字小文字を同一視する" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "グループ名の検索で大文字小文字を同一視する" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "コマンドが sudoers で許可された場合にログに記録します" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "コマンドが sudoers で拒否された場合にログに記録します" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "オプショナルなポートで接続する Sudo ログサーバー" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Sudo ログサーバーのタイムアウト、単位は秒: %u" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:556 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "ログサーバーに接続したソケットで SO_KEEPALIVE ソケットオプションを有効にする" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "認証サーバーの CA バンドルファイルのパス: %s" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "sudoers の証明書ファイルのパス: %s" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "sudoers のプライベート鍵ファイルのパス: %s" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "ログサーバーの証明書が有効か検証する" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "未知の runas ユーザーおよび/またはグループ ID を使うことを許可する" -#: plugins/sudoers/def_data.c:554 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "有効なシェルを持つユーザーのみにコマンド実行を許可する" -#: plugins/sudoers/def_data.c:558 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "PAMのリモートユーザーを sudo を実行しているユーザーに設定" -#: plugins/sudoers/def_data.c:562 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "PAMのリモートホストをローカルホスト名に設定" -#: plugins/sudoers/def_data.c:566 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "コマンド実行前に変更する作業ディレクトリ: %s" -#: plugins/sudoers/def_data.c:570 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "コマンド実行前に変更するルートディレクトリ: %s" -#: plugins/sudoers/def_data.c:574 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "生成するログの書式: %s" -#: plugins/sudoers/def_data.c:578 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "SELinux RBAC のサポートを有効にする" -#: plugins/sudoers/def_data.c:582 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "sudo が最初に実行された時に作成されるファイルのパス: %s" -#: plugins/sudoers/def_data.c:586 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "これ以降のコマンドに割り込み、sudoers による制限を適用する" -#: plugins/sudoers/def_data.c:590 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "コマンドが実行したサブコマンドをログに記録する" -#: plugins/sudoers/def_data.c:594 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "コマンドを実行した後の終了ステータスをログに記録します" -#: plugins/sudoers/def_data.c:598 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "割り込みセッションの中で続くコマンドには認証が必要です" -#: plugins/sudoers/def_data.c:602 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "割り込まれたコマンドが setuid または setgid プログラムを実行することを許可します" -#: plugins/sudoers/def_data.c:606 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "プロセスのアドレス空間の最大値(バイト単位): %s" -#: plugins/sudoers/def_data.c:610 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "コアダンプファイルの最大サイズ(バイト単位): %s" -#: plugins/sudoers/def_data.c:614 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "プロセスが使用するCPU時間の最大値(秒単位): %s" -#: plugins/sudoers/def_data.c:618 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "プロセスのデータセグメントサイズの最大値(バイト単位): %s" -#: plugins/sudoers/def_data.c:622 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "プロセスが作成するファイルサイズの最大値(バイト単位): %s" -#: plugins/sudoers/def_data.c:626 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "プロセスが作るロックの最大数: %s" -#: plugins/sudoers/def_data.c:630 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "プロセスがロックするメモリーサイズの最大値(バイト単位): %s" -#: plugins/sudoers/def_data.c:634 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "プロセスが開くファイル数の最大値: %s" -#: plugins/sudoers/def_data.c:638 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "ユーザーが同時に走らせるプロセスの最大数: %s" -#: plugins/sudoers/def_data.c:642 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "プロセスが使用するメモリー(RSS)の最大値(バイト単位): %s" -#: plugins/sudoers/def_data.c:646 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "プロセスのスタックサイズの最大値(バイト単位): %s" -#: plugins/sudoers/def_data.c:650 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "非対話モードでも認証を試みる" -#: plugins/sudoers/def_data.c:654 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "I/Oログ入力に平分のパスワードを格納する" -#: plugins/sudoers/def_data.c:658 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "パスワードのプロンプトに一致するか調べる正規表現の一覧" -#: plugins/sudoers/defaults.c:193 -#, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: 未知のデフォルト項目 \"%s\" です" - -#: plugins/sudoers/defaults.c:242 -#, c-format -msgid "%s:%d:%d: no value specified for \"%s\"" -msgstr "%s:%d:%d: \"%s\" に値が指定されていません" - -#: plugins/sudoers/defaults.c:245 -#, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: \"%s\" に値が指定されていません" - -#: plugins/sudoers/defaults.c:258 -#, c-format -msgid "%s:%d:%d: invalid operator \"%c=\" for \"%s\"" -msgstr "%s:%d:%d: \"%c=\" は \"%s\" には無効な演算子です" - -#: plugins/sudoers/defaults.c:261 +#: plugins/sudoers/def_data.c:688 #, c-format -msgid "%s: invalid operator \"%c=\" for \"%s\"" -msgstr "%s: \"%c=\" は \"%s\" には無効な演算子です" +msgid "The mechanism used by the intercept and log_subcmds options: %s" +msgstr "インターセプトと log_subcmds オプションで使われるメカニズム: %s" -#: plugins/sudoers/defaults.c:297 -#, c-format -msgid "%s:%d:%d: option \"%s\" does not take a value" -msgstr "%s:%d:%d: オプション \"%s\" は値をとりません" - -#: plugins/sudoers/defaults.c:300 -#, c-format -msgid "%s: option \"%s\" does not take a value" -msgstr "%s: オプション \"%s\" は値をとりません" +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "コマンドと引数を実行後に検証することを試みます" -#: plugins/sudoers/defaults.c:328 +#: plugins/sudoers/def_data.c:696 #, c-format -msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d:%d: 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" +msgid "AppArmor profile to use in the new security context: %s" +msgstr "新しいセキュリティコンテキスト内で使用する AppArmor プロファイル: %s" -#: plugins/sudoers/defaults.c:331 +#: plugins/sudoers/defaults.c:191 #, c-format -msgid "%s: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s: 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" +msgid "unknown defaults entry \"%s\"" +msgstr "不明なデフォルト項目 \"%s\" です" -#: plugins/sudoers/defaults.c:341 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d:%d: \"%s\" はオプション \"%s\" の値としては無効です" +msgid "no value specified for \"%s\"" +msgstr "\"%s\" に値が指定されていません" -#: plugins/sudoers/defaults.c:344 +#: plugins/sudoers/defaults.c:243 #, c-format -msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: \"%s\" はオプション \"%s\" の値としては無効です" +msgid "invalid operator \"%c=\" for \"%s\"" +msgstr "\"%c=\" は \"%s\" には無効な演算子です" -#: plugins/sudoers/defaults.c:1161 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s:%d:%d: path name for \"%s\" too long" -msgstr "%s:%d:%d: \"%s\" のパス名が長すぎます" +msgid "option \"%s\" does not take a value" +msgstr "オプション \"%s\" は値をとりません" -#: plugins/sudoers/defaults.c:1164 +#: plugins/sudoers/defaults.c:299 #, c-format -msgid "%s: path name for \"%s\" too long" -msgstr "%s: \"%s\" のパス名が長すぎます" +msgid "invalid Defaults type 0x%x for option \"%s\"" +msgstr "0x%x はオプション \"%s\" のデフォルトタイプとして無効です" -#: plugins/sudoers/defaults.c:1175 +#: plugins/sudoers/defaults.c:306 #, c-format -msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" -msgstr "%s:%d:%d: \"%s\" の値は '/', '~', または '*' で開始しなければいけません" +msgid "value \"%s\" is invalid for option \"%s\"" +msgstr "\"%s\" はオプション \"%s\" の値としては無効です" -#: plugins/sudoers/defaults.c:1179 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" -msgstr "%s: \"%s\" の値は '/', '~', または '*' で開始しなければいけません" +msgid "path name for \"%s\" too long" +msgstr "\"%s\" のパス名が長すぎます" -#: plugins/sudoers/defaults.c:1190 +#: plugins/sudoers/defaults.c:1134 #, c-format -msgid "%s:%d:%d: values for \"%s\" must start with a '/'" -msgstr "%s:%d:%d: \"%s\" の値は '/' で開始しなければいけません" +msgid "values for \"%s\" must start with a '/', '~', or '*'" +msgstr "\"%s\" の値は '/', '~', または '*' で開始しなければいけません" -#: plugins/sudoers/defaults.c:1194 +#: plugins/sudoers/defaults.c:1141 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: \"%s\" の値は '/' で開始しなければいけません" +msgid "values for \"%s\" must start with a '/'" +msgstr "\"%s\" の値は '/' で開始しなければいけません" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp が破損しています。長さが合いません" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "環境を再構築できません" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "残念ですが、あなたは次の環境変数を設定することを許可されていません: %s" -#: plugins/sudoers/file.c:108 -#, c-format -msgid "parse error in %s near line %d" -msgstr "%s 内 %d 行付近で構文解析エラーが発生しました" - -#: plugins/sudoers/file.c:111 -#, c-format -msgid "parse error in %s" -msgstr "%s 内で構文解析エラーが発生しました" - #: plugins/sudoers/filedigest.c:49 #, c-format msgid "unsupported digest type %d for %s" @@ -2638,27 +2681,27 @@ msgstr "サポートされてない 認証方式 %d です: %s" msgid "%s: read error" msgstr "%s: 読み込みエラー" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "%s の所有者は uid %d でなければいけません" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "%s は所有者のみ書き込み可能でなければいけません" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "%s をロードできません: %su" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "%s 内にシンボル \"group_plugin\" がありません" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: 互換性のないグループプラグインメジャーバージョン %d です。予期されるのは %d です" @@ -2677,42 +2720,42 @@ msgstr "ネットマスク \"%s\" を解析できません" msgid "Local IP address and netmask pairs:\n" msgstr "ローカル IP アドレスとネットマスクの組:\n" -#: plugins/sudoers/iolog.c:681 +#: plugins/sudoers/iolog.c:685 msgid "unable to update sequence file" msgstr "シーケンスファイルを更新できません" -#: plugins/sudoers/iolog.c:715 plugins/sudoers/iolog.c:903 -#: plugins/sudoers/iolog.c:1065 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 -#: plugins/sudoers/iolog.c:1299 plugins/sudoers/iolog.c:1306 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "%s へ I/O ログを書き込むことができません" -#: plugins/sudoers/iolog.c:723 +#: plugins/sudoers/iolog.c:727 #, c-format msgid "unable to create %s/%s" msgstr "%s/%s を作成できません" -#: plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: 内部エラー、I/O イベント %d のログファイルを開けません" -#: plugins/sudoers/iolog.c:1050 plugins/sudoers/iolog.c:1178 -#: plugins/sudoers/iolog.c:1283 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:510 -#: plugins/sudoers/visudo.c:516 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "時刻を読み込むことができません" -#: plugins/sudoers/iolog.c:1275 plugins/sudoers/log_client.c:1221 -#: plugins/sudoers/log_client.c:1231 plugins/sudoers/log_client.c:1235 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: 内部エラー、無効なシグナル %d" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "starttls は ldaps を使用時にはサポートされていません" @@ -2726,16 +2769,16 @@ msgstr "SSL 証明書と鍵データベースを初期化できません: %s" msgid "you must set TLS_CERT in %s to use SSL" msgstr "SSL を使用するためには %s の中の TLS_CERT を設定する必要があります" -#: plugins/sudoers/ldap.c:1717 +#: plugins/sudoers/ldap.c:1712 #, c-format msgid "unable to initialize LDAP: %s" msgstr "LDAP を初期化できません: %s" -#: plugins/sudoers/ldap.c:1754 +#: plugins/sudoers/ldap.c:1749 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:1891 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "無効な sudoOrder 属性です: %s" @@ -2745,12 +2788,12 @@ msgstr "無効な sudoOrder 属性です: %s" msgid "%s: port too large" msgstr "%s: ポートが大き過ぎます" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "サポートされてない LDAP URI タイプです: %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap と ldaps の URI を混ぜて使用できません" @@ -2775,111 +2818,111 @@ msgstr "監査システムを開くことができません" msgid "unable to send audit message" msgstr "監査メッセージを送ることができません" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:400 -#: plugins/sudoers/log_client.c:1468 plugins/sudoers/log_client.c:2069 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "イベントループでエラーが発生しました" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "新しい SSL_CTX オブジェクトの作成に失敗しました: %s" -#: plugins/sudoers/log_client.c:223 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "認証局の証明書バンドル %s をロードできません" -#: plugins/sudoers/log_client.c:243 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "証明書 %s をロードできません" -#: plugins/sudoers/log_client.c:256 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "プライベート鍵を読み込めません: %s" -#: plugins/sudoers/log_client.c:265 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "SSLオブジェクトを割り当てることができません: %s" -#: plugins/sudoers/log_client.c:353 plugins/sudoers/log_client.c:358 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "%s:%s へのTLS接続に失敗しました: %s" -#: plugins/sudoers/log_client.c:531 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "TLS 初期化が成功しませんでした" -#: plugins/sudoers/log_client.c:541 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "TLS ハンドシェイクが成功しませんでした" -#: plugins/sudoers/log_client.c:1239 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: 内部エラー、無効な終了コード %d" -#: plugins/sudoers/log_client.c:1608 -msgid "unable to unpack ServerMessage" -msgstr "ServerMessage を展開できません" - -#: plugins/sudoers/log_client.c:1763 plugins/sudoers/log_client.c:1787 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "ログサーバーへの接続が失われました" -#: plugins/sudoers/log_client.c:1864 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "書き込みバッファが失われました" -#: plugins/sudoers/log_client.c:2010 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "ログサーバーに接続できません" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "ユーザーが sudoers 内にありません" -#: plugins/sudoers/logging.c:290 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "ホスト上でユーザーが認証されていません" -#: plugins/sudoers/logging.c:292 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "コマンドが許可されていません" -#: plugins/sudoers/logging.c:313 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "%s は sudoers ファイルにありません。\n" -#: plugins/sudoers/logging.c:316 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "%s は %s 上で sudo を実行することを許可されていません。\n" -#: plugins/sudoers/logging.c:319 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "残念ですが、ユーザー %s は %s 上で sudo を実行できません。\n" -#: plugins/sudoers/logging.c:322 +#: plugins/sudoers/logging.c:324 #, 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:359 plugins/sudoers/sudoers.c:629 -#: plugins/sudoers/sudoers.c:631 plugins/sudoers/sudoers.c:633 -#: plugins/sudoers/sudoers.c:635 plugins/sudoers/sudoers.c:785 -#: plugins/sudoers/sudoers.c:787 +#: plugins/sudoers/logging.c:334 +msgid "This incident has been reported to the administrator.\n" +msgstr "この出来事は管理者宛てに報告されました。\n" + +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s: コマンドが見つかりません" -#: plugins/sudoers/logging.c:361 plugins/sudoers/sudoers.c:625 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2888,39 +2931,45 @@ msgstr "" "'.' 内で見つかった \"%1$s\" を無視します\n" "この \"%3$s\" を実行したい場合は \"sudo ./%2$s\" を使用してください。" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u 回パスワード試行を間違えました" -#: plugins/sudoers/logging.c:436 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "認証失敗" -#: plugins/sudoers/logging.c:476 plugins/sudoers/logging.c:496 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "パスワードが必要です" -#: plugins/sudoers/logging.c:890 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 +msgid "problem parsing sudoers" +msgstr "sudoers を構文解析する時に起きた問題" + +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 +#, c-format +msgid "%s:%d:%d: %s" +msgstr "%s:%d:%d: %s" + +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "%s へログを書き込むことができません" -#: plugins/sudoers/match_digest.c:129 +#: plugins/sudoers/match_digest.c:112 #, c-format -msgid "digest for %s (%s) is not in %s form" -msgstr "%s (%s) の認証方式は %s 形式ではありません" - -#: plugins/sudoers/parse.c:233 -msgid "SELinux RBAC is not supported when intercept mode is enabled" -msgstr "SELinux RBAC はインターセプトモードが有効になっているときにはサポートされません" +msgid "digest for %s (%s) bad length %zu, expected %zu" +msgstr "%s (%s) のハッシュの長さが %zu で、 予期される %zu ではありません" -#: plugins/sudoers/parse.c:238 -msgid "SELinux RBAC is not supported when the log_subcmds flag is enabled" -msgstr "SELinux RBAC はlog_subcmds フラグが有効になっているときにはサポートされません" +#: plugins/sudoers/match_digest.c:131 +#, c-format +msgid "digest for %s (%s) is not in %s form" +msgstr "%s (%s) のハッシュは %s 形式ではありません" -#: plugins/sudoers/parse.c:549 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2929,7 +2978,7 @@ msgstr "" "\n" "LDAP 役割: %s\n" -#: plugins/sudoers/parse.c:552 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2937,115 +2986,110 @@ msgstr "" "\n" "sudoers 項目:\n" -#: plugins/sudoers/parse.c:554 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:569 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:579 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " オプション: " -#: plugins/sudoers/parse.c:643 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " コマンド:\n" -#: plugins/sudoers/parse.c:834 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "既定値のエントリと照合中 (ユーザー名 %s) (ホスト名 %s):\n" -#: plugins/sudoers/parse.c:852 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "ユーザー %s 用の Runas およびコマンド特有のデフォルト:\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "ユーザー %s は %s 上で コマンドを実行できます\n" -#: plugins/sudoers/parse.c:885 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "ユーザー %s は %s 上で sudo を実行することを許可されていません。\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "不完全な sudoRole: cn: %s を無視します" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "無効な LDIF 属性です: %s" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "無効な %.*s が sudo のフロントエンドで設定されています" -#: plugins/sudoers/policy.c:206 plugins/sudoers/policy.c:215 -#, c-format -msgid "path name for \"%s\" too long" -msgstr "\"%s\" のパス名が長すぎます" - -#: plugins/sudoers/policy.c:328 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "ネットワークのアドレスリストを解析できません" -#: plugins/sudoers/policy.c:485 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "ユーザー名が sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:489 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "ユーザーIDが sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:493 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "グループIDが sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:497 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "ホスト名が sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:670 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "無効な作業ディレクトリ: %s" -#: plugins/sudoers/policy.c:846 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "無効な chroot ディレクトリ: %s" -#: plugins/sudoers/policy.c:1025 plugins/sudoers/visudo.c:243 -#: plugins/sudoers/visudo.c:880 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "%s を実行できません" -#: plugins/sudoers/policy.c:1095 plugins/sudoers/policy.c:1132 -#: plugins/sudoers/policy.c:1154 plugins/sudoers/policy.c:1180 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: 無効なモードフラグが sudo のフロントエンドで指定されています: 0x%x" -#: plugins/sudoers/policy.c:1211 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "sudoers ポリシープラグイン バージョン %s\n" -#: plugins/sudoers/policy.c:1213 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "sudoers ファイル文法バージョン %d\n" -#: plugins/sudoers/policy.c:1217 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -3054,27 +3098,27 @@ msgstr "" "\n" "sudoers のパス: %s\n" -#: plugins/sudoers/policy.c:1220 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch のパス: %s\n" -#: plugins/sudoers/policy.c:1222 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf のパス: %s\n" -#: plugins/sudoers/policy.c:1223 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret のパス: %s\n" -#: plugins/sudoers/policy.c:1256 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "タイプ %d のフックを登録できません (バージョン %d.%d)" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "タイプ %d のフックを登録解除できません (バージョン %d.%d)" @@ -3213,149 +3257,142 @@ msgstr "SSS のソースを初期化できません。SSSD はあなたのマシ msgid "unable to find symbol \"%s\" in %s" msgstr "シンボル \"%s\" が %s 内にありません" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/sudoers.c:174 -#: plugins/sudoers/sudoers.c:228 plugins/sudoers/sudoers.c:249 -#: plugins/sudoers/sudoers.c:1049 -msgid "problem with defaults entries" -msgstr "デフォルト項目で問題が発生しました" +#: plugins/sudoers/sudoers.c:263 +#, c-format +msgid "unable to get defaults from %s" +msgstr "%s から既定値を取得できません" -#: plugins/sudoers/sudoers.c:253 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "有効な sudoers のソースが見つかりません。終了します" -#: plugins/sudoers/sudoers.c:327 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "ユーザーはルートディレクトリを %s に変更できません" -#: plugins/sudoers/sudoers.c:329 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "-R オプションを %s と共に使用することは許可されていません" -#: plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "ユーザーはディレクトリを %s に変更できません" -#: plugins/sudoers/sudoers.c:355 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "-D オプションを %s と共に使用することは許可されていません" -#: plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "コマンドが指定されていません" -#: plugins/sudoers/sudoers.c:407 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers の指定により root が sudo を使用することは禁止されています" -#: plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "ユーザーが closefrom 制限をオーバーライドすることは許されていません" -#: plugins/sudoers/sudoers.c:458 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "-C オプションを使用することは許可されていません" -#: plugins/sudoers/sudoers.c:518 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "タイムスタンプの所有者 (%s): そのようなユーザーはありません" -#: plugins/sudoers/sudoers.c:533 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "tty がありません" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "残念ですが、sudo を実行するには tty が必要です" -#: plugins/sudoers/sudoers.c:541 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "ユーザー %s には無効な シェル: %s" -#: plugins/sudoers/sudoers.c:624 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "コマンドがカレントディレクトリにあります" -#: plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "\"cd\" はシェルの内蔵コマンドで、直接実行できません。" -#: plugins/sudoers/sudoers.c:641 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "権限を昇格したシェルを実行するために -s オプションが使われることがあります。" -#: plugins/sudoers/sudoers.c:643 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "コマンドを実行するディレクトリを指定するために -D オプションを使うことができます。" -#: plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "ユーザーはコマンド実行の制限時間を設定することを許可されていません" -#: plugins/sudoers/sudoers.c:654 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "残念ですが、あなたはコマンド実行の制限時間を設定することを許可されていません" -#: plugins/sudoers/sudoers.c:662 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "ユーザーは環境変数を保存することを許可されていません" -#: plugins/sudoers/sudoers.c:664 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "残念ですが、あなたは環境変数を保存することを許可されていません" -#: plugins/sudoers/sudoers.c:1037 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit の実行に sudo を使用する必要はありません" -#: plugins/sudoers/sudoers.c:1096 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "%s を読み込めません" -#: plugins/sudoers/sudoers.c:1121 plugins/sudoers/visudo.c:449 -#: plugins/sudoers/visudo.c:748 -#, c-format -msgid "unable to stat %s" -msgstr "%s の状態取得 (stat) ができません" - -#: plugins/sudoers/sudoers.c:1125 plugins/sudoers/visudo.c:1045 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s は通常ファイルではありません" -#: plugins/sudoers/sudoers.c:1129 plugins/sudoers/timestamp.c:252 toke.l:1239 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s はユーザーID %u によって所有されています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:1133 toke.l:1244 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "%s は誰でも書き込み可能です" -#: plugins/sudoers/sudoers.c:1137 toke.l:1247 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s のグループIDは %u になっています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:1170 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "root のみ \"-c %s\" を使用できます" -#: plugins/sudoers/sudoers.c:1189 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "不明なログインクラス %s" -#: plugins/sudoers/sudoers.c:1275 plugins/sudoers/sudoers.c:1290 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "ホスト %s の名前解決ができません" @@ -3453,17 +3490,17 @@ msgstr "末尾に \"!\" を配置できません" msgid "unknown search type %d" msgstr "未知の検索タイプ %d" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "使用法: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "使用法: %s [-h] [-d dir] -l [search expression]\n" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -3472,7 +3509,7 @@ msgstr "" "%s - sudo セッションログをリプレイします\n" "\n" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3528,132 +3565,122 @@ msgstr "" "\n" "コマンドが一致しませんでした" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s はグループのメンバーによる書き込みが可能です" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "タイムスタンプファイルを %lld バイトに切り詰めることができません" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "未来の時刻のタイムスタンプを無視します" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "タイムスタンプが遠すぎる将来になっています: %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "タイムスタンプファイル %s をロックすることができません" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "受講状況格納パスが長すぎます: %s/%s" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "sudoedit はパスなしで設定するべきです" -#: plugins/sudoers/visudo.c:238 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "-x オプションは将来のリリースでは削除されます" -#: plugins/sudoers/visudo.c:240 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "cvtsudoers ユーティリティーを代わりに使用することを検討してください" -#: plugins/sudoers/visudo.c:292 plugins/sudoers/visudo.c:676 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "%s を編集するためにリターンを押してください: " -#: plugins/sudoers/visudo.c:307 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "編集セッションの内容が %s 内に残っています" -#: plugins/sudoers/visudo.c:361 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "指定したエディター (%s) が存在しません" -#: plugins/sudoers/visudo.c:363 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "エディターが見つかりません (エディターのパス = %s)" -#: plugins/sudoers/visudo.c:469 plugins/sudoers/visudo.c:477 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "%s の状態取得 (stat) ができません" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "書き込みエラーです" -#: plugins/sudoers/visudo.c:523 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の状態取得 (stat) ができません。%s は変更されません" -#: plugins/sudoers/visudo.c:530 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の大きさが 0 です。%s は変更されません" -#: plugins/sudoers/visudo.c:536 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "エディター (%s) が異常終了しました。%s は変更されません" -#: plugins/sudoers/visudo.c:558 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s は変更されません" -#: plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "一時ファイル (%s) を再度開くことができません。%s は変更されません。" -#: plugins/sudoers/visudo.c:627 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "一時ファイル (%s) の構文解析ができません。不明なエラーです" -#: plugins/sudoers/visudo.c:665 -#, c-format -msgid "internal error, unable to find %s in list!" -msgstr "内部エラー、リスト内に %s が見つかりません!" - -#: plugins/sudoers/visudo.c:722 plugins/sudoers/visudo.c:752 -#: plugins/sudoers/visudo.c:759 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "%s の (ユーザーID, グループID) を (%u, %u) に設定できません" -#: plugins/sudoers/visudo.c:787 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s と %s は同じファイルシステム上にありません。名前を変更するために mv を使用しています" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "コマンドの失敗です: '%s %s %s'。%s は変更されません" -#: plugins/sudoers/visudo.c:805 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "%s の名前変更に失敗しました。%s は変更されません" -#: plugins/sudoers/visudo.c:825 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "次は何でしょうか? " -#: plugins/sudoers/visudo.c:839 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3665,41 +3692,41 @@ msgstr "" " x -- sudoers ファイルへの変更を保存せずに終了します\n" " Q -- sudoers ファイルへの変更を保存して終了します (*危険です!*)\n" -#: plugins/sudoers/visudo.c:885 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "%s を実行できません" -#: plugins/sudoers/visudo.c:916 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: 所有権に誤りがあります。(ユーザーID, グループID) は (%u, %u) であるべきです\n" -#: plugins/sudoers/visudo.c:927 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: アクセス権限に誤りがあります。モードは 0%o であるべきです\n" -#: plugins/sudoers/visudo.c:978 plugins/sudoers/visudo.c:985 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s: 正しく構文解析されました\n" -#: plugins/sudoers/visudo.c:1004 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s がビジー状態です。後で再試行してください" -#: plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "それでも編集しますか? [y/N]" -#: plugins/sudoers/visudo.c:1104 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "警告: %s:%d:%d: エイリアス %s \"%s\" は使用されていません" -#: plugins/sudoers/visudo.c:1220 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3708,13 +3735,14 @@ msgstr "" "%s - sudoers ファイルを安全に編集する\n" "\n" -#: plugins/sudoers/visudo.c:1222 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" @@ -3724,6 +3752,7 @@ msgstr "" " -c, --check 検査のみを行う\n" " -f, --file=sudoers sudoers ファイルの位置を指定する\n" " -h, --help ヘルプメッセージを表示して終了する\n" +" -I, --no-includes include ファイルを編集しない\n" " -q, --quiet 文法エラーメッセージをより少なく (静かに) する\n" " -s, --strict 厳密な文法検査を行う\n" " -V, --version バージョン情報を表示して終了する\n" @@ -3752,14 +3781,83 @@ msgstr "無効な行の継続" msgid "invalid IPv6 address" msgstr "無効な IPv6 アドレス" -#: toke.l:860 +#: toke.l:868 msgid "unexpected line break in string" msgstr "文字列の予期せぬところに改行" -#: toke.l:1210 +#: toke.l:1218 msgid "too many levels of includes" msgstr "インクルードの階層が大きすぎます" +#~ msgid "%s is group writable" +#~ msgstr "%s はグループのメンバーによる書き込みが可能です" + +#~ msgid "lecture status path too long: %s/%s" +#~ msgstr "受講状況格納パスが長すぎます: %s/%s" + +#~ msgid "Error: %s:%d:%d: cycle in %s \"%s\"" +#~ msgstr "エラー: %s:%d:%d: %s \"%s\" でエイリアス定義が循環しています" + +#~ msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" +#~ msgstr "警告: %s:%d:%d: %s \"%s\" でエイリアス定義が循環しています" + +#~ msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" +#~ msgstr "警告: %s:%d:%d: %s \"%s\" は参照されているのに定義されていません" + +#~ msgid "parse error in %s near line %d\n" +#~ msgstr "%s 内 %d 行付近で構文解析エラーが発生しました\n" + +#~ msgid "parse error in %s\n" +#~ msgstr "%s 内で構文解析エラーが発生しました\n" + +#~ msgid "%s: unknown defaults entry \"%s\"" +#~ msgstr "%s: 未知のデフォルト項目 \"%s\" です" + +#~ msgid "%s:%d:%d: no value specified for \"%s\"" +#~ msgstr "%s:%d:%d: \"%s\" に値が指定されていません" + +#~ msgid "%s:%d:%d: invalid operator \"%c=\" for \"%s\"" +#~ msgstr "%s:%d:%d: \"%c=\" は \"%s\" には無効な演算子です" + +#~ msgid "%s:%d:%d: option \"%s\" does not take a value" +#~ msgstr "%s:%d:%d: オプション \"%s\" は値をとりません" + +#~ msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" +#~ msgstr "%s:%d:%d: 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" + +#~ msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" +#~ msgstr "%s:%d:%d: \"%s\" はオプション \"%s\" の値としては無効です" + +#~ msgid "%s:%d:%d: path name for \"%s\" too long" +#~ msgstr "%s:%d:%d: \"%s\" のパス名が長すぎます" + +#~ msgid "%s: path name for \"%s\" too long" +#~ msgstr "%s: \"%s\" のパス名が長すぎます" + +#~ msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" +#~ msgstr "%s:%d:%d: \"%s\" の値は '/', '~', または '*' で開始しなければいけません" + +#~ msgid "%s:%d:%d: values for \"%s\" must start with a '/'" +#~ msgstr "%s:%d:%d: \"%s\" の値は '/' で開始しなければいけません" + +#~ msgid "parse error in %s near line %d" +#~ msgstr "%s 内 %d 行付近で構文解析エラーが発生しました" + +#~ msgid "parse error in %s" +#~ msgstr "%s 内で構文解析エラーが発生しました" + +#~ msgid "SELinux RBAC is not supported when intercept mode is enabled" +#~ msgstr "SELinux RBAC はインターセプトモードが有効になっているときにはサポートされません" + +#~ msgid "SELinux RBAC is not supported when the log_subcmds flag is enabled" +#~ msgstr "SELinux RBAC はlog_subcmds フラグが有効になっているときにはサポートされません" + +#~ msgid "problem with defaults entries" +#~ msgstr "デフォルト項目で問題が発生しました" + +#~ msgid "internal error, unable to find %s in list!" +#~ msgstr "内部エラー、リスト内に %s が見つかりません!" + #~ msgid "%s is not in the sudoers file. This incident will be reported.\n" #~ msgstr "%s は sudoers ファイル内にありません。この事象は記録・報告されます。\n" @@ -3772,9 +3870,6 @@ msgstr "インクルードの階層が大きすぎます" #~ msgid "unable to read diffie-hellman parameters: %s" #~ msgstr "ディフィー・ヘルマン パラメーターを読み込めません: %s" -#~ msgid "unknown defaults entry \"%s\"" -#~ msgstr "不明なデフォルト項目 \"%s\" です" - #~ msgid "%s:%d unknown key: %s" #~ msgstr "%s:%d 未知の鍵: %s" @@ -3888,9 +3983,6 @@ msgstr "インクルードの階層が大きすぎます" #~ "\n" #~ "SSSD 役割: 不明\n" -#~ msgid "Warning: cycle in %s `%s'" -#~ msgstr "警告: 循環を発見 %s `%s'" - #~ msgid "Warning: unused %s `%s'" #~ msgstr "警告: 使われていません %s `%s'" diff --git a/plugins/sudoers/po/ko.mo b/plugins/sudoers/po/ko.mo index 8f2c00fef41dd9ef5b75237c7a07df9ed63db721..a02c73f26a015ec9cf2f1b0f9f67ca9229f8b34d 100644 GIT binary patch delta 16262 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 YyHB19E0$OBsgO-4{>bqvK4)|N7gY!|c>n+a delta 15120 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 diff --git a/plugins/sudoers/po/ko.po b/plugins/sudoers/po/ko.po index e371b1f644..5d2b063ffd 100644 --- a/plugins/sudoers/po/ko.po +++ b/plugins/sudoers/po/ko.po @@ -5,21 +5,21 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.11b1\n" +"Project-Id-Version: sudoers 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 21:00+0900\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-12 12:18+0900\n" "Last-Translator: Seong-ho Cho \n" "Language-Team: Korean \n" "Language: ko\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=1; plural=0;\n" -"X-Generator: Poedit 2.3.1\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 3.1.1\n" -#: confstr.sh:1 gram.y:1218 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "문법 오류" @@ -43,13 +43,13 @@ msgstr "*** %h 보안 알림 ***" msgid "Sorry, try again." msgstr "죄송합니다만, 다시 시도하십시오." -#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 -#: gram.y:365 gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 -#: gram.y:501 gram.y:511 gram.y:523 gram.y:571 gram.y:580 gram.y:589 -#: gram.y:598 gram.y:730 gram.y:738 gram.y:749 gram.y:761 gram.y:780 -#: gram.y:943 gram.y:948 gram.y:956 gram.y:970 gram.y:976 gram.y:1098 -#: gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 gram.y:1162 gram.y:1171 -#: gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 gram.y:1816 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 #: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 @@ -59,50 +59,64 @@ msgstr "죄송합니다만, 다시 시도하십시오." #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 -#: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:168 plugins/sudoers/cvtsudoers.c:131 -#: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 -#: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 -#: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:862 -#: plugins/sudoers/cvtsudoers.c:870 plugins/sudoers/cvtsudoers.c:1365 -#: plugins/sudoers/cvtsudoers.c:1369 plugins/sudoers/cvtsudoers.c:1471 -#: plugins/sudoers/cvtsudoers_csv.c:183 plugins/sudoers/cvtsudoers_csv.c:246 -#: 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:376 -#: plugins/sudoers/cvtsudoers_ldif.c:430 plugins/sudoers/cvtsudoers_ldif.c:438 -#: plugins/sudoers/cvtsudoers_ldif.c:449 plugins/sudoers/cvtsudoers_ldif.c:456 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:481 -#: plugins/sudoers/cvtsudoers_ldif.c:489 plugins/sudoers/cvtsudoers_ldif.c:636 -#: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 +#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 +#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 #: plugins/sudoers/cvtsudoers_merge.c:446 @@ -112,11 +126,11 @@ msgstr "죄송합니다만, 다시 시도하십시오." #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1158 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -125,124 +139,125 @@ msgstr "죄송합니다만, 다시 시도하십시오." #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 -#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 -#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 -#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 -#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 -#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 -#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 -#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 -#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 -#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 -#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 -#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 -#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 -#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 -#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 -#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 -#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 -#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 -#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 -#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 #: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 #: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 #: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 #: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 #: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "메모리를 할당할 수 없습니다" -#: gram.y:622 +#: gram.y:623 msgid "a digest requires a path name" msgstr "다이제스트에 경로 이름이 필요합니다" -#: gram.y:644 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "%s: \"CWD\" 값은 '/'; '~'; '*' 문자로 시작해야합니다" -#: gram.y:650 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "\"CWD\" 경로가 너무 깁니다" -#: gram.y:660 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "%s: \"CHROOT\" 값은 '/'; '~'; '*' 문자로 시작해야합니다" -#: gram.y:666 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "\"CHROOT\" 경로가 너무 깁니다" -#: gram.y:801 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "문법 오류. %s 예약어를 별칭으로 썼습니다" -#: gram.y:824 +#: gram.y:825 msgid "invalid notbefore value" msgstr "부적절한 notbefore 값" -#: gram.y:833 +#: gram.y:834 msgid "invalid notafter value" msgstr "부적절한 notafter 값" -#: gram.y:843 plugins/sudoers/policy.c:376 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "제한 시간 값이 너무 큽니다" -#: gram.y:845 plugins/sudoers/policy.c:378 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "부적절한 제한 시간 값" -#: gram.y:966 plugins/sudoers/sudoers.c:1014 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "명령이 너무 깁니다" -#: gram.y:1220 plugins/sudoers/check_aliases.c:96 -#: plugins/sudoers/defaults.c:1275 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1270 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "\"%s\" 별칭을 이미 정의했습니다" -#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 #: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 #: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 @@ -252,33 +267,48 @@ msgstr "\"%s\" 별칭을 이미 정의했습니다" #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 -#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 @@ -308,11 +338,11 @@ msgstr "\"%s\" 별칭을 이미 정의했습니다" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1157 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -321,46 +351,47 @@ msgstr "\"%s\" 별칭을 이미 정의했습니다" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 -#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 -#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 -#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 -#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 -#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 -#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 -#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 -#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 -#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: 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:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 -#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 -#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 -#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 -#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 -#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 -#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 #: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 -#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -373,25 +404,25 @@ msgstr "\"%s\" 별칭을 이미 정의했습니다" #: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 #: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 #: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 -#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 -#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 -#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 -#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 -#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 -#: toke.l:1226 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 +#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -400,14 +431,14 @@ msgstr "%s: %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 #: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 #: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 -#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 -#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 #: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 #: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 @@ -450,7 +481,7 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (명령 계속 실행) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -565,14 +596,14 @@ msgstr "%s: 실행 그룹 필드가 빠졌습니다" msgid "%s exists but is not a directory (0%o)" msgstr "%s이(가) 있지만 디렉터리가 아닙니다(0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "mkdir %s 명령을 실행할 수 없습니다" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 -#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "%s 모드를 0%o 값으로 바꿀 수 없습니다" @@ -587,150 +618,156 @@ msgstr "타이밍 파일 읽기 오류: %s" msgid "invalid timing file line: %s" msgstr "부적절한 타이밍 파일 행: %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 -#: plugins/sudoers/policy.c:573 -msgid "unable to generate UUID" -msgstr "UUID를 만들 수 없습니다" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s: 프로토콜 오류: NULL키" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "%s: 프로토콜 오류: %s의 잘못된 형식" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s: 프로토콜 오류: %s에 NULL값 들어감" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "UUID를 만들 수 없습니다" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "%s: 프로토콜 오류: AcceptMessage에 %s 빠짐" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "%s: 세션 ID를 포매팅할 수 없습니다" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "%s: %s을(를) 설정하지 않음" -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "%s 입출력 로그 경로를 확장할 수 없습니다" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "%s 입출력 로그 경로를 만들 수 없습니다" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "부적절한 입출력 파일 서술자 %d번" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "%d 입출력 파일 서술자 닫기 오류: %s" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "%d 입출력 파일 서술자 제거 오류: %s" -#: logsrvd/iolog_writer.c:780 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "부적절한 %s 입출력 로그: %s을(를) 참조했지만 없습니다" -#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s: [%lld, %ld] 재개 지점을 찾을 수 없습니다" -#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 -#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 #: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 -#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 -#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "%s을(를) 열 수 없습니다" -#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "%s/%s을(를) 열 수 없습니다" -#: logsrvd/iolog_writer.c:839 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "%s/%s을(를) %s/%s(으)로 복사할 수 없습니다: %s" -#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "%s을(를) %s(으)로 이름을 바꿀 수 없습니다" -#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s: [%lld, %ld] 재개 지점을 찾을 수 없습니다" -#: logsrvd/logsrv_util.c:154 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "입출력 로그 파일 %s/%s 빠짐" -#: logsrvd/logsrv_util.c:161 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: %zu회 이전 탐색을 진행할 수 없습니다" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "릴레이에 연결할 수 없습니다" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "서버 메시지가 너무 깁니다: %zu" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 -#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 -#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 -#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 -#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 -#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 -#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 -#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 -#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 -#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 -#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 -#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -739,633 +776,658 @@ msgstr "서버 메시지가 너무 깁니다: %zu" msgid "unable to add event to queue" msgstr "큐에 이벤트를 추가할 수 없습니다" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "%2$s의 예기치 않은 상태 %1$d번" -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "상태 머신 오류" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "부적절한 AcceptMessage" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "부적절한 RejectMessage" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "부적절한 ExitMessage" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "부적절한 RestartMessage" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "부적절한 AlertMessage" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "%s: 예기치 않은 입출력 버퍼 발견" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "프로토콜 오류" -#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 -#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 -#: plugins/sudoers/log_client.c:1618 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "부적절한 IoBuffer" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "부적절한 ChangeWindowSize" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "부적절한 CommandSuspend" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 #, c-format msgid "unable to unpack %s size %zu" msgstr "%2$zu 크기의 %1$s을(를) 언팩할 수 없습니다" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "%3$s의 %2$s에서 예기지 않은 type_case 값 %1$d" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "인식할 수 없는 ClientMessage 형식" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "%s 클라이언트 기록 시간 초과" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "%s 클라이언트에서 기록 버퍼 빠짐" -#: logsrvd/logsrvd.c:982 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "%s 클라이언트에서 읽기 시간 초과" -#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "적절한 TLS 셧다운 미이행을 동반한 %s의 파일끝(EOF)" -#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:716 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "클라이언드 메시지가 너무 깁니다: %zu" -#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "클라이언트 메시지가 너무 깁니다" -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "부적절한 ClientMessage" -#: logsrvd/logsrvd.c:1389 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "원격 IP 주소를 가져올 수 없습니다" -#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 -#: plugins/sudoers/log_client.c:276 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "ssl 객체에 사용자 데이터를 붙일 수 없습니다: %s" -#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "감청 소켓을 설정할 수 없습니다" -#: logsrvd/logsrvd.c:1718 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "예기치 않은 시그널 %d번" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "sudo 로그 서버" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "옵션:" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "설정 파일 경로" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "도움말 메시지를 표시한 후 빠져나갑니다" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "프로세스를 포킹하지 않고, 포그라운드에서 실행" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "연결이 끊을 확률에 대한 백분율" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "버전 정보를 표시하고 빠져나갑니다" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C 1.3 이상의 버전이 필요합니다" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "부적절한 임의 철회 값: %s" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:180 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s 버전 %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 #: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 -#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "알 수 없는 사용자 %s" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 -#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "알 수 없는 그룹 %s" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "%s 입출력 로그 모드를 해석할 수 없습니다" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "부적절한 %s 값: %s" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "TLS를 지원하지 않습니다" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: 완전하지 않은 경로" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "알 수 없는 syslog 수단 %s" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "알 수 없는 syslog 우선 순위 %s" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d 일치하지 않는 '[': %s" -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "%s:%d ']' 다음 버리는 내용: %s" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d 부적절한 설정 섹션: %s" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d 부적절한 설정 행: %s" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d(에)서 섹션 이름이 나와야 합니다: %s" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] 잘못된 키: %s" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:1035 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "%s 로그 파일을 열 수 없습니다" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "서버 TLS 컨텍스트를 초기화할 수 없습니다" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "릴레이 TLS 컨텍스트를 초기화할 수 없습니다" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 -#: logsrvd/logsrvd_journal.c:416 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "저널 파일을 만들 수 없습니다" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1020 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "%s을(를) 잠글 수 없습니다" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "저널 파일을 잠글 수 없습니다" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "저널 파일을 열 수 없습니다" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 -#: logsrvd/logsrvd_journal.c:452 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "저널 파일을 기록할 수 없습니다" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "저널 파일 이름을 바꿀 수 없습니다" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "저널 파일 읽는 중 예기치 않은 파일 끝 발견" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "저널 파일 읽기 오류" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "부적절한 저널 파일. 다시 시작할 수 없습니다" -#: logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "%3$s 저널 파일에서 [%1$lld, %2$ld] 위치를 탐색할 수 없습니다" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "%3$s의 %2$s에서 예기지 않은 value_case 값 %1$d" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "AcceptMessage 해석 오류" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "입출력 로그 만드는 중 오류" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "수락 이벤트 로깅 중 오류" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "RejectMessage 해석 오류" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "거절 이벤트 로깅 중 오류" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "끝내기 이벤트 기록 오류" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "로그를 이미 끝냈으며, 다시 시작할 수 없습니다" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "로그를 다시 시작할 수 없습니다" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "AlertMessage 해석 오류" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "경고 이벤트 로깅 중 오류" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "길이 %d인 타이밍 버퍼를 포매팅할 수 없습니다" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "연결이 임의로 끊김" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "입출력 버퍼 기록 중 오류" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "ChangeWindowSize 기록 중 오류" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "CommandSuspend 기록 중 오류" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "릴레이 호스트와의 TLS 핸드 셰이크 실패" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "릴레이 호스트에 연결할 수 없습니다" -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "%s: 부적절한 ServerHello, server_id가 빠졌습니다" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1504 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "부적절한 ServerHello" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "인식할 수 없는 ServerMessage 형식" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "릴레이 %s에서 읽기 시간 초과 (%s)" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "릴레이 데이터 읽기 시간 초과" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "릴레이 호스트 이름이 인증서와 일치하지 않습니다" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 -#: logsrvd/logsrvd_relay.c:784 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "릴레이 데이터 읽는 중 오류" -#: logsrvd/logsrvd_relay.c:805 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "릴레이 데이터를 읽을 수 없습니다" -#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "릴레이 서버 연결을 끊었습니다" -#: logsrvd/logsrvd_relay.c:838 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "서버 메시지가 너무 깁니다" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "릴레이 %s에 기록 시간 초과 (%s)" -#: logsrvd/logsrvd_relay.c:904 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "릴레이 기록 시간 초과" -#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 -#: logsrvd/logsrvd_relay.c:974 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "릴레이 기록 중 오류" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "원격 서버에 sudo 입출력 로그를 보냅니다" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "허용 이벤트만 보냅니다 (입출력 안함)" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "서버의 인증서 검증에 활용할 인증서 번들 파일" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "TLS 암호 키 교환에 사용할 인증서 파일" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "로그를 보낼 호스트" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "다시 진행할 입출력 로그의 원격 ID" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "개인 키 파일" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "서버 인증서를 검증하지 않습니다" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "호스트에 연결할 때 활용할 포트 번호" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "이전 입출력 로그 전송을 다시 시작합니다" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "주어진 사유로 명령 실행을 거절합니다" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "이 시간에 도달한 후 전송 중단" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "선택한 입출력 로그를 동시에 N번 보내어 감사 서버 시험" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "%s:%s을(를) 찾을 수 없습니다: %s" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "서버 IP 주소를 가져올 수 없습니다" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "%s/%s을(를) 읽을 수 없습니다: %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 -#: plugins/sudoers/iolog.c:1024 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "예기치 않은 입출력 이벤트 %d" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 -#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: 예기치 않은 상태 번호 %d" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "서버로부터 오류 메시지를 받았습니다: %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "서버로부터 중단 메시지를 받았습니다: %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: 예기지 않은 type_case 값 %d" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "서버 데이터 읽기 시간 초과" -#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 msgid "host name does not match certificate" msgstr "호스트 이름이 인증서와 일치하지 않습니다" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "갑작스러운 EOF" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "서버 메시지가 너무 깁니다: %u" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "서버 기록 시간 초과" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "다시 시작 지점과 입출력 로그 ID를 반드시 지정해야합니다" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "입출력을 보내지 않을 때 다시 시작 지점을 지정하지 않습니다" -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "%d 상태로 갑자기 빠져나왔습니다" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "경과 시간을 서버로 보냈습니다 [%lld, %ld]" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "제출 지점 정보를 서버로부터 받았습니다 [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "TLS 핸드셰이크 시간을 초과했습니다" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "이벤트를 설정할 수 없습니다" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "TLS 연결 실패: %s" -#: logsrvd/tls_client.c:191 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "SSL 객체를 할당할 수 없습니다: %s" -#: logsrvd/tls_client.c:205 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "SSL 객체에 소켓을 붙일 수 없습니다: %s" -#: logsrvd/tls_client.c:233 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "TLS 컨텍스트를 초기화할 수 없습니다" -#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "%s에 TLS 1.2 암호 모음을 설정할 수 없습니다: %s" -#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "%s에 TLS 1.3 암호 모음을 설정할 수 없습니다: %s" -#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "디피-헬먼 매개변수를 설정할 수 없습니다: %s" -#: logsrvd/tls_init.c:277 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "TLS 컨텍스트를 만들 수 없습니다: %s" -#: logsrvd/tls_init.c:284 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "TLS 프로토콜 최소 버전을 1.2로 설정할 수 없습니다: %s" -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 -#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 -#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 -#: plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "일시 정보를 가져올 수 없습니다" @@ -1502,7 +1564,7 @@ msgstr "계정 기한이 지났거나 PAM 설정에 sudo에서 확인할 \"accou msgid "PAM account management error: %s" msgstr "PAM 계정 관리 오류: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "%s 데이터베이스에 없습니다" @@ -1575,17 +1637,17 @@ msgstr "감사 상태를 결정할 수 없습니다" msgid "unable to commit audit record" msgstr "감사 레코드를 제출할 수 없습니다" -#: plugins/sudoers/check.c:275 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "%s 지시 파일 읽기 오류" -#: plugins/sudoers/check.c:278 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "%s 지시 파일 무시: 일반 파일이 아닙니다" -#: plugins/sudoers/check.c:291 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1605,14 +1667,14 @@ msgstr "" " #3) 막강한 힘에는 상당한 책임이 뒤따릅니다.\n" "\n" -#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 -#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "알 수 없는 uid %u" -#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" @@ -1642,7 +1704,7 @@ msgstr "순서 시작: %s: %s" msgid "order padding: %s: %s" msgstr "순서 패딩: %s: %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "%s 문법 버전 %d\n" @@ -1662,14 +1724,14 @@ msgstr "지원하지 않는 %s 출력 형식" msgid "%s: input and output files must be different" msgstr "%s: 입출력 파일은 달라야합니다" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 -#: plugins/sudoers/visudo.c:969 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "sudoers 기본 값을 초기화할 수 없습니다" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" @@ -1694,18 +1756,18 @@ msgstr "부적절한 생략 형식: %s" msgid "invalid filter: %s" msgstr "부적절한 필터: %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "%s 파일 해석에 실패했습니다. 알 수 없는 오류." #: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "%s에 기록할 수 없습니다" -#: plugins/sudoers/cvtsudoers.c:1501 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1714,7 +1776,7 @@ msgstr "" "%s - sudoers 파일 형식을 변환합니다\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1503 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -2167,359 +2229,383 @@ msgid "Log user's input for the command being run" msgstr "실행 명령에 대한 사용자 입력 기록" #: plugins/sudoers/def_data.c:356 +msgid "Log the command's standard input if not connected to a terminal" +msgstr "터미널에 연결하지 않았을 경우 명령 표준 입력을 기록" + +#: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "실행 명령의 터미널 입력을 기록합니다" + +#: plugins/sudoers/def_data.c:364 msgid "Log the output of the command being run" msgstr "실행 명령에 대한 출력 기록" -#: plugins/sudoers/def_data.c:360 +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "터미널에 연결하지 않았을 경우 명령 표준 출력을 기록" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "터미널에 연결하지 않았을 경우 명령 표준 오류를 기록" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "실행 명령의 터미널 출력을 기록합니다" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "zlib로 입출력 로그 압축" -#: plugins/sudoers/def_data.c:364 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "항상 명령을 유사 tty에서 실행" -#: plugins/sudoers/def_data.c:368 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "비 유닉스 그룹을 지원하는 플러그인: %s" -#: plugins/sudoers/def_data.c:372 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "입출력 로그를 저장할 디렉터리: %s" -#: plugins/sudoers/def_data.c:376 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "입출력 로그를 저장할 파일: %s" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "pty를 할당할 때 utmp/utmpx 파일에 항목 추가" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "utmp의 사용자를 실제 실행 사용자가 아닌 대리 실행 사용자로 설정" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "권한 허용 설정: %s" -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "권한 제한 설정: %s" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "백그라운드의 pty에서 명령을 실행합니다" -#: plugins/sudoers/def_data.c:400 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "사용할 PAM 서비스 이름: %s" -#: plugins/sudoers/def_data.c:404 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "로그인 셸에서 사용할 PAM 서비스 이름: %s" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "sudo를 -A 옵션으로 실행할 때 활용할 PAM 서비스 이름: %s" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "대상 사용자의 PAM 인증 처리 시도합니다" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "실행할 명령에 새 PAM 세션을 만듭니다" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "PAM 계정 검증 관리를 수행합니다" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "최대 입출력 로그 순차 번호: %s" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "sudoers에 네트워크 그룹 지원 활성화" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:452 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "sudoedit로 파일을 편집할 때 상위 디렉터리 기록 가능 여부 확인" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "sudoedit로 파일을 편집할 때 심볼릭 링크 따라감" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "알 수 없는 시스템 그룹에 그룹 플러그인 요청" -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "user, host, domain 전체 튜플을 기반으로 네트워크 그룹 비교" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "sudo에서 감시 로그를 기록할 수 없을 경우에도 명령 실행 허용" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "sudo에서 입출력 로그를 기록할 수 없을 경우에도 명령 실행 허용" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "sudo에서 로그 파일에 기록할 수 없을 경우에도 명령 실행 허용" -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "sudoers의 그룹을 해석하고 그룹 이름이 아닌 ID와 비교" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:484 #, 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:468 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "입출력 로그 파일을 소유할 사용자: %s" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "입출력 로그 파일을 소유할 그룹: %s" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "입출력 로그 파일에 사용할 파일 모드: 0%o" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "경로가 아닌 파일 서술자로 명령어 실행: %s" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:504 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "경고를 출력하는 대신 sudoers에서 알 수 없는 기본 항목을 무시" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "명령 처리가 끝난 후의 초 단위 시간: %u" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "사용자가 명령행에서 제한 시간을 지정하도록 허용" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "입출력 로그 데이터를 버퍼링하는 대신 즉시 디스크로 플러싱" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "syslog로 로깅할 때 프로세스 ID 포함" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "인증 타임스탬프 레코드 형식: %s" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "인증 실패 메시지: %s" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "사용자 이름 비교시 대소문자 무시" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "그룹 이름 비교시 대소문자 무시" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "sudoers에서 명령을 허용할 때 기록" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "sudoers에서 명령을 거절할 때 기록" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "개별 포트 정보를 추가하여 연결할 sudo 로그 서버" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "초 단위 sudo 로그 서버 제한 시간: %u" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:556 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "연결한 로그 서버 소켓에 SO_KEEPALIVE 소켓 옵션 활성화" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "감사 서버의 CA 번들 파일 경로: %s" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "sudoers 인증 파일 경로: %s" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "sudoers 개인 키 파일 경로: %s" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "로그 서버 인증서 유효성 검증" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "사용자/그룹 ID로의 알 수 없는 실행 허용" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "유효한 셸에서 사용자가 명령을 실행할 경우만 허용" -#: plugins/sudoers/def_data.c:564 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "sudo를 실행하는 사용자를 PAM 원격 사용자로 설정" -#: plugins/sudoers/def_data.c:568 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "로컬 호스트 이름에 PAM 원격 사용자 설정" -#: plugins/sudoers/def_data.c:572 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "명령 실행 전 바꿀 작업 디렉터리: %s" -#: plugins/sudoers/def_data.c:576 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "명령 실행 전 바꿀 루트 디렉터리: %s" -#: plugins/sudoers/def_data.c:580 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "로그 기록 형식: %s" -#: plugins/sudoers/def_data.c:584 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "SELinux RBAC 지원을 사용합니다" -#: plugins/sudoers/def_data.c:588 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "sudo를 처음 실행할 때 만든 파일의 경로: %s" -#: plugins/sudoers/def_data.c:592 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "추가 명령을 가로채고 sudoer 제한을 적용합니다" -#: plugins/sudoers/def_data.c:596 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "원본 명령으로 실행하는 하위 명령 기록" -#: plugins/sudoers/def_data.c:600 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "실행 명령 끝내기 상태 기록" -#: plugins/sudoers/def_data.c:604 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "가로챈 세션에서의 순차 명령 실행시 인증해야 합니다" -#: plugins/sudoers/def_data.c:608 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "setuid 또는 setgid 프로그램을 실행할 가로채기 명령 실행 허용" -#: plugins/sudoers/def_data.c:612 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "프로세스 주소 영역을 확장할 최대 크기(바이트 단위): %s" -#: plugins/sudoers/def_data.c:616 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "코어 덤프 파일 최대 생성 크기(바이트 단위): %s" -#: plugins/sudoers/def_data.c:620 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "프로세스 최대 CPU 사용 시간(초 단위): %s" -#: plugins/sudoers/def_data.c:624 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "프로세스 데이터 세그먼트 최대 크기(바이트 단위): %s" -#: plugins/sudoers/def_data.c:628 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "프로세스에서 만들 최대 파일 크기(바이트 단위): %s" -#: plugins/sudoers/def_data.c:632 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "프로세스 실행 최대 잠금 횟수: %s" -#: plugins/sudoers/def_data.c:636 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "메모리에서 잠글 프로세스 최대 크기(바이트 단위): %s" -#: plugins/sudoers/def_data.c:640 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "프로세스에서 열 파일 최대 갯수: %s" -#: plugins/sudoers/def_data.c:644 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "사용자가 동시 실행할 최대 프로세스 갯수: %s" -#: plugins/sudoers/def_data.c:648 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "프로세스 상주시 최대 확장 크기(바이트 단위): %s" -#: plugins/sudoers/def_data.c:652 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "프로세스 스택 크기 증가 최대 크기(바이트 단위): %s" -#: plugins/sudoers/def_data.c:656 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "비 대화식 상태에서도 인증 시도" -#: plugins/sudoers/def_data.c:660 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "I/O 로그 입력시 원문 암호 저장" -#: plugins/sudoers/def_data.c:664 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "암호 프롬프트 대조시 사용할 정규 표현식 목록" -#: plugins/sudoers/def_data.c:668 +#: plugins/sudoers/def_data.c:688 #, c-format msgid "The mechanism used by the intercept and log_subcmds options: %s" msgstr "intercept 옵션과 log_subcmds 옵션에서 지원하는 매커니즘: %s" -#: plugins/sudoers/def_data.c:672 +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "실행 후 명령 및 인자 검증 시도" + +#: plugins/sudoers/def_data.c:696 #, c-format msgid "AppArmor profile to use in the new security context: %s" msgstr "새 보안 컨텍스트에서 활용할 AppArmor 프로파일: %s" @@ -2554,31 +2640,31 @@ msgstr "\"%2$s\" 옵션의 부적절한 기본 형식 0x%1$x" msgid "value \"%s\" is invalid for option \"%s\"" msgstr "\"%s\" 값은 \"%s\" 옵션에 맞지 않습니다" -#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 -#: plugins/sudoers/policy.c:216 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format msgid "path name for \"%s\" too long" msgstr "\"%s\" 경로 이름이 너무 깁니다" -#: plugins/sudoers/defaults.c:1133 +#: plugins/sudoers/defaults.c:1134 #, c-format msgid "values for \"%s\" must start with a '/', '~', or '*'" msgstr "\"%s\" 값은 '/', '~', '*' 문자로 시작해야합니다" -#: plugins/sudoers/defaults.c:1140 +#: plugins/sudoers/defaults.c:1141 #, c-format msgid "values for \"%s\" must start with a '/'" msgstr "\"%s\" 값은 '/' 문자로 시작해야합니다" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp가 깨졌습니다. 길이가 일치하지 않습니다" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "환경 구성을 다시 갖출 수 없습니다" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "죄송하지만 다음 환경 변수를 설정하도록 허가받지 않았습니다: %s" @@ -2593,27 +2679,27 @@ msgstr "%2$s에서 지원하지 않는 다이제스트 형식 %1$d" msgid "%s: read error" msgstr "%s: 읽기 오류" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "%s은(는) %d uid가 소유해야 합니다" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "%s은(는) 소유자만 쓸 수 있습니다" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "%s을(를) 불러올 수 없습니다: %s" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "%s에서 \"group_plugin\" 심볼을 찾을 수 없습니다" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: 호환되지 않는 그룹 플러그인 주 버전 %d입니다. %d이(가) 필요합니다." @@ -2636,10 +2722,10 @@ msgstr "로컬 IP 주소 및 넷마스크 쌍:\n" msgid "unable to update sequence file" msgstr "시퀀스 파일을 업데이트할 수 없습니다" -#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 -#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 -#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 -#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "입출력 로그에 기록할 수 없습니다: %s" @@ -2649,25 +2735,25 @@ msgstr "입출력 로그에 기록할 수 없습니다: %s" msgid "unable to create %s/%s" msgstr "%s/%s을(를) 만들 수 없습니다" -#: plugins/sudoers/iolog.c:955 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: 내부 오류. 이벤트 %d 번의 입출력 로그 파일을 열지 않았습니다" -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 -#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 -#: plugins/sudoers/visudo.c:552 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "클록을 읽을 수 없습니다" -#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 -#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: 내부 오류. 부적절한 시그널 %d번" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "ldaps를 사용할 때 starttls를 지원하지 않습니다" @@ -2690,7 +2776,7 @@ msgstr "LDAP를 초기화할 수 없습니다: %s" 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:1886 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "부적절한 sudoOrder 속성: %s" @@ -2700,12 +2786,12 @@ msgstr "부적절한 sudoOrder 속성: %s" msgid "%s: port too large" msgstr "%s: 포트 번호가 너무 큽니다" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "지원하지 않는 LDAP URI 형식: %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap 및 ldaps URI를 함께 사용할 수 없습니다" @@ -2730,111 +2816,111 @@ msgstr "감시 시스템을 열 수 없습니다" msgid "unable to send audit message" msgstr "감시 메시지를 보낼 수 없습니다" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 -#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "이벤트 루프 오류" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "SSL_CTX 객체 만들기 실패: %s" -#: plugins/sudoers/log_client.c:225 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "%s 인증서 인증 번들을 불러올 수 없습니다" -#: plugins/sudoers/log_client.c:247 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "%s 인증서를 불러올 수 없습니다" -#: plugins/sudoers/log_client.c:261 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "%s 개인 키를 불러올 수 없습니다" -#: plugins/sudoers/log_client.c:270 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "SSL 객체를 할당할 수 없습니다: %s" -#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "%s:%s로의 TLS 연결 실패: %s" -#: plugins/sudoers/log_client.c:538 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "TLS 초기화에 실패했습니다" -#: plugins/sudoers/log_client.c:548 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "TLS 핸드셰이킹에 실패했습니다" -#: plugins/sudoers/log_client.c:1246 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: 내부 오류. 부적절한 종료 상태 %d" -#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "로그 서버의 연결이 끊어졌습니다" -#: plugins/sudoers/log_client.c:1876 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "기록 버퍼 빠짐" -#: plugins/sudoers/log_client.c:2024 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "로그 서버에 연결할 수 없습니다" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "사용자가 sudoers에 없습니다" -#: plugins/sudoers/logging.c:300 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "사용자가 호스트에서 인증하지 않았습니다" -#: plugins/sudoers/logging.c:302 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "명령을 허용하지 않았습니다" -#: plugins/sudoers/logging.c:323 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "%s은(는) sudoers 파일에 없습니다.\n" -#: plugins/sudoers/logging.c:326 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "%s 사용자는 %s에서 sudo를 실행할 수 없습니다.\n" -#: plugins/sudoers/logging.c:329 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "죄송하지만, %s 사용자는 %s에서 sudo를 실행하면 안됩니다.\n" -#: plugins/sudoers/logging.c:332 +#: plugins/sudoers/logging.c:324 #, 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:342 +#: plugins/sudoers/logging.c:334 msgid "This incident has been reported to the administrator.\n" msgstr "이번 시도는 관리자에게 보고했습니다.\n" -#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 -#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 -#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 -#: plugins/sudoers/sudoers.c:801 +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s: 명령이 없습니다" -#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2843,30 +2929,30 @@ msgstr "" "'.'에 무시 중인 \"%1$s\" 요소가 있습니다.\n" "\"%3$s\" 명령을 실행하려면, \"sudo ./%2$s\" 명령을 사용하십시오." -#: plugins/sudoers/logging.c:395 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "잘못된 암호 입력 시도 %u번" -#: plugins/sudoers/logging.c:485 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "인증 실패" -#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "암호가 필요합니다" -#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 msgid "problem parsing sudoers" msgstr "sudoers 해석 문제" -#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format msgid "%s:%d:%d: %s" msgstr "%s:%d:%d: %s" -#: plugins/sudoers/logging.c:1068 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "로그 파일에 기록할 수 없습니다: %s" @@ -2881,7 +2967,7 @@ msgstr "%1$s 다이제스트(%2$s)는 %4$zu 길이를 기대했지만 잘못된 msgid "digest for %s (%s) is not in %s form" msgstr "%s 다이제스트(%s)는 %s 형식이 아닙니다" -#: plugins/sudoers/parse.c:585 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2890,7 +2976,7 @@ msgstr "" "\n" "LDAP 역할: %s\n" -#: plugins/sudoers/parse.c:588 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2898,110 +2984,110 @@ msgstr "" "\n" "Sudoers 항목:\n" -#: plugins/sudoers/parse.c:590 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " 실행 사용자: " -#: plugins/sudoers/parse.c:605 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " 실행 그룹: " -#: plugins/sudoers/parse.c:615 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " 옵션: " -#: plugins/sudoers/parse.c:679 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " 명령:\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "%2$s에서 %1$s에 일치하는 기본 항목:\n" -#: plugins/sudoers/parse.c:888 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "%s의 실행 권한 및 명령별 기본 값:\n" -#: plugins/sudoers/parse.c:906 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "%s 사용자는 %s에서 다음 명령을 실행해야 합니다:\n" -#: plugins/sudoers/parse.c:921 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "%s 사용자는 %s에서 sudo를 실행하도록 허가받지 않았습니다.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "미완결 sudoRole 무시: cn: %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "부적절한 LDIF 속성: %s" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "sudo 프론트엔드의 %.*s 설정이 잘못되었습니다" -#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "네트워크 주소 목록을 해석할 수 없습니다" -#: plugins/sudoers/policy.c:508 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "sudo 프론트엔드에서 사용자 이름을 설정하지 않았습니다" -#: plugins/sudoers/policy.c:512 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "sudo 프론트엔드에서 사용자 ID를 설정하지 않았습니다" -#: plugins/sudoers/policy.c:516 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "sudo 프론트엔드에서 그룹 ID를 지정하지 않았습니다" -#: plugins/sudoers/policy.c:520 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "sudo 프론트엔드에서 호스트 이름을 설정하지 않았습니다" -#: plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "부적절한 작업 디렉터리: %s" -#: plugins/sudoers/policy.c:886 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "부적절한 루트 변경 디렉터리: %s" -#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "%s을(를) 실행할 수 없습니다" -#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 -#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: sudo 프론트엔드의 상태 플래그가 잘못되었습니다: 0x%x" -#: plugins/sudoers/policy.c:1262 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers 정책 플러그인 버전 %s\n" -#: plugins/sudoers/policy.c:1264 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers 파일 문법 버전 %d\n" -#: plugins/sudoers/policy.c:1268 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -3010,27 +3096,27 @@ msgstr "" "\n" "Sudoers 경로: %s\n" -#: plugins/sudoers/policy.c:1271 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch 경로: %s\n" -#: plugins/sudoers/policy.c:1273 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf 경로: %s\n" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret 경로: %s\n" -#: plugins/sudoers/policy.c:1307 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "%d 형식의 후크를 등록할 수 없습니다(버전 %d.%d)" -#: plugins/sudoers/policy.c:1325 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "%d 형식의 후크 등록을 해제할 수 없습니다(버전 %d.%d)" @@ -3103,7 +3189,7 @@ msgstr "%s 그룹 ID를 해석할 수 없습니다" #: plugins/sudoers/set_perms.c:852 plugins/sudoers/set_perms.c:1162 #: plugins/sudoers/set_perms.c:1460 msgid "perm stack overflow" -msgstr "perm 스택 오버플로우" +msgstr "권한 스택 오버플로우" #: plugins/sudoers/set_perms.c:125 plugins/sudoers/set_perms.c:376 #: plugins/sudoers/set_perms.c:456 plugins/sudoers/set_perms.c:719 @@ -3111,7 +3197,7 @@ msgstr "perm 스택 오버플로우" #: plugins/sudoers/set_perms.c:1173 plugins/sudoers/set_perms.c:1393 #: plugins/sudoers/set_perms.c:1471 plugins/sudoers/set_perms.c:1562 msgid "perm stack underflow" -msgstr "parm 스택 언더플로우" +msgstr "권한 스택 언더플로우" #: plugins/sudoers/set_perms.c:185 plugins/sudoers/set_perms.c:503 #: plugins/sudoers/set_perms.c:1227 plugins/sudoers/set_perms.c:1505 @@ -3169,148 +3255,142 @@ msgstr "SSS 소스를 초기화할 수 없습니다. 머신에 SSSD를 설치했 msgid "unable to find symbol \"%s\" in %s" msgstr "%2$s에서 \"%1$s\" 심볼을 찾을 수 없습니다" -#: plugins/sudoers/sudoers.c:258 +#: plugins/sudoers/sudoers.c:263 #, c-format msgid "unable to get defaults from %s" msgstr "%s의 기본값을 가져올 수 없습니다" -#: plugins/sudoers/sudoers.c:265 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "올바른 sudoers 설정 원본이 없습니다. 나갑니다." -#: plugins/sudoers/sudoers.c:341 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "%s을(를) 루트 디렉터리로 변환하도록 허용하지 않습니다" -#: plugins/sudoers/sudoers.c:343 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "-R 옵션과 %s 옵션의 병행 사용을 허가받지 않았습니다" -#: plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "%s 디렉터리로의 이동을 허용하지 않습니다" -#: plugins/sudoers/sudoers.c:369 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "-D 옵션과 %s 옵션의 병행 사용을 허가받지 않았습니다" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "지정한 명령이 없음" -#: plugins/sudoers/sudoers.c:421 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers에서 root가 sudo를 실행하지 못하게 지정했습니다" -#: plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "사용자가 closefrom 제한 값을 따로 적용하도록 허용하지 않았습니다" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "-C 옵션 사용을 허가받지 않았습니다" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "타임스탬프 소유자(%s): 사용자 없음" -#: plugins/sudoers/sudoers.c:547 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "tty 없음" -#: plugins/sudoers/sudoers.c:548 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "죄송하지만 sudo를 실행하려면 tty를 확보해야합니다" -#: plugins/sudoers/sudoers.c:555 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "%s 사용자에게 부적절한 셸 제공: %s" -#: plugins/sudoers/sudoers.c:638 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "현재 디렉터리의 명령" -#: plugins/sudoers/sudoers.c:653 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "\"cd\"는 셸 내장 명령으로, 직접 실행할 수 없습니다." -#: plugins/sudoers/sudoers.c:655 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "-s 옵션은 별도 권한을 부여한 셸에서 실행할 때 사용합니다." -#: plugins/sudoers/sudoers.c:657 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "-D 옵션은 지정 디렉터리에서 명령을 실행할 때 사용합니다." -#: plugins/sudoers/sudoers.c:666 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "사용자가 명령 처리 제한 시간을 설정하도록 허용하지 않았습니다" -#: plugins/sudoers/sudoers.c:668 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "죄송하지만, 명령 처리 제한 시간을 설정할 수 없습니다" -#: plugins/sudoers/sudoers.c:676 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "사용자가 환경 설정 값을 유지하도록 허용하지 않았습니다" -#: plugins/sudoers/sudoers.c:678 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "죄송하지만 이 환경 상태를 유지하도록 허가받지 않았습니다" -#: plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit는 sudo로 실행할 필요가 없습니다" -#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "%s을(를) 읽을 수 없습니다" -#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 -#: plugins/sudoers/visudo.c:764 -#, c-format -msgid "unable to stat %s" -msgstr "%s의 상태를 가져올 수 없습니다" - -#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s은(는) 일반 파일이 아닙니다" -#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s은(는) %u uid가 소유했지만, %u uid가 소유해야합니다" -#: plugins/sudoers/sudoers.c:1147 toke.l:1252 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "%s에 모두가 기록할 수 있습니다" -#: plugins/sudoers/sudoers.c:1151 toke.l:1255 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s은(는) %u gid가 소유했지만, %u gid가 소유해야합니다" -#: plugins/sudoers/sudoers.c:1184 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "루트만 \"-c %s\" 옵션을 사용할 수 있습니다" -#: plugins/sudoers/sudoers.c:1203 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "알 수 없는 로그인 클래스 %s" -#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "%s 호스트를 해석할 수 없습니다" @@ -3408,17 +3488,17 @@ msgstr "잘못된 후위 문자 \"!\"" msgid "unknown search type %d" msgstr "알 수 없는 검색 형식 %d" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, 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:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "사용법: %s [-h] [-d <디렉터리>] -l [<검색식>]\n" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -3427,7 +3507,7 @@ msgstr "" "%s - sudo 세션 로그를 보여줍니다\n" "\n" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3483,127 +3563,122 @@ msgstr "" "\n" "명령이 일치하지 않음" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s은(는) 그룹이 기록할 수 있습니다" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "타임스탬프 파일을 %lld 바이트로 자를 수 없습니다" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "미래 타임스탬프 값 무시" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "타임스탬프 값이 미래 값으로 너무 밀려있습니다: %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "%s 타임스탬프 파일을 잠글 수 없습니다" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "지침 상태 경로가 너무 깁니다: %s/%s" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "sudoedit에 경로를 지정하면 안됩니다" -#: plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "-x 옵션은 추후 릴리스에서 제거 예정입니다" -#: plugins/sudoers/visudo.c:251 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "cvtsudoers 유틸리티를 대신 사용해보십시오" -#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "%s 항목을 편집하려면 return 키를 누르십시오: " -#: plugins/sudoers/visudo.c:321 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "%s에 편집 세션 내용이 남았습니다" -#: plugins/sudoers/visudo.c:397 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "지정 편집기(%s)가 없습니다" -#: plugins/sudoers/visudo.c:399 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "편집기가 없습니다(편집기 경로 = %s)" -#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "%s의 상태를 가져올 수 없습니다" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "쓰기 오류" -#: plugins/sudoers/visudo.c:559 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "임시 파일 상태를 가져올 수 없습니다(%s). %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:566 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "임시 파일 길이가 0입니다(%s). %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:572 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "편집기(%s) 실패. %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:594 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s 바꾸지 않음" -#: plugins/sudoers/visudo.c:639 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "임시 파일(%s)을 다시 열 수 없습니다. %s을(를) 바꾸지 않았습니다." -#: plugins/sudoers/visudo.c:652 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "임시 파일(%s)을 해석할 수 없습니다. 알 수 없는 오류" -#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "%s의 uid/gid를 %u/%u 값으로 설정할 수 없습니다" -#: plugins/sudoers/visudo.c:803 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s 및 %s은(는) 동일한 파일 시스템에 없습니다. mv 명령으로 이름을 바꿉니다" -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "명령 실행 실패: '%s %s %s', %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:821 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "%s 이름 바꾸기 오류. %s을(를) 바꾸지 않았습니다" -#: plugins/sudoers/visudo.c:841 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "어떻게 하시겠습니까? " -#: plugins/sudoers/visudo.c:855 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3615,41 +3690,41 @@ msgstr "" " sudoers 파일을 바꾼 상태에서 저장하지 않고 나갑니다(X)\n" " sudoers 파일을 바꾼 상태에서 저장하고 끝냅니다(Q)\n" -#: plugins/sudoers/visudo.c:901 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "%s을(를) 실행할 수 없음" -#: plugins/sudoers/visudo.c:932 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: 잘못된 소유자 uid/gid를 %u/%u 값으로 설정해야 합니다\n" -#: plugins/sudoers/visudo.c:943 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: 잘못된 권한입니다. 0%o 모드 값을 설정해야 합니다\n" -#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s: 해석 성공\n" -#: plugins/sudoers/visudo.c:1017 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s을(를) 사용중입니다. 나중에 다시 시도하십시오" -#: plugins/sudoers/visudo.c:1021 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "그래도 편집하시겠습니까? [y/N]" -#: plugins/sudoers/visudo.c:1117 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "경고: %s:%d:%d 사용하지 않는 %s \"%s\"이(가) 있습니다" -#: plugins/sudoers/visudo.c:1229 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3658,13 +3733,14 @@ msgstr "" "%s - sudoers 파일을 안전하게 편집합니다\n" "\n" -#: plugins/sudoers/visudo.c:1231 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" @@ -3672,10 +3748,11 @@ msgstr "" "\n" "옵션:\n" " -c, --check 확인 전용 모드\n" -" -f, --file=sudoers sudoers 파일 위치 지정\n" +" -f, --file=sudoers sudoers 파일 위치를 지정합니다\n" " -h, --help 도움말 메시지를 나타낸 후 빠져나갑니다\n" +" -I, --no-includes 인클루드 파일을 편집하지 않습니다\n" " -q, --quiet 자세한 문법 오류 메시지를 줄입니다(없앰)\n" -" -s, --strict 엄격한 문법 검사 시행\n" +" -s, --strict 엄격한 문법 검사를 시행합니다\n" " -V, --version 버전 정보를 나타낸 후 빠져나갑니다\n" #: toke.l:189 @@ -3710,6 +3787,12 @@ msgstr "예기치 않은 개행 문자 발견" msgid "too many levels of includes" msgstr "포함 레벨이 너무 많습니다" +#~ msgid "%s is group writable" +#~ msgstr "%s은(는) 그룹이 기록할 수 있습니다" + +#~ msgid "lecture status path too long: %s/%s" +#~ msgstr "지침 상태 경로가 너무 깁니다: %s/%s" + #~ msgid "Error: %s:%d:%d: cycle in %s \"%s\"" #~ msgstr "오류: %4$s \"%5$s\"의 %1$s:%2$d:%3$d: 사이클" diff --git a/plugins/sudoers/po/pl.mo b/plugins/sudoers/po/pl.mo index b7974692632fdcef684b18010369d8ca8e7f8f8f..c4310c5a758e6638e8756e73c4aeae9abf45a1f0 100644 GIT binary patch delta 16180 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 LJ4dSqgctfRGkv3s delta 15067 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\n" "Language-Team: Polish \n" "Language: pl\n" @@ -17,7 +17,7 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: confstr.sh:1 gram.y:1218 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "błąd składni" @@ -41,13 +41,13 @@ msgstr "*** informacje dotyczące BEZPIECZEŃSTWA dla %h ***" msgid "Sorry, try again." msgstr "Niestety, proszę spróbować ponownie." -#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 -#: gram.y:365 gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 -#: gram.y:501 gram.y:511 gram.y:523 gram.y:571 gram.y:580 gram.y:589 -#: gram.y:598 gram.y:730 gram.y:738 gram.y:749 gram.y:761 gram.y:780 -#: gram.y:943 gram.y:948 gram.y:956 gram.y:970 gram.y:976 gram.y:1098 -#: gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 gram.y:1162 gram.y:1171 -#: gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 gram.y:1816 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 #: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 @@ -57,50 +57,64 @@ msgstr "Niestety, proszę spróbować ponownie." #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 -#: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:168 plugins/sudoers/cvtsudoers.c:131 -#: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 -#: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 -#: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:862 -#: plugins/sudoers/cvtsudoers.c:870 plugins/sudoers/cvtsudoers.c:1365 -#: plugins/sudoers/cvtsudoers.c:1369 plugins/sudoers/cvtsudoers.c:1471 -#: plugins/sudoers/cvtsudoers_csv.c:183 plugins/sudoers/cvtsudoers_csv.c:246 -#: 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:376 -#: plugins/sudoers/cvtsudoers_ldif.c:430 plugins/sudoers/cvtsudoers_ldif.c:438 -#: plugins/sudoers/cvtsudoers_ldif.c:449 plugins/sudoers/cvtsudoers_ldif.c:456 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:481 -#: plugins/sudoers/cvtsudoers_ldif.c:489 plugins/sudoers/cvtsudoers_ldif.c:636 -#: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 +#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 +#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 #: plugins/sudoers/cvtsudoers_merge.c:446 @@ -110,11 +124,11 @@ msgstr "Niestety, proszę spróbować ponownie." #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1158 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -123,124 +137,125 @@ msgstr "Niestety, proszę spróbować ponownie." #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 -#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 -#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 -#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 -#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 -#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 -#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 -#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 -#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 -#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 -#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 -#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 -#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 -#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 -#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 -#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 -#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 -#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 -#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 -#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 #: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 #: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 #: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 #: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 #: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "nie udało się przydzielić pamięci" -#: gram.y:622 +#: gram.y:623 msgid "a digest requires a path name" msgstr "skrót wymaga nazwy pliku" -#: gram.y:644 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "wartości \"CWD\" muszą zaczynać się od '/', '~' lub '*'" -#: gram.y:650 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "ścieżka \"CWD\" zbyt długa" -#: gram.y:660 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "wartości \"CHROOT\" muszą zaczynać się od '/', '~' lub '*'" -#: gram.y:666 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "ścieżka \"CHROOT\" zbyt długa" -#: gram.y:801 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "błąd składni, słowo zastrzeżone %s użyte jako nazwa aliasu" -#: gram.y:824 +#: gram.y:825 msgid "invalid notbefore value" msgstr "błędna wartość notbefore" -#: gram.y:833 +#: gram.y:834 msgid "invalid notafter value" msgstr "błędna wartość notafter" -#: gram.y:843 plugins/sudoers/policy.c:376 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "wartość limitu czasu zbyt duża" -#: gram.y:845 plugins/sudoers/policy.c:378 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "błędna wartość limitu czasu" -#: gram.y:966 plugins/sudoers/sudoers.c:1014 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "polecenie zbyt długie" -#: gram.y:1220 plugins/sudoers/check_aliases.c:96 -#: plugins/sudoers/defaults.c:1275 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1270 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "Alias \"%s\" jest już zdefiniowany" -#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 #: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 #: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 @@ -250,33 +265,48 @@ msgstr "Alias \"%s\" jest już zdefiniowany" #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 -#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 @@ -306,11 +336,11 @@ msgstr "Alias \"%s\" jest już zdefiniowany" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1157 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -319,46 +349,47 @@ msgstr "Alias \"%s\" jest już zdefiniowany" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 -#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 -#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 -#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 -#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 -#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 -#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 -#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 -#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 -#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: 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:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 -#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 -#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 -#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 -#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 -#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 -#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 #: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 -#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -371,25 +402,25 @@ msgstr "Alias \"%s\" jest już zdefiniowany" #: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 #: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 #: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 -#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 -#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 -#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 -#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 -#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 -#: toke.l:1226 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 +#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -398,14 +429,14 @@ msgstr "%s: %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 #: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 #: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 -#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 -#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 #: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 #: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 @@ -448,7 +479,7 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (kontynuacja polecenia) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -563,14 +594,14 @@ msgstr "%s: brak pola z grupą runas" msgid "%s exists but is not a directory (0%o)" msgstr "%s istnieje, ale nie jest katalogiem (0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "nie udało się wykonać mkdir %s" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 -#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "nie udało się zmienić uprawnień %s na 0%o" @@ -585,150 +616,156 @@ msgstr "błąd podczas czytania pliku czasu: %s" msgid "invalid timing file line: %s" msgstr "błędna linia pliku czasu: %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 -#: plugins/sudoers/policy.c:573 -msgid "unable to generate UUID" -msgstr "nie udało się wygenerować UUID-a" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s: błąd protokołu: klucz NULL" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "%s: błąd protokołu: niewłaściwy typ dla %s" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s: błąd protokołu: napotkano wartość NULL w %s" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "nie udało się wygenerować UUID-a" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "%s: błąd protokołu: brak %s w AcceptMessage" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "%s: nie udało się sformatować id sesji" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "%s: %s nie jest ustawiony" -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "nie udało się rozwinąć ścieżki iologu %s" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "nie udało się utworzyć ścieżki iologu %s" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "błędny iofd %d" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "błąd zamykania iofd %d: %s" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "błąd opróżniania bufora iofd %d: %s" -#: logsrvd/iolog_writer.c:780 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "błędny log we/wy %s: %s użyty, ale nie zdefiniowany" -#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s: nie udało się odnaleźć punktu wznowienia [%lld, %ld]" -#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 -#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 #: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 -#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 -#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "nie udało się otworzyć %s/%s" -#: logsrvd/iolog_writer.c:839 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "nie udało się skopiować %s/%s do %s/%s: %s" -#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "nie udało się zmienić nazwy %s na %s" -#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s: nie udało się odnaleźć punktu wznowienia [%lld, %ld]" -#: logsrvd/logsrv_util.c:154 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "brak pliku logu we/wy %s/%s" -#: logsrvd/logsrv_util.c:161 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: nie udało przesunąć %zu w przód" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "nie udało się połączyć z przekaźnikiem" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "komunikat serwera zbyt duży: %zu" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 -#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 -#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 -#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 -#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 -#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 -#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 -#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 -#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 -#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 -#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 -#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -737,633 +774,658 @@ msgstr "komunikat serwera zbyt duży: %zu" msgid "unable to add event to queue" msgstr "nie udało się dodać zdarzenia do kolejki" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "nieoczekiwany stan %d dla %s" -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "błąd maszyny stanów" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "błędny AcceptMessage" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "błędny RejectMessage" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "błędny ExitMessage" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "błędny RestartMessage" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "błędny AlertMessage" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "%s: nieoczekiwany IoBuffer" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "błąd protokołu" -#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 -#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 -#: plugins/sudoers/log_client.c:1618 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "błędny IoBuffer" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "błędny ChangeWindowSize" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "błędny CommandSuspend" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 #, c-format msgid "unable to unpack %s size %zu" msgstr "nie udało się rozpakować %s, rozmiar %zu" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "nieoczekiwana wartość type_case %d w %s z %s" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "nie rozpoznany typ ClientMessage" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "przekroczony limit czasu przy pisaniu do klienta %s" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "brak bufora zapisu dla klienta %s" -#: logsrvd/logsrvd.c:982 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "przekroczony limit czasu przy czytaniu od klienta %s" -#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "EOF od %s bez właściwego zakończenia połączenia TLS" -#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:716 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "komunikat klienta zbyt duży %zu" -#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "komunikat klienta zbyt duży" -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "błędny ClientMessage" -#: logsrvd/logsrvd.c:1389 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "nie udało się uzyskać zdalnego adresu IP" -#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 -#: plugins/sudoers/log_client.c:276 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Nie udało się dołączyć danych użytkownika do obiektu SSL: %s" -#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "nie udało się ustanowić gniazda nasłuchującego" -#: logsrvd/logsrvd.c:1718 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "nieoczekiwany sygnał %d" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "serwer logów sudo" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "Opcje:" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "ścieżka do pliku konfiguracyjnego" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "wyświetlenie pomocy i zakończenie" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "bez wykonywania fork, działanie na pierwszym planie" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "procentowe prawdopodobieństwo odrzucenia połączenia" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "wyświetlenie informacji o wersji i zakończenie" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Wymagany Protobuf-C w wersji 1.3 lub wyższej" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "błędna wartość losowego gubienia: %s" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:180 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s wersja %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 #: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 -#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "nieznany użytkownik %s" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 -#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "nieznana grupa %s" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "nie udało się przeanalizować uprawnień iologu %s" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "błędna wartość %s: %s" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "TLS nie jest obsługiwany" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: nie jest pełną ścieżką" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "nieznana wartość facility sysloga %s" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "nieznany priorytet sysloga %s" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d niedopasowany '[': %s" -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "%s:%d śmieci po ']': %s" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s: %d błędna sekcja konfiguracji: %s" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d błędna linia konfiguracji: %s" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d oczekiwano nazwy sekcji: %s" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] niedozwolony klucz: %s" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:1035 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "nie udało się otworzyć pliku logu %s" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "nie udało się zainicjować kontekstu serwera TLS" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "nie udało się zainicjować kontekstu przekaźnika TLS" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 -#: logsrvd/logsrvd_journal.c:416 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "nie udało się utworzuć pliku kroniki" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1020 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "nie udało się zablokować %s" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "nie udało się zablokować pliku kroniki" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "nie udało się otworzyć pliku kroniki" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 -#: logsrvd/logsrvd_journal.c:452 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "nie udało się zapisać pliku kroniki" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "nie udało się zmienić nazwy pliku kroniki" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "nieoczekiwany koniec pliku podczas odczytu pliku kroniki" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "błąd podczas odczytu pliku kroniki" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "błędny plik kroniki, nie udało się zrestartować" -#: logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "nie udało się przewinąć do [%lld, %ld] w pliku kroniki %s" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "nieoczekiwana wartość value_case %d w %s z %s" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "błąd analizy AcceptMessage" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "błąd tworzenia logu we/wy" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "błąd logowania zdarzenia akceptacji" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "błąd analizy RejectMessage" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "błąd logowania zdarzenia odrzucenia" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "błąd logowania zdarzenia wyjścia" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "log jest już kompletny, nie może być wznowiony" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "nie udało się wznownić logu" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "błąd analizy AlertMessage" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "błąd logowania zdarzenia alarmu" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "nie udało się sformatować bufora czasu, długość %d" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "losowe odrzucanie połączenia" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "błąd zapisu IoBuffer" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "błąd zapisu ChangeWindowSize" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "błąd zapisu CommandSuspend" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "przywitanie TLS z hostem przekaźnika nie powiodło się" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "nie udało się połączyć z hostem przekaźnika" -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "%s: błędne ServerHello, brak server_id" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1504 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "błędne ServerHello" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "nie rozpoznany typ ServerMessage" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "przekroczony limit czasu przy czytaniu z przekaźnika %s (%s)" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "przekroczony limit czasu przy czytaniu z przekaźnika" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "nazwa hosta przekaźnika nie pasuje do certyfikatu" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 -#: logsrvd/logsrvd_relay.c:784 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "błąd podczas odczytu z przekaźnika" -#: logsrvd/logsrvd_relay.c:805 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "nie udał się odczyt z przekaźnika" -#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "serwer przekaźnika zamknął połączenie" -#: logsrvd/logsrvd_relay.c:838 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "komunikat serwera zbyt duży" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "przekroczony limit czasu przy pisaniu do przekaźnika %s (%s)" -#: logsrvd/logsrvd_relay.c:904 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "przekroczony limit czasu przy pisaniu do przekaźnika" -#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 -#: logsrvd/logsrvd_relay.c:974 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "błąd zapisu do przekaźnika" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "wysyłanie logu we/wy sudo na zdalny serwer" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "samo wysłanie zdarzenia akceptującego (bez we/wy)" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "plik paczki certyfikatów do weryfikacji certyfikatu serwera" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "plik certyfikatu do powitania TLS" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "host do wysyłania logów" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "zdalny ID logu we/wy do wznowienia" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "plik klucza prywatnego" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "bez weryfikacji certyfikatu serwera" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "port do użycia przy łączeniu z hostem" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "wznowienie poprzedniego transferu logu we/wy" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "odrzucenie polecenia z podanym powodem" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "zakończenie przesyłania po osiągnięciu tego czasu" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "test serwera audytu przez wysłanie wybranego logu we/wy N razy równolegle" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "nie udało się wyszukać %s:%s: %s" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "nie udało się uzyskać adresu IP serwera" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "nie udało się odczytać %s/%s: %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 -#: plugins/sudoers/iolog.c:1024 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "nieoczekiwane zdarzenie we/wy %d" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 -#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: nieoczekiwany stan %d" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "odebrano od serwera komunikat błędu: %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "odebrano od serwera komunikat zerwania: %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: nieoczekiwana wartość type_case %d" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "przekroczony limit czasu przy czytaniu z serwera" -#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 msgid "host name does not match certificate" msgstr "nazwa hosta nie pasuje do certyfikatu" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "przedwczesny EOF" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "komunikat serwera zbyt duży: %u" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "przekroczony limit czasu przy pisaniu do serwera" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "muszą być podane jednocześnie punkt wznowienia i ID iolog" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "nie można ustawić punktu restartu, jeśli żadne we/wy nie jest wysyłane" -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "zakończono przedwcześnie ze stanem %d" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "miniony czas wysłany do serwera [%lld, %ld]" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "odebrano od serwera punkt zatwierdzenia [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "przekroczony limit czasu powitania TLS" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "nie udało się ustawić zdarzenia" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "Połączenie TLS nie powiodło się: %s" -#: logsrvd/tls_client.c:191 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "nie udało się przydzielić obiektu SSL: %s" -#: logsrvd/tls_client.c:205 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Nie udało się dołączyć gniazda do obiektu SSL: %s" -#: logsrvd/tls_client.c:233 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "nie udało się zainicjować kontekstu TLS" -#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "nie udało się ustawić szyfrowania TLS 1.2 na %s: %s" -#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "nie udało się ustawić szyfrowania TLS 1.3 na %s: %s" -#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "nie udało się ustawić parametrów Diffie-Hellmana: %s" -#: logsrvd/tls_init.c:277 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "nie udało się utworzyć kontekstu TLS: %s" -#: logsrvd/tls_init.c:284 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "nie udało się ustawić minimalnej wersji protokołu na TLS 1.2: %s" -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 -#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 -#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 -#: plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "nie udało się pobrać aktualnego czasu" @@ -1500,7 +1562,7 @@ msgstr "Konto wygasło lub w konfiguracji PAM brak sekcji \"account\" dla sudo, msgid "PAM account management error: %s" msgstr "Błąd zarządzania kontem PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "nie istniejesz w bazie danych %s" @@ -1573,17 +1635,17 @@ msgstr "Nie udało się określić warunku audytowego" msgid "unable to commit audit record" msgstr "nie udało się zatwierdzić rekordu audytowego" -#: plugins/sudoers/check.c:275 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "błąd podczas czytania pliku instrukcji %s" -#: plugins/sudoers/check.c:278 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "zignorowano plik instrukcji %s: nie jest zwykłym plikiem" -#: plugins/sudoers/check.c:291 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1603,14 +1665,14 @@ msgstr "" " 3) z dużą władzą wiąże się duża odpowiedzialność.\n" "\n" -#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 -#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "nieznany uid %u" -#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" @@ -1640,7 +1702,7 @@ msgstr "początkowa ranga: %s: %s" msgid "order padding: %s: %s" msgstr "wyrównanie rangi: %s: %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "%s, wersja gramatyki %d\n" @@ -1660,14 +1722,14 @@ msgstr "nieobsługiwany format wyjścia %s" msgid "%s: input and output files must be different" msgstr "%s: pliki wejściowy i wyjściowy muszą być różne" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 -#: plugins/sudoers/visudo.c:969 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "nie udało się zainicjować wartości domyślnych sudoers" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" @@ -1692,18 +1754,18 @@ msgstr "błędny typ ograniczenia: %s" msgid "invalid filter: %s" msgstr "błędny filtr: %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "nie udało się przeanalizować pliku %s, nieznany błąd" #: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "nie udało się zapisać do %s" -#: plugins/sudoers/cvtsudoers.c:1501 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1712,7 +1774,7 @@ msgstr "" "%s - konwersja między formatami pliku sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1503 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -2166,359 +2228,383 @@ msgid "Log user's input for the command being run" msgstr "Logowanie wejścia użytkownika dla uruchamianych poleceń" #: plugins/sudoers/def_data.c:356 +msgid "Log the command's standard input if not connected to a terminal" +msgstr "Logowanie standardowego wejścia polecenia, jeśli nie jest podłączone do terminala" + +#: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "Logowanie wejścia terminala użytkownika dla uruchamianych poleceń" + +#: plugins/sudoers/def_data.c:364 msgid "Log the output of the command being run" msgstr "Logowanie wyjścia z uruchamianych poleceń" -#: plugins/sudoers/def_data.c:360 +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "Logowanie standardowego wyjścia polecenia, jeśli nie jest podłączone do terminala" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "Logowanie standardowego wyjścia błędów polecenia, jeśli nie jest podłączone do terminala" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "Logowanie wyjścia terminala z uruchamianych poleceń" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "Kompresja logów we/wy przy użyciu zliba" -#: plugins/sudoers/def_data.c:364 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "Uruchamianie poleceń zawsze na pseudoterminalu" -#: plugins/sudoers/def_data.c:368 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Wtyczka do obsługi grup nieuniksowych: %s" -#: plugins/sudoers/def_data.c:372 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Katalog do zapisu logów wejścia/wyjścia: %s" -#: plugins/sudoers/def_data.c:376 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Plik do zapisu logu wejścia/wyjścia: %s" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Dodawanie wpisu do pliku utmp/utmpx przy przydzielaniu pty" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Ustawianie użytkownika w utmp jako docelowego, nie wywołującego" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "Zbiór dozwolonych uprawnień: %s" -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "Zbiór ograniczonych uprawnień: %s" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "Uruchomienie poleceń na pseudoterminalu w tle" -#: plugins/sudoers/def_data.c:400 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "Nazwa usługi PAM do użycia: %s" -#: plugins/sudoers/def_data.c:404 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Nazwa usługi PAM do użycia dla powłok logowania: %s" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "Nazwa usługi PAM do użycia, kiedy sudo jest uruchomione z opcją -A: %s" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "Próba ustanowienia danych uwierzytelniających PAM dla użytkownika docelowego" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "Utworzenie nowej sesji PAM dla uruchamianego polecenia" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "Wykonanie zarządzania poprawnością konta PAM" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Maksymalny numer sekwencji logu we/wy: %s" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "Włączenie obsługi grup sieciowych w sudoers" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:452 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Sprawdzanie katalogów nadrzędnych pod kątem możliwości zapisu przy edycji plików programem sudoedit" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Podążanie za dowiązaniami symbolicznymi przy edycji programem sudoedit" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "Odpytanie wtyczki group pod kątem nieznanych grup systemowych" -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Dopasowanie grup sieciowych w oparciu o całą krotkę: użytkownik, host i domena" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Zezwolenie na uruchamianie poleceń nawet jeśli sudo nie może pisać do logu audytowego" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Zezwolenie na uruchamianie poleceń nawet jeśli sudo nie może pisać do logu we/wy" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Zezwolenie na uruchamianie poleceń nawet jeśli sudo nie może pisać do pliku logu" -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Rozwiązanie grup z sudoers i dopasowywanie po ID grupy zamiast nazwy" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:484 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Wpisy logu większe niż ta wartość będą dzielone na wiele wiadomości sysloga: %u" -#: plugins/sudoers/def_data.c:468 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Użytkownik, który będzie właścicielem plików logu we/wy: %s" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupa, która będzie właścicielem plików logu we/wy: %s" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Uprawnienia dla plików logu we/wy: 0%o" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Uruchomienie poleceń poprzez deskryptor pliku zamiast ścieżki: %s" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:504 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignorowanie nieznanych wpisów Defaults w sudoers zamiast ostrzeżenia" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Czas w sekundach, po którym polecenie będzie kończone: %u" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "Zezwolenie użytkownikowi na określenie limitu czasu z linii poleceń" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Natychmiastowy zrzut danych logu we/wy na dysk zamiast buforowania" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "Dołączanie identyfikatora procesu przy logowaniu przez syslog" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Rodzaj rekordu znacznika czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "Komunikat błędu uwierzytelnienia: %s" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "Ignorowanie wielkości liter przy dopasowywaniu nazw użytkownika" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "Ignorowanie wielkości liter przy dopasowywaniu nazw grup" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "Logowanie kiedy polecenie jest dozwolone przez sudoers" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "Logowanie kiedy polecenie jest zabronione przez sudoers" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "Serwer(y) logów sudo do połączenia, z opcjonalnym portem" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Limit czasu serwera logów sudo w sekundach: %u" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:556 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Włączenie opcji gniazda SO_KEEPALIVE na gnieździe połączonym z serwerem logów" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Ścieżka do pliku paczki CA serwera audytu: %s" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Ścieżka do pliku certyfikatu sudoers: %s" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Ścieżka do pliku klucza prywatnego sudoers: %s" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "Sprawdzenie poprawności certyfikatu serwera logów" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Zezwolenie na użycie nieznanego ID użytkownika i/lub grupy runas" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "Zezwolenie na uruchamianie poleceń tylko jako użytkownik z prawidłową powłoką" -#: plugins/sudoers/def_data.c:564 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "Ustawienie użytkownika zdalnego PAM na użytkownika uruchamiającego sudo" -#: plugins/sudoers/def_data.c:568 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "Ustawienie hosta zdalnego PAM nazwę hosta lokalnego" -#: plugins/sudoers/def_data.c:572 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "Katalog roboczy do zmiany przed uruchomieniem polecenia: %s" -#: plugins/sudoers/def_data.c:576 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Katalog główny do zmiany przed uruchomieniem polecenia: %s" -#: plugins/sudoers/def_data.c:580 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "Format logów do tworzenia: %s" -#: plugins/sudoers/def_data.c:584 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "Włączenie obsługi RBAC SELinux" -#: plugins/sudoers/def_data.c:588 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "Ścieżka do pliku tworzonego przy pierwszym uruchomieniu sudo: %s" -#: plugins/sudoers/def_data.c:592 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "Przechwycenie dalszych poleceń i zastosowanie do nich restrykcji sudoers" -#: plugins/sudoers/def_data.c:596 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "Logowanie podpoleceń uruchamianych przez pierwotne polecenie" -#: plugins/sudoers/def_data.c:600 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "Logowanie stanu wyjścia poleceń" -#: plugins/sudoers/def_data.c:604 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "Dalsze polecenia w przechwyconej sesji muszą być uwierzytelniane" -#: plugins/sudoers/def_data.c:608 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "Zezwolenie na uruchamianie programów setuid lub setgid z przechwyconego polecenia" -#: plugins/sudoers/def_data.c:612 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "Maksymalny rozmiar, do jakiego może rosnąć przestrzeń adresowa procesu (w bajtach): %s" -#: plugins/sudoers/def_data.c:616 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "Maksymalny rozmiar pliku core, jaki może być utworzony (w bajtach): %s" -#: plugins/sudoers/def_data.c:620 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "Maksymalna ilość czasu CPU, jaką proces może użyć (w sekundach): %s" -#: plugins/sudoers/def_data.c:624 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "Maksymalny rozmiar segmentu danych procesu (w bajtach): %s" -#: plugins/sudoers/def_data.c:628 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "Maksymalny rozmiar pliku, jaki proces może utworzyć (w bajtach): %s" -#: plugins/sudoers/def_data.c:632 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "Maksymalna liczba blokad, jaką proces może ustanowić: %s" -#: plugins/sudoers/def_data.c:636 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "Maksymalny rozmiar, jaki proces może zablokować w pamięci (w bajtach): %s" -#: plugins/sudoers/def_data.c:640 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "Maksymalna liczba plików, jaką proces może mieć otwartych: %s" -#: plugins/sudoers/def_data.c:644 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "Maksymalna liczba procesów, jaką użytkownik może jednocześnie uruchomić: %s" -#: plugins/sudoers/def_data.c:648 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "Maksymalny rozmiar, do jakiego może urosnąć rozmiar rezydentny procesu (w bajtach): %s" -#: plugins/sudoers/def_data.c:652 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "Maksymalny rozmiar, do jakiego może urosnąć stos procesu (w bajtach): %s" -#: plugins/sudoers/def_data.c:656 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "Próba uwierzytelnienia nawet w trybie nieinteraktywnym" -#: plugins/sudoers/def_data.c:660 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "Zapisywanie haseł czystym tekstwem na wejściu/wyjściu logu" -#: plugins/sudoers/def_data.c:664 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "Lista wyrażeń regularnych do użycia przy dopasowywania pytania o hasło" -#: plugins/sudoers/def_data.c:668 +#: plugins/sudoers/def_data.c:688 #, c-format msgid "The mechanism used by the intercept and log_subcmds options: %s" msgstr "Mechanizm używany przez opcje intercept i log_subcmds: %s" -#: plugins/sudoers/def_data.c:672 +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "Próba weryfikacji polecenia i argumentów po uruchomieniu" + +#: plugins/sudoers/def_data.c:696 #, c-format msgid "AppArmor profile to use in the new security context: %s" msgstr "Profil AppArmor do użycia w nowym kontekście bezpieczeństwa: %s" @@ -2553,31 +2639,31 @@ msgstr "błędny typ Defaults 0x%x dla opcji \"%s\"" msgid "value \"%s\" is invalid for option \"%s\"" msgstr "błędna wartość \"%s\" dla opcji \"%s\"" -#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 -#: plugins/sudoers/policy.c:216 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format msgid "path name for \"%s\" too long" msgstr "ścieżka pliku \"%s\" zbyt długa" -#: plugins/sudoers/defaults.c:1133 +#: plugins/sudoers/defaults.c:1134 #, c-format msgid "values for \"%s\" must start with a '/', '~', or '*'" msgstr "wartości \"%s\" muszą zaczynać się od '/', '~' lub '*'" -#: plugins/sudoers/defaults.c:1140 +#: plugins/sudoers/defaults.c:1141 #, c-format msgid "values for \"%s\" must start with a '/'" msgstr "wartości \"%s\" muszą zaczynać się od '/'" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: uszkodzone envp, niezgodność długości" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "nie udało się przebudować środowiska" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "niestety nie jest dozwolone ustawianie następujących zmiennych środowiskowych: %s" @@ -2592,27 +2678,27 @@ msgstr "nieobsługiwany typ skrótu %d dla %s" msgid "%s: read error" msgstr "%s: błąd odczytu" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "właścicielem %s musi być uid %d" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "prawo zapisu do %s może mieć tylko właściciel" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "nie udało się załadować %s: %s" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "nie udało się odnaleźć symbolu \"group_plugin\" w %s" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: niezgodna główna wersja wtyczki grup %d, oczekiwano %d" @@ -2635,10 +2721,10 @@ msgstr "Pary lokalnych adresów IP i masek:\n" msgid "unable to update sequence file" msgstr "nie udało się uaktualnić pliku sekwencji" -#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 -#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 -#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 -#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "nie udało się zapisać do pliku logu we/wy: %s" @@ -2648,25 +2734,25 @@ msgstr "nie udało się zapisać do pliku logu we/wy: %s" msgid "unable to create %s/%s" msgstr "nie udało się utworzyć %s/%s" -#: plugins/sudoers/iolog.c:955 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: błąd wewnętrzny, plik logu we/wy dla zdarzenia %d nie jest otwarty" -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 -#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 -#: plugins/sudoers/visudo.c:552 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "nie udało się odczytać zegara" -#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 -#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: błąd wewnętrzny, błędny sygnał %d" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "brak obsługi starttls w przypadku użycia ldaps" @@ -2689,7 +2775,7 @@ msgstr "nie udało się zainicjować LDAP: %s" msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "wybrano start_tls, ale biblioteki LDAP nie obsługują ldap_start_tls_s() ani ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "błędny atrybut sudoOrder: %s" @@ -2699,12 +2785,12 @@ msgstr "błędny atrybut sudoOrder: %s" msgid "%s: port too large" msgstr "%s: za duży numer portu" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nieobsługiwany rodzaj URI LDAP: %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "nie można mieszać URI ldap i ldaps" @@ -2729,111 +2815,111 @@ msgstr "nie udało się otworzyć systemu audytowego" msgid "unable to send audit message" msgstr "nie udało się wysłać komunikatu audytowego" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 -#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "błąd w pętli zdarzeń" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Utworzenie nowego obiektu SSL_CTX nie powiodło się: %s" -#: plugins/sudoers/log_client.c:225 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "nie udało się załadować paczki certyfikatów CA %s" -#: plugins/sudoers/log_client.c:247 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "nie udało się załadować certyfikatu %s" -#: plugins/sudoers/log_client.c:261 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "nie udało się załadować klucza prywatnego %s" -#: plugins/sudoers/log_client.c:270 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Nie udało się przydzielić obiektu SSL: %s" -#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "Połączenie TLS do %s:%s nie powiodło się: %s" -#: plugins/sudoers/log_client.c:538 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "Inicjowanie TLS nie powiodło się" -#: plugins/sudoers/log_client.c:548 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "Powitanie TLS nie powiodło się" -#: plugins/sudoers/log_client.c:1246 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: błąd wewnętrzny, błędny kod wyjścia %d" -#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "utracono połączenie z serwerem logów" -#: plugins/sudoers/log_client.c:1876 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "brak bufora zapisu" -#: plugins/sudoers/log_client.c:2024 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "nie udało się połączyć z serwerem logów" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "użytkownik NIE występuje w sudoers" -#: plugins/sudoers/logging.c:300 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "użytkownik NIE jest autoryzowany na hoście" -#: plugins/sudoers/logging.c:302 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "polecenie niedozwolone" -#: plugins/sudoers/logging.c:323 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "%s nie jest w pliku sudoers.\n" -#: plugins/sudoers/logging.c:326 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "%s nie ma uprawnień do uruchamiania sudo na %s.\n" -#: plugins/sudoers/logging.c:329 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Niestety użytkownik %s nie może uruchamiać sudo na %s.\n" -#: plugins/sudoers/logging.c:332 +#: plugins/sudoers/logging.c:324 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Niestety użytkownik %s nie ma uprawnień do uruchamiania '%s%s%s' jako %s%s%s na %s.\n" -#: plugins/sudoers/logging.c:342 +#: plugins/sudoers/logging.c:334 msgid "This incident has been reported to the administrator.\n" msgstr "Ten incydent został zgłoszony do administratora.\n" -#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 -#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 -#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 -#: plugins/sudoers/sudoers.c:801 +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s: nie znaleziono polecenia" -#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2842,7 +2928,7 @@ msgstr "" "zignorowano plik \"%s\" znaleziony w '.'\n" "Proszę użyć \"sudo ./%s\", jeśli to \"%s\" ma być uruchomiony." -#: plugins/sudoers/logging.c:395 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2850,24 +2936,24 @@ msgstr[0] "%u błędna próba wprowadzenia hasła" msgstr[1] "%u błędne próby wprowadzenia hasła" msgstr[2] "%u błędnych prób wprowadzenia hasła" -#: plugins/sudoers/logging.c:485 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "błąd uwierzytelniania" -#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "wymagane jest hasło" -#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 msgid "problem parsing sudoers" msgstr "problem przy analizie pliku sudoers" -#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format msgid "%s:%d:%d: %s" msgstr "%s:%d:%d: %s" -#: plugins/sudoers/logging.c:1068 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "nie udało się zapisać pliku logu: %s" @@ -2882,7 +2968,7 @@ msgstr "skrót dla %s (%s) ma błędną długość %zu, oczekiwano %zu" msgid "digest for %s (%s) is not in %s form" msgstr "skrót dla %s (%s) nie jest w postaci %s" -#: plugins/sudoers/parse.c:585 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2891,7 +2977,7 @@ msgstr "" "\n" "Rola LDAP: %s\n" -#: plugins/sudoers/parse.c:588 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2899,110 +2985,110 @@ msgstr "" "\n" "Wpis sudoers:\n" -#: plugins/sudoers/parse.c:590 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " Jako użytkownicy: " -#: plugins/sudoers/parse.c:605 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " Jako grupy: " -#: plugins/sudoers/parse.c:615 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " Opcje: " -#: plugins/sudoers/parse.c:679 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " Polecenia:\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Pasujące wpisy Defaults dla %s na %s:\n" -#: plugins/sudoers/parse.c:888 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Wartości specyficzne dla Runas i Command dla %s:\n" -#: plugins/sudoers/parse.c:906 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Użytkownik %s może uruchamiać na %s następujące polecenia:\n" -#: plugins/sudoers/parse.c:921 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Użytkownik %s nie ma uprawnień do uruchamiania sudo na %s.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "zignorowano niekompletne sudoRole: cn: %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "błędny atrybut LDIF: %s" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "błędna wartość %.*s ustawiona przez frontend sudo" -#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "nie udało się przeanalizować listy adresów sieciowych" -#: plugins/sudoers/policy.c:508 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "nazwa użytkownika nie ustawiona przez frontend sudo" -#: plugins/sudoers/policy.c:512 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "ID użytkownika nie ustawiony przez frontend sudo" -#: plugins/sudoers/policy.c:516 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "ID grupy nie ustawiony przez frontend sudo" -#: plugins/sudoers/policy.c:520 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "nazwa hosta nie ustawiona przez frontend sudo" -#: plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "błędny katalog roboczy: %s" -#: plugins/sudoers/policy.c:886 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "błędny katalog chroot: %s" -#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "nie udało się wywołać %s" -#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 -#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: błędne flagi trybu z frontendu sudo: 0x%x" -#: plugins/sudoers/policy.c:1262 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Wersja wtyczki polityki sudoers %s\n" -#: plugins/sudoers/policy.c:1264 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Wersja gramatyki pliku sudoers %d\n" -#: plugins/sudoers/policy.c:1268 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -3011,27 +3097,27 @@ msgstr "" "\n" "Ścieżka do sudoers: %s\n" -#: plugins/sudoers/policy.c:1271 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "ścieżka do nsswitch: %s\n" -#: plugins/sudoers/policy.c:1273 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "ścieżka do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "ścieżka do ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1307 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "nie udało się zarejestrować uchwytu typu %d (wersja %d.%d)" -#: plugins/sudoers/policy.c:1325 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "nie udało się wyrejestrować uchwytu typu %d (wersja %d.%d)" @@ -3170,148 +3256,142 @@ msgstr "nie udało się zainicjować źródła SSS. Czy SSSD jest zainstalowany msgid "unable to find symbol \"%s\" in %s" msgstr "nie udało się odnaleźć symbolu \"%s\" w %s" -#: plugins/sudoers/sudoers.c:258 +#: plugins/sudoers/sudoers.c:263 #, c-format msgid "unable to get defaults from %s" msgstr "nie udało się pobrać wartości domyślnych z %s" -#: plugins/sudoers/sudoers.c:265 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "nie znaleziono poprawnych źródeł sudoers, zakończenie" -#: plugins/sudoers/sudoers.c:341 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "użytkownik nie ma uprawnień do zmiany katalogu głównego na %s" -#: plugins/sudoers/sudoers.c:343 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "brak uprawnień do używania opcji -R z %s" -#: plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "użytkownik nie ma uprawnień do zmiany katalogu na %s" -#: plugins/sudoers/sudoers.c:369 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "brak uprawnień do używania opcji -D z %s" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "nie podano polecenia" -#: plugins/sudoers/sudoers.c:421 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "wg sudoers root nie ma prawa używać sudo" -#: plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "użytkownik nie ma pozwolenia na zmianę limitu closefrom" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "brak uprawnień do używania opcji -C" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "właściciel znacznika czasu (%s): nie ma takiego użytkownika" -#: plugins/sudoers/sudoers.c:547 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "brak tty" -#: plugins/sudoers/sudoers.c:548 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "niestety do uruchomienia sudo konieczny jest tty" -#: plugins/sudoers/sudoers.c:555 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "błędna powłoka użytkownika %s: %s" -#: plugins/sudoers/sudoers.c:638 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "polecenie w bieżącym katalogu" -#: plugins/sudoers/sudoers.c:653 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "\"cd\" to polecenie wbudowane powłoki, nie może być uruchomione bezpośrednio." -#: plugins/sudoers/sudoers.c:655 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "można użyć opcji -s do uruchomienia powłoki uprzywilejowanej." -#: plugins/sudoers/sudoers.c:657 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "można użyć opcji -D do uruchomienia polecenia w podanym katalogu." -#: plugins/sudoers/sudoers.c:666 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "użytkownik nie ma uprawnień do ustawienia limitu czasu polecenia" -#: plugins/sudoers/sudoers.c:668 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "niestety brak uprawnień do ustawienia limitu czasu polecenia" -#: plugins/sudoers/sudoers.c:676 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "użytkownik nie ma uprawnień do zachowania środowiska" -#: plugins/sudoers/sudoers.c:678 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "niestety brak uprawnień do zachowania środowiska" -#: plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit nie musi być uruchamiany przez sudo" -#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "nie udało się odczytać %s" -#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 -#: plugins/sudoers/visudo.c:764 -#, c-format -msgid "unable to stat %s" -msgstr "nie udało się wykonać stat na %s" - -#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s nie jest zwykłym plikiem" -#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "właścicielem %s jest uid %u, powinien być %u" -#: plugins/sudoers/sudoers.c:1147 toke.l:1252 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "%s jest zapisywalny dla świata" -#: plugins/sudoers/sudoers.c:1151 toke.l:1255 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "właścicielem %s jest gid %u, powinien być %u" -#: plugins/sudoers/sudoers.c:1184 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "tylko root może używać \"-c %s\"" -#: plugins/sudoers/sudoers.c:1203 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "nieznana klasa logowania %s" -#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "nie udało się rozwiązać nazwy hosta %s" @@ -3409,17 +3489,17 @@ msgstr "niedozwolony kończący \"!\"" msgid "unknown search type %d" msgstr "nieznany typ wyszukiwania %d" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "Składnia: %s [-hnRS] [-d katalog] [-m liczba] [-s wsp_szybkości] ID\n" -#: plugins/sudoers/sudoreplay.c:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "Składnia: %s [-h] [-d katalog] -l [wyrażenie wyszukiwania]\n" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -3428,7 +3508,7 @@ msgstr "" "%s - odtwarzanie logów sesji sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3484,127 +3564,122 @@ msgstr "" "\n" "Polecenie nie znalezione" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s jest zapisywalny dla groupy" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "nie udało się uciąć pliku znacznika czasu do długości %lld" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "znacznik czasu zbyt daleko w przyszłości" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "znacznik czasu zbyt daleko w przyszłości: %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "nie udało się zablokować pliku znacznika czasu %s" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "ścieżka stanu instrukcji zbyt długa: %s/%s" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "sudoedit nie powinien być podawany ze ścieżką" -#: plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "opcja -x będzie usunięta w kolejnej wersji" -#: plugins/sudoers/visudo.c:251 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "należy rozważyć użycie zamiast niej narzędzia cvtsudoers" -#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "wciśnięcie return przejdzie do edycji %s: " -#: plugins/sudoers/visudo.c:321 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "zawartość sesji edycji pozostawiona w %s" -#: plugins/sudoers/visudo.c:397 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "podany edytor (%s) nie istnieje" -#: plugins/sudoers/visudo.c:399 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "nie znaleziono edytora (ścieżka = %s)" -#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "nie udało się wykonać stat na %s" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "błąd zapisu" -#: plugins/sudoers/visudo.c:559 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "nie udało się wykonać stat na pliku tymczasowym (%s), %s nie zmieniony" -#: plugins/sudoers/visudo.c:566 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "plik tymczasowy (%s) zerowej długości, %s nie zmieniony" -#: plugins/sudoers/visudo.c:572 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "błąd edytora (%s), %s nie zmieniony" -#: plugins/sudoers/visudo.c:594 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s nie zmieniony" -#: plugins/sudoers/visudo.c:639 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "nie udało się ponownie otworzyć pliku tymczasowego (%s), %s nie zmieniony." -#: plugins/sudoers/visudo.c:652 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "nie udało się przeanalizować pliku tymczasowego (%s), nieznany błąd" -#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "nie udało się ustawić (uid, gid) %s na (%u, %u)" -#: plugins/sudoers/visudo.c:803 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s i %s nie są na tym samym systemie plików, użycie mv do zmiany nazwy" -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "polecenie nie powiodło się: '%s %s %s', %s nie zmieniony" -#: plugins/sudoers/visudo.c:821 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "błąd podczas zmiany nazwy %s, %s nie zmieniony" -#: plugins/sudoers/visudo.c:841 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "Co teraz? " -#: plugins/sudoers/visudo.c:855 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3616,41 +3691,41 @@ msgstr "" " (x) wyjście bez zapisu zmian do pliku sudoers\n" " (Q) wyjście i zapisanie zmian w pliku sudoers (NIEBEZPIECZNE!)\n" -#: plugins/sudoers/visudo.c:901 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "nie udało się uruchomić %s" -#: plugins/sudoers/visudo.c:932 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: błędny właściciel, (uid, gid) powinny wynosić (%u, %u)\n" -#: plugins/sudoers/visudo.c:943 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: błędne uprawnienia, powinny być 0%o\n" -#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s: składnia poprawna\n" -#: plugins/sudoers/visudo.c:1017 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s zajęty, proszę spróbować później" -#: plugins/sudoers/visudo.c:1021 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "Modyfikować mimo to? [y/N]" -#: plugins/sudoers/visudo.c:1117 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "Uwaga: %s:%d:%d: nie użyty %s \"%s\"" -#: plugins/sudoers/visudo.c:1229 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3659,25 +3734,27 @@ msgstr "" "%s - bezpieczna edycja pliku sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1231 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" msgstr "" "\n" "Opcje:\n" -" -c, --check tryb wyłącznie sprawdzający\n" -" -f, --file=sudoers określenie położenia pliku sudoers\n" -" -h, --help wyświetlenie opisu i zakończenie\n" -" -q, --quiet mniej obszerne komunikaty o błędach składni\n" -" -s, --strict ścisłe sprawdzanie składni\n" -" -V, --version wyświetlenie informacji o wersji i zakończenie\n" +" -c, --check tryb wyłącznie sprawdzający\n" +" -f, --file=sudoers określenie położenia pliku sudoers\n" +" -h, --help wyświetlenie opisu i zakończenie\n" +" -I, --no-includes bez edycji plików dołączanych\n" +" -q, --quiet mniej obszerne komunikaty o błędach składni\n" +" -s, --strict ścisłe sprawdzanie składni\n" +" -V, --version wyświetlenie informacji o wersji i zakończenie\n" #: toke.l:189 msgid "empty string" diff --git a/plugins/sudoers/po/ro.mo b/plugins/sudoers/po/ro.mo index 0f59bc4995ac321dda850b119ee7514375f61e73..5ee5fc10a9484f70e07c2fcb7890f111c1a5fffe 100644 GIT binary patch delta 16215 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 delta 15108 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 OZk642sHUrv|NjAEm\n" "Language-Team: Romanian \n" "Language: ro\n" @@ -26,9 +27,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=((n==1) ? 0 : (n==2) ? 1 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 2 : 3);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.1.1\n" -#: confstr.sh:1 gram.y:1218 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "eroare de sintaxă" @@ -52,13 +53,13 @@ msgstr "*** Informații de SECURITATE pentru %h ***" msgid "Sorry, try again." msgstr "Încercați din nou." -#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 -#: gram.y:365 gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 -#: gram.y:501 gram.y:511 gram.y:523 gram.y:571 gram.y:580 gram.y:589 -#: gram.y:598 gram.y:730 gram.y:738 gram.y:749 gram.y:761 gram.y:780 -#: gram.y:943 gram.y:948 gram.y:956 gram.y:970 gram.y:976 gram.y:1098 -#: gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 gram.y:1162 gram.y:1171 -#: gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 gram.y:1816 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 #: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 @@ -68,50 +69,64 @@ msgstr "Încercați din nou." #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 -#: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:168 plugins/sudoers/cvtsudoers.c:131 -#: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 -#: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 -#: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:862 -#: plugins/sudoers/cvtsudoers.c:870 plugins/sudoers/cvtsudoers.c:1365 -#: plugins/sudoers/cvtsudoers.c:1369 plugins/sudoers/cvtsudoers.c:1471 -#: plugins/sudoers/cvtsudoers_csv.c:183 plugins/sudoers/cvtsudoers_csv.c:246 -#: 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:376 -#: plugins/sudoers/cvtsudoers_ldif.c:430 plugins/sudoers/cvtsudoers_ldif.c:438 -#: plugins/sudoers/cvtsudoers_ldif.c:449 plugins/sudoers/cvtsudoers_ldif.c:456 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:481 -#: plugins/sudoers/cvtsudoers_ldif.c:489 plugins/sudoers/cvtsudoers_ldif.c:636 -#: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 +#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 +#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 #: plugins/sudoers/cvtsudoers_merge.c:446 @@ -121,11 +136,11 @@ msgstr "Încercați din nou." #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1158 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -134,124 +149,125 @@ msgstr "Încercați din nou." #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 -#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 -#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 -#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 -#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 -#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 -#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 -#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 -#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 -#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 -#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 -#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 -#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 -#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 -#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 -#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 -#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 -#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 -#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 -#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 #: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 #: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 #: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 #: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 #: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "nu se poate aloca memoria" -#: gram.y:622 +#: gram.y:623 msgid "a digest requires a path name" msgstr "tabelul sumelor de control necesită un nume de cale" -#: gram.y:644 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "valorile pentru „CWD” trebuie să înceapă cu un caracter: „/”, „~”, sau „*”" -#: gram.y:650 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "calea „CWD” este prea lungă" -#: gram.y:660 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "valorile pentru „CHROOT” trebuie să înceapă cu un caracter: „/”, „~”, sau „*”" -#: gram.y:666 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "calea „CHROOT” este prea lungă" -#: gram.y:801 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "eroare de sintaxă, cuvântul rezervat %s utilizat ca nume de alias" -#: gram.y:824 +#: gram.y:825 msgid "invalid notbefore value" msgstr "valoare „notbefore” nevalidă" -#: gram.y:833 +#: gram.y:834 msgid "invalid notafter value" msgstr "valoare „notafter” nevalidă" -#: gram.y:843 plugins/sudoers/policy.c:376 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "limită de timp prea mare" -#: gram.y:845 plugins/sudoers/policy.c:378 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "valoare de limită de timp nevalidă" -#: gram.y:966 plugins/sudoers/sudoers.c:1014 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "comandă prea lungă" -#: gram.y:1220 plugins/sudoers/check_aliases.c:96 -#: plugins/sudoers/defaults.c:1275 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1270 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "Aliasul „%s” este deja definit" -#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 #: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 #: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 @@ -261,33 +277,48 @@ msgstr "Aliasul „%s” este deja definit" #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 -#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 @@ -317,11 +348,11 @@ msgstr "Aliasul „%s” este deja definit" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1157 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -330,46 +361,47 @@ msgstr "Aliasul „%s” este deja definit" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 -#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 -#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 -#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 -#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 -#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 -#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 -#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 -#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 -#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: 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:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 -#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 -#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 -#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 -#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 -#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 -#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 #: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 -#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -382,25 +414,25 @@ msgstr "Aliasul „%s” este deja definit" #: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 #: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 #: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 -#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 -#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 -#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 -#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 -#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 -#: toke.l:1226 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 +#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -409,14 +441,14 @@ msgstr "%s: %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 #: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 #: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 -#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 -#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 #: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 #: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 @@ -459,7 +491,7 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (comandă continuată) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -574,14 +606,14 @@ msgstr "%s: câmpul de grup efectiv (rulează ca grupul X) lipsește" msgid "%s exists but is not a directory (0%o)" msgstr "%s există dar nu este un director (0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "nu s-a putut executa «mkdir», pentru a crea directorul %s" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 -#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "nu s-a putut modifica modul de acces de la %s la 0%o" @@ -596,150 +628,156 @@ msgstr "eroare la citirea fișierului de sincronizare: %s" msgid "invalid timing file line: %s" msgstr "linie de fișier de sincronizare nevalidă: %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 -#: plugins/sudoers/policy.c:573 -msgid "unable to generate UUID" -msgstr "nu s-a putut genera UUID-ul" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s: eroare de protocol: cheie nulă (NULL)" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "%s: eroare de protocol: tip incorect pentru %s" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s: eroare de protocol: valoare nulă (NULL) găsită în %s" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "nu s-a putut genera UUID-ul" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "%s: eroare de protocol: lipsește %s din AcceptMessage" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "%s: nu se poate formata ID-ul sesiunii" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "%s: %s nu este configurat" -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "nu se poate expanda calea către iolog %s" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "nu se poate crea calea către iolog %s" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "iofd nevalid: %d" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "eroare la închiderea iofd %d: %s" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "eroare la golirea iofd %d: %s" -#: logsrvd/iolog_writer.c:780 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "jurnal de In/Ieș nevalid %s: %s menționat, dar nu definit" -#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s: nu se poate găsi punctul de reluare [%lld, %ld]" -#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 -#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 #: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 -#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 -#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "nu se poate deschide %s" -#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "nu se poate deschide %s/%s" -#: logsrvd/iolog_writer.c:839 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "nu se poate copia %s/%s în %s/%s: %s" -#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "nu se poate redenumi %s în %s" -#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s: nu se poate găsi punctul de reluare [%lld, %ld]" -#: logsrvd/logsrv_util.c:154 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "lipsește fișierul jurnal de In/Ieș %s/%s" -#: logsrvd/logsrv_util.c:161 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: nu se poate căuta mai departe %zu" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "nu se poate conecta la releu" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "mesajul serverului este prea mare: %zu" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 -#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 -#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 -#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 -#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 -#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 -#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 -#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 -#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 -#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 -#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 -#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -748,375 +786,400 @@ msgstr "mesajul serverului este prea mare: %zu" msgid "unable to add event to queue" msgstr "nu se poate adăuga evenimentul la coadă" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "stare neașteptată %d pentru %s" -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "eroare de stare a mașinii" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "AcceptMessage nevalid" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "RejectMessage nevalid" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "ExitMessage nevalid" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "RestartMessage nevalid" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "AlertMessage nevalid" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "%s: IoBuffer neașteptat" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "eroare de protocol" -#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 -#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 -#: plugins/sudoers/log_client.c:1618 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "IoBuffer nevalid" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "ChangeWindowSize nevalid" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "CommandSuspend nevalid" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 #, c-format msgid "unable to unpack %s size %zu" msgstr "nu se poate despacheta %s cu dimensiunea %zu" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "valoare type_case %d neașteptată în %s din %s" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "tip de ClientMessage nerecunoscut" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "a expirat timpul de scriere la clientul %s" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "lipsește memoria tampon de scriere pentru clientul %s" -#: logsrvd/logsrvd.c:982 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "a expirat timpul de citire de la clientul %s" -#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "sfârșit de fișier de la %s fără închiderea corectă a TLS" -#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:716 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "mesajul clientului este prea mare: %zu" -#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "mesajul clientului este prea mare" -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "ClientMessage nevalid" -#: logsrvd/logsrvd.c:1389 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "nu se poate obține adresa IP de la distanță" -#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 -#: plugins/sudoers/log_client.c:276 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Nu se pot atașa datele utilizatorului la obiectul ssl: %s" -#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "nu se poate configura soclul de ascultare" -#: logsrvd/logsrvd.c:1718 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "semnal neașteptat %d" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "server de jurnal al sudo" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "Opțiuni:" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "calea către fișierul de configurare" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "afișează mesajul de ajutor și iese" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "nu se bifurcă, rulează în prim-plan" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "șansele procentuale de conexiuni vor scădea" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "afișează informațiile despre versiune și iese" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Este necesară versiunea Protobuf-C 1.3 sau mai mare" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "valoare nevalidă a probabilității de pierdere: %s" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:180 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s versiunea %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 #: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 -#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "utilizator necunoscut %s" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 -#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "grup necunoscut %s" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "nu se poate analiza modul iolog %s" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "valoare nevalidă pentru %s: %s" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "fără suport TLS" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: nu este o cale complet calificată" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "facilitate de syslog necunoscută %s" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "prioritate de syslog necunoscută %s" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d „[” desperecheată: %s" -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "%s:%d gunoi după „]”: %s" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d secțiune de configurare nevalidă: %s" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d linie de configurare nevalidă: %s" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d nume de secțiune așteptat: %s" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] cheie ilegală: %s" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:1035 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "nu se poate deschide fișierul de jurnal: %s" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "nu se poate inițializa contextul TLS al serverului" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "nu se poate inițializa contextul TLS al releului" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 -#: logsrvd/logsrvd_journal.c:416 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "nu se poate crea fișierul de jurnal" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1020 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "nu se poate bloca %s" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "nu se poate bloca fișierul de jurnal" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "nu se poate deschide fișierul de jurnal" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 -#: logsrvd/logsrvd_journal.c:452 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "nu se poate scrie fișierul de jurnal" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "nu se poate redenumi fișierul de jurnal" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "sfârșit de fișier neașteptat la citirea fișierului de jurnal" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "eroare la citirea fișierului de jurnal" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "fișier de jurnal nevalid, nu se poate reporni" -#: logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "nu se poate ajunge la poziția [%lld, %ld] din fișierul de jurnal %s" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "value_case neașteptată %d în %s din %s" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "eroare la analizarea AcceptMessage" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "eroare la crearea jurnalului de In/Ieș" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "eroare la înregistrarea evenimentului de acceptare" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "eroare la analizarea RejectMessage" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "eroare la înregistrarea evenimentului de respingere" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "eroare la înregistrarea evenimentului de ieșire" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "jurnalul este deja complet, nu poate fi repornit" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "nu se poate reporni jurnalizarea" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "eroare la analizarea AlertMessage" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "eroare la înregistrarea evenimentului de alertă" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "nu se poate formata memoria tampon de timp, lungime %d" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "întreruperea aleatorie a conexiunii" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "eroare la scrierea IoBuffer" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "eroare la scrierea ChangeWindowSize" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "eroare la scrierea CommandSuspend" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "negocierea TLS cu gazda releu a eșuat" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "nu se poate conecta la gazda releu" @@ -1125,251 +1188,251 @@ msgstr "nu se poate conecta la gazda releu" # «→ aici pare că lipsește un spațiu după cele două puncte.» # *** # corectare efectuată -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "%s: ServerHello nevalid, server_id lipsește" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1504 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "ServerHello nevalid" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "tip de ServerMessage nerecunoscut" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "a expirat limita de timp de citire de la releu %s (%s)" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "a expirat limita de timp de citire de la releul" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "numele gazdei releului nu se potrivește cu certificatul" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 -#: logsrvd/logsrvd_relay.c:784 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "eroare la citirea de la releu" -#: logsrvd/logsrvd_relay.c:805 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "nu se poate citi de la releu" -#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "conexiune închisă a serverului de releu" -#: logsrvd/logsrvd_relay.c:838 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "mesajul serverului este prea mare" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "a expirat limita de timp la scrierea la releu %s (%s)" -#: logsrvd/logsrvd_relay.c:904 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "a expirat limita de timp de scriere la releu" -#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 -#: logsrvd/logsrvd_relay.c:974 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "eroare la scrierea la releu" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "trimite jurnalul de In/Ieș al «sudo» la serverul de la distanță" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "trimite doar un eveniment de acceptare (fără In/Ieș)" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "fișierul pachet de certificate pentru a verifica certificatul serverului" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "fișier de certificat pentru negocierea TLS" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "gazda la care se trimit jurnalele" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "ID-ul de la distanță al jurnalului In/Ieș care urmează să fie reluat" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "fișier de cheie privată" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "nu se verifică certificatul serverului" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "portul de utilizat atunci când vă conectați la gazdă" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "repornește transferul precedent de jurnal In/Ieș" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "respinge comanda cu motivul specificat" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "oprește transferul după ce s-a atins acest timp" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "testează serverul de auditare prin trimiterea jurnalului de In/Ieș selectat de n ori în paralel" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "nu se poate căuta %s:%s: %s" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "nu se poate obține adresa IP a serverului" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "nu se poate citi %s/%s: %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 -#: plugins/sudoers/iolog.c:1024 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "eveniment de In/Ieș neașteptat %d" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 -#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: stare neașteptată %d" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "mesaj de eroare primit de la server: %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "mesaj de renunțare primit de la server: %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: valoare type_case neașteptată %d" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "a expirat limita de timp de citire de la server" -#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 msgid "host name does not match certificate" msgstr "numele gazdei nu se potrivește cu certificatul" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "sfârșit de fișier prematur" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "mesajul serverului este prea mare: %u" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "a expirat limita de timp de scriere la server" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "trebuie să fie specificat atît ID-ul iolog cît și punctul de repornire" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "un punct de repornire poate să nu fie stabilit când nicio In/Ieș nu este stabilită" -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "a ieșit prematur cu starea %d" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "timpul scurs trimis la server [%lld, %ld]" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "punctul de consemnare primit de la server [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "a expirat limita de timp a negocierii TLS" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "nu s-a putut configura evenimentul" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "conexiunea TLS a eșuat: %s" -#: logsrvd/tls_client.c:191 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "nu s-a putut aloca obiectul ssl: %s" -#: logsrvd/tls_client.c:205 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Nu s-a putut atașa soclul la obiectul ssl: %s" -#: logsrvd/tls_client.c:233 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "nu s-a putut inițializa contextul ssl: %s" -#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "nu s-a putut configura suita de cifrare TLS 1.2 la valoarea %s: %s" -#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "nu s-a putut configura suita de cifrare TLS 1.3 la valoarea %s: %s" -#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "nu se pot stabili parametrii diffie-hellman: %s" -#: logsrvd/tls_init.c:277 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "nu se poate crea contextul TLS: %s" -#: logsrvd/tls_init.c:284 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "nu se poate stabili versiunea de protocol minimă la TLS 1.2: %s" @@ -1387,12 +1450,12 @@ msgstr "nu se poate stabili versiunea de protocol minimă la TLS 1.2: %s" # din zi” nu prea are sens iar „orarul zilei” ar fi „the daily schedule”» # === # Ok, rămîne așa cum este -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 -#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 -#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 -#: plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "nu se poate obține ora actuală" @@ -1529,7 +1592,7 @@ msgstr "Contul este expirat sau configurării PAM îi lipsește o secțiune „a msgid "PAM account management error: %s" msgstr "Eroare de gestionare a contului PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "nu existați în baza de date %s" @@ -1602,17 +1665,17 @@ msgstr "Nu s-a putut determina condiția de auditare" msgid "unable to commit audit record" msgstr "nu se poate consemna înregistrarea de auditare" -#: plugins/sudoers/check.c:275 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "eroare la citirea fișierului de instrucțiuni %s" -#: plugins/sudoers/check.c:278 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "se ignoră fișierul de instrucțiuni %s: nu este un fișier obișnuit" -#: plugins/sudoers/check.c:291 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1633,14 +1696,14 @@ msgstr "" " 3. Cu o mare putere vine o mare responsabilitate.\n" "\n" -#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 -#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "uid necunoscut %u" -#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" @@ -1670,7 +1733,7 @@ msgstr "ordinea de pornire: %s: %s" msgid "order padding: %s: %s" msgstr "completarea de ordine: %s: %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "%s versiune de gramatică %d\n" @@ -1690,14 +1753,14 @@ msgstr "format de ieșire nesuportat %s" msgid "%s: input and output files must be different" msgstr "%s: fișierele de intrare și ieșire trebuie să fie diferite" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 -#: plugins/sudoers/visudo.c:969 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "nu se poate inițializa valorile implicite ale lui „sudoers”" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" @@ -1722,18 +1785,18 @@ msgstr "tip de suprimare nevalid: %s" msgid "invalid filter: %s" msgstr "filtru nevalid: %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "nu s-a putut analiza fișierul %s, eroare necunoscută" #: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "nu se poate scrie la %s" -#: plugins/sudoers/cvtsudoers.c:1501 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1742,7 +1805,7 @@ msgstr "" "%s - convertește între formatele de fișier „sudoers”\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1503 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -2192,102 +2255,122 @@ msgstr "Umask(masca de Unix) specificată în „sudoers”, o va înlocui pe ce #: plugins/sudoers/def_data.c:352 msgid "Log user's input for the command being run" -msgstr "Înregistrează în jurnal intrarea utilizatorului pentru comanda care se rulează" +msgstr "Înregistrează în jurnal intrarea utilizatorului pentru comanda care se execută" #: plugins/sudoers/def_data.c:356 -msgid "Log the output of the command being run" -msgstr "Înregistrează în jurnal ieșirea comenzii care se rulează" +msgid "Log the command's standard input if not connected to a terminal" +msgstr "Înregistrează în jurnal intrarea standard a comenzii dacă nu este conectată la un terminal" #: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "Înregistrează în jurnal intrarea terminalului utilizatorului pentru comanda care se execută" + +#: plugins/sudoers/def_data.c:364 +msgid "Log the output of the command being run" +msgstr "Înregistrează în jurnal ieșirea comenzii care se execută" + +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "Înregistrează în jurnal ieșirea standard a comenzii dacă nu este conectată la un terminal" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "Înregistrează în jurnal eroarea standard a comenzii dacă nu este conectată la un terminal" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "Înregistrează în jurnal ieșirea terminalului comenzii care se execută" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "Comprimă înregistrările din jurnal de In/Ieș utilizând «zlib»" -#: plugins/sudoers/def_data.c:364 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "Execută întotdeauna comenzile într-un pseudo-tty" -#: plugins/sudoers/def_data.c:368 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Modul pentru suport de grup non-Unix: %s" -#: plugins/sudoers/def_data.c:372 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Directorul în care se stochează informațiile returnate de operațiile de intrare/ieșire: %s" -#: plugins/sudoers/def_data.c:376 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fișierul în care se stochează informațiile returnate de operațiile de intrare/ieșire: %s" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Adaugă o intrare la fișierul „utmp/utmpx” când se alocă un pty" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Stabilește utilizatorul în utmp la utilizatorul „run as”, nu la utilizatorul care invocă" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "Setul de privilegii permise: %s" -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "Setul de privilegii limită: %s" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "Rulează comenzile pe un pty în fundal" -#: plugins/sudoers/def_data.c:400 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "Numele serviciului PAM de utilizat: %s" -#: plugins/sudoers/def_data.c:404 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Numele serviciului PAM de utilizat pentru shell-urile de autentificare: %s" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "Numele serviciului PAM de utilizat atunci când «sudo» este rulat cu opțiunea „-A”: %s" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "Încearcă să stabilească certificări PAM pentru utilizatorul vizat" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "Creează o nouă sesiune PAM pentru a rula comanda în ea" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "Realizează gestionarea validării contului PAM" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Numărul maxim de secvență al jurnalului de In/Ieș: %s" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "Activează suportul de „netgroup” (grup de rețea) „sudoers”" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:452 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Verifică directoarele părinte pentru capacitatea de scriere când se editează fișiere cu «sudoedit»" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Urmărește legăturile simbolice când se editează fișierele cu «sudoedit»" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "Interoghează modulul grupului pentru grupuri de sistem necunoscute" @@ -2311,19 +2394,19 @@ msgstr "Interoghează modulul grupului pentru grupuri de sistem necunoscute" # Morala, pentru „trăznaia” unuia, se scrie o # pagină întreagă(destul de vastă) în Wikipedia. # Și „bagă în boală”, multă lume „luminată”! 😇️ -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Potrivește „netgroups” (grupurile de rețea) pe baza întregului triplet: utilizator, gazdă și domeniu" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Permite executarea comenzilor chiar dacă «sudo» nu poate să scrie în jurnalul auditare" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Permite executarea comenzilor chiar dacă «sudo» nu poate să scrie în jurnalul de In/Ieș" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Permite executarea comenzilor chiar dacă «sudo» nu poate să scrie în fișierul de jurnal" @@ -2333,11 +2416,11 @@ msgstr "Permite executarea comenzilor chiar dacă «sudo» nu poate să scrie î # „Identifică grupurile din „sudoers” și face potrivirea după ID-ul grupului, nu după nume” # *** # Opinii/Idei? -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Rezolvă grupurile în „sudoers” și face potrivirea după ID-ul grupului, nu după nume" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:484 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Intrările în jurnal mai mari decât această valoare vor fi împărțite în mai multe mesaje syslog: %u" @@ -2367,166 +2450,166 @@ msgstr "Intrările în jurnal mai mari decât această valoare vor fi împărți # istoric al acestor informații... # (marcajul de timp, este decît # „o plus valoare” a acestor informații) -#: plugins/sudoers/def_data.c:468 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Utilizatorul ce va fi proprietarul fișierelor jurnalului de In/Ieș: %s" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupul ce va fi proprietarul fișierelor jurnalului de In/Ieș: %s" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Modul de acces la fișier, utilizat pentru fișierele jurnalului de In/Ieș: 0%o" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Execută comenzile după descriptorul fișierului în loc de, după calea de acces: %s" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:504 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignoră intrările Defaults necunoscute din „sudoers” în loc de-a genera un avertisment" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Timpul în secunde după care comanda va fi terminată: %u" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "Permite utilizatorul să specifice o limită de timp, de la linia de comandă" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Transferă imediat datele jurnalului de In/Ieș pe disc, în loc să le stocheze în memoria tampon" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "Include ID-ul procesului când se înregistrează via syslog" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Tipul de înregistrare a marcajului de timp a autentificării: %s" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "Mesaj de autentificare eșuată: %s" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "Ignoră diferența dintre majusculele/minuscule când se caută după numele de utilizator" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "Ignoră diferența dintre majusculele/minuscule când se caută după numele de grup" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "Înregistrează când o comandă este permisă de „sudoers”" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "Înregistrează când o comandă este respinsă de „sudoers”" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "Server(e) de înregistrare a jurnalului «sudo», la care se conectează cu portul opțional" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Limita de timp a serverului de înregistrare a jurnalului «sudo», în secunde: %u" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:556 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Activează opțiunea de soclu SO_KEEPALIVE pe soclul conectat la serverul de înregistrare a jurnalului" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Calea către fișierul pachet CA al serverului de auditare: %s" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Calea către fișierul certificat „sudoers”: %s" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Calea către fișierul cheie privată „sudoers”: %s" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "Verifică dacă certificatul serverului de înregistrare a jurnalului, este valid" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Permite utilizarea de ID de grup și/sau utilizator „run as” necunoscut" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "Permite doar rularea de comenzi ca un utilizator cu un shell valid" -#: plugins/sudoers/def_data.c:564 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "Stabilește utilizatorul de la distanță de pam, la utilizatorul care rulează «sudo»" -#: plugins/sudoers/def_data.c:568 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "Stabilește gazda de la distanță de pam, la numele de gazdă local" -#: plugins/sudoers/def_data.c:572 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "Directorul de lucru la care trebuie să se schimbe, înainte de a executa comanda: %s" -#: plugins/sudoers/def_data.c:576 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Directorul rădăcină la care trebuie să se schimbe, înainte de a executa comanda: %s" -#: plugins/sudoers/def_data.c:580 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "Formatul jurnalelor de produs: %s" -#: plugins/sudoers/def_data.c:584 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "Activează suportul RBAC în SELinux" -#: plugins/sudoers/def_data.c:588 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "Calea către fișierul care este creat prima dată când «sudo» este rulat: %s" -#: plugins/sudoers/def_data.c:592 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "Interceptează comenzile următoare, și le aplică restricțiile „sudoers”" -#: plugins/sudoers/def_data.c:596 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "Înregistrează în jurnal subcomenzile executate de comanda originală" -#: plugins/sudoers/def_data.c:600 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "Înregistrează în jurnal starea de ieșire a comenzilor" -#: plugins/sudoers/def_data.c:604 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "Comenzile ulterioare dintr-o sesiune interceptată trebuie să fie autentificate" -#: plugins/sudoers/def_data.c:608 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "Permite unei comenzi interceptate să execute programe marcate setuid sau setgid" -#: plugins/sudoers/def_data.c:612 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "Dimensiunea maximă la care spațiul de adrese al procesului poate crește (în octeți): %s" @@ -2539,74 +2622,78 @@ msgstr "Dimensiunea maximă la care spațiul de adrese al procesului poate creș # *** # citez, de aici: # „In computing, a core dump,[a] memory dump, crash dump, storage dump, system dump, or ABEND dump[1] consists of the recorded state of the working memory of a computer program at a specific time, generally when the program has crashed or otherwise terminated abnormally.” -#: plugins/sudoers/def_data.c:616 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "Fișierul de transferare a conținutului memoriei(core dump), pentru depanare, de cea mai mare dimensiune care poate fi creat (în octeți): %s" -#: plugins/sudoers/def_data.c:620 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "Cantitatea maximă de timp CPU pe care o poate utiliza procesul (în secunde): %s" -#: plugins/sudoers/def_data.c:624 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "Dimensiunea maximă a segmentului de date pentru proces (în octeți): %s" -#: plugins/sudoers/def_data.c:628 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "Fișierul de cea mai mare dimensiune pe care procesul îl poate crea (în octeți): %s" -#: plugins/sudoers/def_data.c:632 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "Numărul maxim de blocări pe care procesul le poate stabili: %s" -#: plugins/sudoers/def_data.c:636 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "Dimensiunea maximă pe care procesul o poate bloca în memorie (în octeți): %s" -#: plugins/sudoers/def_data.c:640 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "Numărul maxim de fișiere pe care procesul le poate avea deschise: %s" -#: plugins/sudoers/def_data.c:644 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "Numărul maxim de procese pe care utilizatorul le poate rula simultan: %s" -#: plugins/sudoers/def_data.c:648 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "Dimensiunea maximă până la care poate crește dimensiunea setului rezident al procesului (în octeți): %s" -#: plugins/sudoers/def_data.c:652 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "Dimensiunea maximă până la care poate crește stiva procesului (în octeți): %s" -#: plugins/sudoers/def_data.c:656 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "Încercați să vă autentificați chiar și în modul non-interactiv" -#: plugins/sudoers/def_data.c:660 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "Stochează parolele în formatul de text simplu în intrarea jurnalului de In/Ieș" -#: plugins/sudoers/def_data.c:664 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "Listă de expresii regulate de utilizat atunci când se potrivește o solicitare de parolă" -#: plugins/sudoers/def_data.c:668 +#: plugins/sudoers/def_data.c:688 #, c-format msgid "The mechanism used by the intercept and log_subcmds options: %s" msgstr "Mecanismul utilizat de opțiunile „intercept” și „log_subcmds”: %s" -#: plugins/sudoers/def_data.c:672 +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "Încearcă să verifice comanda și argumentele după execuție" + +#: plugins/sudoers/def_data.c:696 #, c-format msgid "AppArmor profile to use in the new security context: %s" msgstr "Profilul AppArmor de utilizat în noul context de securitate: %s" @@ -2641,31 +2728,31 @@ msgstr "tip de Defaults nevalid 0x%x pentru opțiunea „%s”" msgid "value \"%s\" is invalid for option \"%s\"" msgstr "valoarea „%s” nu este validă pentru opțiunea „%s”" -#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 -#: plugins/sudoers/policy.c:216 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format msgid "path name for \"%s\" too long" msgstr "numele căii pentru „%s” este prea lung" -#: plugins/sudoers/defaults.c:1133 +#: plugins/sudoers/defaults.c:1134 #, c-format msgid "values for \"%s\" must start with a '/', '~', or '*'" msgstr "valorile pentru „%s” trebuie să înceapă cu un „/”, „~”, sau „*”" -#: plugins/sudoers/defaults.c:1140 +#: plugins/sudoers/defaults.c:1141 #, c-format msgid "values for \"%s\" must start with a '/'" msgstr "valorile pentru „%s” trebuie să înceapă cu un caracter „/”" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp corupt, nepotrivire a lungimii" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "nu se poate reconstrui mediul" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "nu aveți permisiunea de a stabili următoarele variabile de mediu: %s" @@ -2680,27 +2767,27 @@ msgstr "tip de sumă de control nesuportată %d pentru %s" msgid "%s: read error" msgstr "%s: eroare de citire" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "%s trebuie să fie deținut de uid-ul %d" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "%s trebuie să poată fi scris numai de către proprietar" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "nu se poate încărca %s: %s" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "nu se poate găsi simbolul „group_plugin” în %s" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: versiunea majoră a modului de grup %d, este incompatibilă, se aștepta %d" @@ -2723,10 +2810,10 @@ msgstr "Perechile adresă de IP locală și mască de rețea:\n" msgid "unable to update sequence file" msgstr "nu se poate actualiza fișierul de secvență" -#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 -#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 -#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 -#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "nu se poate scrie în fișierul jurnal de In/Ieș: %s" @@ -2736,25 +2823,25 @@ msgstr "nu se poate scrie în fișierul jurnal de In/Ieș: %s" msgid "unable to create %s/%s" msgstr "nu se poate crea %s/%s" -#: plugins/sudoers/iolog.c:955 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: eroare internă, fișierul jurnal de In/Ieș pentru evenimentul %d nu este deschis" -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 -#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 -#: plugins/sudoers/visudo.c:552 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "nu se poate citi ceasul" -#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 -#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: eroare internă, semnal nevalid %d" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "starttls nu este acceptat când se utilizează ldaps" @@ -2777,7 +2864,7 @@ msgstr "nu se poate inițializa LDAP: %s" msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls specificat, dar bibliotecile LDAP nu acceptă ldap_start_tls_s() sau ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atribut sudoOrder nevalid: %s" @@ -2787,12 +2874,12 @@ msgstr "atribut sudoOrder nevalid: %s" msgid "%s: port too large" msgstr "%s: portul este prea mare" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tip de URI LDAP neacceptat: %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "nu se pot fuziona adrese URI, ldap și ldaps" @@ -2817,111 +2904,111 @@ msgstr "nu se poate deschide sistemul de auditare" msgid "unable to send audit message" msgstr "nu se poate trimite mesajul de auditare" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 -#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "eroare în bucla de eveniment" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Crearea unui nou obiect SSL_CTX a eșuat: %s" -#: plugins/sudoers/log_client.c:225 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "nu se poate încărca pachetul de autoritate de certificare %s" -#: plugins/sudoers/log_client.c:247 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "nu se poate încărca certificatul %s" -#: plugins/sudoers/log_client.c:261 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "nu se poate încărca cheia privată %s" -#: plugins/sudoers/log_client.c:270 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Nu se poate aloca obiectul ssl: %s" -#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "Conexiunea TLS la %s:%s a eșuat: %s" -#: plugins/sudoers/log_client.c:538 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "Inițializarea TLS nu a reușit" -#: plugins/sudoers/log_client.c:548 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "Negocierea TLS nu a reușit" -#: plugins/sudoers/log_client.c:1246 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: eroare internă, stare de ieșire nevalidă %d" -#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "a fost pierdută conexiunea la serverul de înregistrare a jurnalului" -#: plugins/sudoers/log_client.c:1876 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "lipsește memoria tampon de scriere" -#: plugins/sudoers/log_client.c:2024 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "nu se poate conecta la serverul de înregistrare a jurnalului" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "utilizatorul NU este în „sudoers”" -#: plugins/sudoers/logging.c:300 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "utilizatorul NU este autorizat pe gazdă" -#: plugins/sudoers/logging.c:302 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "comanda nu este permisă" -#: plugins/sudoers/logging.c:323 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "%s nu se află în fișierul „sudoers”.\n" -#: plugins/sudoers/logging.c:326 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "%s nu are permisiunea de a rula «sudo» pe %s.\n" -#: plugins/sudoers/logging.c:329 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Este posibil ca utilizatorul %s să nu poată executa «sudo» pe %s.\n" -#: plugins/sudoers/logging.c:332 +#: plugins/sudoers/logging.c:324 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Utilizatorului %s nu îi este permis să execute „%s%s%s” ca %s%s%s pe %s.\n" -#: plugins/sudoers/logging.c:342 +#: plugins/sudoers/logging.c:334 msgid "This incident has been reported to the administrator.\n" msgstr "Acest incident a fost raportat administratorului.\n" -#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 -#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 -#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 -#: plugins/sudoers/sudoers.c:801 +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s: comanda nu a fost găsită" -#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2930,7 +3017,7 @@ msgstr "" "se ignoră „%s” găsit în „.”\n" "Utilizați «sudo ./%s» dacă aceasta este „%s” pe care doriți să o rulați." -#: plugins/sudoers/logging.c:395 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2939,24 +3026,24 @@ msgstr[1] "două încercări de parolă incorecte" msgstr[2] "%u încercări de parolă incorecte" msgstr[3] "%u de încercări de parolă incorecte" -#: plugins/sudoers/logging.c:485 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "eșec de autentificare" -#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "o parolă este necesară" -#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 msgid "problem parsing sudoers" msgstr "problemă la analizarea sintaxei lui „sudoers”" -#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format msgid "%s:%d:%d: %s" msgstr "%s:%d:%d: %s" -#: plugins/sudoers/logging.c:1068 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "nu se poate scrie fișierul de jurnal: %s" @@ -2971,7 +3058,7 @@ msgstr "suma de control pentru %s (%s) are lungimea greșită %zu, se aștepta % msgid "digest for %s (%s) is not in %s form" msgstr "suma de control pentru %s (%s) nu este în formatul %s" -#: plugins/sudoers/parse.c:585 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2980,7 +3067,7 @@ msgstr "" "\n" "Regula LDAP: %s\n" -#: plugins/sudoers/parse.c:588 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2988,110 +3075,110 @@ msgstr "" "\n" "Intrare „sudoers”:\n" -#: plugins/sudoers/parse.c:590 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " RuleazăCaUtilizatorii: " -#: plugins/sudoers/parse.c:605 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " RuleazăCaGrupurile: " -#: plugins/sudoers/parse.c:615 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " Opțiuni: " -#: plugins/sudoers/parse.c:679 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " Comenzi:\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Se potrivesc intrările Defaults pentru %s pe %s:\n" -#: plugins/sudoers/parse.c:888 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Valori implicite specifice „Run_as” și comenzii pentru %s:\n" -#: plugins/sudoers/parse.c:906 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Utilizatorul %s poate să ruleze următoarele comenzi pe %s:\n" -#: plugins/sudoers/parse.c:921 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Utilizatorului %s nu îi este permis să ruleze «sudo» pe %s.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "se ignoră sudoRole incompletă: cn: %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "atribut LDIF nevalid: %s" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "%.*s nevalid stabilit de interfața «sudo»" -#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "nu se poate analiza lista de adrese de rețea" -#: plugins/sudoers/policy.c:508 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "numele de utilizator nu este stabilit de interfața sudo" -#: plugins/sudoers/policy.c:512 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "ID-ul utilizatorului nu este stabilit de interfața «sudo»" -#: plugins/sudoers/policy.c:516 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "ID-ul grupului nu este stabilit de interfața «sudo»" -#: plugins/sudoers/policy.c:520 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "numele gazdei nu este stabilit de interfața sudo" -#: plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "director de lucru nevalid: %s" -#: plugins/sudoers/policy.c:886 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "director „chroot” nevalid: %s" -#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "nu se poate executa %s" -#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 -#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: indicatori de mod nevalizi în interfața «sudo»: 0x%x" -#: plugins/sudoers/policy.c:1262 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versiunea modulului de politică „sudoers”, este %s\n" -#: plugins/sudoers/policy.c:1264 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versiunea de gramatică a fișierului „sudoers”, este %d\n" -#: plugins/sudoers/policy.c:1268 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -3100,27 +3187,27 @@ msgstr "" "\n" "Cale „sudoers”: %s\n" -#: plugins/sudoers/policy.c:1271 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "cale nsswitch: %s\n" -#: plugins/sudoers/policy.c:1273 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "cale ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "cale ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1307 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "nu se poate înregistra cârligul de tip %d (versiunea %d.%d)" -#: plugins/sudoers/policy.c:1325 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "nu se poate anula înregistrarea cârligului de tip %d (versiunea %d.%d)" @@ -3259,148 +3346,142 @@ msgstr "nu se poate inițializa sursa SSS. Este SSSD instalat pe mașină?" msgid "unable to find symbol \"%s\" in %s" msgstr "nu se poate găsi simbolul „%s” în %s" -#: plugins/sudoers/sudoers.c:258 +#: plugins/sudoers/sudoers.c:263 #, c-format msgid "unable to get defaults from %s" msgstr "nu se pot obține valorile implicite de la %s" -#: plugins/sudoers/sudoers.c:265 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "nicio sursă „sudoers” validă, se iese" -#: plugins/sudoers/sudoers.c:341 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "utilizatorul nu are permisiunea de a schimba directorul rădăcină în %s" -#: plugins/sudoers/sudoers.c:343 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "nu aveți permisiunea de a utiliza opțiunea „-R” cu %s" -#: plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "utilizatorului nu îi este permis să schimbe directorul la %s" -#: plugins/sudoers/sudoers.c:369 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "nu aveți permisiunea de a utiliza opțiunea „-D” cu %s" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "nicio comandă specificată" -#: plugins/sudoers/sudoers.c:421 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "„sudoers” specifică că root nu are permisiunea să execute «sudo»" -#: plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "utilizatorului nu îi este permis să suprascrie limita de closefrom" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "nu aveți permisiunea de a utiliza opțiunea „-C”" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "proprietar marcaj de timp (%s): Nu există un astfel de utilizator" -#: plugins/sudoers/sudoers.c:547 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "fără tty" -#: plugins/sudoers/sudoers.c:548 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "trebuie să aveți un tty pentru a rula «sudo»" -#: plugins/sudoers/sudoers.c:555 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "shell nevalid pentru utilizatorul %s: %s" -#: plugins/sudoers/sudoers.c:638 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "comandă în directorul curent" -#: plugins/sudoers/sudoers.c:653 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "«cd» este o comandă încorporată în shell, nu poate fi rulată direct." -#: plugins/sudoers/sudoers.c:655 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "opțiunea „-s” poate fi utilizată pentru a rula un shell privilegiat." -#: plugins/sudoers/sudoers.c:657 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "opțiunea „-D” poate fi folosită pentru a rula o comandă într-un anumit director." -#: plugins/sudoers/sudoers.c:666 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "utilizatorului nu îi este permis să stabilească o limită de timp a comenzii" -#: plugins/sudoers/sudoers.c:668 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "nu aveți permisiunea de a stabili o limită de timp a comenzii" -#: plugins/sudoers/sudoers.c:676 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "utilizatorului nu îi este permis să păstreze mediul" -#: plugins/sudoers/sudoers.c:678 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "nu aveți permisiunea să păstrați mediul" -#: plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "«sudoedit» nu are nevoie să fie rulat via «sudo»" -#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "nu se poate citi %s" -#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 -#: plugins/sudoers/visudo.c:764 -#, c-format -msgid "unable to stat %s" -msgstr "nu se poate stabili starea lui %s" - -#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s nu este un fișier obișnuit" -#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s este deținut de uid-ul %u, ar trebui să fie %u" -#: plugins/sudoers/sudoers.c:1147 toke.l:1252 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "%s poate fi scris de oricine" -#: plugins/sudoers/sudoers.c:1151 toke.l:1255 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s este deținut de gid-ul %u, ar trebui să fie %u" -#: plugins/sudoers/sudoers.c:1184 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "doar root poate utiliza „-c %s”" -#: plugins/sudoers/sudoers.c:1203 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "clasă de autentificare necunoscută %s" -#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "nu se poate rezolva gazda %s" @@ -3498,17 +3579,17 @@ msgstr "terminare ilegală a expresiei, cu „!”" msgid "unknown search type %d" msgstr "tip de căutare necunoscută %d" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "utilizare: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "utilizare: %s [-h] [-d dir] -l [expresie de căutare]\n" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -3517,7 +3598,7 @@ msgstr "" "%s - redă jurnalele de sesiune «sudo»\n" "\n" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3573,127 +3654,122 @@ msgstr "" "\n" "Comanda nu se potrivește" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s poate fi scris de membrii grupului" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "nu se poate trunchia fișierul marcajelor de timp în %lld octeți" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "se vor ignora marcajele de timp pe viitor" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "datarea este prea departe în viitor: %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "nu se poate bloca fișierul marcajelor de timp %s" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "calea fișierului de stare al instrucțiunilor de utilizare, este prea lungă: %s/%s" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "«sudoedit» nu ar trebui să fie specificat cu o cale" -#: plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "opțiunea „-x” va fi eliminată într-o lansare viitoare" -#: plugins/sudoers/visudo.c:251 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "luați în considerare utilizarea utilitarului «cvtsudoers» în schimb" -#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "apăsați „enter” pentru a edita %s: " -#: plugins/sudoers/visudo.c:321 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "conținutul sesiunii de editare rămase în %s" -#: plugins/sudoers/visudo.c:397 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "editorul specificat (%s) nu există" -#: plugins/sudoers/visudo.c:399 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "nu s-a găsit niciun editor (cale editor = %s)" -#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "nu se poate stabili starea lui %s" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "eroare de scriere" -#: plugins/sudoers/visudo.c:559 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "nu se poate stabili starea fișierului temporar (%s), %s neschimbat" -#: plugins/sudoers/visudo.c:566 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "fișier temporar de lungime zero (%s), %s neschimbat" -#: plugins/sudoers/visudo.c:572 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editorul (%s) a eșuat, %s neschimbat" -#: plugins/sudoers/visudo.c:594 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s neschimbat" -#: plugins/sudoers/visudo.c:639 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "nu se poate redeschide fișierul temporar (%s), %s neschimbat." -#: plugins/sudoers/visudo.c:652 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "nu se poate analiza fișierul temporar (%s), eroare necunoscută" -#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "nu se poate stabili (uid, gid) de %s la (%u, %u)" -#: plugins/sudoers/visudo.c:803 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s și %s nu sunt pe același sistem de fișiere, se utilizează «mv» pentru a redenumi" -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comanda a eșuat: „%s %s %s”, %s neschimbat" -#: plugins/sudoers/visudo.c:821 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "eroare la redenumirea %s, %s neschimbat" -#: plugins/sudoers/visudo.c:841 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "Acum ce? " -#: plugins/sudoers/visudo.c:855 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3705,41 +3781,41 @@ msgstr "" " (x) - ieși fără a salva modificările în fișierul „sudoers”\n" " (Q) - ieși și salvează modificările în fișierul „sudoers” (PERICOL!)\n" -#: plugins/sudoers/visudo.c:901 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "nu se poate rula %s" -#: plugins/sudoers/visudo.c:932 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: proprietarul greșit (uid, gid) ar trebui să fie (%u, %u)n\n" -#: plugins/sudoers/visudo.c:943 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permisiuni proaste, ar trebui să fie modul 0%o\n" -#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analizat, OK\n" -#: plugins/sudoers/visudo.c:1017 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s ocupat, încercați din nou mai târziu" -#: plugins/sudoers/visudo.c:1021 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "Editați oricum? [y/N]" -#: plugins/sudoers/visudo.c:1117 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "Avertisment: %s:%d:%d: neutilizat %s „%s”" -#: plugins/sudoers/visudo.c:1229 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3748,13 +3824,14 @@ msgstr "" "%s - editează în siguranță fișierul „sudoers”\n" "\n" -#: plugins/sudoers/visudo.c:1231 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" @@ -3764,6 +3841,7 @@ msgstr "" " -c, --check modul doar verifică\n" " -f, --file=sudoers specifică locația fișierului „sudoers”\n" " -h, --help afișează mesajul de ajutor și iese\n" +" -I, --no-includes nu editează fișierele „include”\n" " -q, --quiet mesaje de eroare de sintaxă mai puțin detaliate\n" " -s, --strict verificare strictă de sintaxă\n" " -V, --version afișează informațiile de versiune și iese\n" @@ -3800,6 +3878,12 @@ msgstr "întrerupere de linie neașteptată în șir" msgid "too many levels of includes" msgstr "prea multe niveluri de includeri" +#~ msgid "%s is group writable" +#~ msgstr "%s poate fi scris de membrii grupului" + +#~ msgid "lecture status path too long: %s/%s" +#~ msgstr "calea fișierului de stare al instrucțiunilor de utilizare, este prea lungă: %s/%s" + #~ msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" #~ msgstr "Avertisment: %s:%d:%d ciclu în %s „%s”" diff --git a/plugins/sudoers/po/sr.mo b/plugins/sudoers/po/sr.mo index 28bc87297a6458eb9f625bb2003441a01f0e46df..65570cd5d532f116ac1a1b3afe193aa6c43d2c33 100644 GIT binary patch delta 15903 zcmZA72Y405{{QjaB!n7zfKU%55CViw=n1`sP(^w|5+IZWlF-XRx+wLa0YQ3^YeNDi z(iO3xk^qWcii%=G5$vGC@BKM5+`rF%pJ#l{d}nrdcFOJv_kQz4@X`l`yw}PGJ>_t` z5a2jfabBq7WCuFVl}JS$r*#|0DUEHcy|EPK5m*){+42Hx9^^Qyag6IYZ**{+C%I;= z7<2y1olN^v_z&k@z><#RbqYE=P6&a|u?*fq-O%acI2E7_mcs~akL|Gt&PH{35voJm zuok|I4e&hH!24Jmt9RugurpS|d03bGJ5Q0(jgDb?ykHxAi{X^rZstPuP#5Z9orG$? z1}o!ktcfSFB7T7-@GkPCPH=a}VQ`&LEQ$>_vn)JQDDVBCO(aWiUUcA+kG z81;m2Vg%ksT{x_V}=MQ_GmPd=DH9h`xUa5HLd z-^ED$8g*isK4xe;Scjm_pJK~vFpTm(jKbGZQ*#^D!Qy=#rwTSe5BBKG`0K_K2x!h$ zVF}!Wnu>$S`f*O7|Hd%}zVi6fQ+w zex3E6mMIOlO)E;6Q#9&h@l2AkQ6xPG@SQhW0Mj+%7$6+}*^-*)0g<2yUP#rpn z9=wiiF>t7v;*JV%s=Ctrg zbK%~okx55p$H_+Cw$At15Fv4X_4#u>wXFM5Q@G;bo?zW!BI+U+tZ7e*+bgTjD!X2i$Z#7njul<7EqDYwK(?(Zxj6NN8geY}DZ7@TEZG>uVnJp-HK zR%<@$h5^&f2-Lx1lv7YcJ{7eKol{FpNwyoQj&uUDzDo!!W#$ zrLfXW^GhiLYfz3sb!ZGm<2uw-zKgoi4_FNg%`y*E8?}i0VmVBm#rT&dGoOHlY&B}G zkD+e-Ija61Hpb$!&6;S3x^RLmFF@UR7kcn5)Q!He<)Arc1jDg7@i;7r!{#vlCCE%5 z5QfvS0@&ErF;yvD9@pG$7iT^g Fs)-u8R#*|^um+}} z9&jmE)BfLY18@5S^b9puMHiV9YN0yP8Fj%is3)9Z<4>Y4xF2=i2UrciMh$(?V)KCY zQRj6)wI75HxxX`$jOK1P>ckJwKSZd-7rew=xH76E&C!GXQA0WnYvD4~2<*4<(>DGI z1{41ab)SHxW`rA{S3}u@j4FnsF0dGN!Dq21o);?% z$7i8B_$0Q#9atMb#t^)>jPchEi!3+$ycX(4%~AWa59*1BqdGVfwWzkE*2-B_N54mP zG-QP-H%3jxK=iL6)X1(t|0@|=QNFZ-@$W^ZugdN>@z zaS^Hm&!Gp;qB`;eYA%beGuA`x>u$E3f{~OL+xSbUk@?V;ze7D}(e;w~k0PTU4np;8 zI(qO))FOKkb;I{jbN4-}!!>+nbw{I~xG$=G3aWkydTL&vcsev4)C53H>HUu=V! z<8ai8@u-fBM~%n=)P?t=M&=A^ByL)ZJY}XP9MwJs)#34|c1zKNJFy|2MyxA2tk+Oa_%~`!!#0`i))8A!o`$;NUaW+97={I? z``p~b_^TrL8PoF`*o<-~RKqOP4OiRp3#bu!3rph_Y=S?cI#PYJnd^3_5gcb-Z#{wK zh<}eQ@xGUghfIqt=0-!TnW&zxL)~DP^&(cKTc-trb2Jny<769Oj(W09s2iQZDtH-n;Xkkf7TIP-wg#%) z8g-p`>qKNXc%7wWbmI-E3+=X^LfzmBs^>pr4J@|Z7>U&=_eL$c38?c|qDEvds{Ltf zj9;QgvfK{St}B+){!bvIp~^z-(~YPTPNTNVFILY^vrXf$Ch?i5?YPN$618@2U@NS& z%lwLt$KsS1qprUO)$WMo{?3nNYNKbj*@j(Fi*gb+!X+3Iz;8ZOhfeJ^+w@0N2SWGR zzk*SVHWhaTb3^>crR__6`vYlvz>G}IL*{-R(L0LBG@X|JZTKprJRXF@EII|w=ov`=9z!GS%u3ef0D=ecOWz7HPhf()CI1g zZdmAunTqC^OgRZ#<2%>`-J`}{sITNYjKQPW9{)mpgjydn-;zYs_FIBlTN{rt{zb{W zM4&I`VHYfP+$^qM$VfWlu`s5gR{sptyL>11!dEa3|3W=LuMj{UIf8>XW^?5=v$gZzn_s&1#v zh)l&+ln>xg{07wlZ_JzK@BYUzmcZNC2aB9B9T|*Tt-DbtT*CfX^DXnoWd^EaFJN!H zj7_ob+vdDSaUkU#S&QOUGrnHDK4fQgFWyx zCSmdS{Qq+2q+=@Ocd#2aJIfy*I19Vt&o~96-#0(K_Fy6H|8L0fDRzED_3W_^7zI3u z%W?UKW{OIkGgFji-H#g5uW%h!$>&pzFXH3auz;t=SCQK|ozL@GcNw#B;3sAce2;p- z$WP7MnSfr+O)i;8EcRdXFCi^4k@9jJf#2aM>~`6_`F3F&%4cvJKEO`6?TR`73v5fd z`Bk$G(@<0OJa)iR*LX)@+%*PfD4Ev@q+r-*X1{w;L;5l*-sy982<}4-t^0-f2gfH+ zLmYP9{9NCI^(Y5?$p;G~F$=R%=au-%tcj;li?;L)uUX|WH%yP#;LlV9er@*g?>Lxp zwQu-Ugc-O9f5Pr6e`|KdYq*ng;CJT6dr=Qo?tAlQoP?>Ax1mO^=uLj;Vizx&0c5tK zPPmODvF8tFuJ>SX$_;-s|J%+?jHR4|T1>y>asV5&^DVO=(j9elnsL69=bfcnwn0?(3HPlbzBUtWFUZXe>hu~%GgH7+!2Ipfm zmcM64q%Uej4r4=%`ipl9j=WS^{?uAs3$s&EwOAdbK#z-q27fayo??3Z`^?GigQ8C$FGOmAnp2z-_&y;oj zzY8jqGaa0Z3B*6fb{JjW^>5!y97FjX9EA~V5nX>-sMq!XFBc&dT>rM)jH9Xe6KCVl zisr-u)DtwV{{I<&YZY`n|C& z<%Kv9kD^A%The1L*c)|&>8Ll`M%0VvGgJp7Yr0NNOu)go2o=AC{u|XY9qNs(h(C#{ zKaEZBF8094+Ga6kU`6f!JTiLnd=qefLoL3LIlnB?(b|Ovmei*8cc6!-UqLuR(Y*P zuK(9?ChC2#1J&*#YVJd$T>r1)L~KF%861b_Y`j%tGiB+hZTBYD#}-Z4uDal8GOcl) z^*xNE9N5&{U;t{LKZ|O21+|z$o4Ni!K>DLbW(FqXA&kPX=B7hEQEOp7>RXY6YJa0S z`(N9sb_>`4(U^xCs*9*8Dc{muU<7K2*P?Fx4r=uVwsQUN@)*>duR-mWOQ`m(qRrw= zLrux^*ck6&I7YVinmO;^+U(<}F@cI-QBORijp@h+)FQo%>VVVMJW)H;nwf?gnOq!- zw^7@(XFJ#b2gphsLOBO3V$t^IeNfX&Mkg*n%}FlmtM>(J5w`ANI}*~zbFnAo4^i8#Vi(iFKBxy?jC_{8&M`702t;*t{lD*5 zqP}t^yP2V$fZHkWLd{v%?&by)QB!gp2jF$Ai!FMX&+iCShmND3xMWX0xA-Vl!xOkb z`~M0Vy|YL3G9RH&a3OV!r>-00LefB-^y-9qgUku3sD1wiY9E&#?D~H!PRCfvub~#zJ=EN` z8Dip#tfx`mf}lst19U=N$BUYRudp*l4K*V-Z7BO+`}GU~UAWGp=7LG6eYzVp5*JbX zx9l+UM2R?^@;=lXu-b6*5lcml9>f_#j}>S^{Pg8EJPJgR+o zx*4fesBKta%OO+E$7lf7C%y?alBY2VOHVT&wJfZn{lA}#_VpRmkp7L~7@c8Wy`xZ1 zI3M-7-i=zlmvA`VMV&V|(~Qg-RQtD4BXkS3D5J7WeKKl9wxCyw?GBmB*m=5{f>G8L z)*RI5^_sQr3^PS(s2dzW{lvPB+Ln@^s_WOINj)cuKLq5p59kuUwDWZ+6*$ z`ChY+cM{Nkb{CizPy*_exdSy7_b~zM(B8$X{HI?4nSULtY`H&m+5tLh*;sL6y~um; zD)H)A4j<9{U!uSobXw7%1nSV!Ev3ALa%a-(B>i7>EBR~9KPD(UiL{CI1a&=0ACs?% zyfFP8K1_KvWgX`X&UVyjrIY;g-<-xeYSWNy>+~iaG$Cgjv3ulWu`=-%_F}&ht4=l+a zJPMO(M8gL77x5FMK+2C%u7Iymo`;W8?uHjJkd#aOYn)ALL%tSnAhEXnU&T4J)$Vve zxg`FG-iid9ka>cnV?F9Mt79v50VExI@pL1(l%q($DQFM<|GbZI-gBg2VuP`iJ#PoD zCpL!IMBDyN@QPdi4eU8|BXG<0>TIJ?VSDoo)cadUIr8u0W7HSI z;*|Audw8rO&iBiyWY4XEi8lWkjlymIVf+1La%k_L|2tS-1rA=-&MBOPnVfXc#vdp4 z$iFV~3FYTW9%2(v$GfBvl&j)i&KswoJ=PKb)?TYI`J?26Q0vcs{9@&^?i42dVjC~E zs=7Y;Xih4yZN20_CI2b$x3Cap9gkaoBCapvebQQDi)~zO;>eHE{Of2*VI^+hgy!To z`lD=1%3qM4C)N;Sa4PBH@fNX%M^iGrNw1J*(55kUT^?5AYRV<>MN&C?-Y(7m846$i ztKl`9AI(Ju+nYUUV+|<(PW}ex3?$#wUZ@qu{OcMKiS2@21W{va(UJx%@7TwoU7!6Eo8sVGUue~CRj_7JOJ3+wP7>OQh% z?Yoct=*p>8heciSeOcpFj>*rGMvzxw3$?qc8zVrU6i+zo}rwKL+v%P$m>{u zN!Wq-`=l`PRfz4wCbrGA03I=)fMWwSXxM{%G%hB*5WA3c%r%(2ZLh*)(gV`xq-CUz zBpn}eUJ=@DwCBH!WhsZMlKcenBfYkACxuUJUiA-;LBuMNYLX&IDYl{-t|lEOwum&5 z^L4ytaGFv+P5v5n^=;iD%H_$gB*vcy&i9nPPw}4%6qb`R$m{4sUdM8K;y#>4tUa-A zxP=CeN^m5Jth2;kjI6WP z<`=4h<7>)Ko2)a1yi2NX%irKm+g_nQobw@O5i6?z$5*!gG3v%?{&n!f_J0RI@BPOd z%p=VtwWaY2+ksuwb|p5Pa{2$A#r`L@j94h9+P11*V%tb92Nt+#%2j~QjI+VZjw`Kl|5C|pE8A}sffv2$qF&$Cl<1x*akCGoo?2Iby@i(SW zpH6(?!yrCOxfm&v{M)1}`(m7#-?+=Pv8H3Hn5UFv4Y`Um-9o~RNuAw4t8_u+0&PT$AsxW3JcHu&D{ zSv#lR;&)wNYOhK;-!9n~=(`?Y#kYFJ9AAbgyR&+qG9taYPi%{=ve{E=x}D1% z%0FDNBtI|zcz#~NWBCX0K+e=7iwgyYXBNx3b@Fb2FZT2m-{v&Z&K4qbK+2V0S~=5nJfVQhyKf@^kT+C;td%ZOqRz znT6_M!J_=bp8OMBaT&#p6s|Aa`oHCHec=`l%?bT$O%TkUR>dus8y)5@ben9=KbU`@ zU?c7FkLx1&i~zYs9{<(+UDbsTZakD>Oe$zW_^3Hqx64;I((>LasI2cKTg5FcBoj+)sGNUca|!e`*MA^ zRnag_0av7g^LW%_)Nj_g*%`gu$n4C8ZsXhv&E1Uw*%=Gn(A+w$+#zmuY_uEXyZJ_J z_MQ%I8K$gI?t*ByYLGACTqA`lZ~dLvs)JbT?P^?LHTp{d^%eBzx-= zH`KTG?V#+RlHKCD15(_AGTHp^YK6-kwTePcEDmc%=h4Il|mY!#@X&-`Wf?ni(KM20{#!uYRUuv delta 16599 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 HKM46BCa0A? diff --git a/plugins/sudoers/po/sr.po b/plugins/sudoers/po/sr.po index c0776774be..4ea3ec3291 100644 --- a/plugins/sudoers/po/sr.po +++ b/plugins/sudoers/po/sr.po @@ -1,12 +1,13 @@ # Serbian translation for sudoers. # This file is put in the public domain. # Мирослав Николић , 2014–2022. +# msgid "" msgstr "" -"Project-Id-Version: sudoers-1.9.10b1\n" +"Project-Id-Version: sudoers-1.9.11b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-02-11 18:33-0700\n" -"PO-Revision-Date: 2022-02-15 21:30+0200\n" +"POT-Creation-Date: 2022-05-27 08:39-0600\n" +"PO-Revision-Date: 2022-08-22 21:33+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -16,7 +17,7 @@ msgstr "" "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-Bugs: Report translation errors to the Language-Team address.\n" -#: confstr.sh:1 gram.y:1198 +#: confstr.sh:1 gram.y:1218 msgid "syntax error" msgstr "грешка синтаксе" @@ -40,17 +41,17 @@ msgstr "*** информације БЕЗБЕДНОСТИ за %h ***" msgid "Sorry, try again." msgstr "Извините, покушајте поново." -#: gram.y:233 gram.y:300 gram.y:309 gram.y:318 gram.y:328 gram.y:338 -#: gram.y:362 gram.y:389 gram.y:398 gram.y:406 gram.y:415 gram.y:424 -#: gram.y:498 gram.y:508 gram.y:520 gram.y:564 gram.y:573 gram.y:582 -#: gram.y:591 gram.y:718 gram.y:726 gram.y:737 gram.y:749 gram.y:768 -#: gram.y:923 gram.y:928 gram.y:936 gram.y:950 gram.y:956 gram.y:1078 -#: gram.y:1087 gram.y:1095 gram.y:1104 gram.y:1113 gram.y:1142 gram.y:1151 -#: gram.y:1159 gram.y:1252 gram.y:1382 gram.y:1748 gram.y:1798 +#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 +#: gram.y:365 gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 +#: gram.y:501 gram.y:511 gram.y:523 gram.y:571 gram.y:580 gram.y:589 +#: gram.y:598 gram.y:730 gram.y:738 gram.y:749 gram.y:761 gram.y:780 +#: gram.y:943 gram.y:948 gram.y:956 gram.y:970 gram.y:976 gram.y:1098 +#: gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 gram.y:1162 gram.y:1171 +#: gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 gram.y:1816 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 -#: lib/eventlog/eventlog.c:804 lib/eventlog/eventlog.c:881 -#: lib/eventlog/eventlog.c:1176 lib/iolog/iolog_filter.c:142 -#: lib/iolog/iolog_filter.c:204 lib/iolog/iolog_filter.c:233 +#: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 +#: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 +#: lib/iolog/iolog_filter.c:202 lib/iolog/iolog_filter.c:233 #: lib/iolog/iolog_json.c:150 lib/iolog/iolog_json.c:382 #: lib/iolog/iolog_json.c:412 lib/iolog/iolog_json.c:555 #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 @@ -66,39 +67,39 @@ msgstr "Извините, покушајте поново." #: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 #: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 #: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1011 logsrvd/logsrvd.c:1073 +#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 #: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 #: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:425 -#: logsrvd/logsrvd_journal.c:427 logsrvd/logsrvd_local.c:174 +#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 +#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 #: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 #: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 #: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 #: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 #: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 #: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:843 +#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 #: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 #: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:118 -#: plugins/sudoers/auth/kerb5.c:146 plugins/sudoers/auth/pam.c:687 +#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 +#: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:134 plugins/sudoers/cvtsudoers.c:131 +#: plugins/sudoers/check_aliases.c:168 plugins/sudoers/cvtsudoers.c:131 #: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 #: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 #: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 #: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:758 -#: plugins/sudoers/cvtsudoers.c:873 plugins/sudoers/cvtsudoers.c:881 -#: plugins/sudoers/cvtsudoers.c:1376 plugins/sudoers/cvtsudoers.c:1380 -#: plugins/sudoers/cvtsudoers.c:1482 plugins/sudoers/cvtsudoers_csv.c:183 -#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 -#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 -#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:469 -#: plugins/sudoers/cvtsudoers_ldif.c:477 plugins/sudoers/cvtsudoers_ldif.c:624 +#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:862 +#: plugins/sudoers/cvtsudoers.c:870 plugins/sudoers/cvtsudoers.c:1365 +#: plugins/sudoers/cvtsudoers.c:1369 plugins/sudoers/cvtsudoers.c:1471 +#: plugins/sudoers/cvtsudoers_csv.c:183 plugins/sudoers/cvtsudoers_csv.c:246 +#: 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:376 +#: plugins/sudoers/cvtsudoers_ldif.c:430 plugins/sudoers/cvtsudoers_ldif.c:438 +#: plugins/sudoers/cvtsudoers_ldif.c:449 plugins/sudoers/cvtsudoers_ldif.c:456 +#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:481 +#: plugins/sudoers/cvtsudoers_ldif.c:489 plugins/sudoers/cvtsudoers_ldif.c:636 #: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 @@ -107,23 +108,21 @@ msgstr "Извините, покушајте поново." #: plugins/sudoers/cvtsudoers_merge.c:553 #: plugins/sudoers/cvtsudoers_merge.c:564 #: plugins/sudoers/cvtsudoers_merge.c:633 -#: plugins/sudoers/cvtsudoers_merge.c:1150 -#: plugins/sudoers/cvtsudoers_merge.c:1223 plugins/sudoers/defaults.c:468 -#: plugins/sudoers/defaults.c:690 plugins/sudoers/defaults.c:1051 -#: plugins/sudoers/defaults.c:1243 plugins/sudoers/editor.c:190 +#: plugins/sudoers/cvtsudoers_merge.c:1158 +#: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 +#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 +#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 #: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 #: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:264 -#: plugins/sudoers/iolog.c:664 plugins/sudoers/iolog.c:690 -#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:433 -#: plugins/sudoers/ldap.c:443 plugins/sudoers/ldap.c:448 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:464 -#: plugins/sudoers/ldap.c:760 plugins/sudoers/ldap.c:924 -#: plugins/sudoers/ldap.c:1340 plugins/sudoers/ldap.c:1766 -#: plugins/sudoers/ldap.c:1803 plugins/sudoers/ldap.c:1884 -#: plugins/sudoers/ldap.c:2019 plugins/sudoers/ldap.c:2120 -#: plugins/sudoers/ldap.c:2136 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 +#: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:755 plugins/sudoers/ldap.c:919 +#: plugins/sudoers/ldap.c:1335 plugins/sudoers/ldap.c:1761 +#: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 +#: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 +#: plugins/sudoers/ldap.c:2131 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:443 #: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 @@ -131,120 +130,120 @@ msgstr "Извините, покушајте поново." #: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 #: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:390 plugins/sudoers/log_client.c:703 -#: plugins/sudoers/log_client.c:724 plugins/sudoers/log_client.c:1444 -#: plugins/sudoers/log_client.c:1662 plugins/sudoers/log_client.c:1989 -#: plugins/sudoers/log_client.c:2045 plugins/sudoers/logging.c:104 -#: plugins/sudoers/logging.c:185 plugins/sudoers/logging.c:469 -#: plugins/sudoers/logging.c:489 plugins/sudoers/logging.c:628 -#: plugins/sudoers/match_command.c:324 plugins/sudoers/match_command.c:567 -#: plugins/sudoers/match_command.c:616 plugins/sudoers/match_command.c:688 -#: plugins/sudoers/match_command.c:736 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:201 plugins/sudoers/parse.c:218 -#: plugins/sudoers/parse.c:250 plugins/sudoers/parse.c:267 -#: plugins/sudoers/parse.c:290 plugins/sudoers/parse.c:301 -#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 -#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 -#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 -#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 -#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 -#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 -#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:597 -#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 -#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 -#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 -#: plugins/sudoers/policy.c:570 plugins/sudoers/policy.c:952 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 -#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 -#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 -#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 -#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 -#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 -#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 -#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 -#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:111 -#: plugins/sudoers/stubs.c:119 plugins/sudoers/sudoers.c:335 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:429 -#: plugins/sudoers/sudoers.c:438 plugins/sudoers/sudoers.c:479 -#: plugins/sudoers/sudoers.c:842 plugins/sudoers/sudoers.c:980 -#: plugins/sudoers/sudoers.c:1039 plugins/sudoers/sudoers.c:1305 -#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 -#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 -#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 -#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/testsudoers.c:580 plugins/sudoers/timestamp.c:424 -#: plugins/sudoers/timestamp.c:468 plugins/sudoers/timestamp.c:980 -#: plugins/sudoers/timestamp.c:1118 plugins/sudoers/toke_util.c:78 -#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 -#: plugins/sudoers/toke_util.c:161 plugins/sudoers/toke_util.c:200 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 -#: plugins/sudoers/visudo.c:344 plugins/sudoers/visudo.c:350 -#: plugins/sudoers/visudo.c:456 plugins/sudoers/visudo.c:632 -#: plugins/sudoers/visudo.c:962 plugins/sudoers/visudo.c:1035 toke.l:1015 -#: toke.l:1147 toke.l:1218 +#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 +#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 +#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 +#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 +#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 +#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 +#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 +#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 +#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 +#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 +#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 +#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 +#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 +#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 +#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 +#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 +#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 +#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 +#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 +#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 +#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 +#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 +#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 +#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 +#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 +#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 +#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 +#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 +#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 +#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 +#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 +#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 +#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 +#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 +#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 +#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 +#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 +#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 +#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 +#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 +#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 +#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 +#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 +#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" -#: gram.y:615 +#: gram.y:622 msgid "a digest requires a path name" msgstr "зборник захтева назив путање" -#: gram.y:637 +#: gram.y:644 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "вредност за „CWD“ мора почети са /, ~, или *" -#: gram.y:643 +#: gram.y:650 msgid "\"CWD\" path too long" msgstr "„CWD“ путања је предуга" -#: gram.y:653 +#: gram.y:660 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "вредност за „CHROOT“ мора почети са /, ~, или *" -#: gram.y:659 +#: gram.y:666 msgid "\"CHROOT\" path too long" msgstr "„CHROOT“ путања је предуга" -#: gram.y:788 +#: gram.y:801 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "грешка синтаксе, резервисана реч „%s“ је коришћена као назив алијаса" -#: gram.y:811 +#: gram.y:824 msgid "invalid notbefore value" msgstr "неисправна вредност не-пре" -#: gram.y:820 +#: gram.y:833 msgid "invalid notafter value" msgstr "неисправна вредност не-после" -#: gram.y:830 plugins/sudoers/policy.c:353 +#: gram.y:843 plugins/sudoers/policy.c:376 msgid "timeout value too large" msgstr "вредност временског истека је превелика" -#: gram.y:832 plugins/sudoers/policy.c:355 +#: gram.y:845 plugins/sudoers/policy.c:378 msgid "invalid timeout value" msgstr "неисправна вредност временског ограничења" -#: gram.y:946 plugins/sudoers/sudoers.c:998 +#: gram.y:966 plugins/sudoers/sudoers.c:1014 msgid "command too long" msgstr "наредба је предуга" -#: gram.y:1200 +#: gram.y:1220 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1275 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1250 +#: gram.y:1270 #, c-format msgid "Alias \"%s\" already defined" msgstr "Псеудоним „%s“ је већ одређен" -#: gram.y:1748 gram.y:1798 lib/eventlog/eventlog.c:309 -#: lib/eventlog/eventlog.c:804 lib/eventlog/eventlog.c:877 -#: lib/eventlog/eventlog.c:880 lib/eventlog/eventlog.c:1176 -#: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:204 +#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 +#: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 +#: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 #: lib/iolog/iolog_filter.c:232 lib/iolog/iolog_json.c:150 #: lib/iolog/iolog_json.c:381 lib/iolog/iolog_json.c:412 #: lib/iolog/iolog_json.c:555 lib/iolog/iolog_legacy.c:100 @@ -264,37 +263,37 @@ msgstr "Псеудоним „%s“ је већ одређен" #: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 #: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 #: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1084 logsrvd/logsrvd.c:1400 logsrvd/logsrvd.c:1406 +#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 #: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 #: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 #: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 #: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 #: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 #: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 #: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 #: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 #: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 #: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:293 logsrvd/tls_init.c:314 -#: logsrvd/tls_init.c:324 plugins/sudoers/audit.c:116 +#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 +#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:134 +#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 #: plugins/sudoers/cvtsudoers.c:191 plugins/sudoers/cvtsudoers.c:202 #: plugins/sudoers/cvtsudoers.c:332 plugins/sudoers/cvtsudoers.c:536 #: plugins/sudoers/cvtsudoers.c:669 plugins/sudoers/cvtsudoers.c:687 -#: plugins/sudoers/cvtsudoers.c:758 plugins/sudoers/cvtsudoers.c:873 -#: plugins/sudoers/cvtsudoers.c:880 plugins/sudoers/cvtsudoers.c:1376 -#: plugins/sudoers/cvtsudoers.c:1380 plugins/sudoers/cvtsudoers.c:1482 -#: plugins/sudoers/cvtsudoers_csv.c:182 plugins/sudoers/cvtsudoers_csv.c:245 -#: 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:375 -#: plugins/sudoers/cvtsudoers_ldif.c:429 plugins/sudoers/cvtsudoers_ldif.c:437 -#: plugins/sudoers/cvtsudoers_ldif.c:448 plugins/sudoers/cvtsudoers_ldif.c:455 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:476 -#: plugins/sudoers/cvtsudoers_ldif.c:623 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:869 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:182 +#: plugins/sudoers/cvtsudoers_csv.c:245 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:375 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:437 plugins/sudoers/cvtsudoers_ldif.c:448 +#: plugins/sudoers/cvtsudoers_ldif.c:455 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:480 plugins/sudoers/cvtsudoers_ldif.c:488 +#: plugins/sudoers/cvtsudoers_ldif.c:635 plugins/sudoers/cvtsudoers_merge.c:47 #: plugins/sudoers/cvtsudoers_merge.c:51 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 @@ -305,23 +304,21 @@ msgstr "Псеудоним „%s“ је већ одређен" #: plugins/sudoers/cvtsudoers_merge.c:564 #: plugins/sudoers/cvtsudoers_merge.c:630 #: plugins/sudoers/cvtsudoers_merge.c:633 -#: plugins/sudoers/cvtsudoers_merge.c:1149 -#: plugins/sudoers/cvtsudoers_merge.c:1223 plugins/sudoers/defaults.c:468 -#: plugins/sudoers/defaults.c:690 plugins/sudoers/defaults.c:1051 -#: plugins/sudoers/defaults.c:1243 plugins/sudoers/editor.c:190 +#: plugins/sudoers/cvtsudoers_merge.c:1157 +#: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 +#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 +#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 #: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 #: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:264 -#: plugins/sudoers/iolog.c:664 plugins/sudoers/iolog.c:690 -#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:433 -#: plugins/sudoers/ldap.c:443 plugins/sudoers/ldap.c:448 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:464 -#: plugins/sudoers/ldap.c:760 plugins/sudoers/ldap.c:924 -#: plugins/sudoers/ldap.c:1340 plugins/sudoers/ldap.c:1766 -#: plugins/sudoers/ldap.c:1803 plugins/sudoers/ldap.c:1884 -#: plugins/sudoers/ldap.c:2019 plugins/sudoers/ldap.c:2120 -#: plugins/sudoers/ldap.c:2136 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 +#: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:755 plugins/sudoers/ldap.c:919 +#: plugins/sudoers/ldap.c:1335 plugins/sudoers/ldap.c:1761 +#: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 +#: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 +#: plugins/sudoers/ldap.c:2131 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:443 #: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 @@ -329,69 +326,70 @@ msgstr "Псеудоним „%s“ је већ одређен" #: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 #: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:221 plugins/sudoers/log_client.c:242 -#: plugins/sudoers/log_client.c:255 plugins/sudoers/log_client.c:390 -#: plugins/sudoers/log_client.c:703 plugins/sudoers/log_client.c:724 -#: plugins/sudoers/log_client.c:1444 plugins/sudoers/log_client.c:1662 -#: plugins/sudoers/log_client.c:1989 plugins/sudoers/log_client.c:2045 -#: plugins/sudoers/logging.c:104 plugins/sudoers/logging.c:184 -#: plugins/sudoers/logging.c:185 plugins/sudoers/logging.c:468 -#: plugins/sudoers/logging.c:488 plugins/sudoers/logging.c:628 -#: plugins/sudoers/match_command.c:323 plugins/sudoers/match_command.c:566 -#: plugins/sudoers/match_command.c:615 plugins/sudoers/match_command.c:688 -#: plugins/sudoers/match_command.c:735 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:200 plugins/sudoers/parse.c:217 -#: plugins/sudoers/parse.c:249 plugins/sudoers/parse.c:266 -#: plugins/sudoers/parse.c:289 plugins/sudoers/parse.c:300 -#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 -#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:597 -#: plugins/sudoers/parse_ldif.c:626 plugins/sudoers/parse_ldif.c:651 -#: plugins/sudoers/parse_ldif.c:709 plugins/sudoers/parse_ldif.c:726 -#: plugins/sudoers/parse_ldif.c:754 plugins/sudoers/parse_ldif.c:761 -#: plugins/sudoers/policy.c:152 plugins/sudoers/policy.c:161 -#: plugins/sudoers/policy.c:170 plugins/sudoers/policy.c:197 -#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:353 -#: plugins/sudoers/policy.c:355 plugins/sudoers/policy.c:391 -#: plugins/sudoers/policy.c:400 plugins/sudoers/policy.c:448 -#: plugins/sudoers/policy.c:458 plugins/sudoers/policy.c:467 -#: plugins/sudoers/policy.c:476 plugins/sudoers/policy.c:570 -#: plugins/sudoers/policy.c:952 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/set_perms.c:363 plugins/sudoers/set_perms.c:706 -#: plugins/sudoers/set_perms.c:1073 plugins/sudoers/set_perms.c:1380 -#: plugins/sudoers/set_perms.c:1549 plugins/sudoers/sssd.c:144 -#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 -#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 -#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 -#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:111 -#: plugins/sudoers/stubs.c:119 plugins/sudoers/sudoers.c:335 -#: plugins/sudoers/sudoers.c:361 plugins/sudoers/sudoers.c:429 -#: plugins/sudoers/sudoers.c:438 plugins/sudoers/sudoers.c:479 -#: plugins/sudoers/sudoers.c:842 plugins/sudoers/sudoers.c:980 -#: plugins/sudoers/sudoers.c:1039 plugins/sudoers/sudoers.c:1305 -#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 -#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 -#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 -#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/testsudoers.c:580 plugins/sudoers/timestamp.c:424 -#: plugins/sudoers/timestamp.c:468 plugins/sudoers/timestamp.c:980 -#: plugins/sudoers/timestamp.c:1118 plugins/sudoers/toke_util.c:78 -#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 -#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 -#: plugins/sudoers/visudo.c:344 plugins/sudoers/visudo.c:350 -#: plugins/sudoers/visudo.c:456 plugins/sudoers/visudo.c:632 -#: plugins/sudoers/visudo.c:962 plugins/sudoers/visudo.c:1035 toke.l:1015 -#: toke.l:1147 toke.l:1210 toke.l:1218 +#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 +#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 +#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 +#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 +#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 +#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 +#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 +#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 +#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 +#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 +#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 +#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 +#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 +#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 +#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 +#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 +#: 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:484 +#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 +#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 +#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 +#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 +#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 +#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 +#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 +#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/set_perms.c:363 +#: plugins/sudoers/set_perms.c:706 plugins/sudoers/set_perms.c:1073 +#: plugins/sudoers/set_perms.c:1380 plugins/sudoers/set_perms.c:1549 +#: plugins/sudoers/sssd.c:144 plugins/sudoers/sssd.c:185 +#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 +#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 +#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 +#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 +#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 +#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 +#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 +#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 +#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 +#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 +#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 +#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 +#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 +#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 +#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 +#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 +#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 +#: toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -400,16 +398,18 @@ msgstr "%s: %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:580 plugins/sudoers/env.c:326 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 #: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 -#: plugins/sudoers/ldap.c:531 plugins/sudoers/ldap.c:764 -#: plugins/sudoers/ldap.c:1137 plugins/sudoers/ldap_conf.c:222 +#: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 +#: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 #: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/policy.c:740 -#: plugins/sudoers/policy.c:751 plugins/sudoers/prompt.c:168 -#: plugins/sudoers/serialize_list.c:62 plugins/sudoers/serialize_list.c:71 -#: plugins/sudoers/strvec_join.c:62 plugins/sudoers/testsudoers.c:245 -#: plugins/sudoers/toke_util.c:213 toke.l:979 toke.l:1181 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 +#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 +#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 +#: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 +#: toke.l:987 toke.l:1189 #, c-format msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење „%s“" @@ -424,31 +424,31 @@ msgstr "не могу да удвостручим стандардни улаз: msgid "unable to execute %s: %m" msgstr "не могу да извршим „%s“: %m" -#: lib/eventlog/eventlog.c:456 plugins/sudoers/auth/aix_auth.c:198 +#: lib/eventlog/eventlog.c:463 plugins/sudoers/auth/aix_auth.c:198 msgid "unable to fork" msgstr "не могу да исцепим" -#: lib/eventlog/eventlog.c:464 lib/eventlog/eventlog.c:518 +#: lib/eventlog/eventlog.c:473 lib/eventlog/eventlog.c:538 #, c-format msgid "unable to fork: %m" msgstr "не могу да исцепим: %m" -#: lib/eventlog/eventlog.c:508 +#: lib/eventlog/eventlog.c:528 #, c-format msgid "unable to open pipe: %m" msgstr "не могу да отворим спојку: %m" -#: lib/eventlog/eventlog.c:1007 +#: lib/eventlog/eventlog.c:1030 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: lib/eventlog/eventlog.c:1036 +#: lib/eventlog/eventlog.c:1059 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (наредба је настављена) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1296 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -564,13 +564,13 @@ msgid "%s exists but is not a directory (0%o)" msgstr "%s постоји али није директоријум (0%o)" #: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:807 plugins/sudoers/timestamp.c:205 +#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "не могу да направим директоријум „%s“" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:731 -#: plugins/sudoers/visudo.c:765 plugins/sudoers/visudo.c:771 +#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 +#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не могу да променим режим „%s“ на 0%o" @@ -585,8 +585,8 @@ msgstr "грешка читања датотеке временисања: %s" msgid "invalid timing file line: %s" msgstr "неисправан ред датотеке временисања: %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:804 -#: plugins/sudoers/policy.c:550 +#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 +#: plugins/sudoers/policy.c:573 msgid "unable to generate UUID" msgstr "не могу да створим УУИБ" @@ -645,56 +645,56 @@ msgstr "грешка затварања описника датотеке У/И msgid "error flushing iofd %d: %s" msgstr "грешка исипања описника датотеке У/И %d: %s" -#: logsrvd/iolog_writer.c:777 +#: logsrvd/iolog_writer.c:780 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "неисправан У/И дневник „%s“: „%s“ је упутно али није присутно" -#: logsrvd/iolog_writer.c:789 logsrvd/logsrvd_journal.c:377 +#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s: не могу да нађем тачку наставка [%lld, %ld]" -#: logsrvd/iolog_writer.c:811 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:245 -#: plugins/sudoers/check.c:273 plugins/sudoers/cvtsudoers.c:730 -#: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1442 -#: plugins/sudoers/cvtsudoers_csv.c:681 plugins/sudoers/cvtsudoers_json.c:885 -#: plugins/sudoers/cvtsudoers_ldif.c:697 plugins/sudoers/sudoers.c:1092 +#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 +#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 +#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 +#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 #: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 #, c-format msgid "unable to open %s" msgstr "не могу да отворим „%s“" -#: logsrvd/iolog_writer.c:823 logsrvd/logsrv_util.c:100 +#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 #: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "не могу да отворим „%s/%s“" -#: logsrvd/iolog_writer.c:836 +#: logsrvd/iolog_writer.c:839 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "не могу да умножим „%s/%s“ у „%s/%s“: %s" -#: logsrvd/iolog_writer.c:865 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 #, c-format msgid "unable to rename %s to %s" msgstr "не могу да преименујем „%s“ у „%s“" -#: logsrvd/logsrv_util.c:139 logsrvd/logsrv_util.c:168 +#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s: не могу да нађем тачку наставка [%lld, %ld]" -#: logsrvd/logsrv_util.c:151 +#: logsrvd/logsrv_util.c:154 #, c-format msgid "missing I/O log file %s/%s" msgstr "недостаје У/И датотека дневника „%s/%s“" -#: logsrvd/logsrv_util.c:158 +#: logsrvd/logsrv_util.c:161 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: не могу да премотам унапред „%zu“" @@ -703,32 +703,32 @@ msgstr "%s/%s: не могу да премотам унапред „%zu“" msgid "unable to connect to relay" msgstr "не могу да се повежем са преносником" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:835 +#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 #, c-format msgid "server message too large: %zu" msgstr "порука сервера је превелика: %zu" #: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1010 -#: logsrvd/logsrvd.c:1134 logsrvd/logsrvd.c:1307 logsrvd/logsrvd.c:1325 -#: logsrvd/logsrvd.c:1423 logsrvd/logsrvd.c:1546 logsrvd/logsrvd.c:1730 -#: logsrvd/logsrvd_journal.c:489 logsrvd/logsrvd_local.c:197 +#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 +#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 +#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 +#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 #: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 #: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 #: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1121 +#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 #: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:209 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1027 plugins/sudoers/iolog.c:1160 -#: plugins/sudoers/iolog.c:1258 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 -#: plugins/sudoers/log_client.c:395 plugins/sudoers/log_client.c:599 -#: plugins/sudoers/log_client.c:606 plugins/sudoers/log_client.c:1131 -#: plugins/sudoers/log_client.c:1413 plugins/sudoers/log_client.c:1454 -#: plugins/sudoers/log_client.c:1462 plugins/sudoers/log_client.c:1618 -#: plugins/sudoers/log_client.c:1734 plugins/sudoers/log_client.c:2053 -#: plugins/sudoers/log_client.c:2061 plugins/sudoers/logging.c:142 -#: plugins/sudoers/logging.c:199 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 +#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 +#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 +#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 +#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 +#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 +#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 +#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 +#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 +#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -773,6 +773,13 @@ msgstr "%s: неочекивана У/И међумеморија" msgid "protocol error" msgstr "грешка протокола" +#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 +#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 +#: plugins/sudoers/log_client.c:1618 +#, c-format +msgid "unable to unpack %s size %zu" +msgstr "не могу да отпакујем „%s“ величине %zu" + #: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 #: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 #, c-format @@ -788,110 +795,110 @@ msgstr "непозната врста „Поруке_клијента“" msgid "timed out writing to client %s" msgstr "истекло је време писања на клијенту „%s“" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:907 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 #, c-format msgid "missing write buffer for client %s" msgstr "недостаје међумеморија писања за клијента „%s“" -#: logsrvd/logsrvd.c:981 +#: logsrvd/logsrvd.c:982 #, c-format msgid "timed out reading from client %s" msgstr "истекло је време читања са клијента „%s“" -#: logsrvd/logsrvd.c:1022 logsrvd/logsrvd_relay.c:771 +#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "крај датотеке из „%s“ без одговарајућег ТЛС гашења" -#: logsrvd/logsrvd.c:1065 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:709 +#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 +#: plugins/sudoers/log_client.c:716 #, c-format msgid "client message too large: %zu" msgstr "порука клијента је превелика: %zu" -#: logsrvd/logsrvd.c:1066 logsrvd/logsrvd_journal.c:246 +#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 #: logsrvd/logsrvd_journal.c:247 msgid "client message too large" msgstr "порука клијента је превелика" -#: logsrvd/logsrvd.c:1084 logsrvd/logsrvd.c:1085 +#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 msgid "invalid ClientMessage" msgstr "неисправна „Порука клијента“" -#: logsrvd/logsrvd.c:1386 +#: logsrvd/logsrvd.c:1389 msgid "unable to get remote IP addr" msgstr "не могу да добавим удаљену ИП адресу" -#: logsrvd/logsrvd.c:1415 logsrvd/tls_client.c:196 -#: plugins/sudoers/log_client.c:270 +#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 +#: plugins/sudoers/log_client.c:276 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Не могу да прикачим податке корисника ссл објекту: %s" -#: logsrvd/logsrvd.c:1596 logsrvd/logsrvd.c:1948 +#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 msgid "unable to setup listen socket" msgstr "не могу да подесим прикључницу ослушкивања" -#: logsrvd/logsrvd.c:1713 +#: logsrvd/logsrvd.c:1718 #, c-format msgid "unexpected signal %d" msgstr "неочекивани сигнал %d" -#: logsrvd/logsrvd.c:1850 +#: logsrvd/logsrvd.c:1855 msgid "sudo log server" msgstr "сервер судо дневника" -#: logsrvd/logsrvd.c:1852 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 msgid "Options:" msgstr "Опције:" -#: logsrvd/logsrvd.c:1854 +#: logsrvd/logsrvd.c:1859 msgid "path to configuration file" msgstr "путања до датотеке подешавања" -#: logsrvd/logsrvd.c:1856 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 msgid "display help message and exit" msgstr "приказује поруку помоћи и излази" -#: logsrvd/logsrvd.c:1858 +#: logsrvd/logsrvd.c:1863 msgid "do not fork, run in the foreground" msgstr "не клонира, ради у првом плану" -#: logsrvd/logsrvd.c:1860 +#: logsrvd/logsrvd.c:1865 msgid "percent chance connections will drop" msgstr "просенат шанси за одбацивање веза" -#: logsrvd/logsrvd.c:1862 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 msgid "display version information and exit" msgstr "приказује податке о издању и излази" -#: logsrvd/logsrvd.c:1912 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 msgid "Protobuf-C version 1.3 or higher required" msgstr "Потребно је „Protobuf-C“ издање 1.3 или новије" -#: logsrvd/logsrvd.c:1928 +#: logsrvd/logsrvd.c:1933 #, c-format msgid "invalid random drop value: %s" msgstr "неисправна вредност одбацивања насумичности: %s" -#: logsrvd/logsrvd.c:1931 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:177 +#: plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s издање %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:335 -#: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:120 -#: plugins/sudoers/policy.c:1188 plugins/sudoers/sudoers.c:486 -#: plugins/sudoers/sudoers.c:1347 plugins/sudoers/testsudoers.c:215 +#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 +#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 +#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "непознат корисник „%s“" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:145 -#: plugins/sudoers/sudoers.c:491 plugins/sudoers/sudoers.c:1381 +#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" @@ -965,7 +972,7 @@ msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] неисправан кључ: %s" #: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:857 +#: plugins/sudoers/logging.c:1035 #, c-format msgid "unable to open log file %s" msgstr "не могу да отворим датотеку дневника „%s“" @@ -978,13 +985,13 @@ msgstr "не могу да покренем ТЛС контекст сервер msgid "unable to initialize relay TLS context" msgstr "не могу да покренем ТЛС контекст преносника" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:416 -#: logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 +#: logsrvd/logsrvd_journal.c:416 msgid "unable to create journal file" msgstr "не могу да направим датотеку дневника" #: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1007 +#: plugins/sudoers/visudo.c:1020 #, c-format msgid "unable to lock %s" msgstr "не могу да закључам „%s“" @@ -997,8 +1004,8 @@ msgstr "не могу да закључам датотеку дневника" msgid "unable to open journal file" msgstr "не могу да отворим датотеку дневника" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:452 -#: logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 +#: logsrvd/logsrvd_journal.c:452 msgid "unable to write journal file" msgstr "не могу да запишем датотеку дневника" @@ -1016,11 +1023,11 @@ msgstr "неочекивани крај датотеке читајући дат msgid "error reading journal file" msgstr "грешка читања датотеке дневника" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:376 +#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 msgid "invalid journal file, unable to restart" msgstr "неисправна датотека дневника, не могу поново да почнем" -#: logsrvd/logsrvd_journal.c:435 +#: logsrvd/logsrvd_journal.c:430 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "не могу да премотам на [%lld, %ld] у датотеци дневника „%s“" @@ -1108,7 +1115,7 @@ msgid "%s: invalid ServerHello, missing server_id" msgstr "%s: неисправан поздрав сервера, недостаје иб сервера" #: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1497 +#: plugins/sudoers/log_client.c:1504 msgid "invalid ServerHello" msgstr "неисправан „Поздрав_сервера“" @@ -1129,34 +1136,34 @@ msgstr "истекло је време читања са преносника" msgid "relay host name does not match certificate" msgstr "назив домаћина преносника не одговара уверењу" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:776 -#: logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 +#: logsrvd/logsrvd_relay.c:784 msgid "error reading from relay" msgstr "грешка читања са преносника" -#: logsrvd/logsrvd_relay.c:803 +#: logsrvd/logsrvd_relay.c:805 msgid "unable to read from relay" msgstr "не могу да читам са преносника" -#: logsrvd/logsrvd_relay.c:818 logsrvd/logsrvd_relay.c:936 +#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 msgid "relay server closed connection" msgstr "сервер преносника је затворио везу" -#: logsrvd/logsrvd_relay.c:836 +#: logsrvd/logsrvd_relay.c:838 msgid "server message too large" msgstr "порука сервера је превелика" -#: logsrvd/logsrvd_relay.c:900 +#: logsrvd/logsrvd_relay.c:902 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "истекло је време писања на преноснику „%s“ (%s)" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:904 msgid "timeout writing to relay" msgstr "истекло је време писања на преноснику" -#: logsrvd/logsrvd_relay.c:955 logsrvd/logsrvd_relay.c:961 -#: logsrvd/logsrvd_relay.c:971 +#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 +#: logsrvd/logsrvd_relay.c:974 msgid "error writing to relay" msgstr "грешка писања на преноснику" @@ -1212,7 +1219,7 @@ msgstr "прекида пренос након достизања овог вр msgid "test audit server by sending selected I/O log n times in parallel" msgstr "тестира анкетни сервер шаљући изабрани У/И дневник n пута у паралели" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:441 +#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 #, c-format msgid "unable to look up %s:%s: %s" msgstr "не могу да потражим „%s:%s“: %s" @@ -1226,30 +1233,30 @@ msgstr "не могу да добавим ИП адресу сервера" msgid "unable to read %s/%s: %s" msgstr "не могу да прочитам „%s/%s“: %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:945 -#: plugins/sudoers/iolog.c:1020 +#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 +#: plugins/sudoers/iolog.c:1024 #, c-format msgid "unexpected I/O event %d" msgstr "неочекивани У/И догађај „%d“" #: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1146 plugins/sudoers/log_client.c:1423 -#: plugins/sudoers/log_client.c:1491 plugins/sudoers/log_client.c:1530 +#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 +#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 #, c-format msgid "%s: unexpected state %d" msgstr "%s: неочекивано стање „%d“" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1576 +#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 #, c-format msgid "error message received from server: %s" msgstr "порука грешке је примљена са сервера: %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1589 +#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 #, c-format msgid "abort message received from server: %s" msgstr "порука прекида је примљена са сервера: %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1639 +#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: неочекивана вредност врсте_слова „%d“" @@ -1258,11 +1265,15 @@ msgstr "%s: неочекивана вредност врсте_слова „%d msgid "timeout reading from server" msgstr "истекло је време читања са сервера" +#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +msgid "host name does not match certificate" +msgstr "назив домаћина не одговара уверењу" + #: logsrvd/sendlog.c:1368 msgid "premature EOF" msgstr "прерани крај датотеке" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1800 +#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 #, c-format msgid "server message too large: %u" msgstr "порука сервера је превелика: %u" @@ -1294,12 +1305,12 @@ msgstr "протекло време послато серверу [%lld, %ld]" msgid "commit point received from server [%lld, %ld]" msgstr "тачка слања примљена са сервера [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:304 +#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 msgid "TLS handshake timeout occurred" msgstr "дошло је до временског истека ТЛС руковања" #: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:326 plugins/sudoers/log_client.c:342 +#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 msgid "unable to set event" msgstr "не могу да подесим догађај" @@ -1308,50 +1319,51 @@ msgstr "не могу да подесим догађај" msgid "TLS connection failed: %s" msgstr "ТЛС веза није успела: %s" -#: logsrvd/tls_client.c:190 +#: logsrvd/tls_client.c:191 #, c-format msgid "unable to allocate ssl object: %s" msgstr "не могу да доделим ссл објекат: %s" -#: logsrvd/tls_client.c:203 +#: logsrvd/tls_client.c:205 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Не могу да прикачим прикључницу ссл објекту: %s" -#: logsrvd/tls_client.c:231 +#: logsrvd/tls_client.c:233 msgid "unable to initialize TLS context" msgstr "не могу да покренем ТЛС контекст" -#: logsrvd/tls_init.c:127 logsrvd/tls_init.c:135 +#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "не могу да подесим шифрарник ТЛС-а 1.2 на „%s“: %s" -#: logsrvd/tls_init.c:155 logsrvd/tls_init.c:163 +#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "не могу да подесим шифрарник ТЛС-а 1.3 на „%s“: %s" -#: logsrvd/tls_init.c:195 logsrvd/tls_init.c:216 +#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "не могу да подесим „diffie-hellman“ параметре: %s" -#: logsrvd/tls_init.c:272 +#: logsrvd/tls_init.c:277 #, c-format msgid "unable to create TLS context: %s" msgstr "Не могу да створим ТЛС контекст: %s" -#: logsrvd/tls_init.c:278 +#: logsrvd/tls_init.c:284 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "не могу да подесим најмање издање протокола на „TLS 1.2“: %s" #: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:979 plugins/sudoers/log_client.c:1028 -#: plugins/sudoers/log_client.c:1077 plugins/sudoers/log_client.c:1203 -#: plugins/sudoers/logging.c:552 plugins/sudoers/logging.c:649 -#: plugins/sudoers/logging.c:811 plugins/sudoers/policy.c:123 +#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 +#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 +#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 +#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 +#: plugins/sudoers/policy.c:123 msgid "unable to get time of day" msgstr "не могу да добавим време дана" @@ -1407,47 +1419,47 @@ msgstr "" "грешка сервера потврђивања идентитета:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:110 +#: plugins/sudoers/auth/kerb5.c:115 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: не могу да претворим главника у ниску („%s“): %s" -#: plugins/sudoers/auth/kerb5.c:162 +#: plugins/sudoers/auth/kerb5.c:164 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: не могу да обрадим „%s“: %s" -#: plugins/sudoers/auth/kerb5.c:171 +#: plugins/sudoers/auth/kerb5.c:173 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: не могу да решим оставу пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:220 +#: plugins/sudoers/auth/kerb5.c:222 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: не могу да доделим опције: %s" -#: plugins/sudoers/auth/kerb5.c:235 +#: plugins/sudoers/auth/kerb5.c:237 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: не могу да добавим пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:248 +#: plugins/sudoers/auth/kerb5.c:250 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: не могу да покренем оставу пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:251 +#: plugins/sudoers/auth/kerb5.c:253 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: не могу да сместим пуномоћства у оставу: %s" -#: plugins/sudoers/auth/kerb5.c:315 +#: plugins/sudoers/auth/kerb5.c:317 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: не могу да добавим главника домаћина: %s" -#: plugins/sudoers/auth/kerb5.c:329 +#: plugins/sudoers/auth/kerb5.c:331 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Не могу потврдити ТГТ! Могући напад!: %s" @@ -1488,7 +1500,7 @@ msgstr "Налог је истекао или ПАМ подешавањима н msgid "PAM account management error: %s" msgstr "грешка управљања ПАМ налогом: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:255 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 #, c-format msgid "you do not exist in the %s database" msgstr "ви не постојите у бази подтака „%s“" @@ -1529,27 +1541,27 @@ msgstr "неисправна дужина пропусне шифре за бе msgid "unable to initialize SIA session" msgstr "не могу да покренем СИА сесију" -#: plugins/sudoers/auth/sudo_auth.c:134 +#: plugins/sudoers/auth/sudo_auth.c:135 msgid "invalid authentication methods" msgstr "неисправни начини потврђивања идентитета" -#: plugins/sudoers/auth/sudo_auth.c:136 +#: plugins/sudoers/auth/sudo_auth.c:137 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Неисправни начини потврђивања идентитета су преведени у судоу! Не можете мешати самостално и несамостално потврђивање идентитета." -#: plugins/sudoers/auth/sudo_auth.c:257 plugins/sudoers/auth/sudo_auth.c:309 +#: plugins/sudoers/auth/sudo_auth.c:258 plugins/sudoers/auth/sudo_auth.c:310 msgid "no authentication methods" msgstr "нема начина потврђивања идентитета" -#: plugins/sudoers/auth/sudo_auth.c:259 +#: plugins/sudoers/auth/sudo_auth.c:260 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Нема начина потврђивања идентитета преведених у судоу! Ако желите да искључите потврђивање идентитета, користите „--disable-authentication“." -#: plugins/sudoers/auth/sudo_auth.c:311 +#: plugins/sudoers/auth/sudo_auth.c:312 msgid "Unable to initialize authentication methods." msgstr "Не могу да покренем методе потврђивања идентитета." -#: plugins/sudoers/auth/sudo_auth.c:482 +#: plugins/sudoers/auth/sudo_auth.c:486 msgid "Authentication methods:" msgstr "Начини потврђивања идентитета:" @@ -1561,17 +1573,17 @@ msgstr "Не могу да утврдим услов прегледа" msgid "unable to commit audit record" msgstr "не могу да предам снимак прегледа" -#: plugins/sudoers/check.c:263 +#: plugins/sudoers/check.c:275 #, c-format msgid "error reading lecture file %s" msgstr "грешка читања датотеке обучавања „%s“" -#: plugins/sudoers/check.c:269 +#: plugins/sudoers/check.c:278 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "занемарујем датотеку обучавања „%s“: није обична датотека" -#: plugins/sudoers/check.c:282 +#: plugins/sudoers/check.c:291 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1591,32 +1603,27 @@ msgstr "" " #3) Са великом моћи долази и велика одговорност.\n" "\n" -#: plugins/sudoers/check.c:330 plugins/sudoers/check.c:340 -#: plugins/sudoers/sudoers.c:885 plugins/sudoers/sudoers.c:906 -#: plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 +#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "непознат јиб %u" -#: plugins/sudoers/check_aliases.c:92 -#, c-format -msgid "Error: %s:%d:%d: cycle in %s \"%s\"" -msgstr "Грешка: %s:%d:%d: циклус у „%s“ „%s“" - -#: plugins/sudoers/check_aliases.c:93 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 #, c-format -msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" -msgstr "Упозорење: %s:%d:%d: циклус у „%s“ „%s“" +msgid "%s: %s\n" +msgstr "%s: %s\n" -#: plugins/sudoers/check_aliases.c:97 +#: plugins/sudoers/check_aliases.c:133 #, c-format -msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "Грешка: %s:%d:%d: упута за „%s“ „%s“ постоји али није одређена" +msgid "cycle in %s \"%s\"" +msgstr "циклус у „%s“ „%s“" -#: plugins/sudoers/check_aliases.c:98 +#: plugins/sudoers/check_aliases.c:136 #, c-format -msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "Упозорење: %s:%d:%d: упута за „%s“ „%s“ постоји али није одређена" +msgid "%s \"%s\" referenced but not defined" +msgstr "упута за „%s“ „%s“ постоји али није дефинисана" #: plugins/sudoers/cvtsudoers.c:209 #, c-format @@ -1633,7 +1640,7 @@ msgstr "поредак почетка: %s: %s" msgid "order padding: %s: %s" msgstr "попуњавање поретка: %s: %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:179 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s граматика издање %d\n" @@ -1653,10 +1660,10 @@ msgstr "неподржан запис излаза „%s“" msgid "%s: input and output files must be different" msgstr "%s: улазна датотека треба да се разликује од излазне" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:159 -#: plugins/sudoers/sudoers.c:205 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:261 plugins/sudoers/visudo.c:620 -#: plugins/sudoers/visudo.c:953 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 +#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 +#: plugins/sudoers/visudo.c:969 msgid "unable to initialize sudoers default values" msgstr "не могу да покренем основне вредности судоерса" @@ -1685,28 +1692,18 @@ msgstr "неисправна врста потискивања: %s" msgid "invalid filter: %s" msgstr "неисправан филтер: %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:958 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 #, c-format msgid "failed to parse %s file, unknown error" msgstr "нисам успео да обрадим %s датотеку, непозната грешка" -#: plugins/sudoers/cvtsudoers.c:762 -#, c-format -msgid "parse error in %s near line %d\n" -msgstr "грешка обраде у %s близу реда %d\n" - -#: plugins/sudoers/cvtsudoers.c:765 -#, c-format -msgid "parse error in %s\n" -msgstr "грешка обраде у %s\n" - -#: plugins/sudoers/cvtsudoers.c:1489 plugins/sudoers/sudoreplay.c:1145 +#: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 #: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 #, c-format msgid "unable to write to %s" msgstr "не могу да пишем у „%s“" -#: plugins/sudoers/cvtsudoers.c:1512 +#: plugins/sudoers/cvtsudoers.c:1501 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1715,7 +1712,7 @@ msgstr "" "%s – претвара међусобно записе датотеке судоерса\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1514 +#: plugins/sudoers/cvtsudoers.c:1503 msgid "" "\n" "Options:\n" @@ -1756,31 +1753,31 @@ msgstr "" " -V, --version приказује податке о издању и излази" #: plugins/sudoers/cvtsudoers_csv.c:452 plugins/sudoers/cvtsudoers_csv.c:466 -#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:669 +#: plugins/sudoers/cvtsudoers_json.c:657 plugins/sudoers/cvtsudoers_json.c:672 #: plugins/sudoers/cvtsudoers_ldif.c:347 plugins/sudoers/cvtsudoers_ldif.c:360 -#: plugins/sudoers/ldap.c:515 +#: plugins/sudoers/ldap.c:510 msgid "unable to get GMT time" msgstr "не могу да добавим ГМТ време" #: plugins/sudoers/cvtsudoers_csv.c:457 plugins/sudoers/cvtsudoers_csv.c:471 -#: plugins/sudoers/cvtsudoers_json.c:659 plugins/sudoers/cvtsudoers_json.c:674 +#: plugins/sudoers/cvtsudoers_json.c:662 plugins/sudoers/cvtsudoers_json.c:677 #: plugins/sudoers/cvtsudoers_ldif.c:352 plugins/sudoers/cvtsudoers_ldif.c:365 -#: plugins/sudoers/ldap.c:523 +#: plugins/sudoers/ldap.c:518 msgid "unable to format timestamp" msgstr "не могу да обликујем временску ознаку" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:515 -#: plugins/sudoers/cvtsudoers_json.c:725 plugins/sudoers/defaults.c:190 +#: plugins/sudoers/cvtsudoers_json.c:728 #, c-format msgid "%s:%d:%d: unknown defaults entry \"%s\"" msgstr "%s:%d:%d: непознат унос основности „%s“" -#: plugins/sudoers/cvtsudoers_ldif.c:649 +#: plugins/sudoers/cvtsudoers_ldif.c:661 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "превише уноса судоерса, највише %u" -#: plugins/sudoers/cvtsudoers_ldif.c:692 +#: plugins/sudoers/cvtsudoers_ldif.c:704 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "променљива „SUDOERS_BASE“ окружења није постављена и „-b“ опција није наведена." @@ -1825,780 +1822,751 @@ msgstr "%s:%d:%d: не могу да учиним основности „%s“ msgid "%s:%d:%d: removing Defaults \"%s\" overridden by subsequent entries" msgstr "%s:%d:%d: уклањам основности „%s“ преписане следећим уносима" -#: plugins/sudoers/cvtsudoers_merge.c:1080 +#: plugins/sudoers/cvtsudoers_merge.c:1088 #, c-format msgid "%s:%d:%d: merging userspec into %s:%d:%d" msgstr "%s:%d:%d: стапам корисничку спецификацију у „%s:%d:%d“" -#: plugins/sudoers/cvtsudoers_merge.c:1174 +#: plugins/sudoers/cvtsudoers_merge.c:1182 #, c-format msgid "%s:%d:%d: removing userspec overridden by subsequent entries" msgstr "%s:%d:%d: уклањам корисничку специфичност преписану следећим уносима" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:56 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Помоћник сисдневника ако је сисдневник коришћен за пријављивање: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:60 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Приоритет системског дневника за коришћење када корисник успешно потврди идентитет: %s" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:64 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Приоритет системског дневника за коришћење када корисник неуспешно потврди идентитет: %s" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:68 msgid "Put OTP prompt on its own line" msgstr "Поставља ОТП упит на свом реду" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:72 msgid "Ignore '.' in $PATH" msgstr "Занемарује . у $ПУТАЊИ" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:76 msgid "Always send mail when sudo is run" msgstr "Увек шаље пошту када је судо покренут" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if user authentication fails" msgstr "Пошаљи поруку ако потврђивање идентитета корисника не успе" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user is not in sudoers" msgstr "Пошаљи поруку ако корисник није у судоерсу" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:88 msgid "Send mail if the user is not in sudoers for this host" msgstr "Пошаљи поруку ако корисник није у судоерсу за овог домаћина" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:92 msgid "Send mail if the user is not allowed to run a command" msgstr "Пошаљи поруку ако кориснику није дозвољено да покрене наредбу" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:96 msgid "Send mail if the user tries to run a command" msgstr "Пошаљи поруку ако корисник покуша да покрене наредбу" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:100 msgid "Use a separate timestamp for each user/tty combo" msgstr "Користи одвојене временске ознаке за сваку комбинацију корисник/конзола" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:104 msgid "Lecture user the first time they run sudo" msgstr "Подучава корисника када први пут покрену судо" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:108 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Датотека садржи судо обучавања: %s" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:112 msgid "Require users to authenticate by default" msgstr "Захтева да корисници потврде идентитет по основи" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:116 msgid "Root may run sudo" msgstr "Администратор може да покрене судо" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:120 msgid "Log the hostname in the (non-syslog) log file" msgstr "Бележи назив домаћина у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:124 msgid "Log the year in the (non-syslog) log file" msgstr "Бележи годину у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:128 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Ако је судо призван без аргумената, покреће шкољку" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:132 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Подешава $HOME на крајњег корисника када покреће шкољку са „-s“" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:136 msgid "Always set $HOME to the target user's home directory" msgstr "Увек подешава $HOME на циљни лични директоријум корисника" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:140 msgid "Allow some information gathering to give useful error messages" msgstr "Дозвољава прикупљање неких података да би дао корисне поруке грешака" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:144 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Захтева потпуно одређене називе домаћина у датотеци судоерса" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:148 msgid "Insult the user when they enter an incorrect password" msgstr "Вређа корисника када унесе нетачну лозинку" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:152 msgid "Only allow the user to run sudo if they have a tty" msgstr "Дозвољава кориснику да покрене судо само ако има конзолу" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:156 msgid "Visudo will honor the EDITOR environment variable" msgstr "Висудо ће поштовати променљиву окружења УРЕЂИВАЧА" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:160 msgid "Prompt for root's password, not the users's" msgstr "Тражи администраторову лозинку, а не корисника" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:164 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Тражи корисникову лозинку покреникао_основни, а не корисника" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:168 msgid "Prompt for the target user's password, not the users's" msgstr "Тражи корисникову лозинку мете, а не корисника" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:172 msgid "Apply defaults in the target user's login class if there is one" msgstr "Примењује основности у циљни кориснички разред пријављивања ако постоји" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:176 msgid "Set the LOGNAME and USER environment variables" msgstr "Подешава променљиве окружења НАЗИВДНЕВНИКА и КОРИСНИК" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:180 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Подешава само ефективни јиб на крајњег корисника, а не стваран јиб" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:184 msgid "Don't initialize the group vector to that of the target user" msgstr "Не покреће вектор групе ка оном крајњег корисника" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Дужина за преламање редова у датотеци дневника (0 — без преламања): %u" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Време истека временске ознаке потврђивања идентитета: %.1f минута" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Време истека упита лозинке: %.1f минута" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Број покушаја за уношење лозинке: %u" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Умаска за коришћење или 0777 за коришћење корисника: 0%o" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Path to log file: %s" msgstr "Путања до датотеке дневника: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Path to mail program: %s" msgstr "Путања до програма поште: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Flags for mail program: %s" msgstr "Опције за програм поште: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Address to send mail to: %s" msgstr "Адреса на коју послати поруку: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Address to send mail from: %s" msgstr "Адреса са које послати поруку: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Subject line for mail messages: %s" msgstr "Ред теме за поруке поште: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Incorrect password message: %s" msgstr "Порука нетачне лозинке: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Path to lecture status dir: %s" msgstr "Путања до директоријума стања обучавања: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Путања до директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:244 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Корисницима у овој групи се не захтева лозинка и ПУТАЊА: %s" -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Default password prompt: %s" msgstr "Основни упит лозинке: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:256 msgid "If set, passprompt will override system prompt in all cases." msgstr "Ако је подешено, упит лозинке ће преписати системски упит у свим случајевима." -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "Default user to run commands as: %s" msgstr "Основни корисник за покретање наредби као: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Вредност за преписивање корисничке $ПУТАЊЕ са: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:268 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Путања до уређивача кога ће да користи висудо: %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:272 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „list“: %s" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „verify“: %s" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:280 msgid "Preload the sudo_noexec library which replaces the exec functions" msgstr "Унапред учитава „sudo_noexec“ библиотеку која мења функцију извршавања" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:284 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Ако је ЛДАП директоријум изнет, да ли занемарујемо месну датотеку судоерса" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:288 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Описници датотека >= %d ће бити затворени пре извршавања наредбе" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:292 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Ако је подешено, корисници могу да препишу вредност „closefrom“ са опцијом „-C“" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:296 msgid "Allow users to set arbitrary environment variables" msgstr "Дозвољава корисницима да подесе произвољне променљиве окружења" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:300 msgid "Reset the environment to a default set of variables" msgstr "Враћа окружење на основни скуп променљивих" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:304 msgid "Environment variables to check for safety:" msgstr "Променљиве окружења за проверу исправности:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:308 msgid "Environment variables to remove:" msgstr "Променљиве окружења за уклањање:" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:312 msgid "Environment variables to preserve:" msgstr "Променљиве окружења за очување:" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "СЕЛинукс улога за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "СЕЛинукс врста за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:324 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Путања до судо-посебне датотеке окружења: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:328 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Путања до ограничене судо-посебне датотеке окружења: %s" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:332 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Језк за коришћење при обради судоерса: %s" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:336 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозвољава да судо тражи лозинку чак и ако би била видљива" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:340 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Обезбеђује видну повратну поруку при тражењу лозинке када постоји унос корисника" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:344 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Користи брже упоређивање које је мање тачно али не приступа систему датотека" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:348 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Умаска наведена у судоерсима ће преписати корисникову, чак и ако има већа овлашћења" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:352 msgid "Log user's input for the command being run" msgstr "Бележи корисников улаз за покренуту наредбу" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:356 msgid "Log the output of the command being run" msgstr "Бележи излаз покренуте наредбе" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:360 msgid "Compress I/O logs using zlib" msgstr "Пакује У/И дневнике користећи злиб" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:364 msgid "Always run commands in a pseudo-tty" msgstr "Увек покреће наредбе у привидној конзоли" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:368 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Прикључак за подршку не-Јуникс групе: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:372 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Директоријум за смештај улазних/излазних дневника: %s" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Датотека за смештај улазно/излазног дневника: %s" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:380 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додаје унос у датотеку „utmp/utmpx“ када додељује „pty“" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:384 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Подешава корисника у „utmp“-у на корисника покрени-као, не призивајући корисника" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Set of permitted privileges: %s" msgstr "Скуп допуштених повластица: %s" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Set of limit privileges: %s" msgstr "Скуп повластица ограничења: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:396 msgid "Run commands on a pty in the background" msgstr "Покреће наредбе у позадини на назовитерминалу" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:400 #, c-format msgid "PAM service name to use: %s" msgstr "Назив ПАМ услуге за коришћење: %s" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:404 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Назив ПАМ услуге за шкољке пријављивања: %s" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "Назив ПАМ услуге за коришћење када судо ради са опцијом „-A“: %s" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:412 msgid "Attempt to establish PAM credentials for the target user" msgstr "Покушава да успостави ПАМ пуномоћства за циљног корисника" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:416 msgid "Create a new PAM session for the command to run in" msgstr "Прави нову ПАМ сесију за покретање наредбе" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:420 msgid "Perform PAM account validation management" msgstr "Обавља управљање провером ПАМ налога" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Највећи број низа У/И дневника: %s" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:428 msgid "Enable sudoers netgroup support" msgstr "Укључује подршку нетгрупе судоерса" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:432 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Проверава родитељски директоријум за уписивошћу када уређује датотеке са „sudoedit“" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:436 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Прати симболичке везе када уређује датотеке са „sudoedit“" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:440 msgid "Query the group plugin for unknown system groups" msgstr "Пропитује прикључак групе за непознатим групама система" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:444 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Упоређује мрежне групе на основу читавог слога: корисник, домаћин и домен" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:448 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Допушта покретање наредби чак и ако судо не може да пише у дневник прегледа" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:452 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Допушта покретање наредби чак и ако судо не може да пише у дневник У/И" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:456 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Допушта покретање наредби чак и ако судо не може да пише у датотеку дневника" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:460 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Решава групе у судоерсима и упоређује ИД групе, а не назив" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Уноси дневника већи од ове вредности биће подељени на више порука системског дневника: %u" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:468 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Корисник који ће поседовати датотеке дневника У/И: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Група која ће поседовати датотеке дневника У/И: %s" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:476 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Режим датотеке за коришћење за датотеке дневника У/И: 0%o" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:480 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Извршава наредбе описником датотеке уместо путањом: %s" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:484 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Занемарује непознате уносе основности у судоерсу уместо да даје упозорење" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Време у секундама након ког ће наредба бити окончана: %u" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:492 msgid "Allow the user to specify a timeout on the command line" msgstr "Допушта кориснику да наведе време на линији наредби" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:496 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Пребацује У/И податке дневника на диск одмах уместо да га смешта у међумеморију" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:500 msgid "Include the process ID when logging via syslog" msgstr "Укључује ИБ процеса приликом пријављивања путем дневника система" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:504 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Врста временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Authentication failure message: %s" msgstr "Потврђивање идентитета није успело: %s" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:512 msgid "Ignore case when matching user names" msgstr "Занемарује величину слова приликом поклапања назива корисника" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:516 msgid "Ignore case when matching group names" msgstr "Занемарује величину слова приликом поклапања назива групе" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:520 msgid "Log when a command is allowed by sudoers" msgstr "Пише дневник када судоерси дозвољавају наредбу" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:524 msgid "Log when a command is denied by sudoers" msgstr "Пише дневник када судоерси не дозвољавају наредбу" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:528 msgid "Sudo log server(s) to connect to with optional port" msgstr "Судо сервер(и) дневника за повезивање са изборним прикључником" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Време истека судо сервера дневника у секундама: %u" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:536 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Укључује „SO_KEEPALIVE“ опцију прикључнице са повезаном прикључницом са сервером дневника" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:540 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Путања до датотеке групних издавача уверења сервера испитивања: %s" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:544 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Путања до датотеке уверења судоерса: %s" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:548 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Путања до датотеке датотеке личног кључа судоерса: %s" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:552 msgid "Verify that the log server's certificate is valid" msgstr "Потврђује да је исправно уверење дневника сервера" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:556 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Допушта коришћење непознатог „runas“ корисника и/или ИБ-а групе" -#: plugins/sudoers/def_data.c:554 +#: plugins/sudoers/def_data.c:560 msgid "Only permit running commands as a user with a valid shell" msgstr "Допушта покретање наредби као корисник само са исправном шкољком" -#: plugins/sudoers/def_data.c:558 +#: plugins/sudoers/def_data.c:564 msgid "Set the pam remote user to the user running sudo" msgstr "Поставља пам удаљеног корисника на корисника покретача судо-а" -#: plugins/sudoers/def_data.c:562 +#: plugins/sudoers/def_data.c:568 msgid "Set the pam remote host to the local host name" msgstr "Поставља пам удаљеног домаћина на назив локалног домаћина" -#: plugins/sudoers/def_data.c:566 +#: plugins/sudoers/def_data.c:572 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "Радни директоријум за прелазак пре извршавања наредбе: %s" -#: plugins/sudoers/def_data.c:570 +#: plugins/sudoers/def_data.c:576 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Корени директоријум за прелазак пре извршавања наредбе: %s" -#: plugins/sudoers/def_data.c:574 +#: plugins/sudoers/def_data.c:580 #, c-format msgid "The format of logs to produce: %s" msgstr "Формат резултирајућих дневника: %s" -#: plugins/sudoers/def_data.c:578 +#: plugins/sudoers/def_data.c:584 msgid "Enable SELinux RBAC support" msgstr "Укључује СЕЛинукс РБАЦ подршку" -#: plugins/sudoers/def_data.c:582 +#: plugins/sudoers/def_data.c:588 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "Путања до датотеке која је створена приликом првог покретања судоа: %s" -#: plugins/sudoers/def_data.c:586 +#: plugins/sudoers/def_data.c:592 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "Пресреће будуће наредбе и примењује „sudoers“ ограничења на њима" -#: plugins/sudoers/def_data.c:590 +#: plugins/sudoers/def_data.c:596 msgid "Log sub-commands run by the original command" msgstr "Бележи поднаредбе које покрене изворна наредба" -#: plugins/sudoers/def_data.c:594 +#: plugins/sudoers/def_data.c:600 msgid "Log the exit status of commands" msgstr "Бележи стање излаза наредбе" -#: plugins/sudoers/def_data.c:598 +#: plugins/sudoers/def_data.c:604 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "Наредне наредбе у пресретнутој сесији морају бити аутентификоване" -#: plugins/sudoers/def_data.c:602 +#: plugins/sudoers/def_data.c:608 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "Омогућава пресретнутој наредби да покрене поставку „setuid“ или „setgid“ програма" -#: plugins/sudoers/def_data.c:606 +#: plugins/sudoers/def_data.c:612 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "Највећа величина до које може да нарасте адресни простор процеса (у бајтовима): %s" -#: plugins/sudoers/def_data.c:610 +#: plugins/sudoers/def_data.c:616 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "Највећа величина избачаја датотеке језгра која се може направити (у бајтовима): %s" -#: plugins/sudoers/def_data.c:614 +#: plugins/sudoers/def_data.c:620 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "Највећа количина времена процесора које процес може да користи (у секундама): %s" -#: plugins/sudoers/def_data.c:618 +#: plugins/sudoers/def_data.c:624 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "Највећа величина сегмента података за процес (у бајтовима): %s" -#: plugins/sudoers/def_data.c:622 +#: plugins/sudoers/def_data.c:628 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "Највећа величина датотеке коју процес може да направи (у бајтовима): %s" -#: plugins/sudoers/def_data.c:626 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "Највећи број закључавања која процес може да успостави: %s" -#: plugins/sudoers/def_data.c:630 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "Највећа величина коју процес може да закључа у меморији (у бајтовима): %s" -#: plugins/sudoers/def_data.c:634 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "Највећи број датотека које процес може да отвори: %s" -#: plugins/sudoers/def_data.c:638 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "Највећи број процеса које корисник може да покрене истовремено: %s" -#: plugins/sudoers/def_data.c:642 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "Највећа величина до које може да нарасте резидентна величина скупа процеса (у бајтовима): %s" -#: plugins/sudoers/def_data.c:646 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "Највећа величина до које може да нарасте спремник процеса (у бајтовима): %s" -#: plugins/sudoers/def_data.c:650 +#: plugins/sudoers/def_data.c:656 msgid "Attempt authentication even when in non-interactive mode" msgstr "Покушава потврђивање идентитета чак и када није у не-међудејственом режиму" -#: plugins/sudoers/def_data.c:654 +#: plugins/sudoers/def_data.c:660 msgid "Store plaintext passwords in I/O log input" msgstr "Смешта обично-текстуалне лозинке у У/И улаз дневника" -#: plugins/sudoers/def_data.c:658 +#: plugins/sudoers/def_data.c:664 msgid "List of regular expressions to use when matching a password prompt" msgstr "Списак регуларних израза за коришћење приликом поређења упита лозинке" -#: plugins/sudoers/defaults.c:193 -#, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: непознат унос основности „%s“" - -#: plugins/sudoers/defaults.c:242 -#, c-format -msgid "%s:%d:%d: no value specified for \"%s\"" -msgstr "%s:%d:%d: није наведена вредност за „%s“" - -#: plugins/sudoers/defaults.c:245 -#, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: није наведена вредност за „%s“" - -#: plugins/sudoers/defaults.c:258 -#, c-format -msgid "%s:%d:%d: invalid operator \"%c=\" for \"%s\"" -msgstr "%s:%d:%d: неисправан оператор „%c=“ за „%s“" - -#: plugins/sudoers/defaults.c:261 -#, c-format -msgid "%s: invalid operator \"%c=\" for \"%s\"" -msgstr "%s: неисправан оператор „%c=“ за „%s“" - -#: plugins/sudoers/defaults.c:297 +#: plugins/sudoers/def_data.c:668 #, c-format -msgid "%s:%d:%d: option \"%s\" does not take a value" -msgstr "%s:%d:%d: опција „%s“ не узима вредност" +msgid "The mechanism used by the intercept and log_subcmds options: %s" +msgstr "Механизам који користе опције „intercept“ и „log_subcmds“: %s" -#: plugins/sudoers/defaults.c:300 +#: plugins/sudoers/def_data.c:672 #, c-format -msgid "%s: option \"%s\" does not take a value" -msgstr "%s: опција „%s“ не узима вредност" +msgid "AppArmor profile to use in the new security context: %s" +msgstr "АпАрмор профил за коришћење у новом контексту безбедности: %s" -#: plugins/sudoers/defaults.c:328 +#: plugins/sudoers/defaults.c:191 #, c-format -msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d:%d: неисправна врста основности 0x%x за опцију „%s“" +msgid "unknown defaults entry \"%s\"" +msgstr "непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:331 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s: неисправна врста основности 0x%x за опцију „%s“" +msgid "no value specified for \"%s\"" +msgstr "није наведена вредност за „%s“" -#: plugins/sudoers/defaults.c:341 +#: plugins/sudoers/defaults.c:243 #, c-format -msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d:%d: вредност „%s“ је неисправна за опцију „%s“" +msgid "invalid operator \"%c=\" for \"%s\"" +msgstr "неисправан оператор „%c=“ за „%s“" -#: plugins/sudoers/defaults.c:344 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: вредност „%s“ је неисправна за опцију „%s“" +msgid "option \"%s\" does not take a value" +msgstr "опција „%s“ не узима вредност" -#: plugins/sudoers/defaults.c:1161 +#: plugins/sudoers/defaults.c:299 #, c-format -msgid "%s:%d:%d: path name for \"%s\" too long" -msgstr "%s:%d:%d: назив путање за „%s“ је предуг" +msgid "invalid Defaults type 0x%x for option \"%s\"" +msgstr "неисправна врста основности 0x%x за опцију „%s“" -#: plugins/sudoers/defaults.c:1164 +#: plugins/sudoers/defaults.c:306 #, c-format -msgid "%s: path name for \"%s\" too long" -msgstr "%s: назив путање за „%s“ је предуг" +msgid "value \"%s\" is invalid for option \"%s\"" +msgstr "вредност „%s“ је неисправна за опцију „%s“" -#: plugins/sudoers/defaults.c:1175 +#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 +#: plugins/sudoers/policy.c:216 #, c-format -msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" -msgstr "%s:%d:%d: вредност за „%s“ мора да почиње са /, ~ или *" - -#: plugins/sudoers/defaults.c:1179 -#, c-format -msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" -msgstr "%s: вредност за „%s“ мора да почиње са /, ~ или *" +msgid "path name for \"%s\" too long" +msgstr "назив путање за „%s“ је предуг" -#: plugins/sudoers/defaults.c:1190 +#: plugins/sudoers/defaults.c:1133 #, c-format -msgid "%s:%d:%d: values for \"%s\" must start with a '/'" -msgstr "%s:%d:%d: вредност за „%s“ мора да почиње са /" +msgid "values for \"%s\" must start with a '/', '~', or '*'" +msgstr "вредност за „%s“ мора да почиње са /, ~ или *" -#: plugins/sudoers/defaults.c:1194 +#: plugins/sudoers/defaults.c:1140 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: вредност за „%s“ мора да почиње /" +msgid "values for \"%s\" must start with a '/'" +msgstr "вредност за „%s“ мора да почне /" #: plugins/sudoers/env.c:412 msgid "sudo_putenv: corrupted envp, length mismatch" @@ -2613,16 +2581,6 @@ msgstr "не могу поново да изградим окружење" msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "извините, није вам дозвољено да подесите следеће променљиве окружења: %s" -#: plugins/sudoers/file.c:108 -#, c-format -msgid "parse error in %s near line %d" -msgstr "грешка обраде у %s близу реда %d" - -#: plugins/sudoers/file.c:111 -#, c-format -msgid "parse error in %s" -msgstr "грешка обраде у %s" - #: plugins/sudoers/filedigest.c:49 #, c-format msgid "unsupported digest type %d for %s" @@ -2672,37 +2630,37 @@ msgstr "не могу да обрадим мрежну маску „%s“" msgid "Local IP address and netmask pairs:\n" msgstr "Месна ИП адреса и парови мрежне маске:\n" -#: plugins/sudoers/iolog.c:681 +#: plugins/sudoers/iolog.c:685 msgid "unable to update sequence file" msgstr "не могу да освежим датотеку низа" -#: plugins/sudoers/iolog.c:715 plugins/sudoers/iolog.c:903 -#: plugins/sudoers/iolog.c:1065 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 -#: plugins/sudoers/iolog.c:1299 plugins/sudoers/iolog.c:1306 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 +#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 +#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 +#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 #, c-format msgid "unable to write to I/O log file: %s" msgstr "не могу да пишем у датотеку дневника У/И: %s" -#: plugins/sudoers/iolog.c:723 +#: plugins/sudoers/iolog.c:727 #, c-format msgid "unable to create %s/%s" msgstr "не могу да направим „%s/%s“" -#: plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:955 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: унутрашња грешка, датотека У/И дневника за догађај %d није отворена" -#: plugins/sudoers/iolog.c:1050 plugins/sudoers/iolog.c:1178 -#: plugins/sudoers/iolog.c:1283 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:510 -#: plugins/sudoers/visudo.c:516 +#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 +#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 +#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 +#: plugins/sudoers/visudo.c:552 msgid "unable to read the clock" msgstr "не могу да прочитам сат" -#: plugins/sudoers/iolog.c:1275 plugins/sudoers/log_client.c:1221 -#: plugins/sudoers/log_client.c:1231 plugins/sudoers/log_client.c:1235 +#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 +#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: унутрашња грешка, неисправан сигнал %d" @@ -2721,16 +2679,16 @@ msgstr "не могу да покренем ССЛ уверење и бп кљу msgid "you must set TLS_CERT in %s to use SSL" msgstr "морате да подесите „TLS_CERT“ у „%s“ да користите ССЛ" -#: plugins/sudoers/ldap.c:1717 +#: plugins/sudoers/ldap.c:1712 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не могу да покренем ЛДАП: %s" -#: plugins/sudoers/ldap.c:1754 +#: plugins/sudoers/ldap.c:1749 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:1891 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:747 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "неисправна особина „sudoOrder“: %s" @@ -2770,8 +2728,8 @@ msgstr "не могу да отворим систем прегледа" msgid "unable to send audit message" msgstr "не могу да пошаљем поруку прегледа" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:400 -#: plugins/sudoers/log_client.c:1468 plugins/sudoers/log_client.c:2069 +#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 +#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 msgid "error in event loop" msgstr "грешка у петљи догађаја" @@ -2780,101 +2738,101 @@ msgstr "грешка у петљи догађаја" msgid "Creation of new SSL_CTX object failed: %s" msgstr "Стварање новог „SSL_CTX“ објекта није успело: %s" -#: plugins/sudoers/log_client.c:223 +#: plugins/sudoers/log_client.c:225 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "не могу да учитам комплет ауторитета уверења „%s“" -#: plugins/sudoers/log_client.c:243 +#: plugins/sudoers/log_client.c:247 #, c-format msgid "unable to load certificate %s" msgstr "не могу да учитам уверење „%s“" -#: plugins/sudoers/log_client.c:256 +#: plugins/sudoers/log_client.c:261 #, c-format msgid "unable to load private key %s" msgstr "не могу да учитам лични кључ „%s“" -#: plugins/sudoers/log_client.c:265 +#: plugins/sudoers/log_client.c:270 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Не могу да доделим ссл објекат: %s" -#: plugins/sudoers/log_client.c:353 plugins/sudoers/log_client.c:358 +#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "ТЛС повезивање са „%s:%s“ није успело: %s" -#: plugins/sudoers/log_client.c:531 +#: plugins/sudoers/log_client.c:538 msgid "TLS initialization was unsuccessful" msgstr "ТЛС покретање беше безуспешно" -#: plugins/sudoers/log_client.c:541 +#: plugins/sudoers/log_client.c:548 msgid "TLS handshake was unsuccessful" msgstr "ТЛС руковање беше безуспешно" -#: plugins/sudoers/log_client.c:1239 +#: plugins/sudoers/log_client.c:1246 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: унутрашња грешка, неисправно излазно стање %d" -#: plugins/sudoers/log_client.c:1608 -msgid "unable to unpack ServerMessage" -msgstr "не могу да отпакујем „Поруку_сервера“" - -#: plugins/sudoers/log_client.c:1763 plugins/sudoers/log_client.c:1787 +#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 msgid "lost connection to log server" msgstr "изгубих везу са сервером дневника" -#: plugins/sudoers/log_client.c:1864 +#: plugins/sudoers/log_client.c:1876 msgid "missing write buffer" msgstr "недостаје међумеморија писања" -#: plugins/sudoers/log_client.c:2010 +#: plugins/sudoers/log_client.c:2024 msgid "unable to connect to log server" msgstr "не могу да се повежем на сервер дневника" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:298 msgid "user NOT in sudoers" msgstr "корисник НИЈЕ у судоерсу" -#: plugins/sudoers/logging.c:290 +#: plugins/sudoers/logging.c:300 msgid "user NOT authorized on host" msgstr "корисник НИЈЕ овлашћен на домаћину" -#: plugins/sudoers/logging.c:292 +#: plugins/sudoers/logging.c:302 msgid "command not allowed" msgstr "наредба није допуштена" -#: plugins/sudoers/logging.c:313 +#: plugins/sudoers/logging.c:323 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "„%s“ није у датотеци судоерса.\n" -#: plugins/sudoers/logging.c:316 +#: plugins/sudoers/logging.c:326 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "Кориснику „%s“ није допуштено да покрене судо на „%s“.\n" -#: plugins/sudoers/logging.c:319 +#: plugins/sudoers/logging.c:329 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Извините, корисник %s не може покренути судо на %s.\n" -#: plugins/sudoers/logging.c:322 +#: plugins/sudoers/logging.c:332 #, 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:359 plugins/sudoers/sudoers.c:629 -#: plugins/sudoers/sudoers.c:631 plugins/sudoers/sudoers.c:633 -#: plugins/sudoers/sudoers.c:635 plugins/sudoers/sudoers.c:785 -#: plugins/sudoers/sudoers.c:787 +#: plugins/sudoers/logging.c:342 +msgid "This incident has been reported to the administrator.\n" +msgstr "Овај инцидент је пријављен администратору.\n" + +#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 +#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 +#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 +#: plugins/sudoers/sudoers.c:801 #, c-format msgid "%s: command not found" msgstr "%s: нема такве наредбе" -#: plugins/sudoers/logging.c:361 plugins/sudoers/sudoers.c:625 +#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2883,7 +2841,7 @@ msgstr "" "занемарујем „%s“ пронађено у „.“\n" "Користите „sudo ./%s“ ако је то „%s“ које желите да покренете." -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:395 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2891,33 +2849,39 @@ msgstr[0] "%u покушај нетачне лозинке" msgstr[1] "%u покушаја нетачне лозинке" msgstr[2] "%u покушаја нетачне лозинке" -#: plugins/sudoers/logging.c:436 +#: plugins/sudoers/logging.c:485 msgid "authentication failure" msgstr "потврђивање идентитета није успело" -#: plugins/sudoers/logging.c:476 plugins/sudoers/logging.c:496 +#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 msgid "a password is required" msgstr "потребна је лозинка" -#: plugins/sudoers/logging.c:890 +#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +msgid "problem parsing sudoers" +msgstr "проблем обраде судоерса" + +#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#, c-format +msgid "%s:%d:%d: %s" +msgstr "%s:%d:%d: %s" + +#: plugins/sudoers/logging.c:1068 #, c-format msgid "unable to write log file: %s" msgstr "не могу да запишем датотеку дневника: %s" -#: plugins/sudoers/match_digest.c:129 +#: plugins/sudoers/match_digest.c:112 +#, c-format +msgid "digest for %s (%s) bad length %zu, expected %zu" +msgstr "приказ за „%s“ (%s) је лоше дужине %zu, очекивах %zu" + +#: plugins/sudoers/match_digest.c:131 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "приказ за %s (%s) није у %s облику" -#: plugins/sudoers/parse.c:233 -msgid "SELinux RBAC is not supported when intercept mode is enabled" -msgstr "„SELinux RBAC“ није подржано када је укључен режим пресретања" - -#: plugins/sudoers/parse.c:238 -msgid "SELinux RBAC is not supported when the log_subcmds flag is enabled" -msgstr "„SELinux RBAC“ није подржано када је укључена заставица „log_subcmds“" - -#: plugins/sudoers/parse.c:549 +#: plugins/sudoers/parse.c:585 #, c-format msgid "" "\n" @@ -2926,7 +2890,7 @@ msgstr "" "\n" "ЛДАП улога: %s\n" -#: plugins/sudoers/parse.c:552 +#: plugins/sudoers/parse.c:588 msgid "" "\n" "Sudoers entry:\n" @@ -2934,38 +2898,38 @@ msgstr "" "\n" "Унос судоерса:\n" -#: plugins/sudoers/parse.c:554 +#: plugins/sudoers/parse.c:590 msgid " RunAsUsers: " msgstr " „Покрени-као“ корисници: " -#: plugins/sudoers/parse.c:569 +#: plugins/sudoers/parse.c:605 msgid " RunAsGroups: " msgstr " „Покрени-као“ групе: " -#: plugins/sudoers/parse.c:579 +#: plugins/sudoers/parse.c:615 msgid " Options: " msgstr " Опције: " -#: plugins/sudoers/parse.c:643 +#: plugins/sudoers/parse.c:679 msgid " Commands:\n" msgstr " Наредбе:\n" -#: plugins/sudoers/parse.c:834 +#: plugins/sudoers/parse.c:870 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Упоређује уносе основности за „%s“ на %s:\n" -#: plugins/sudoers/parse.c:852 +#: plugins/sudoers/parse.c:888 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Покрени-као и Наредбено-посебне основности за „%s“:\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:906 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Корисник „%s“ може да покреће следеће наредбе на %s:\n" -#: plugins/sudoers/parse.c:885 +#: plugins/sudoers/parse.c:921 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Корисник „%s“ нема права да покрене судо над „%s“.\n" @@ -2985,64 +2949,59 @@ msgstr "неисправна особина „LDIF“: %s" msgid "invalid %.*s set by sudo front-end" msgstr "судо челник је поставио неисправну „%.*s“" -#: plugins/sudoers/policy.c:206 plugins/sudoers/policy.c:215 -#, c-format -msgid "path name for \"%s\" too long" -msgstr "назив путање за „%s“ је предуг" - -#: plugins/sudoers/policy.c:328 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "не могу да обрадим списак адреса мреже" -#: plugins/sudoers/policy.c:485 +#: plugins/sudoers/policy.c:508 msgid "user name not set by sudo front-end" msgstr "судо челник није поставио име корисника" -#: plugins/sudoers/policy.c:489 +#: plugins/sudoers/policy.c:512 msgid "user-ID not set by sudo front-end" msgstr "судо челник није поставио ИБ корисника" -#: plugins/sudoers/policy.c:493 +#: plugins/sudoers/policy.c:516 msgid "group-ID not set by sudo front-end" msgstr "судо челник није поставио ИБ групе" -#: plugins/sudoers/policy.c:497 +#: plugins/sudoers/policy.c:520 msgid "host name not set by sudo front-end" msgstr "судо челник није поставио назив домаћина" -#: plugins/sudoers/policy.c:670 +#: plugins/sudoers/policy.c:706 #, c-format msgid "invalid working directory: %s" msgstr "неисправан радни директоријум: %s" -#: plugins/sudoers/policy.c:846 +#: plugins/sudoers/policy.c:886 #, c-format msgid "invalid chroot directory: %s" msgstr "неисправан „chroot“ директоријум: %s" -#: plugins/sudoers/policy.c:1025 plugins/sudoers/visudo.c:243 -#: plugins/sudoers/visudo.c:880 +#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 +#: plugins/sudoers/visudo.c:896 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим „%s“" -#: plugins/sudoers/policy.c:1095 plugins/sudoers/policy.c:1132 -#: plugins/sudoers/policy.c:1154 plugins/sudoers/policy.c:1180 +#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 +#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: неисправне заставице од судо челника: 0×%x" -#: plugins/sudoers/policy.c:1211 +#: plugins/sudoers/policy.c:1262 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Издање %s прикључка политике судоерса\n" -#: plugins/sudoers/policy.c:1213 +#: plugins/sudoers/policy.c:1264 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматика датотеке судоерса издање %d\n" -#: plugins/sudoers/policy.c:1217 +#: plugins/sudoers/policy.c:1268 #, c-format msgid "" "\n" @@ -3051,27 +3010,27 @@ msgstr "" "\n" "Путања судоерса: %s\n" -#: plugins/sudoers/policy.c:1220 +#: plugins/sudoers/policy.c:1271 #, c-format msgid "nsswitch path: %s\n" msgstr "путања нс-прекидача: %s\n" -#: plugins/sudoers/policy.c:1222 +#: plugins/sudoers/policy.c:1273 #, c-format msgid "ldap.conf path: %s\n" msgstr "путања лдап.подешавања: %s\n" -#: plugins/sudoers/policy.c:1223 +#: plugins/sudoers/policy.c:1274 #, c-format msgid "ldap.secret path: %s\n" msgstr "путања лдап.тајне: %s\n" -#: plugins/sudoers/policy.c:1256 +#: plugins/sudoers/policy.c:1307 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "немогу да региструјем прикачку врсте „%d“ (издање %d.%d)" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1325 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "немогу да поништим регистровање прикачке врсте „%d“ (издање %d.%d)" @@ -3210,149 +3169,148 @@ msgstr "не могу да покренем ССС извор. Да ли је С msgid "unable to find symbol \"%s\" in %s" msgstr "не могу да нађем симбол „%s“ у „%s“" -#: plugins/sudoers/sudoers.c:166 plugins/sudoers/sudoers.c:174 -#: plugins/sudoers/sudoers.c:228 plugins/sudoers/sudoers.c:249 -#: plugins/sudoers/sudoers.c:1049 -msgid "problem with defaults entries" -msgstr "неприлике са основним уносима" +#: plugins/sudoers/sudoers.c:258 +#, c-format +msgid "unable to get defaults from %s" +msgstr "не могу да добавим основности за „%s“" -#: plugins/sudoers/sudoers.c:253 +#: plugins/sudoers/sudoers.c:265 msgid "no valid sudoers sources found, quitting" msgstr "нисам пронашао исправне изворе судоерса, прекидам" -#: plugins/sudoers/sudoers.c:327 +#: plugins/sudoers/sudoers.c:341 #, c-format msgid "user not allowed to change root directory to %s" msgstr "кориснику није дозвољено да промени корени директоријум у „%s“" -#: plugins/sudoers/sudoers.c:329 +#: plugins/sudoers/sudoers.c:343 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "није вам допуштено да користите опцију „-R“ са „%s“" -#: plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:368 #, c-format msgid "user not allowed to change directory to %s" msgstr "кориснику није дозвољено да промени директоријум у „%s“" -#: plugins/sudoers/sudoers.c:355 +#: plugins/sudoers/sudoers.c:369 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "није вам допуштено да користите опцију „-D“ са „%s“" -#: plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/sudoers.c:396 msgid "no command specified" msgstr "није наведена наредба" -#: plugins/sudoers/sudoers.c:407 +#: plugins/sudoers/sudoers.c:421 msgid "sudoers specifies that root is not allowed to sudo" msgstr "судоерси наводе да администратор није дозвољен у судоу" -#: plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:471 msgid "user not allowed to override closefrom limit" msgstr "кориснику није дозвољено да препише „closefrom“ ограничење" -#: plugins/sudoers/sudoers.c:458 +#: plugins/sudoers/sudoers.c:472 msgid "you are not permitted to use the -C option" msgstr "није вам допуштено да користите опцију „-C“" -#: plugins/sudoers/sudoers.c:518 +#: plugins/sudoers/sudoers.c:532 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник временске ознаке (%s): нема таквог корисника" -#: plugins/sudoers/sudoers.c:533 +#: plugins/sudoers/sudoers.c:547 msgid "no tty" msgstr "нема конзоле" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:548 msgid "sorry, you must have a tty to run sudo" msgstr "извините, морате имати конзолу да покренете судо" -#: plugins/sudoers/sudoers.c:541 +#: plugins/sudoers/sudoers.c:555 #, c-format msgid "invalid shell for user %s: %s" msgstr "неисправна шкољка за корисника „%s“: %s" -#: plugins/sudoers/sudoers.c:624 +#: plugins/sudoers/sudoers.c:638 msgid "command in current directory" msgstr "наредба у текућем директоријуму" -#: plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/sudoers.c:653 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "„cd“ је уграђена наредба шкољке, не може бити покренута директно." -#: plugins/sudoers/sudoers.c:641 +#: plugins/sudoers/sudoers.c:655 msgid "the -s option may be used to run a privileged shell." msgstr "опција „-s“ се може користити за покретање привилеговане шкољке." -#: plugins/sudoers/sudoers.c:643 +#: plugins/sudoers/sudoers.c:657 msgid "the -D option may be used to run a command in a specific directory." msgstr "опција „-D“ се може користити за покретање наредбе у специфичном директоријуму." -#: plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:666 msgid "user not allowed to set a command timeout" msgstr "кориснику није дозвољено да подеси време истека наредбе" -#: plugins/sudoers/sudoers.c:654 +#: plugins/sudoers/sudoers.c:668 msgid "sorry, you are not allowed set a command timeout" msgstr "извините, није вам дозвољено да подесите време истека наредбе" -#: plugins/sudoers/sudoers.c:662 +#: plugins/sudoers/sudoers.c:676 msgid "user not allowed to preserve the environment" msgstr "кориснику није дозвољено да сачува окружење" -#: plugins/sudoers/sudoers.c:664 +#: plugins/sudoers/sudoers.c:678 msgid "sorry, you are not allowed to preserve the environment" msgstr "извините, није вам дозвољено да сачувате окружење" -#: plugins/sudoers/sudoers.c:1037 +#: plugins/sudoers/sudoers.c:1053 msgid "sudoedit doesn't need to be run via sudo" msgstr "„sudoedit“ не треба да се покреће путем „sudo“-а" -#: plugins/sudoers/sudoers.c:1096 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "не могу да прочитам „%s“" -#: plugins/sudoers/sudoers.c:1121 plugins/sudoers/visudo.c:449 -#: plugins/sudoers/visudo.c:748 +#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 +#: plugins/sudoers/visudo.c:764 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: plugins/sudoers/sudoers.c:1125 plugins/sudoers/visudo.c:1045 +#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: plugins/sudoers/sudoers.c:1129 plugins/sudoers/timestamp.c:252 toke.l:1239 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:1133 toke.l:1244 +#: plugins/sudoers/sudoers.c:1147 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "Сви могу да пишу у „%s“" -#: plugins/sudoers/sudoers.c:1137 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:1170 +#: plugins/sudoers/sudoers.c:1184 #, c-format msgid "only root can use \"-c %s\"" msgstr "само администратор може да користи „-c %s“" -#: plugins/sudoers/sudoers.c:1189 +#: plugins/sudoers/sudoers.c:1203 #, c-format msgid "unknown login class %s" msgstr "непознат разред пријављивања „%s“" -#: plugins/sudoers/sudoers.c:1275 plugins/sudoers/sudoers.c:1290 +#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 #, c-format msgid "unable to resolve host %s" msgstr "не могу да решим домаћина „%s“" @@ -3558,99 +3516,94 @@ msgstr "путања стања обучавања је предуга: %s/%s" msgid "sudoedit should not be specified with a path" msgstr "„sudoedit“ не треба да се наводи са путањом" -#: plugins/sudoers/visudo.c:238 +#: plugins/sudoers/visudo.c:249 msgid "the -x option will be removed in a future release" msgstr "опција „-x“ биће уклоњена у наредном издању" -#: plugins/sudoers/visudo.c:240 +#: plugins/sudoers/visudo.c:251 msgid "please consider using the cvtsudoers utility instead" msgstr "размотрите коришћење помагала „cvtsudoers“" -#: plugins/sudoers/visudo.c:292 plugins/sudoers/visudo.c:676 +#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 #, c-format msgid "press return to edit %s: " msgstr "притисните „унеси“ да уредите „%s“: " -#: plugins/sudoers/visudo.c:307 +#: plugins/sudoers/visudo.c:321 #, c-format msgid "contents of edit session left in %s" msgstr "садржај сесије уређивања је остао у „%s“" -#: plugins/sudoers/visudo.c:361 +#: plugins/sudoers/visudo.c:397 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "наведени уређивач (%s) не постоји" -#: plugins/sudoers/visudo.c:363 +#: plugins/sudoers/visudo.c:399 #, c-format msgid "no editor found (editor path = %s)" msgstr "нисам пронашао уређивача (путања уређивача = %s)" -#: plugins/sudoers/visudo.c:469 plugins/sudoers/visudo.c:477 +#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 msgid "write error" msgstr "грешка писања" -#: plugins/sudoers/visudo.c:523 +#: plugins/sudoers/visudo.c:559 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не могу да добавим податке привремене датотеке (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:530 +#: plugins/sudoers/visudo.c:566 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "привремена датотека нулте дужине (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:536 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "уређивач (%s) није успео, %s је неизмењено" -#: plugins/sudoers/visudo.c:558 +#: plugins/sudoers/visudo.c:594 #, c-format msgid "%s unchanged" msgstr "„%s“ је неизмењено" -#: plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:639 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не могу поново да отворим привремену датотеку (%s), %s је неизмењено." -#: plugins/sudoers/visudo.c:627 +#: plugins/sudoers/visudo.c:652 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "не могу да обрадим привремену датотеку (%s), непозната грешка" -#: plugins/sudoers/visudo.c:665 -#, c-format -msgid "internal error, unable to find %s in list!" -msgstr "унутрашња грешка, не могу да пронађем „%s“ на списку!" - -#: plugins/sudoers/visudo.c:722 plugins/sudoers/visudo.c:752 -#: plugins/sudoers/visudo.c:759 +#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 +#: plugins/sudoers/visudo.c:775 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не могу да подесим (јиб, гиб) за %s на (%u, %u)" -#: plugins/sudoers/visudo.c:787 +#: plugins/sudoers/visudo.c:803 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "„%s“ и „%s“ нису на истом систему датотека, користим „mv“ за преименовање" -#: plugins/sudoers/visudo.c:798 +#: plugins/sudoers/visudo.c:814 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "наредба није успела: „%s %s %s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:805 +#: plugins/sudoers/visudo.c:821 #, c-format msgid "error renaming %s, %s unchanged" msgstr "грешка преименовања „%s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:825 +#: plugins/sudoers/visudo.c:841 msgid "What now? " msgstr "Шта сада? " -#: plugins/sudoers/visudo.c:839 +#: plugins/sudoers/visudo.c:855 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3662,41 +3615,41 @@ msgstr "" " x — излази без чувања измена у датотеци судоерса\n" " Q — прекида и чува измене у датотеци судоерса (ОПАСНО!)\n" -#: plugins/sudoers/visudo.c:885 +#: plugins/sudoers/visudo.c:901 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" -#: plugins/sudoers/visudo.c:916 +#: plugins/sudoers/visudo.c:932 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: погрешан власник (јиб, гиб) треба бити (%u, %u)\n" -#: plugins/sudoers/visudo.c:927 +#: plugins/sudoers/visudo.c:943 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: лоша овлашћења, требају бити у режиму 0%o\n" -#: plugins/sudoers/visudo.c:978 plugins/sudoers/visudo.c:985 +#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 #, c-format msgid "%s: parsed OK\n" msgstr "%s: успешно је обрађено\n" -#: plugins/sudoers/visudo.c:1004 +#: plugins/sudoers/visudo.c:1017 #, c-format msgid "%s busy, try again later" msgstr "„%s“ је заузет, покушајте касније" -#: plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1021 msgid "Edit anyway? [y/N]" msgstr "Да ипак уреим? [д/Н]" -#: plugins/sudoers/visudo.c:1104 +#: plugins/sudoers/visudo.c:1117 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "Упозорење: %s:%d:%d: некоришћено „%s“ „%s“" -#: plugins/sudoers/visudo.c:1220 +#: plugins/sudoers/visudo.c:1229 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3705,7 +3658,7 @@ msgstr "" "%s — безбедно уређује датотеку судоерса\n" "\n" -#: plugins/sudoers/visudo.c:1222 +#: plugins/sudoers/visudo.c:1231 msgid "" "\n" "Options:\n" @@ -3749,14 +3702,77 @@ msgstr "неисправан наставак реда" msgid "invalid IPv6 address" msgstr "неисправна ИПв6 адреса" -#: toke.l:860 +#: toke.l:868 msgid "unexpected line break in string" msgstr "неочекивани прекид реда у нисци" -#: toke.l:1210 +#: toke.l:1218 msgid "too many levels of includes" msgstr "превише нивоа укључивања" +#~ msgid "Error: %s:%d:%d: cycle in %s \"%s\"" +#~ msgstr "Грешка: %s:%d:%d: циклус у „%s“ „%s“" + +#~ msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" +#~ msgstr "Упозорење: %s:%d:%d: циклус у „%s“ „%s“" + +#~ msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" +#~ msgstr "Упозорење: %s:%d:%d: упута за „%s“ „%s“ постоји али није одређена" + +#~ msgid "parse error in %s near line %d\n" +#~ msgstr "грешка обраде у %s близу реда %d\n" + +#~ msgid "parse error in %s\n" +#~ msgstr "грешка обраде у %s\n" + +#~ msgid "%s: unknown defaults entry \"%s\"" +#~ msgstr "%s: непознат унос основности „%s“" + +#~ msgid "%s:%d:%d: no value specified for \"%s\"" +#~ msgstr "%s:%d:%d: није наведена вредност за „%s“" + +#~ msgid "%s:%d:%d: invalid operator \"%c=\" for \"%s\"" +#~ msgstr "%s:%d:%d: неисправан оператор „%c=“ за „%s“" + +#~ msgid "%s:%d:%d: option \"%s\" does not take a value" +#~ msgstr "%s:%d:%d: опција „%s“ не узима вредност" + +#~ msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" +#~ msgstr "%s:%d:%d: неисправна врста основности 0x%x за опцију „%s“" + +#~ msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" +#~ msgstr "%s:%d:%d: вредност „%s“ је неисправна за опцију „%s“" + +#~ msgid "%s:%d:%d: path name for \"%s\" too long" +#~ msgstr "%s:%d:%d: назив путање за „%s“ је предуг" + +#~ msgid "%s: path name for \"%s\" too long" +#~ msgstr "%s: назив путање за „%s“ је предуг" + +#~ msgid "%s:%d:%d: values for \"%s\" must start with a '/', '~', or '*'" +#~ msgstr "%s:%d:%d: вредност за „%s“ мора да почиње са /, ~ или *" + +#~ msgid "%s:%d:%d: values for \"%s\" must start with a '/'" +#~ msgstr "%s:%d:%d: вредност за „%s“ мора да почиње са /" + +#~ msgid "parse error in %s near line %d" +#~ msgstr "грешка обраде у %s близу реда %d" + +#~ msgid "parse error in %s" +#~ msgstr "грешка обраде у %s" + +#~ msgid "SELinux RBAC is not supported when intercept mode is enabled" +#~ msgstr "„SELinux RBAC“ није подржано када је укључен режим пресретања" + +#~ msgid "SELinux RBAC is not supported when the log_subcmds flag is enabled" +#~ msgstr "„SELinux RBAC“ није подржано када је укључена заставица „log_subcmds“" + +#~ msgid "problem with defaults entries" +#~ msgstr "неприлике са основним уносима" + +#~ msgid "internal error, unable to find %s in list!" +#~ msgstr "унутрашња грешка, не могу да пронађем „%s“ на списку!" + #~ msgid "%s is not in the sudoers file. This incident will be reported.\n" #~ msgstr "„%s“ се не налази у датотеци судоерса. О овом инциденту ће бити поднет извештај.\n" @@ -3769,9 +3785,6 @@ msgstr "превише нивоа укључивања" #~ msgid "unable to read diffie-hellman parameters: %s" #~ msgstr "не могу да читам „diffie-hellman“ параметре: %s" -#~ msgid "unknown defaults entry \"%s\"" -#~ msgstr "непознат унос основности „%s“" - #~ msgid "%s:%d unknown key: %s" #~ msgstr "„%s:%d“ непознат кључ: %s" @@ -3924,9 +3937,6 @@ msgstr "превише нивоа укључивања" #~ "\n" #~ "СССД улога: НЕПОЗНАТО\n" -#~ msgid "Warning: cycle in %s `%s'" -#~ msgstr "Упозорење: циклус у „%s“ „%s“" - #~ msgid "Warning: unused %s `%s'" #~ msgstr "Упозорење: некоришћено „%s“ „%s“" diff --git a/plugins/sudoers/po/sv.mo b/plugins/sudoers/po/sv.mo index 7269ad75a646580bf594ccbd91b6ab1f83365cac..c9591dc861374bdd493c024b28313618459606b5 100644 GIT binary patch delta 23609 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 delta 15623 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 fIOX, 2012. -# Sebastian Rasmussen , 2016, 2017, 2018, 2019, 2020, 2021. +# Sebastian Rasmussen , 2016, 2017, 2018, 2019, 2020, 2021, 2022. # Luna Jernberg , 2021. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.7b1\n" +"Project-Id-Version: sudoers 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2021-05-01 16:27-0600\n" -"PO-Revision-Date: 2021-05-05 21:51+0200\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-11 16:19+0200\n" "Last-Translator: Sebastian Rasmussen \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.2.4\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 3.1.1\n" -#: confstr.sh:1 gram.y:1183 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "syntaxfel" @@ -45,398 +45,521 @@ msgstr "*** SÄKERHETSINFORMATION för %h ***" msgid "Sorry, try again." msgstr "Försök igen." -#: gram.y:233 gram.y:300 gram.y:309 gram.y:318 gram.y:328 gram.y:338 -#: gram.y:362 gram.y:389 gram.y:398 gram.y:406 gram.y:415 gram.y:424 -#: gram.y:496 gram.y:506 gram.y:518 gram.y:562 gram.y:571 gram.y:580 -#: gram.y:589 gram.y:619 gram.y:716 gram.y:724 gram.y:735 gram.y:747 -#: gram.y:766 gram.y:914 gram.y:922 gram.y:932 gram.y:938 gram.y:1060 -#: gram.y:1069 gram.y:1077 gram.y:1086 gram.y:1095 gram.y:1124 gram.y:1133 -#: gram.y:1141 gram.y:1231 gram.y:1343 gram.y:1650 gram.y:1700 -#: lib/eventlog/eventlog.c:260 lib/eventlog/eventlog.c:333 -#: lib/eventlog/eventlog.c:733 lib/eventlog/eventlog.c:797 -#: lib/eventlog/eventlog.c:1053 lib/iolog/iolog_json.c:125 -#: lib/iolog/iolog_json.c:330 lib/iolog/iolog_json.c:360 -#: lib/iolog/iolog_json.c:503 lib/iolog/iolog_legacy.c:100 -#: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 -#: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 -#: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:210 -#: logsrvd/logsrvd.c:1021 logsrvd/logsrvd.c:1089 logsrvd/logsrvd_journal.c:142 -#: logsrvd/logsrvd_journal.c:196 logsrvd/logsrvd_journal.c:248 -#: logsrvd/logsrvd_journal.c:380 logsrvd/logsrvd_relay.c:443 -#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:857 -#: logsrvd/sendlog.c:500 plugins/sudoers/audit.c:115 -#: plugins/sudoers/audit.c:263 plugins/sudoers/auth/bsdauth.c:143 -#: plugins/sudoers/auth/kerb5.c:118 plugins/sudoers/auth/kerb5.c:144 -#: plugins/sudoers/auth/pam.c:692 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:95 -#: 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:646 plugins/sudoers/cvtsudoers.c:761 -#: plugins/sudoers/cvtsudoers.c:769 plugins/sudoers/cvtsudoers.c:1183 -#: plugins/sudoers/cvtsudoers.c:1187 plugins/sudoers/cvtsudoers.c:1289 -#: 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:638 -#: plugins/sudoers/defaults.c:933 plugins/sudoers/defaults.c:1108 -#: plugins/sudoers/editor.c:187 plugins/sudoers/env.c:262 -#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 -#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:57 -#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 -#: plugins/sudoers/iolog.c:609 plugins/sudoers/iolog.c:626 -#: 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:648 -#: 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:1950 -#: plugins/sudoers/log_client.c:2007 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:286 plugins/sudoers/match_command.c:484 -#: plugins/sudoers/match_command.c:533 plugins/sudoers/match_command.c:604 -#: plugins/sudoers/match_command.c:650 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:216 -#: plugins/sudoers/parse.c:236 plugins/sudoers/parse.c:253 -#: plugins/sudoers/parse.c:276 plugins/sudoers/parse.c:287 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 +#: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 +#: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 +#: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 +#: lib/iolog/iolog_filter.c:202 lib/iolog/iolog_filter.c:233 +#: lib/iolog/iolog_json.c:150 lib/iolog/iolog_json.c:382 +#: lib/iolog/iolog_json.c:412 lib/iolog/iolog_json.c:555 +#: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 +#: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 +#: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 +#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 +#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 +#: plugins/sudoers/cvtsudoers_merge.c:353 +#: plugins/sudoers/cvtsudoers_merge.c:399 +#: plugins/sudoers/cvtsudoers_merge.c:446 +#: plugins/sudoers/cvtsudoers_merge.c:467 +#: plugins/sudoers/cvtsudoers_merge.c:553 +#: plugins/sudoers/cvtsudoers_merge.c:564 +#: plugins/sudoers/cvtsudoers_merge.c:633 +#: plugins/sudoers/cvtsudoers_merge.c:1158 +#: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 +#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 +#: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:755 plugins/sudoers/ldap.c:919 +#: plugins/sudoers/ldap.c:1335 plugins/sudoers/ldap.c:1761 +#: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 +#: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 +#: plugins/sudoers/ldap.c:2131 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 #: 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:483 plugins/sudoers/parse_ldif.c:596 -#: plugins/sudoers/parse_ldif.c:626 plugins/sudoers/parse_ldif.c:651 -#: plugins/sudoers/parse_ldif.c:709 plugins/sudoers/parse_ldif.c:726 -#: plugins/sudoers/parse_ldif.c:754 plugins/sudoers/parse_ldif.c:761 -#: plugins/sudoers/policy.c:543 plugins/sudoers/policy.c:890 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:195 -#: plugins/sudoers/pwutil.c:266 plugins/sudoers/pwutil.c:344 -#: plugins/sudoers/pwutil.c:518 plugins/sudoers/pwutil.c:583 -#: plugins/sudoers/pwutil.c:655 plugins/sudoers/pwutil.c:853 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:953 -#: plugins/sudoers/pwutil.c:1010 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/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:299 plugins/sudoers/sudoers.c:325 -#: plugins/sudoers/sudoers.c:374 plugins/sudoers/sudoers.c:384 -#: plugins/sudoers/sudoers.c:425 plugins/sudoers/sudoers.c:787 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/sudoers.c:975 -#: plugins/sudoers/sudoers.c:1241 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/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 +#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:580 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:77 plugins/sudoers/toke_util.c:105 -#: plugins/sudoers/toke_util.c:130 plugins/sudoers/toke_util.c:155 -#: plugins/sudoers/toke_util.c:193 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:143 plugins/sudoers/visudo.c:321 -#: plugins/sudoers/visudo.c:327 plugins/sudoers/visudo.c:433 -#: plugins/sudoers/visudo.c:609 plugins/sudoers/visudo.c:926 -#: plugins/sudoers/visudo.c:999 toke.l:928 toke.l:1057 toke.l:1117 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 +#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 +#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 +#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "kan inte allokera minne" -#: gram.y:613 +#: gram.y:623 msgid "a digest requires a path name" msgstr "en kontrollsumma kräver ett sökvägsnamn" -#: gram.y:643 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "värden för ”CWD” måste börja med ett ”/”, ”~” eller ”*”" -#: gram.y:655 +#: gram.y:651 +msgid "\"CWD\" path too long" +msgstr "”CWD”-sökväg för lång" + +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "värden för ”CHROOT” måste börja med ett ”/”, ”~” eller ”*”" -#: gram.y:786 +#: gram.y:667 +msgid "\"CHROOT\" path too long" +msgstr "”CHROOT”-sökväg för lång" + +#: gram.y:802 #, 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:809 +#: gram.y:825 msgid "invalid notbefore value" msgstr "ogiltigt notbefore-värde" -#: gram.y:818 +#: gram.y:834 msgid "invalid notafter value" msgstr "ogiltigt notafter-värde" -#: gram.y:828 plugins/sudoers/policy.c:339 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "tidsgränsvärde för stort" -#: gram.y:830 plugins/sudoers/policy.c:341 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "ogiltigt värde för tidsgräns" -#: gram.y:1185 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 +msgid "command too long" +msgstr "kommandot för långt" + +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1229 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "Aliaset ”%s” är redan definierat" -#: gram.y:1650 gram.y:1700 lib/eventlog/eventlog.c:260 -#: lib/eventlog/eventlog.c:733 lib/eventlog/eventlog.c:795 -#: lib/eventlog/eventlog.c:796 lib/eventlog/eventlog.c:1053 -#: lib/iolog/iolog_json.c:125 lib/iolog/iolog_json.c:329 -#: lib/iolog/iolog_json.c:360 lib/iolog/iolog_json.c:503 -#: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 -#: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 -#: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:210 logsrvd/sendlog.c:500 logsrvd/sendlog.c:1343 -#: logsrvd/sendlog.c:1350 logsrvd/sendlog.c:1545 logsrvd/tls_init.c:221 -#: logsrvd/tls_init.c:242 logsrvd/tls_init.c:252 plugins/sudoers/audit.c:115 -#: plugins/sudoers/audit.c:263 plugins/sudoers/auth/pam.c:505 -#: plugins/sudoers/auth/pam.c:692 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/check_aliases.c:95 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:646 -#: plugins/sudoers/cvtsudoers.c:761 plugins/sudoers/cvtsudoers.c:768 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1187 -#: plugins/sudoers/cvtsudoers.c:1289 plugins/sudoers/cvtsudoers_json.c:75 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 +#: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 +#: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 +#: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 +#: lib/iolog/iolog_filter.c:232 lib/iolog/iolog_json.c:150 +#: lib/iolog/iolog_json.c:381 lib/iolog/iolog_json.c:412 +#: lib/iolog/iolog_json.c:555 lib/iolog/iolog_legacy.c:100 +#: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 +#: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 +#: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 +#: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 +#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 +#: plugins/sudoers/cvtsudoers.c:191 plugins/sudoers/cvtsudoers.c:202 +#: plugins/sudoers/cvtsudoers.c:332 plugins/sudoers/cvtsudoers.c:536 +#: plugins/sudoers/cvtsudoers.c:669 plugins/sudoers/cvtsudoers.c:687 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:869 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:182 +#: plugins/sudoers/cvtsudoers_csv.c:245 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: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:638 plugins/sudoers/defaults.c:933 -#: plugins/sudoers/defaults.c:1108 plugins/sudoers/editor.c:187 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/cvtsudoers_ldif.c:375 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:437 plugins/sudoers/cvtsudoers_ldif.c:448 +#: plugins/sudoers/cvtsudoers_ldif.c:455 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:480 plugins/sudoers/cvtsudoers_ldif.c:488 +#: plugins/sudoers/cvtsudoers_ldif.c:635 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:51 +#: plugins/sudoers/cvtsudoers_merge.c:353 +#: plugins/sudoers/cvtsudoers_merge.c:399 +#: plugins/sudoers/cvtsudoers_merge.c:445 +#: plugins/sudoers/cvtsudoers_merge.c:466 +#: plugins/sudoers/cvtsudoers_merge.c:553 +#: plugins/sudoers/cvtsudoers_merge.c:561 +#: plugins/sudoers/cvtsudoers_merge.c:564 +#: plugins/sudoers/cvtsudoers_merge.c:630 +#: plugins/sudoers/cvtsudoers_merge.c:633 +#: plugins/sudoers/cvtsudoers_merge.c:1157 +#: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:609 -#: plugins/sudoers/iolog.c:626 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:648 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:686 -#: plugins/sudoers/log_client.c:704 plugins/sudoers/log_client.c:1413 -#: plugins/sudoers/log_client.c:1626 plugins/sudoers/log_client.c:1950 -#: plugins/sudoers/log_client.c:2007 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:285 -#: plugins/sudoers/match_command.c:483 plugins/sudoers/match_command.c:532 -#: plugins/sudoers/match_command.c:604 plugins/sudoers/match_command.c:649 -#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:198 -#: plugins/sudoers/parse.c:215 plugins/sudoers/parse.c:235 -#: plugins/sudoers/parse.c:252 plugins/sudoers/parse.c:275 -#: plugins/sudoers/parse.c:286 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:483 -#: plugins/sudoers/parse_ldif.c:596 plugins/sudoers/parse_ldif.c:625 -#: plugins/sudoers/parse_ldif.c:650 plugins/sudoers/parse_ldif.c:708 -#: plugins/sudoers/parse_ldif.c:725 plugins/sudoers/parse_ldif.c:753 -#: plugins/sudoers/parse_ldif.c:760 plugins/sudoers/policy.c:149 -#: plugins/sudoers/policy.c:158 plugins/sudoers/policy.c:167 -#: plugins/sudoers/policy.c:193 plugins/sudoers/policy.c:324 -#: plugins/sudoers/policy.c:339 plugins/sudoers/policy.c:341 -#: plugins/sudoers/policy.c:371 plugins/sudoers/policy.c:380 -#: plugins/sudoers/policy.c:428 plugins/sudoers/policy.c:438 -#: plugins/sudoers/policy.c:447 plugins/sudoers/policy.c:456 -#: plugins/sudoers/policy.c:543 plugins/sudoers/policy.c:890 -#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:195 -#: plugins/sudoers/pwutil.c:266 plugins/sudoers/pwutil.c:344 -#: plugins/sudoers/pwutil.c:518 plugins/sudoers/pwutil.c:583 -#: plugins/sudoers/pwutil.c:655 plugins/sudoers/pwutil.c:853 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:953 -#: plugins/sudoers/pwutil.c:1010 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/strvec_join.c:53 plugins/sudoers/stubs.c:111 -#: plugins/sudoers/stubs.c:119 plugins/sudoers/sudoers.c:299 -#: plugins/sudoers/sudoers.c:325 plugins/sudoers/sudoers.c:374 -#: plugins/sudoers/sudoers.c:384 plugins/sudoers/sudoers.c:425 -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/sudoers.c:922 -#: plugins/sudoers/sudoers.c:975 plugins/sudoers/sudoers.c:1241 -#: 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:120 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 +#: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 +#: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 +#: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:755 plugins/sudoers/ldap.c:919 +#: plugins/sudoers/ldap.c:1335 plugins/sudoers/ldap.c:1761 +#: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 +#: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 +#: plugins/sudoers/ldap.c:2131 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 +#: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/set_perms.c:363 +#: plugins/sudoers/set_perms.c:706 plugins/sudoers/set_perms.c:1073 +#: plugins/sudoers/set_perms.c:1380 plugins/sudoers/set_perms.c:1549 +#: plugins/sudoers/sssd.c:144 plugins/sudoers/sssd.c:185 +#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 +#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 +#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 #: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/testsudoers.c:580 plugins/sudoers/timestamp.c:424 -#: plugins/sudoers/timestamp.c:468 plugins/sudoers/timestamp.c:980 -#: plugins/sudoers/timestamp.c:1118 plugins/sudoers/toke_util.c:77 -#: plugins/sudoers/toke_util.c:105 plugins/sudoers/toke_util.c:130 -#: plugins/sudoers/toke_util.c:154 plugins/sudoers/toke_util.c:193 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:143 -#: plugins/sudoers/visudo.c:321 plugins/sudoers/visudo.c:327 -#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:609 -#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo.c:999 toke.l:928 -#: toke.l:1057 toke.l:1109 toke.l:1117 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/eventlog/eventlog.c:265 lib/iolog/iolog_json.c:509 -#: lib/iolog/iolog_json.c:512 lib/iolog/iolog_json.c:514 +#: lib/eventlog/eventlog.c:314 lib/iolog/iolog_json.c:562 +#: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 +#: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:571 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 -#: plugins/sudoers/iolog.c:631 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:92 plugins/sudoers/policy.c:573 -#: plugins/sudoers/policy.c:728 plugins/sudoers/policy.c:738 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/strvec_join.c:62 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:206 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 +#: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 +#: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 +#: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 +#: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 +#: toke.l:987 toke.l:1189 #, c-format msgid "internal error, %s overflow" msgstr "internt fel, %s spill" -#: lib/eventlog/eventlog.c:324 +#: lib/eventlog/eventlog.c:373 #, c-format msgid "unable to dup stdin: %m" msgstr "kan inte duplicera stdin: %m" -#: lib/eventlog/eventlog.c:366 +#: lib/eventlog/eventlog.c:415 #, c-format msgid "unable to execute %s: %m" msgstr "kan inte köra %s: %m" -#: lib/eventlog/eventlog.c:407 plugins/sudoers/auth/aix_auth.c:198 +#: lib/eventlog/eventlog.c:463 plugins/sudoers/auth/aix_auth.c:198 msgid "unable to fork" msgstr "kan inte grena process" -#: lib/eventlog/eventlog.c:415 lib/eventlog/eventlog.c:469 +#: lib/eventlog/eventlog.c:473 lib/eventlog/eventlog.c:538 #, c-format msgid "unable to fork: %m" msgstr "kan inte grena process: %m" -#: lib/eventlog/eventlog.c:459 +#: lib/eventlog/eventlog.c:528 #, c-format msgid "unable to open pipe: %m" msgstr "kan inte öppna rör: %m" -#: lib/eventlog/eventlog.c:882 +#: lib/eventlog/eventlog.c:1030 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: lib/eventlog/eventlog.c:911 +#: lib/eventlog/eventlog.c:1059 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (kommando fortsätter) %s" -#: lib/iolog/iolog_json.c:115 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 +#: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 +#, c-format +msgid "invalid regular expression \"%s\": %s" +msgstr "ogiltigt reguljärt uttryck ”%s”: %s" + +#: lib/iolog/iolog_json.c:140 #, c-format msgid "expected JSON_STRING, got %d" msgstr "förväntade JSON_STRING, fick %d" -#: lib/iolog/iolog_json.c:120 +#: lib/iolog/iolog_json.c:145 msgid "JSON_ARRAY too large" msgstr "JSON_ARRAY för stor" -#: lib/iolog/iolog_json.c:352 +#: lib/iolog/iolog_json.c:404 msgid "missing double quote in name" msgstr "saknar citationstecken i namn" -#: lib/iolog/iolog_json.c:449 +#: lib/iolog/iolog_json.c:501 msgid "missing JSON_OBJECT" msgstr "saknar JSON_OBJECT" -#: lib/iolog/iolog_json.c:453 +#: lib/iolog/iolog_json.c:505 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "förväntade JSON_OBJECT, fick %d" -#: lib/iolog/iolog_json.c:599 +#: lib/iolog/iolog_json.c:661 #, c-format msgid "json stack exhausted (max %u frames)" msgstr "json-stack utarmad (max %u ramar)" -#: lib/iolog/iolog_json.c:673 +#: lib/iolog/iolog_json.c:735 msgid "objects must consist of name:value pairs" msgstr "objekt måste bestå av namn:värde-par" -#: lib/iolog/iolog_json.c:678 lib/iolog/iolog_json.c:709 -#: lib/iolog/iolog_json.c:753 lib/iolog/iolog_json.c:775 -#: lib/iolog/iolog_json.c:797 lib/iolog/iolog_json.c:819 -#: lib/iolog/iolog_json.c:841 +#: lib/iolog/iolog_json.c:740 lib/iolog/iolog_json.c:771 +#: lib/iolog/iolog_json.c:815 lib/iolog/iolog_json.c:837 +#: lib/iolog/iolog_json.c:859 lib/iolog/iolog_json.c:881 +#: lib/iolog/iolog_json.c:903 msgid "missing separator between values" msgstr "saknar separator mellan värden" -#: lib/iolog/iolog_json.c:693 lib/iolog/iolog_json.c:867 +#: lib/iolog/iolog_json.c:755 lib/iolog/iolog_json.c:929 msgid "unmatched close brace" msgstr "omatchad avslutningsklammerparentes" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:766 msgid "unexpected array" msgstr "oväntad array" -#: lib/iolog/iolog_json.c:724 lib/iolog/iolog_json.c:870 +#: lib/iolog/iolog_json.c:786 lib/iolog/iolog_json.c:932 msgid "unmatched close bracket" msgstr "omatchad avslutningsklammer" -#: lib/iolog/iolog_json.c:735 +#: lib/iolog/iolog_json.c:797 msgid "unexpected string" msgstr "oväntad sträng" -#: lib/iolog/iolog_json.c:746 +#: lib/iolog/iolog_json.c:808 msgid "missing colon after name" msgstr "saknar kolon efter namn" -#: lib/iolog/iolog_json.c:767 lib/iolog/iolog_json.c:789 +#: lib/iolog/iolog_json.c:829 lib/iolog/iolog_json.c:851 msgid "unexpected boolean" msgstr "oväntad boolean" -#: lib/iolog/iolog_json.c:811 +#: lib/iolog/iolog_json.c:873 msgid "unexpected null" msgstr "oväntat null" -#: lib/iolog/iolog_json.c:832 +#: lib/iolog/iolog_json.c:894 msgid "unexpected number" msgstr "oväntat nummer" -#: lib/iolog/iolog_json.c:879 +#: lib/iolog/iolog_json.c:941 msgid "parse error" msgstr "tolkningsfel" @@ -475,513 +598,794 @@ msgstr "%s: runas-gruppfältet saknas" msgid "%s exists but is not a directory (0%o)" msgstr "%s finns men är inte en katalog (0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:72 -#: plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "kan inte skapa katalogen %s" -#: lib/iolog/iolog_mkdtemp.c:76 plugins/sudoers/visudo.c:726 -#: plugins/sudoers/visudo.c:737 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "kan inte ändra läge för %s till 0%o" -#: lib/iolog/iolog_timing.c:255 +#: lib/iolog/iolog_timing.c:261 #, c-format msgid "error reading timing file: %s" msgstr "fel vid inläsning av tidsmätningsfil: %s" -#: lib/iolog/iolog_timing.c:262 +#: lib/iolog/iolog_timing.c:268 #, c-format msgid "invalid timing file line: %s" msgstr "ogiltig rad i tidsmätningsfil: %s" -#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 -#: plugins/sudoers/sudoreplay.c:352 plugins/sudoers/sudoreplay.c:358 +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s: protokollfel: NULL-nyckel" + +#: logsrvd/iolog_writer.c:69 +#, c-format +msgid "%s: protocol error: wrong type for %s" +msgstr "%s: protokollfel: fel typ för %s" + +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s: protokollfel: NULL-värde hittat i %s" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "kan inte generera UUID" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 +#, c-format +msgid "%s: protocol error: %s missing from AcceptMessage" +msgstr "%s: protokollfel: %s saknas i AcceptMessage" + +#: logsrvd/iolog_writer.c:417 +#, c-format +msgid "%s: unable to format session id" +msgstr "%s: kan inte formattera sessions-id" + +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 +#, c-format +msgid "%s: %s is not set" +msgstr "%s: %s: är inte satt" + +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 +#, c-format +msgid "unable to expand iolog path %s" +msgstr "kan inte öppna iolog-sökväg %s" + +#: logsrvd/iolog_writer.c:563 +#, c-format +msgid "unable to create iolog path %s" +msgstr "kan inte skapa iolog-sökväg %s" + +#: logsrvd/iolog_writer.c:593 +#, c-format +msgid "invalid iofd %d" +msgstr "ogiltig iofd %d" + +#: logsrvd/iolog_writer.c:613 +#, c-format +msgid "error closing iofd %d: %s" +msgstr "fel vid stängning av iofd %d: %s" + +#: logsrvd/iolog_writer.c:633 +#, c-format +msgid "error flushing iofd %d: %s" +msgstr "fel vid tömning av iofd %d: %s" + +#: logsrvd/iolog_writer.c:751 +#, c-format +msgid "invalid I/O log %s: %s referenced but not present" +msgstr "ogiltig I/O-logg %s: %s refererad men inte närvarande" + +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 +#, c-format +msgid "%s: unable to find resume point [%lld, %ld]" +msgstr "%s: kan inte hitta omstartspunkt [%lld, %ld]" + +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 +#: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 +#, c-format +msgid "unable to open %s" +msgstr "kan inte öppna %s" + +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "kan inte öppna %s/%s" -#: logsrvd/logsrv_util.c:133 +#: logsrvd/iolog_writer.c:810 +#, c-format +msgid "unable to copy %s/%s to %s/%s: %s" +msgstr "kan inte kopiera %s/%s till %s/%s: %s" + +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 +#, c-format +msgid "unable to rename %s to %s" +msgstr "kan inte byta namn på %s till %s" + +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 +#, c-format +msgid "%s/%s: unable to find resume point [%lld, %ld]" +msgstr "%s/%s: kan inte hitta omstartspunkt [%lld, %ld]" + +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "saknar I/O-loggfil %s/%s" -#: logsrvd/logsrv_util.c:140 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: kan inte söka framåt %zu" -#: logsrvd/logsrv_util.c:150 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 +msgid "unable to connect to relay" +msgstr "kan inte ansluta till relä" + +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 +#, c-format +msgid "server message too large: %zu" +msgstr "servermeddelande för långt: %zu" + +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 +#: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 +#: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 +#: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 +#: plugins/sudoers/sudoreplay.c:1043 plugins/sudoers/sudoreplay.c:1050 +#: plugins/sudoers/sudoreplay.c:1057 plugins/sudoers/sudoreplay.c:1184 +msgid "unable to add event to queue" +msgstr "kan inte lägga till händelse till kö" + +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format -msgid "unable to find resume point [%lld, %ld] in %s/%s" -msgstr "kan inte hitta omstartspunkt [%lld, %ld] i %s/%s" +msgid "unexpected state %d for %s" +msgstr "oväntat tillstånd %d för %s" -#: logsrvd/logsrvd.c:434 logsrvd/logsrvd.c:473 logsrvd/logsrvd.c:507 -#: logsrvd/logsrvd.c:557 logsrvd/logsrvd.c:632 logsrvd/logsrvd.c:664 -#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:726 logsrvd/logsrvd_relay.c:511 -#: logsrvd/logsrvd_relay.c:544 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "fel i tillståndsmaskin" -#: logsrvd/logsrvd.c:443 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "ogiltigt AcceptMessage" -#: logsrvd/logsrvd.c:482 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "ogiltigt RejectMessage" -#: logsrvd/logsrvd.c:593 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "ogiltigt ExitMessage" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "ogiltigt RestartMessage" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "ogiltigt AlertMessage" -#: logsrvd/logsrvd.c:638 logsrvd/logsrvd.c:670 logsrvd/logsrvd.c:702 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 +#, c-format +msgid "%s: unexpected IoBuffer" +msgstr "%s: oväntad IoBuffer" + +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "protokollfel" -#: logsrvd/logsrvd.c:797 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "ogiltig IoBuffer" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "ogiltig ChangeWindowSize" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "ogiltig CommandSuspend" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 +#, c-format +msgid "unable to unpack %s size %zu" +msgstr "kan inte packa upp %s storlek %zu" + +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 +#, c-format +msgid "unexpected type_case value %d in %s from %s" +msgstr "oväntat type_case-värde %d i %s från %s" + +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "okänd ClientMessage-typ" -#: logsrvd/logsrvd.c:1082 logsrvd/logsrvd_journal.c:238 +#: logsrvd/logsrvd.c:919 +#, c-format +msgid "timed out writing to client %s" +msgstr "tidsgräns passerad vid skrivning till klient %s" + +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 +#, c-format +msgid "missing write buffer for client %s" +msgstr "saknar skrivbuffert för klient %s" + +#: logsrvd/logsrvd.c:1020 +#, c-format +msgid "timed out reading from client %s" +msgstr "tidsgräns passerad vid läsning från klient %s" + +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 +#, c-format +msgid "EOF from %s without proper TLS shutdown" +msgstr "EOF från %s utan korrekt TLS-nedstängning" + +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 +#, c-format +msgid "client message too large: %zu" +msgstr "klientmeddelande för stort: %zu" + +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "klientmeddelande för stort" -#: logsrvd/logsrvd.c:1102 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "ogiltigt ClientMessage" -#: logsrvd/logsrvd.c:1408 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "kan inte hämta fjärr-IP-adress" -#: logsrvd/logsrvd.c:1436 logsrvd/tls_client.c:203 -#: plugins/sudoers/log_client.c:263 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, 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:1444 logsrvd/logsrvd.c:1570 logsrvd/logsrvd.c:1755 -#: logsrvd/sendlog.c:1146 logsrvd/tls_client.c:138 logsrvd/tls_client.c:154 -#: logsrvd/tls_client.c:216 plugins/sudoers/iolog.c:969 -#: plugins/sudoers/iolog.c:1102 plugins/sudoers/iolog.c:1200 -#: 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: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:2015 plugins/sudoers/log_client.c:2023 -#: 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:1620 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "det går inte att ställa in lyssningsuttag" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1756 +#, c-format +msgid "unexpected signal %d" +msgstr "oväntad signal %d" + +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "sudo-loggserver" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:122 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "Alternativ:" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "sökväg till konfigurationsfil" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:124 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "visa hjälpmeddelande och avsluta" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "grena inte, kör i förgrunden" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "procents chans att anslutningar slängs" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:152 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "visa versionsinformation och avsluta" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1518 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C version 1.3 eller högre krävs" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "ogiltigt slumpmässigt avbrottsvärde: %s" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1568 -#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:299 -#: plugins/sudoers/visudo.c:175 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 +#: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: logsrvd/logsrvd_conf.c:446 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 +#: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:382 +#, c-format +msgid "unknown user %s" +msgstr "okänd användare %s" + +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 +#: plugins/sudoers/testsudoers.c:406 +#, c-format +msgid "unknown group %s" +msgstr "okänd grupp %s" + +#: logsrvd/logsrvd_conf.c:457 +#, c-format +msgid "unable to parse iolog mode %s" +msgstr "kan inte tolka iolog-läge %s" + +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 +#, c-format +msgid "invalid value for %s: %s" +msgstr "ogiltigt värde för %s: %s" + +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "TLS stöds inte" -#: logsrvd/logsrvd_conf.c:468 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:541 logsrvd/logsrvd_conf.c:876 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: inte fullständigt kvalificerad sökväg" -#: logsrvd/logsrvd_conf.c:1035 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 +#, c-format +msgid "unknown syslog facility %s" +msgstr "okänd syslog-funktionalitet: %s" + +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 +#, c-format +msgid "unknown syslog priority %s" +msgstr "okänd syslog-prioritet: %s" + +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d omatchad ”[”: %s" -#: logsrvd/logsrvd_conf.c:1046 +#: logsrvd/logsrvd_conf.c:1203 +#, c-format +msgid "%s:%d garbage after ']': %s" +msgstr "%s:%d skräp eft ”]”: %s" + +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d ogiltigt konfigurationsavsnitt: %s" -#: logsrvd/logsrvd_conf.c:1054 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d ogiltig konfigurationsrad: %s" -#: logsrvd/logsrvd_conf.c:1060 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d avsnittsnamn förväntades: %s" -#: logsrvd/logsrvd_conf.c:1074 +#: logsrvd/logsrvd_conf.c:1251 #, c-format -msgid "invalid value for %s: %s" -msgstr "ogiltigt värde för %s: %s" +msgid "%s:%d [%s] illegal key: %s" +msgstr "%s:%d [%s] ogiltig nyckel: %s" -#: logsrvd/logsrvd_conf.c:1082 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format -msgid "%s:%d unknown key: %s" -msgstr "%s:%d okänd nyckel: %s" +msgid "unable to open log file %s" +msgstr "kan inte öppna loggfil %s" -#: logsrvd/logsrvd_conf.c:1294 -#, c-format -msgid "unknown syslog facility %s" -msgstr "okänd syslog-funktionalitet: %s" - -#: logsrvd/logsrvd_conf.c:1298 logsrvd/logsrvd_conf.c:1302 -#: logsrvd/logsrvd_conf.c:1306 -#, c-format -msgid "unknown syslog priority %s" -msgstr "okänd syslog-prioritet: %s" - -#: logsrvd/logsrvd_conf.c:1374 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "kan inte initiera TLS-serverkontext" -#: logsrvd/logsrvd_conf.c:1394 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "kan inte initiera TLS-reläkontext" -#: logsrvd/logsrvd_journal.c:126 logsrvd/logsrvd_journal.c:367 -#: logsrvd/logsrvd_journal.c:373 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "kan inte skapa journalfil" -#: logsrvd/logsrvd_journal.c:134 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 +#, c-format +msgid "unable to lock %s" +msgstr "kan inte låsa %s" + +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "kan inte låsa journalfil" -#: logsrvd/logsrvd_journal.c:163 logsrvd/logsrvd_journal.c:406 -#: logsrvd/logsrvd_journal.c:411 +#: logsrvd/logsrvd_journal.c:161 +msgid "unable to open journal file" +msgstr "kan inte öppna journalfil" + +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "kan inte skriva journalfil" -#: logsrvd/logsrvd_journal.c:171 logsrvd/logsrvd_journal.c:178 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "kan inte byta namn på journalfil" -#: logsrvd/logsrvd_journal.c:228 logsrvd/logsrvd_journal.c:258 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "oväntat filslut vid läsning av journalfil" -#: logsrvd/logsrvd_journal.c:230 logsrvd/logsrvd_journal.c:260 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "fel vid inläsning av journalfil" -#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:325 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "ogiltig journalfil, kunde inte starta om" -#: logsrvd/logsrvd_local.c:149 +#: logsrvd/logsrvd_journal.c:440 +#, c-format +msgid "unable to seek to [%lld, %ld] in journal file %s" +msgstr "kan inte söka till [%lld, %ld] i journalfil %s" + +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "oväntat value_case %d i %s från %s" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "fel vid tolkning av AcceptMessage" -#: logsrvd/logsrvd_local.c:156 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "fel vid skapande av I/O-logg" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "fel vid loggning av acceptanshändelse" -#: logsrvd/logsrvd_local.c:196 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "fel vid tolkning av RejectMessage" -#: logsrvd/logsrvd_local.c:202 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "fel vid loggning av avböjningshändelse" -#: logsrvd/logsrvd_local.c:276 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 +msgid "error logging exit event" +msgstr "fel vid loggning av avslutningshändelse" + +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "logg är redan komplett, kan inte startas om" -#: logsrvd/logsrvd_local.c:307 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "kan inte starta om logg" -#: logsrvd/logsrvd_local.c:322 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "fel vid tolkning av AlertMessage" -#: logsrvd/logsrvd_local.c:330 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "fel vid loggning av alarmhändelse" -#: logsrvd/logsrvd_local.c:397 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 +#, c-format +msgid "unable to format timing buffer, length %d" +msgstr "kan inte formatera tidsbuffert, längd %d" + +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 +#: plugins/sudoers/sudoreplay.c:351 +#, c-format +msgid "%s/%s: %s" +msgstr "%s/%s: %s" + +#: logsrvd/logsrvd_local.c:618 +msgid "randomly dropping connection" +msgstr "släpper slumpmässigt anslutningen" + +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "fel vid skrivning av IoBuffer" -#: logsrvd/logsrvd_local.c:434 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "fel vid skrivning av ChangeWindowSize" -#: logsrvd/logsrvd_local.c:474 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "fel vid skrivning av CommandSuspend" -#: logsrvd/logsrvd_relay.c:434 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "TLS-handskakning med relävärd misslyckades" -#: logsrvd/logsrvd_relay.c:462 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "kan inte ansluta till relävärd" -#: logsrvd/logsrvd_relay.c:519 logsrvd/sendlog.c:951 -#: plugins/sudoers/log_client.c:1466 +#: logsrvd/logsrvd_relay.c:518 +#, c-format +msgid "%s: invalid ServerHello, missing server_id" +msgstr "%s: ogiltigt ServerHello, saknar server_id" + +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "ogiltigt ServerHello" -#: logsrvd/logsrvd_relay.c:677 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "okänd ServerMessage-typ" -#: logsrvd/logsrvd_relay.c:709 +#: logsrvd/logsrvd_relay.c:708 +#, c-format +msgid "timed out reading from relay %s (%s)" +msgstr "tidsgräns passerad vid läsning från relä %s (%s)" + +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "tidsgräns passerad vid läsning från relä" -#: logsrvd/logsrvd_relay.c:761 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "relävärdnamnet matchar inte certifikatet" -#: logsrvd/logsrvd_relay.c:765 logsrvd/logsrvd_relay.c:786 -#: logsrvd/logsrvd_relay.c:794 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "fel vid läsning från relä" -#: logsrvd/logsrvd_relay.c:817 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "kan inte läsa från relä" -#: logsrvd/logsrvd_relay.c:831 logsrvd/logsrvd_relay.c:951 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "reläserver stängde anslutningen" -#: logsrvd/logsrvd_relay.c:850 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "servermeddelandet för stort" -#: logsrvd/logsrvd_relay.c:915 +#: logsrvd/logsrvd_relay.c:907 +#, c-format +msgid "timed out writing to relay %s (%s)" +msgstr "tidsgräns passerad vid skrivning till relä %s (%s)" + +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "tidsgräns passerad vid skrivning till relä" -#: logsrvd/logsrvd_relay.c:973 logsrvd/logsrvd_relay.c:981 -#: logsrvd/logsrvd_relay.c:993 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "fel vid skrivning till relä" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "skicka sudo I/O-logg till fjärrserver" -#: logsrvd/sendlog.c:126 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "skicka endast en accepteringshändelse (ingen I/O)" -#: logsrvd/sendlog.c:129 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "certifikatbuntfil för att verifiera serverns certifikat mot" -#: logsrvd/sendlog.c:131 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "certifikatfil för TLS-handskakning" -#: logsrvd/sendlog.c:134 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "värd att skicka loggar till" -#: logsrvd/sendlog.c:136 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "fjärr-ID för I/O-logg som ska återupptas" -#: logsrvd/sendlog.c:139 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "privat nyckelfil" -#: logsrvd/sendlog.c:141 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "verifiera inte servercertifikat" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "port som ska användas när du ansluter till värd" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "starta om tidigare I/O-loggöverföring" -#: logsrvd/sendlog.c:148 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "avvisa kommandot med angiven anledning" -#: logsrvd/sendlog.c:150 +#: logsrvd/sendlog.c:149 +msgid "stop transfer after reaching this time" +msgstr "stoppa överföring efter att ha nått denna tid" + +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "testa granskningsservern genom att skicka utvalda I/O-loggar n gånger parallellt" -#: logsrvd/sendlog.c:175 plugins/sudoers/log_client.c:432 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "kan inte slå upp %s:%s: %s" -#: logsrvd/sendlog.c:213 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "kan inte hämta server-IP-adress" -#: logsrvd/sendlog.c:267 plugins/sudoers/sudoreplay.c:851 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "kan inte läsa %s/%s: %s" -#: logsrvd/sendlog.c:288 plugins/sudoers/log_client.c:692 -#, c-format -msgid "client message too large: %zu" -msgstr "klientmeddelande för stort: %zu" - -#: logsrvd/sendlog.c:830 -#, c-format -msgid "%s: write buffer already in use" -msgstr "%s: skrivbuffert används redan" - -#: logsrvd/sendlog.c:882 plugins/sudoers/iolog.c:893 -#: plugins/sudoers/iolog.c:962 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "oväntad I/O-händelse %d" -#: logsrvd/sendlog.c:928 logsrvd/sendlog.c:945 logsrvd/sendlog.c:979 -#: plugins/sudoers/log_client.c:1124 plugins/sudoers/log_client.c:1392 -#: plugins/sudoers/log_client.c:1460 plugins/sudoers/log_client.c:1496 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: oväntat tillstånd %d" -#: logsrvd/sendlog.c:1015 plugins/sudoers/log_client.c:1540 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "felmeddelande mottaget från server: %s" -#: logsrvd/sendlog.c:1028 plugins/sudoers/log_client.c:1553 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "avbrottsmeddelande mottaget från server: %s" -#: logsrvd/sendlog.c:1047 plugins/sudoers/log_client.c:1572 -msgid "unable to unpack ServerMessage" -msgstr "kan inte packa upp ServerMessage" - -#: logsrvd/sendlog.c:1087 plugins/sudoers/log_client.c:1603 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: oväntat type_case-värde %d" -#: logsrvd/sendlog.c:1116 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "tidsgräns passerad vid läsning från server" -#: logsrvd/sendlog.c:1195 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 +msgid "host name does not match certificate" +msgstr "värdnamn matchar inte certifikat" + +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "oväntad EOF" -#: logsrvd/sendlog.c:1208 plugins/sudoers/log_client.c:1761 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "servermeddelande för långt: %u" -#: logsrvd/sendlog.c:1259 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "tidsgräns passerad vid skrivning till server" -#: logsrvd/sendlog.c:1591 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "både omstartspunkt och iolog-ID måste anges" -#: logsrvd/sendlog.c:1595 +#: logsrvd/sendlog.c:1783 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:1671 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "avslutade oväntat i tillstånd %d" -#: logsrvd/sendlog.c:1672 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "förfluten tid skickad till server [%lld, %ld]" -#: logsrvd/sendlog.c:1674 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "incheckningspunkt mottagen från server [%lld, %ld]" -#: logsrvd/tls_client.c:113 plugins/sudoers/log_client.c:296 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "Tidsgräns för TLS-handskakning uppnådd" -#: logsrvd/tls_client.c:133 logsrvd/tls_client.c:149 -#: plugins/sudoers/log_client.c:318 plugins/sudoers/log_client.c:334 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "kan inte ställa in händelse" -#: logsrvd/tls_client.c:159 logsrvd/tls_client.c:163 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "TLS-anslutning misslyckades: %s" -#: logsrvd/tls_client.c:197 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "kan inte allokera ssl-objekt: %s" @@ -995,97 +1399,84 @@ msgstr "Kan inte fästa kontakt på ssl-objektet: %s" msgid "unable to initialize TLS context" msgstr "kan inte initiera TLS-kontext" -#: logsrvd/tls_init.c:129 logsrvd/tls_init.c:137 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, 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/tls_init.c:157 logsrvd/tls_init.c:165 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, 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/tls_init.c:200 -#, c-format -msgid "unable to create TLS context: %s" -msgstr "kan inte skapa TLS-kontext: %s" - -#: logsrvd/tls_init.c:206 -#, 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/tls_init.c:282 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "kunde inte sätta diffie-hellman-parametrar: %s" -#: logsrvd/tls_init.c:291 +#: logsrvd/tls_init.c:283 #, c-format -msgid "unable to read diffie-hellman parameters: %s" -msgstr "kunde inte läsa diffie-hellman-parametrar: %s" +msgid "unable to create TLS context: %s" +msgstr "kan inte skapa TLS-kontext: %s" -#: logsrvd/tls_init.c:296 plugins/sudoers/check.c:274 -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:639 -#: plugins/sudoers/cvtsudoers.c:1249 plugins/sudoers/cvtsudoers_json.c:872 -#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1028 -#: plugins/sudoers/sudoreplay.c:1435 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:913 +#: logsrvd/tls_init.c:290 #, c-format -msgid "unable to open %s" -msgstr "kan inte öppna %s" +msgid "unable to set minimum protocol version to TLS 1.2: %s" +msgstr "kunde inte sätta minsta protokollversion till TLS 1.2: %s" -#: plugins/sudoers/audit.c:259 plugins/sudoers/audit.c:398 -#: 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:120 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "kan inte hämta tid på dagen" -#: plugins/sudoers/auth/aix_auth.c:277 +#: plugins/sudoers/auth/aix_auth.c:280 #, c-format msgid "unable to change password for %s" msgstr "kan inte ändra lösenord för %s" -#: plugins/sudoers/auth/bsdauth.c:70 +#: plugins/sudoers/auth/bsdauth.c:74 #, c-format msgid "unable to get login class for user %s" msgstr "kan inte hämta inloggningsklass för användaren %s" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:79 msgid "unable to begin bsd authentication" msgstr "kan inte påbörja bsd-autentisering" -#: plugins/sudoers/auth/bsdauth.c:83 +#: plugins/sudoers/auth/bsdauth.c:87 msgid "invalid authentication type" msgstr "ogiltig autentiseringstyp" -#: plugins/sudoers/auth/bsdauth.c:92 +#: plugins/sudoers/auth/bsdauth.c:96 msgid "unable to initialize BSD authentication" msgstr "kan inte initiera BSD-autentisering" -#: plugins/sudoers/auth/bsdauth.c:179 +#: plugins/sudoers/auth/bsdauth.c:186 msgid "your account has expired" msgstr "ditt konto har gått ut" -#: plugins/sudoers/auth/bsdauth.c:181 +#: plugins/sudoers/auth/bsdauth.c:188 msgid "approval failed" msgstr "godkännande misslyckades" -#: plugins/sudoers/auth/fwtk.c:54 +#: plugins/sudoers/auth/fwtk.c:61 msgid "unable to read fwtk config" msgstr "kan inte läsa fwtk-konfiguration" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:66 msgid "unable to connect to authentication server" msgstr "kan inte ansluta till autentiseringsservern" -#: plugins/sudoers/auth/fwtk.c:65 plugins/sudoers/auth/fwtk.c:89 -#: plugins/sudoers/auth/fwtk.c:121 +#: plugins/sudoers/auth/fwtk.c:72 plugins/sudoers/auth/fwtk.c:97 +#: plugins/sudoers/auth/fwtk.c:129 msgid "lost connection to authentication server" msgstr "förlorade kontakten med autentiseringsservern" -#: plugins/sudoers/auth/fwtk.c:69 +#: plugins/sudoers/auth/fwtk.c:76 #, c-format msgid "" "authentication server error:\n" @@ -1094,149 +1485,149 @@ msgstr "" "fel i autentiseringsservern:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:110 +#: plugins/sudoers/auth/kerb5.c:115 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: kan inte konvertera principal till sträng (”%s”): %s" -#: plugins/sudoers/auth/kerb5.c:160 +#: plugins/sudoers/auth/kerb5.c:164 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: kan inte tolka ”%s”: %s" -#: plugins/sudoers/auth/kerb5.c:169 +#: plugins/sudoers/auth/kerb5.c:173 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: kan inte slå upp inloggningsuppgiftscache: %s" -#: plugins/sudoers/auth/kerb5.c:216 +#: plugins/sudoers/auth/kerb5.c:222 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: kan inte allokera flaggor: %s" -#: plugins/sudoers/auth/kerb5.c:231 +#: plugins/sudoers/auth/kerb5.c:237 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: kan inte hämta inloggningsuppgifter: %s" -#: plugins/sudoers/auth/kerb5.c:244 +#: plugins/sudoers/auth/kerb5.c:250 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: kan inte initiera inloggningsuppgiftscache: %s" -#: plugins/sudoers/auth/kerb5.c:247 +#: plugins/sudoers/auth/kerb5.c:253 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: kan inte lagra inloggningsuppgifter i cache: %s" -#: plugins/sudoers/auth/kerb5.c:311 +#: plugins/sudoers/auth/kerb5.c:317 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: kan inte hämta principal för värd: %s" -#: plugins/sudoers/auth/kerb5.c:325 +#: plugins/sudoers/auth/kerb5.c:331 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Kan inte verifiera TGT! Möjlig attack!: %s" -#: plugins/sudoers/auth/pam.c:218 +#: plugins/sudoers/auth/pam.c:224 #, c-format msgid "unable to initialize PAM: %s" msgstr "kan inte initiera PAM: %s" -#: plugins/sudoers/auth/pam.c:340 +#: plugins/sudoers/auth/pam.c:337 #, c-format msgid "PAM authentication error: %s" msgstr "PAM-autentiseringsfel: %s" -#: plugins/sudoers/auth/pam.c:359 +#: plugins/sudoers/auth/pam.c:356 msgid "account validation failure, is your account locked?" msgstr "kontovalidering misslyckades. Är ditt konto låst?" -#: plugins/sudoers/auth/pam.c:370 +#: plugins/sudoers/auth/pam.c:367 msgid "Account or password is expired, reset your password and try again" msgstr "Kontot eller lösenordet har gått ut. Återställ ditt lösenord och försök igen" -#: plugins/sudoers/auth/pam.c:376 +#: plugins/sudoers/auth/pam.c:373 #, c-format msgid "unable to change expired password: %s" msgstr "kan inte ändra utgånget lösenord: %s" -#: plugins/sudoers/auth/pam.c:387 +#: plugins/sudoers/auth/pam.c:384 msgid "Password expired, contact your system administrator" msgstr "Lösenordet har gått ut. Kontakta din systemadministratör" -#: plugins/sudoers/auth/pam.c:392 +#: plugins/sudoers/auth/pam.c:389 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Konto utgånget eller så saknar PAM-konfigurationen ett ”account”-avsnitt för sudo, kontakta din systemadministratör" -#: plugins/sudoers/auth/pam.c:400 plugins/sudoers/auth/pam.c:405 +#: plugins/sudoers/auth/pam.c:397 plugins/sudoers/auth/pam.c:402 #, c-format msgid "PAM account management error: %s" msgstr "Fel vid hantering av PAM-konto: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:241 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "du finns inte i %s-databasen" -#: plugins/sudoers/auth/securid5.c:72 +#: plugins/sudoers/auth/securid5.c:75 msgid "failed to initialise the ACE API library" msgstr "misslyckades med att initiera ACE API-biblioteket" -#: plugins/sudoers/auth/securid5.c:98 +#: plugins/sudoers/auth/securid5.c:106 msgid "unable to contact the SecurID server" msgstr "kan inte kontakta SecurID-servern" -#: plugins/sudoers/auth/securid5.c:107 +#: plugins/sudoers/auth/securid5.c:115 msgid "User ID locked for SecurID Authentication" msgstr "Användar-ID låst för SecurID-autentisering" -#: plugins/sudoers/auth/securid5.c:111 plugins/sudoers/auth/securid5.c:162 +#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 msgid "invalid username length for SecurID" msgstr "ogiltig längd för användarnamn för SecurID" -#: plugins/sudoers/auth/securid5.c:115 plugins/sudoers/auth/securid5.c:167 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 msgid "invalid Authentication Handle for SecurID" msgstr "ogiltigt autentiseringshandtag för SecurID" -#: plugins/sudoers/auth/securid5.c:119 +#: plugins/sudoers/auth/securid5.c:127 msgid "SecurID communication failed" msgstr "SecurID-kommunikation misslyckades" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 +#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:218 msgid "unknown SecurID error" msgstr "okänt SecurID-fel" -#: plugins/sudoers/auth/securid5.c:157 +#: plugins/sudoers/auth/securid5.c:165 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:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:126 msgid "unable to initialize SIA session" msgstr "kan inte initiera SIA-session" -#: plugins/sudoers/auth/sudo_auth.c:132 +#: plugins/sudoers/auth/sudo_auth.c:135 msgid "invalid authentication methods" msgstr "ogiltiga autentiseringsmetoder" -#: plugins/sudoers/auth/sudo_auth.c:134 +#: plugins/sudoers/auth/sudo_auth.c:137 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Ogiltiga autentiseringsmetoder inkompilerade i sudo! Du får inte blanda fristående och icke-fristående autentisering." -#: plugins/sudoers/auth/sudo_auth.c:255 plugins/sudoers/auth/sudo_auth.c:305 +#: plugins/sudoers/auth/sudo_auth.c:258 plugins/sudoers/auth/sudo_auth.c:310 msgid "no authentication methods" msgstr "inga autentiseringsmetoder" -#: plugins/sudoers/auth/sudo_auth.c:257 +#: plugins/sudoers/auth/sudo_auth.c:260 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Det finns inga autentiseringsmetoder inbyggda i sudo! Om du vill inaktivera autentisering, använd konfigurationsflaggan --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:307 +#: plugins/sudoers/auth/sudo_auth.c:312 msgid "Unable to initialize authentication methods." msgstr "Kan inte initiera autentiseringsmetoder." -#: plugins/sudoers/auth/sudo_auth.c:471 +#: plugins/sudoers/auth/sudo_auth.c:486 msgid "Authentication methods:" msgstr "Autentiseringsmetoder:" @@ -1248,17 +1639,17 @@ msgstr "Kunde inte fastställa granskningsvillkor" msgid "unable to commit audit record" msgstr "kan inte bekräfta granskningsberättelse" -#: plugins/sudoers/check.c:264 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "fel vid inläsning av lektionsfil %s" -#: plugins/sudoers/check.c:270 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "hoppar över lektionsfil %s: inte en vanlig fil" -#: plugins/sudoers/check.c:283 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1278,129 +1669,107 @@ msgstr "" " #3) Med stor makt kommer ett stort ansvar.\n" "\n" -#: plugins/sudoers/check.c:325 plugins/sudoers/check.c:335 -#: plugins/sudoers/sudoers.c:830 plugins/sudoers/sudoers.c:851 -#: plugins/sudoers/tsdump.c:119 -#, c-format -msgid "unknown uid: %u" -msgstr "okänt uid: %u" - -#: plugins/sudoers/check.c:330 plugins/sudoers/exptilde.c:85 -#: plugins/sudoers/iolog.c:118 plugins/sudoers/policy.c:1123 -#: plugins/sudoers/sudoers.c:432 plugins/sudoers/sudoers.c:1283 -#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:382 -#, c-format -msgid "unknown user: %s" -msgstr "okänd användare: %s" - -#: plugins/sudoers/check_aliases.c:56 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format -msgid "Error: %s:%d:%d: cycle in %s \"%s\"" -msgstr "Fel: %s:%d:%d: cykel i %s ”%s”" +msgid "unknown uid %u" +msgstr "okänt uid %u" -#: plugins/sudoers/check_aliases.c:57 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format -msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" -msgstr "Varning: %s:%d:%d: cykel i %s ”%s”" +msgid "%s: %s\n" +msgstr "%s: %s\n" -#: plugins/sudoers/check_aliases.c:61 +#: plugins/sudoers/check_aliases.c:133 #, c-format -msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "Fel: %s:%d:%d: %s ”%s” refererad till men inte definierad" +msgid "cycle in %s \"%s\"" +msgstr "cykel i %s ”%s”" -#: plugins/sudoers/check_aliases.c:62 +#: plugins/sudoers/check_aliases.c:136 #, c-format -msgid "Warning: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "Varning: %s:%d:%d: %s ”%s” refererad till men inte definierad" +msgid "%s \"%s\" referenced but not defined" +msgstr "%s ”%s” refererad till men inte definierad" -#: plugins/sudoers/cvtsudoers.c:194 +#: plugins/sudoers/cvtsudoers.c:209 #, c-format msgid "order increment: %s: %s" msgstr "ordningsinkrement: %s: %s" -#: plugins/sudoers/cvtsudoers.c:210 +#: plugins/sudoers/cvtsudoers.c:228 #, c-format msgid "starting order: %s: %s" msgstr "startordning: %s: %s" -#: plugins/sudoers/cvtsudoers.c:220 +#: plugins/sudoers/cvtsudoers.c:238 #, c-format msgid "order padding: %s: %s" msgstr "ordningsutfyllnad: %s: %s" -#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:177 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "%s grammatikversion %d\n" -#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:277 plugins/sudoers/testsudoers.c:159 #, c-format msgid "unsupported input format %s" msgstr "inmatningsformat %s stöds inte" -#: plugins/sudoers/cvtsudoers.c:262 +#: plugins/sudoers/cvtsudoers.c:295 #, c-format msgid "unsupported output format %s" msgstr "utmatningsformat %s stöds inte" -#: plugins/sudoers/cvtsudoers.c:314 +#: plugins/sudoers/cvtsudoers.c:385 #, c-format msgid "%s: input and output files must be different" msgstr "%s: in- och utmatningsfiler måste vara olika" -#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:177 -#: plugins/sudoers/testsudoers.c:254 plugins/sudoers/visudo.c:247 -#: plugins/sudoers/visudo.c:597 plugins/sudoers/visudo.c:917 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "kan inte initiera sudoers standardvärden" -#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:475 +#: plugins/sudoers/cvtsudoers.c:584 #, c-format -msgid "%s: unknown key word: %s" -msgstr "%s: okänt nyckelord: %s" +msgid "%s: unknown key word %s" +msgstr "%s: okänt nyckelord %s" -#: plugins/sudoers/cvtsudoers.c:521 +#: plugins/sudoers/cvtsudoers.c:630 #, c-format msgid "invalid defaults type: %s" msgstr "ogiltig standardtyp: %s" -#: plugins/sudoers/cvtsudoers.c:544 +#: plugins/sudoers/cvtsudoers.c:653 #, c-format msgid "invalid suppression type: %s" msgstr "ogiltig undertryckningstyp: %s" -#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 +#: plugins/sudoers/cvtsudoers.c:694 plugins/sudoers/cvtsudoers.c:710 #, c-format msgid "invalid filter: %s" msgstr "ogiltigt filter: %s" -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/visudo.c:922 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "misslyckades med att tolka %s-filen, okänt fel" -#: plugins/sudoers/cvtsudoers.c:650 -#, c-format -msgid "parse error in %s near line %d\n" -msgstr "tolkningsfel i %s nära rad %d\n" - -#: plugins/sudoers/cvtsudoers.c:653 -#, c-format -msgid "parse error in %s\n" -msgstr "tolkningsfel i %s\n" - -#: plugins/sudoers/cvtsudoers.c:1296 plugins/sudoers/sudoreplay.c:1124 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "kan inte skriva till %s" -#: plugins/sudoers/cvtsudoers.c:1319 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1409,7 +1778,7 @@ msgstr "" "%s - konvertera mellan sudoers filformat\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1321 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -1449,714 +1818,859 @@ msgstr "" " -s, --suppress=avsnitt undertryck utmatning av vissa avsnitt\n" " -V, --version visa versionsinformation och avsluta" -#: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:713 -#, c-format -msgid "unknown defaults entry \"%s\"" -msgstr "okänd standardpost ”%s”" - -#: 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 +#: plugins/sudoers/cvtsudoers_csv.c:452 plugins/sudoers/cvtsudoers_csv.c:466 +#: plugins/sudoers/cvtsudoers_json.c:657 plugins/sudoers/cvtsudoers_json.c:672 +#: plugins/sudoers/cvtsudoers_ldif.c:347 plugins/sudoers/cvtsudoers_ldif.c:360 +#: plugins/sudoers/ldap.c:510 msgid "unable to get GMT time" msgstr "kan inte hämta GMT-tid" -#: 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 +#: plugins/sudoers/cvtsudoers_csv.c:457 plugins/sudoers/cvtsudoers_csv.c:471 +#: plugins/sudoers/cvtsudoers_json.c:662 plugins/sudoers/cvtsudoers_json.c:677 +#: plugins/sudoers/cvtsudoers_ldif.c:352 plugins/sudoers/cvtsudoers_ldif.c:365 +#: plugins/sudoers/ldap.c:518 msgid "unable to format timestamp" msgstr "kan inte formatera tidsstämpel" -#: plugins/sudoers/cvtsudoers_ldif.c:640 +#: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:515 +#: plugins/sudoers/cvtsudoers_json.c:728 +#, c-format +msgid "%s:%d:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d:%d: okänd standardpost ”%s”" + +#: plugins/sudoers/cvtsudoers_ldif.c:661 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "för många sudoers-poster, maximalt %u" -#: plugins/sudoers/cvtsudoers_ldif.c:683 +#: plugins/sudoers/cvtsudoers_ldif.c:704 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:50 +#: plugins/sudoers/cvtsudoers_merge.c:273 +#: plugins/sudoers/cvtsudoers_merge.c:309 +#, c-format +msgid "%s:%d:%d: converting host list to ALL" +msgstr "%s:%d:%d: konverterar värdlista till ALL" + +#: plugins/sudoers/cvtsudoers_merge.c:545 +#, c-format +msgid "unable to find alias %s" +msgstr "kan inte hitta alias %s" + +#: plugins/sudoers/cvtsudoers_merge.c:548 +#, c-format +msgid "%s:%d:%d: renaming alias %s to %s" +msgstr "%s:%d:%d: byter namn på alias %s till %s" + +#: plugins/sudoers/cvtsudoers_merge.c:605 +#, c-format +msgid "%s:%d:%d: removing duplicate alias %s" +msgstr "%s:%d:%d: tar bort duplicerat alias %s" + +#: plugins/sudoers/cvtsudoers_merge.c:830 +#, c-format +msgid "%s:%d:%d: conflicting Defaults entry \"%s\" host-specific in %s:%d:%d" +msgstr "%s:%d:%d: Defaults-post ”%s” står i konflikt med värdspecifik på %s:%d:%d" + +#: plugins/sudoers/cvtsudoers_merge.c:864 +#, c-format +msgid "%s:%d:%d: made Defaults \"%s\" specific to host %s" +msgstr "%s:%d:%d: gjorde Defaults ”%s” specifika för värd %s" + +#: plugins/sudoers/cvtsudoers_merge.c:882 +#, c-format +msgid "%s:%d:%d: unable to make Defaults \"%s\" host-specific" +msgstr "%s:%d:%d: kan inte göra Defaults ”%s” värdspecifik" + +#: plugins/sudoers/cvtsudoers_merge.c:892 +#, c-format +msgid "%s:%d:%d: removing Defaults \"%s\" overridden by subsequent entries" +msgstr "%s:%d:%d: tar bort Defaults ”%s” åsidosatt av efterföljande poster" + +#: plugins/sudoers/cvtsudoers_merge.c:1088 +#, c-format +msgid "%s:%d:%d: merging userspec into %s:%d:%d" +msgstr "%s:%d:%d: sammanfogar användarspec till %s:%d:%d" + +#: plugins/sudoers/cvtsudoers_merge.c:1182 +#, c-format +msgid "%s:%d:%d: removing userspec overridden by subsequent entries" +msgstr "%s:%d:%d: tar bort användarspec åsidosatt av efterföljande poster" + +#: plugins/sudoers/def_data.c:56 #, 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:54 +#: plugins/sudoers/def_data.c:60 #, 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:58 +#: plugins/sudoers/def_data.c:64 #, 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:62 +#: plugins/sudoers/def_data.c:68 msgid "Put OTP prompt on its own line" msgstr "Lägg OTP-prompt på en egen rad" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:72 msgid "Ignore '.' in $PATH" msgstr "Ignorera ”.” i $PATH" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:76 msgid "Always send mail when sudo is run" msgstr "Skicka alltid e-post när sudo körs" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if user authentication fails" msgstr "Skicka e-post om användarens autentisering misslyckas" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:84 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:82 +#: plugins/sudoers/def_data.c:88 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:86 +#: plugins/sudoers/def_data.c:92 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:90 +#: plugins/sudoers/def_data.c:96 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:94 +#: plugins/sudoers/def_data.c:100 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:98 +#: plugins/sudoers/def_data.c:104 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:102 +#: plugins/sudoers/def_data.c:108 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Fil som innehåller sudo-lektion: %s" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:112 msgid "Require users to authenticate by default" msgstr "Kräv att användare autentiseras som standard" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:116 msgid "Root may run sudo" msgstr "Root får köra sudo" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:120 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:118 +#: plugins/sudoers/def_data.c:124 msgid "Log the year in the (non-syslog) log file" msgstr "Logga året i (den icke syslog-baserade) loggfilen" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:128 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:126 +#: plugins/sudoers/def_data.c:132 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:130 +#: plugins/sudoers/def_data.c:136 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:134 +#: plugins/sudoers/def_data.c:140 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:138 +#: plugins/sudoers/def_data.c:144 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Kräv fullständiga värdnamn i sudoers-filen" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:148 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:146 +#: plugins/sudoers/def_data.c:152 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:150 +#: plugins/sudoers/def_data.c:156 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo kommer att respektera miljövariabeln EDITOR" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:160 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:158 +#: plugins/sudoers/def_data.c:164 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:162 +#: plugins/sudoers/def_data.c:168 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:166 +#: plugins/sudoers/def_data.c:172 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:170 +#: plugins/sudoers/def_data.c:176 msgid "Set the LOGNAME and USER environment variables" msgstr "Ställ in miljövariablerna LOGNAME och USER" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:180 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:178 +#: plugins/sudoers/def_data.c:184 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:182 +#: plugins/sudoers/def_data.c:188 #, 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:186 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Tidsgräns för autentiseringstidsstämpel: %.1f minuter" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Tidsgräns för lösenordsprompt: %.1f minuter" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:200 #, 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:198 +#: plugins/sudoers/def_data.c:204 #, 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:202 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Path to log file: %s" msgstr "Sökväg till loggfil: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Path to mail program: %s" msgstr "Sökväg till e-postprogram: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Flags for mail program: %s" msgstr "Flaggor för e-postprogram: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Address to send mail to: %s" msgstr "Adress att skicka e-post till: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Address to send mail from: %s" msgstr "Adress att skicka e-post från: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Subject line for mail messages: %s" msgstr "Ämnesrad för e-postmeddelanden: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Incorrect password message: %s" msgstr "Meddelande vid felaktigt lösenord: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Path to lecture status dir: %s" msgstr "Sökväg till lektionsstatuskatalog: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:240 #, 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:238 +#: plugins/sudoers/def_data.c:244 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Ägare av katalogen för autentiseringstidsstämplar: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:248 #, 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:246 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Default password prompt: %s" msgstr "Standard lösenordsprompt: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:256 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:254 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "Default user to run commands as: %s" msgstr "Standardanvändaren att köra kommandon som: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:264 #, 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:262 +#: plugins/sudoers/def_data.c:268 #, 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:266 +#: plugins/sudoers/def_data.c:272 #, 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:270 +#: plugins/sudoers/def_data.c:276 #, 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:274 +#: plugins/sudoers/def_data.c:280 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:278 +#: plugins/sudoers/def_data.c:284 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:282 +#: plugins/sudoers/def_data.c:288 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Fildeskriptorer >= %d kommer att stängas innan ett kommando körs" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:292 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:290 +#: plugins/sudoers/def_data.c:296 msgid "Allow users to set arbitrary environment variables" msgstr "Låt användare ställa in godtyckliga miljövariabler" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:300 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:298 +#: plugins/sudoers/def_data.c:304 msgid "Environment variables to check for safety:" msgstr "Miljövariabler att säkerhetskontrollera:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:308 msgid "Environment variables to remove:" msgstr "Miljövariabler att ta bort:" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:312 msgid "Environment variables to preserve:" msgstr "Miljövariabler att behålla:" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:316 #, 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:314 +#: plugins/sudoers/def_data.c:320 #, 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:318 +#: plugins/sudoers/def_data.c:324 #, 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:322 +#: plugins/sudoers/def_data.c:328 #, 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:326 +#: plugins/sudoers/def_data.c:332 #, 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:330 +#: plugins/sudoers/def_data.c:336 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:334 +#: plugins/sudoers/def_data.c:340 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:338 +#: plugins/sudoers/def_data.c:344 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:342 +#: plugins/sudoers/def_data.c:348 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:346 +#: plugins/sudoers/def_data.c:352 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:350 +#: plugins/sudoers/def_data.c:356 +msgid "Log the command's standard input if not connected to a terminal" +msgstr "Logga kommandots standard in om inte ansluten till en terminal" + +#: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "Logga användarens terminalinmatning för kommandot som körs" + +#: plugins/sudoers/def_data.c:364 msgid "Log the output of the command being run" msgstr "Logga utmatningen för kommandot som körs" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "Logga kommandots standard ut om inte ansluten till en terminal" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "Logga kommandots standard fel om inte ansluten till en terminal" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "Logga terminalutmatningen för kommandot som körs" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "Komprimera I/O-loggar med hjälp av zlib" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "Kör alltid kommandon i en pseudo-tty" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:388 #, 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:366 +#: plugins/sudoers/def_data.c:392 #, 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:370 +#: plugins/sudoers/def_data.c:396 #, 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:374 +#: plugins/sudoers/def_data.c:400 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:378 +#: plugins/sudoers/def_data.c:404 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:382 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "Uppsättning tillåtna rättigheter: %s" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "Uppsättning av begränsningsrättigheter: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "Kör kommandon i en pty i bakgrunden" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "PAM-tjänstnamn att använda: %s" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:424 #, 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:402 +#: plugins/sudoers/def_data.c:428 +#, c-format +msgid "PAM service name to use when sudo is run with the -A option: %s" +msgstr "PAM-tjänstnamn att använda när sudo körs med flaggan -A: %s" + +#: plugins/sudoers/def_data.c:432 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:406 +#: plugins/sudoers/def_data.c:436 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:410 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "Utför valideringshantering av PAM-konto" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Största sekvensnummer i I/O-logg: %s" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "Aktivera sudoers nätgruppsstöd" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:452 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:426 +#: plugins/sudoers/def_data.c:456 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:430 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "Fråga gruppinsticksmodulen efter okända systemgrupper" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:464 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:438 +#: plugins/sudoers/def_data.c:468 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:442 +#: plugins/sudoers/def_data.c:472 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:446 +#: plugins/sudoers/def_data.c:476 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:450 +#: plugins/sudoers/def_data.c:480 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:454 +#: plugins/sudoers/def_data.c:484 #, 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:458 +#: plugins/sudoers/def_data.c:488 #, 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:462 +#: plugins/sudoers/def_data.c:492 #, 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:466 +#: plugins/sudoers/def_data.c:496 #, 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:470 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Kör kommandon efter fildeskriptor istället för efter sökväg: %s" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:504 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:478 +#: plugins/sudoers/def_data.c:508 #, 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:482 +#: plugins/sudoers/def_data.c:512 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:486 +#: plugins/sudoers/def_data.c:516 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:490 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "Inkludera process-ID:t vid loggning via syslog" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Typ av post för autentiseringstidsstämplar: %s" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "Autentiseringsfelsmeddelande: %s" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "Matcha användarnamn skiftlägesokänsligt" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "Matcha gruppnamn skiftlägesokänsligt" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "Logga när ett kommando tillåts av sudoers" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "Logga när ett kommando nekas av sudoers" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:548 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:522 +#: plugins/sudoers/def_data.c:552 #, 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:526 +#: plugins/sudoers/def_data.c:556 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:530 +#: plugins/sudoers/def_data.c:560 #, 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:534 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Sökväg till sudoers certifikatfil: %s" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:568 #, 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:542 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "Verifiera att loggserverns certifikatfil är giltig" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:576 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:550 +#: plugins/sudoers/def_data.c:580 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:554 +#: plugins/sudoers/def_data.c:584 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:558 +#: plugins/sudoers/def_data.c:588 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/def_data.c:562 +#: plugins/sudoers/def_data.c:592 #, c-format 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/def_data.c:566 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Rotkatalog att ändra till innan kommandot körs: %s" -#: plugins/sudoers/def_data.c:570 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "Formatet för loggarna som ska produceras: %s" -#: plugins/sudoers/def_data.c:574 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "Aktivera SELinux RBAC-stöd" -#: plugins/sudoers/def_data.c:578 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "Sökväg till filen som skapas första gången sudo körs: %s" -#: plugins/sudoers/defaults.c:185 +#: plugins/sudoers/def_data.c:612 +msgid "Intercept further commands and apply sudoers restrictions to them" +msgstr "Fånga in vidare kommando och tillämpa sudoers-begränsningar på dem" + +#: plugins/sudoers/def_data.c:616 +msgid "Log sub-commands run by the original command" +msgstr "Logga underkommandon som körs av originalkommandot" + +#: plugins/sudoers/def_data.c:620 +msgid "Log the exit status of commands" +msgstr "Logga avslutningsstatus för kommandon" + +#: plugins/sudoers/def_data.c:624 +msgid "Subsequent commands in an intercepted session must be authenticated" +msgstr "Framtida kommandon i en infångad session måste autentiseras" + +#: plugins/sudoers/def_data.c:628 +msgid "Allow an intercepted command to run set setuid or setgid programs" +msgstr "Tillåt ett infångat kommando att köra setuid- eller setgid-program" + +#: plugins/sudoers/def_data.c:632 #, c-format -msgid "%s:%d:%d: unknown defaults entry \"%s\"" -msgstr "%s:%d:%d: okänd standardpost ”%s”" +msgid "The maximum size to which the process's address space may grow (in bytes): %s" +msgstr "Maximal storlek upp till vilken processens adressområde får växa (i byte): %s" -#: plugins/sudoers/defaults.c:188 +#: plugins/sudoers/def_data.c:636 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: okänd standardpost ”%s”" +msgid "The largest size core dump file that may be created (in bytes): %s" +msgstr "Största storlek för kärndumpfil som får skapas (i byte): %s" -#: plugins/sudoers/defaults.c:234 +#: plugins/sudoers/def_data.c:640 #, c-format -msgid "%s:%d:%d: no value specified for \"%s\"" -msgstr "%s:%d:%d: inget värde angivet för ”%s”" +msgid "The maximum amount of CPU time that the process may use (in seconds): %s" +msgstr "Maximal mängd CPU-tid som processen får använda (i sekunder): %s" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/def_data.c:644 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: inget värde angivet för ”%s”" +msgid "The maximum size of the data segment for the process (in bytes): %s" +msgstr "Maximal storlek på datasegmentet för processen (i byte): %s" -#: plugins/sudoers/defaults.c:275 +#: plugins/sudoers/def_data.c:648 #, c-format -msgid "%s:%d:%d: option \"%s\" does not take a value" -msgstr "%s:%d:%d: flaggan ”%s” tar inte emot något värde" +msgid "The largest size file that the process may create (in bytes): %s" +msgstr "Största filstorlek som processen får skapa (i byte): %s" -#: plugins/sudoers/defaults.c:278 +#: plugins/sudoers/def_data.c:652 #, c-format -msgid "%s: option \"%s\" does not take a value" -msgstr "%s: flaggan ”%s” tar inte emot något värde" +msgid "The maximum number of locks that the process may establish: %s" +msgstr "Största antalet lås som processen får etablera: %s" -#: plugins/sudoers/defaults.c:303 +#: plugins/sudoers/def_data.c:656 #, c-format -msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d:%d: ogiltig standardtyp 0x%x för flagga ”%s”" +msgid "The maximum size that the process may lock in memory (in bytes): %s" +msgstr "Maximal storlek som processen får låsa i minnet (i byte): %s" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/def_data.c:660 +#, c-format +msgid "The maximum number of files that the process may have open: %s" +msgstr "Maximalt antal filer som processen får ha öppna: %s" + +#: plugins/sudoers/def_data.c:664 +#, c-format +msgid "The maximum number of processes that the user may run simultaneously: %s" +msgstr "Maximalt antal processer som användaren får köra samtidigt: %s" + +#: plugins/sudoers/def_data.c:668 +#, c-format +msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" +msgstr "Maximal storlek upp till vilken processens residenta mängd får växa (i byte): %s" + +#: plugins/sudoers/def_data.c:672 #, c-format -msgid "%s: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s: ogiltig standardtyp 0x%x för flagga ”%s”" +msgid "The maximum size to which the process's stack may grow (in bytes): %s" +msgstr "Maximal storlek upp till vilken processen stack får växa (i byte) : %s" + +#: plugins/sudoers/def_data.c:676 +msgid "Attempt authentication even when in non-interactive mode" +msgstr "Försök att autentisera även i icke-interaktivt läge" + +#: plugins/sudoers/def_data.c:680 +msgid "Store plaintext passwords in I/O log input" +msgstr "Spara lösenord i klartext i I/O-logg-indata" -#: plugins/sudoers/defaults.c:316 +#: plugins/sudoers/def_data.c:684 +msgid "List of regular expressions to use when matching a password prompt" +msgstr "Lista över reguljära uttryck att använda vid matchning av en lösenordsförfrågan" + +#: plugins/sudoers/def_data.c:688 #, c-format -msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d:%d: värdet ”%s” är ogiltigt för flaggan ”%s”" +msgid "The mechanism used by the intercept and log_subcmds options: %s" +msgstr "Mekanismen som används av infångning och log_subcmd-flaggorna: %s" + +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "Försök att verifiera kommandot och argumenten efter körning" -#: plugins/sudoers/defaults.c:319 +#: plugins/sudoers/def_data.c:696 #, c-format -msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: värdet ”%s” är ogiltigt för flaggan ”%s”" +msgid "AppArmor profile to use in the new security context: %s" +msgstr "AppArmor-profil att använda i den nya säkerhetskontexten: %s" -#: plugins/sudoers/defaults.c:1040 +#: plugins/sudoers/defaults.c:191 #, 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 ”*”" +msgid "unknown defaults entry \"%s\"" +msgstr "okänd standardpost ”%s”" -#: plugins/sudoers/defaults.c:1044 +#: plugins/sudoers/defaults.c:234 #, 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 ”*”" +msgid "no value specified for \"%s\"" +msgstr "inget värde angivet för ”%s”" -#: plugins/sudoers/defaults.c:1055 +#: plugins/sudoers/defaults.c:243 #, 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 ”/”" +msgid "invalid operator \"%c=\" for \"%s\"" +msgstr "ogiltig operator ”%c=” för ”%s”" -#: plugins/sudoers/defaults.c:1059 +#: plugins/sudoers/defaults.c:275 #, 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 "option \"%s\" does not take a value" +msgstr "flaggan ”%s” tar inte emot något värde" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/defaults.c:299 +#, c-format +msgid "invalid Defaults type 0x%x for option \"%s\"" +msgstr "ogiltig Defaults-typ 0x%x för flagga ”%s”" + +#: plugins/sudoers/defaults.c:306 +#, c-format +msgid "value \"%s\" is invalid for option \"%s\"" +msgstr "värdet ”%s” är ogiltigt för flaggan ”%s”" + +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 +#, c-format +msgid "path name for \"%s\" too long" +msgstr "sökvägsnamn för ”%s” för långt" + +#: plugins/sudoers/defaults.c:1134 +#, c-format +msgid "values for \"%s\" must start with a '/', '~', or '*'" +msgstr "värden för ”%s” måste börja med ett ”/”, ”~” eller ”*”" + +#: plugins/sudoers/defaults.c:1141 +#, c-format +msgid "values for \"%s\" must start with a '/'" +msgstr "värden för ”%s” måste börja med ett ”/”" + +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: trasig envp, längd stämmer inte" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "kan inte återuppbygga miljön" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, 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:107 -#, c-format -msgid "parse error in %s near line %d" -msgstr "tolkningsfel i %s nära rad %d" - -#: plugins/sudoers/file.c:110 -#, c-format -msgid "parse error in %s" -msgstr "tolkningsfel i %s" - #: plugins/sudoers/filedigest.c:49 #, c-format msgid "unsupported digest type %d for %s" @@ -2167,86 +2681,81 @@ msgstr "typ %d av kontrollsumma stöds inte för %s" msgid "%s: read error" msgstr "%s: läsfel" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "%s måste ägas av uid %d" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format 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:569 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "kan inte läsa in %s: %s" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "kan inte hitta symbolen ”group_plugin” i %s" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: inkompatibel gruppinsticksmodul huvudversion %d, förväntade %d" -#: plugins/sudoers/interfaces.c:80 plugins/sudoers/interfaces.c:97 +#: plugins/sudoers/interfaces.c:76 plugins/sudoers/interfaces.c:93 #, c-format msgid "unable to parse IP address \"%s\"" msgstr "kan inte tolka IP-adress ”%s”" -#: plugins/sudoers/interfaces.c:85 plugins/sudoers/interfaces.c:102 +#: plugins/sudoers/interfaces.c:81 plugins/sudoers/interfaces.c:98 #, c-format msgid "unable to parse netmask \"%s\"" msgstr "kan inte tolka nätmask ”%s”" -#: plugins/sudoers/interfaces.c:130 +#: plugins/sudoers/interfaces.c:126 msgid "Local IP address and netmask pairs:\n" msgstr "Lokala IP-adress- och nätmaskpar:\n" -#: plugins/sudoers/iolog.c:143 plugins/sudoers/sudoers.c:437 -#: plugins/sudoers/sudoers.c:1317 plugins/sudoers/testsudoers.c:406 -#, c-format -msgid "unknown group: %s" -msgstr "okänd grupp: %s" - -#: plugins/sudoers/iolog.c:635 +#: plugins/sudoers/iolog.c:685 msgid "unable to update sequence file" msgstr "kan inte uppdatera sekvensfil" -#: plugins/sudoers/iolog.c:666 plugins/sudoers/iolog.c:854 -#: plugins/sudoers/iolog.c:1007 plugins/sudoers/iolog.c:1014 -#: plugins/sudoers/iolog.c:1135 plugins/sudoers/iolog.c:1142 -#: plugins/sudoers/iolog.c:1241 plugins/sudoers/iolog.c:1248 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, 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:674 +#: plugins/sudoers/iolog.c:727 #, c-format msgid "unable to create %s/%s" msgstr "kan inte skapa %s/%s" -#: plugins/sudoers/iolog.c:899 +#: plugins/sudoers/iolog.c:957 #, 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:992 plugins/sudoers/iolog.c:1120 -#: plugins/sudoers/iolog.c:1225 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:487 -#: plugins/sudoers/visudo.c:493 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "kan inte läsa klockan" -#: plugins/sudoers/iolog.c:1217 plugins/sudoers/log_client.c:1199 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: internt fel, ogiltig signal %d" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "starttls stöds inte när ldaps används" @@ -2260,16 +2769,16 @@ msgstr "kan inte initiera SSL-certifikat och nyckeldatabas: %s" 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:1660 +#: plugins/sudoers/ldap.c:1712 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kan inte initiera LDAP: %s" -#: plugins/sudoers/ldap.c:1697 +#: plugins/sudoers/ldap.c:1749 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:1834 plugins/sudoers/parse_ldif.c:746 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "ogiltigt sudoOrder-attribut: %s" @@ -2279,24 +2788,24 @@ msgstr "ogiltigt sudoOrder-attribut: %s" msgid "%s: port too large" msgstr "%s: port för stor" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "LDAP-uri-typ stöds ej: %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "kan inte blanda ldap- och ldaps-URI:er" -#: plugins/sudoers/ldap_util.c:529 plugins/sudoers/ldap_util.c:536 -#: plugins/sudoers/ldap_util.c:544 plugins/sudoers/ldap_util.c:553 -#: plugins/sudoers/ldap_util.c:561 plugins/sudoers/ldap_util.c:571 -#: plugins/sudoers/ldap_util.c:579 +#: plugins/sudoers/ldap_util.c:499 plugins/sudoers/ldap_util.c:506 +#: plugins/sudoers/ldap_util.c:514 plugins/sudoers/ldap_util.c:523 +#: plugins/sudoers/ldap_util.c:531 plugins/sudoers/ldap_util.c:541 +#: plugins/sudoers/ldap_util.c:549 #, c-format msgid "duplicate sudoOption: %s%s%s" msgstr "duplicerad sudoOption: %s%s%s" -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/ldap_util.c:600 +#: plugins/sudoers/ldap_util.c:568 plugins/sudoers/ldap_util.c:570 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "kan inte konvertera sudoOption: %s%s%s" @@ -2309,107 +2818,111 @@ msgstr "kan inte öppna granskningssystem" msgid "unable to send audit message" msgstr "kan inte skicka granskningsmeddelande" -#: plugins/sudoers/log_client.c:113 plugins/sudoers/log_client.c:391 -#: plugins/sudoers/log_client.c:1437 plugins/sudoers/log_client.c:2031 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "fel i händelseloop" -#: plugins/sudoers/log_client.c:193 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Skapande av nytt SSL_CTX-objekt misslyckades: %s" -#: plugins/sudoers/log_client.c:216 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "kan inte läsa in certifikatauktoritetsbunt %s" -#: plugins/sudoers/log_client.c:236 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "kan inte läsa in certifikat %s" -#: plugins/sudoers/log_client.c:249 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "kan inte läsa in privat nyckel %s" -#: plugins/sudoers/log_client.c:258 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Kan inte allokera ssl-objekt: %s" -#: plugins/sudoers/log_client.c:345 plugins/sudoers/log_client.c:350 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "TLS-anslutning till %s:%s misslyckades: %s" -#: plugins/sudoers/log_client.c:519 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "TLS-initiering misslyckades" -#: plugins/sudoers/log_client.c:528 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "TLS-handskakning misslyckades" -#: plugins/sudoers/log_client.c:1208 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: internt fel, ogiltig avslutningskod %d" -#: plugins/sudoers/log_client.c:1724 plugins/sudoers/log_client.c:1748 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "förlorade kontakten med loggservern" -#: plugins/sudoers/log_client.c:1825 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "saknar skrivbuffert" -#: plugins/sudoers/log_client.c:1972 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "kan inte ansluta till loggserver" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "användare finns INTE i sudoers" -#: plugins/sudoers/logging.c:246 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "användaren är INTE auktoriserad på värddatorn" -#: plugins/sudoers/logging.c:248 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "kommandot tillåts inte" -#: plugins/sudoers/logging.c:269 +#: plugins/sudoers/logging.c:315 #, 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" +msgid "%s is not in the sudoers file.\n" +msgstr "%s finns inte i sudoers-filen.\n" -#: plugins/sudoers/logging.c:272 +#: plugins/sudoers/logging.c:318 #, 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" +msgid "%s is not allowed to run sudo on %s.\n" +msgstr "%s tillåts inte att köra sudo på %s.\n" -#: plugins/sudoers/logging.c:276 +#: plugins/sudoers/logging.c:321 #, 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:279 +#: plugins/sudoers/logging.c:324 #, 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:316 plugins/sudoers/sudoers.c:575 -#: plugins/sudoers/sudoers.c:577 plugins/sudoers/sudoers.c:579 -#: plugins/sudoers/sudoers.c:581 plugins/sudoers/sudoers.c:723 -#: plugins/sudoers/sudoers.c:725 +#: plugins/sudoers/logging.c:334 +msgid "This incident has been reported to the administrator.\n" +msgstr "Denna incident har rapporterats till administratören.\n" + +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s: kommandot hittades inte" -#: plugins/sudoers/logging.c:318 plugins/sudoers/sudoers.c:571 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2418,37 +2931,46 @@ 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:337 +#: plugins/sudoers/logging.c:387 #, 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:393 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "autentiseringsfel" -#: plugins/sudoers/logging.c:433 plugins/sudoers/logging.c:453 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "ett lösenord krävs" -#: plugins/sudoers/logging.c:739 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 +msgid "problem parsing sudoers" +msgstr "problem vid tolkning av sudoers" + +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format -msgid "unable to open log file: %s" -msgstr "kan inte öppna loggfil: %s" +msgid "%s:%d:%d: %s" +msgstr "%s:%d:%d: %s" -#: plugins/sudoers/logging.c:772 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "kan inte skriva till loggfil: %s" -#: plugins/sudoers/match_digest.c:129 +#: plugins/sudoers/match_digest.c:112 +#, c-format +msgid "digest for %s (%s) bad length %zu, expected %zu" +msgstr "kontrollsumma för %s (%s) felaktig längd %zu, förväntade %zu" + +#: plugins/sudoers/match_digest.c:131 #, 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:530 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2457,7 +2979,7 @@ msgstr "" "\n" "LDAP-roll: %s\n" -#: plugins/sudoers/parse.c:533 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2465,110 +2987,110 @@ msgstr "" "\n" "Sudoers-post:\n" -#: plugins/sudoers/parse.c:535 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " KörSomAnvändare: " -#: plugins/sudoers/parse.c:550 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " KörSomGrupper: " -#: plugins/sudoers/parse.c:560 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " Flaggor: " -#: plugins/sudoers/parse.c:614 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " Kommandon:\n" -#: plugins/sudoers/parse.c:805 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Matchande standardposter för %s på %s:\n" -#: plugins/sudoers/parse.c:823 +#: plugins/sudoers/parse.c:894 #, 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:841 +#: plugins/sudoers/parse.c:912 #, 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:856 +#: plugins/sudoers/parse.c:927 #, 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" -#: plugins/sudoers/parse_ldif.c:616 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "hoppar över ofullständig sudoRole: cn: %s" -#: plugins/sudoers/parse_ldif.c:676 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "ogiltigt LDIF-attribut: %s" -#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:108 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "ogiltigt %.*s inställt av sudo-framände" -#: plugins/sudoers/policy.c:314 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "kan inte tolka nätverksadresslista" -#: plugins/sudoers/policy.c:465 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "användarnamn inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:469 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "användar-ID inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:473 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "grupp-ID inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:477 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "värdnamn inte inställt av sudo-framände" -#: plugins/sudoers/policy.c:660 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "ogiltig arbetskatalog: %s" -#: plugins/sudoers/policy.c:828 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "ogiltig chroot-katalog: %s" -#: plugins/sudoers/policy.c:963 plugins/sudoers/visudo.c:229 -#: plugins/sudoers/visudo.c:851 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "kan inte köra %s" -#: plugins/sudoers/policy.c:1030 plugins/sudoers/policy.c:1067 -#: plugins/sudoers/policy.c:1089 plugins/sudoers/policy.c:1115 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: ogiltiga lägesflaggor från sudo-framände: 0x%x" -#: plugins/sudoers/policy.c:1146 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers policyinsticksmodul version %s\n" -#: plugins/sudoers/policy.c:1148 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-filgrammatik version %d\n" -#: plugins/sudoers/policy.c:1152 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -2577,137 +3099,137 @@ msgstr "" "\n" "Sökväg till sudoers: %s\n" -#: plugins/sudoers/policy.c:1155 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "Sökväg till nsswitch: %s\n" -#: plugins/sudoers/policy.c:1157 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "Sökväg till ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1158 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "Sökväg till ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1191 +#: plugins/sudoers/policy.c:1337 #, 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/policy.c:1209 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "kan inte avregistrera krok av typ %d (version %d.%d)" -#: plugins/sudoers/pwutil.c:218 plugins/sudoers/pwutil.c:236 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:240 #, c-format msgid "unable to cache uid %u" msgstr "kan inte cacha uid %u" -#: plugins/sudoers/pwutil.c:230 +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache uid %u, already exists" msgstr "kan inte cacha uid %u, finns redan" -#: plugins/sudoers/pwutil.c:290 plugins/sudoers/pwutil.c:308 -#: plugins/sudoers/pwutil.c:371 plugins/sudoers/pwutil.c:416 +#: plugins/sudoers/pwutil.c:294 plugins/sudoers/pwutil.c:312 +#: plugins/sudoers/pwutil.c:375 plugins/sudoers/pwutil.c:420 #, c-format msgid "unable to cache user %s" msgstr "kan inte cacha användare %s" -#: plugins/sudoers/pwutil.c:303 +#: plugins/sudoers/pwutil.c:307 #, c-format msgid "unable to cache user %s, already exists" msgstr "kan inte cacha användare %s, finns redan" -#: plugins/sudoers/pwutil.c:535 plugins/sudoers/pwutil.c:553 +#: plugins/sudoers/pwutil.c:539 plugins/sudoers/pwutil.c:557 #, c-format msgid "unable to cache gid %u" msgstr "kan inte cacha gid %u" -#: plugins/sudoers/pwutil.c:547 +#: plugins/sudoers/pwutil.c:551 #, c-format msgid "unable to cache gid %u, already exists" msgstr "kan inte cacha gid %u, finns redan" -#: plugins/sudoers/pwutil.c:601 plugins/sudoers/pwutil.c:619 -#: plugins/sudoers/pwutil.c:680 plugins/sudoers/pwutil.c:729 +#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:623 +#: plugins/sudoers/pwutil.c:684 plugins/sudoers/pwutil.c:733 #, c-format msgid "unable to cache group %s" msgstr "kan inte cacha grupp %s" -#: plugins/sudoers/pwutil.c:614 +#: plugins/sudoers/pwutil.c:618 #, c-format msgid "unable to cache group %s, already exists" msgstr "kan inte cacha grupp %s, finns redan" -#: plugins/sudoers/pwutil.c:876 plugins/sudoers/pwutil.c:927 -#: plugins/sudoers/pwutil.c:977 plugins/sudoers/pwutil.c:1029 +#: plugins/sudoers/pwutil.c:880 plugins/sudoers/pwutil.c:931 +#: plugins/sudoers/pwutil.c:981 plugins/sudoers/pwutil.c:1033 #, 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:882 plugins/sudoers/pwutil.c:932 -#: plugins/sudoers/pwutil.c:983 plugins/sudoers/pwutil.c:1034 +#: plugins/sudoers/pwutil.c:886 plugins/sudoers/pwutil.c:936 +#: plugins/sudoers/pwutil.c:987 plugins/sudoers/pwutil.c:1038 #, c-format msgid "unable to cache group list for %s" msgstr "kan inte cacha grupplista för %s" -#: plugins/sudoers/pwutil.c:921 +#: plugins/sudoers/pwutil.c:925 #, c-format msgid "unable to parse groups for %s" msgstr "kan inte tolka grupper för %s" -#: plugins/sudoers/pwutil.c:1023 +#: plugins/sudoers/pwutil.c:1027 #, c-format msgid "unable to parse gids for %s" msgstr "kan inte tolka gids för %s" -#: plugins/sudoers/set_perms.c:114 plugins/sudoers/set_perms.c:441 -#: plugins/sudoers/set_perms.c:844 plugins/sudoers/set_perms.c:1150 -#: plugins/sudoers/set_perms.c:1444 +#: plugins/sudoers/set_perms.c:114 plugins/sudoers/set_perms.c:445 +#: plugins/sudoers/set_perms.c:852 plugins/sudoers/set_perms.c:1162 +#: plugins/sudoers/set_perms.c:1460 msgid "perm stack overflow" msgstr "perm-stackspill" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:372 -#: plugins/sudoers/set_perms.c:449 plugins/sudoers/set_perms.c:711 -#: plugins/sudoers/set_perms.c:852 plugins/sudoers/set_perms.c:1074 -#: plugins/sudoers/set_perms.c:1158 plugins/sudoers/set_perms.c:1377 -#: plugins/sudoers/set_perms.c:1452 plugins/sudoers/set_perms.c:1542 +#: plugins/sudoers/set_perms.c:125 plugins/sudoers/set_perms.c:376 +#: plugins/sudoers/set_perms.c:456 plugins/sudoers/set_perms.c:719 +#: plugins/sudoers/set_perms.c:863 plugins/sudoers/set_perms.c:1086 +#: plugins/sudoers/set_perms.c:1173 plugins/sudoers/set_perms.c:1393 +#: plugins/sudoers/set_perms.c:1471 plugins/sudoers/set_perms.c:1562 msgid "perm stack underflow" msgstr "perm-stackunderspill" -#: plugins/sudoers/set_perms.c:181 plugins/sudoers/set_perms.c:495 -#: plugins/sudoers/set_perms.c:1211 plugins/sudoers/set_perms.c:1485 +#: plugins/sudoers/set_perms.c:185 plugins/sudoers/set_perms.c:503 +#: plugins/sudoers/set_perms.c:1227 plugins/sudoers/set_perms.c:1505 msgid "unable to change to root gid" msgstr "kan inte ändra till root-gid" -#: plugins/sudoers/set_perms.c:272 plugins/sudoers/set_perms.c:592 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:276 plugins/sudoers/set_perms.c:600 +#: plugins/sudoers/set_perms.c:995 plugins/sudoers/set_perms.c:1304 msgid "unable to change to runas gid" msgstr "kan inte ändra till runas-gid" -#: plugins/sudoers/set_perms.c:277 plugins/sudoers/set_perms.c:597 -#: plugins/sudoers/set_perms.c:988 plugins/sudoers/set_perms.c:1293 +#: plugins/sudoers/set_perms.c:281 plugins/sudoers/set_perms.c:605 +#: plugins/sudoers/set_perms.c:1000 plugins/sudoers/set_perms.c:1309 msgid "unable to set runas group vector" msgstr "kan inte ställa in gruppvektor för runas" -#: plugins/sudoers/set_perms.c:288 plugins/sudoers/set_perms.c:608 -#: plugins/sudoers/set_perms.c:997 plugins/sudoers/set_perms.c:1302 +#: plugins/sudoers/set_perms.c:292 plugins/sudoers/set_perms.c:616 +#: plugins/sudoers/set_perms.c:1009 plugins/sudoers/set_perms.c:1318 msgid "unable to change to runas uid" msgstr "kan inte ändra till runas-uid" -#: plugins/sudoers/set_perms.c:306 plugins/sudoers/set_perms.c:626 -#: plugins/sudoers/set_perms.c:1013 plugins/sudoers/set_perms.c:1318 +#: plugins/sudoers/set_perms.c:310 plugins/sudoers/set_perms.c:634 +#: plugins/sudoers/set_perms.c:1025 plugins/sudoers/set_perms.c:1334 msgid "unable to change to sudoers gid" msgstr "kan inte ändra till sudoers-gid" -#: 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/set_perms.c:363 plugins/sudoers/set_perms.c:706 +#: plugins/sudoers/set_perms.c:1073 plugins/sudoers/set_perms.c:1380 +#: plugins/sudoers/set_perms.c:1549 msgid "too many processes" msgstr "för många processer" @@ -2725,263 +3247,261 @@ 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:572 +#: plugins/sudoers/sssd.c:579 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:580 plugins/sudoers/sssd.c:589 -#: plugins/sudoers/sssd.c:598 plugins/sudoers/sssd.c:607 -#: plugins/sudoers/sssd.c:616 +#: plugins/sudoers/sssd.c:587 plugins/sudoers/sssd.c:596 +#: plugins/sudoers/sssd.c:605 plugins/sudoers/sssd.c:614 +#: plugins/sudoers/sssd.c:623 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "kan inte hitta symbol ”%s” i %s" -#: plugins/sudoers/sudoers.c:213 plugins/sudoers/sudoers.c:985 -msgid "problem with defaults entries" -msgstr "problem med standardposter" +#: plugins/sudoers/sudoers.c:263 +#, c-format +msgid "unable to get defaults from %s" +msgstr "kan inte hämta standardvärden från %s" -#: plugins/sudoers/sudoers.c:217 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "inga giltiga sudoers-källor hittades, avslutar" -#: plugins/sudoers/sudoers.c:291 +#: plugins/sudoers/sudoers.c:346 #, 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:293 +#: plugins/sudoers/sudoers.c:348 #, 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:318 +#: plugins/sudoers/sudoers.c:373 #, 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:319 +#: plugins/sudoers/sudoers.c:374 #, 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:345 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "inget kommando specificerat" -#: plugins/sudoers/sudoers.c:355 +#: plugins/sudoers/sudoers.c:426 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:403 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "användare inte tillåten att åsidosätta closefrom-begränsning" -#: plugins/sudoers/sudoers.c:404 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "du tillåts inte att använda flaggan -C" -#: plugins/sudoers/sudoers.c:464 +#: plugins/sudoers/sudoers.c:537 #, 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:479 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "ingen tty" -#: plugins/sudoers/sudoers.c:480 +#: plugins/sudoers/sudoers.c:553 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:487 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "ogiltigt skal för användare %s: %s" -#: plugins/sudoers/sudoers.c:570 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "kommando i aktuell katalog" -#: plugins/sudoers/sudoers.c:589 +#: plugins/sudoers/sudoers.c:658 +msgid "\"cd\" is a shell built-in command, it cannot be run directly." +msgstr "”cd” är ett inbyggt shell-kommando, det kan inte köras direkt." + +#: plugins/sudoers/sudoers.c:660 +msgid "the -s option may be used to run a privileged shell." +msgstr "flaggan -s får inte användas för att köra ett privilegierat skal." + +#: plugins/sudoers/sudoers.c:662 +msgid "the -D option may be used to run a command in a specific directory." +msgstr "flaggan -D får inte användas för att köra ett kommando i en specifik katalog." + +#: plugins/sudoers/sudoers.c:671 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:591 +#: plugins/sudoers/sudoers.c:673 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:599 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "användare inte tillåten att behålla miljön" -#: plugins/sudoers/sudoers.c:601 +#: plugins/sudoers/sudoers.c:683 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:936 -msgid "command too long" -msgstr "kommandot för långt" - -#: plugins/sudoers/sudoers.c:973 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit behöver inte köras via sudo" -#: plugins/sudoers/sudoers.c:1032 plugins/sudoers/sudoreplay.c:1547 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "kan inte läsa %s" -#: plugins/sudoers/sudoers.c:1057 plugins/sudoers/visudo.c:426 -#: plugins/sudoers/visudo.c:720 -#, c-format -msgid "unable to stat %s" -msgstr "kan inte ta status på %s" - -#: plugins/sudoers/sudoers.c:1061 plugins/sudoers/visudo.c:1009 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s är inte en vanlig fil" -#: plugins/sudoers/sudoers.c:1065 plugins/sudoers/timestamp.c:252 toke.l:1138 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, 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:1069 toke.l:1143 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "%s är skrivbar för alla" -#: plugins/sudoers/sudoers.c:1073 toke.l:1146 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, 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:1106 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "endast root kan använda ”-c %s”" -#: plugins/sudoers/sudoers.c:1125 +#: plugins/sudoers/sudoers.c:1213 #, c-format -msgid "unknown login class: %s" -msgstr "okänd inloggningsklass: %s" +msgid "unknown login class %s" +msgstr "okänd inloggningsklass %s" -#: plugins/sudoers/sudoers.c:1211 plugins/sudoers/sudoers.c:1226 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "kan inte slå upp värddatorn %s" -#: plugins/sudoers/sudoreplay.c:257 +#: plugins/sudoers/sudoreplay.c:259 #, c-format msgid "invalid filter option: %s" msgstr "ogiltig filterflagga: %s" -#: plugins/sudoers/sudoreplay.c:273 +#: plugins/sudoers/sudoreplay.c:275 #, c-format msgid "invalid max wait: %s" msgstr "ogiltig största väntan: %s" -#: plugins/sudoers/sudoreplay.c:296 +#: plugins/sudoers/sudoreplay.c:298 #, c-format msgid "invalid speed factor: %s" msgstr "ogiltig hastighetsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:333 +#, c-format +msgid "invalid time offset %s" +msgstr "ogiltigt värde för tidsavstånd %s" + +#: plugins/sudoers/sudoreplay.c:342 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:337 +#: plugins/sudoers/sudoreplay.c:347 #, c-format msgid "%s/timing: %s" msgstr "%s/tidsmätning: %s" -#: plugins/sudoers/sudoreplay.c:341 -#, c-format -msgid "%s/%s: %s" -msgstr "%s/%s: %s" - -#: plugins/sudoers/sudoreplay.c:365 +#: plugins/sudoers/sudoreplay.c:375 #, c-format msgid "Replaying sudo session: %s" msgstr "Spelar upp sudo-session: %s" -#: plugins/sudoers/sudoreplay.c:627 +#: plugins/sudoers/sudoreplay.c:637 msgid "unable to set tty to raw mode" msgstr "kan inte ställa in tty i råläge" -#: plugins/sudoers/sudoreplay.c:678 +#: plugins/sudoers/sudoreplay.c:688 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:679 +#: plugins/sudoers/sudoreplay.c:689 #, 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:707 +#: plugins/sudoers/sudoreplay.c:717 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:1197 plugins/sudoers/sudoreplay.c:1227 +#: plugins/sudoers/sudoreplay.c:1219 plugins/sudoers/sudoreplay.c:1249 #, c-format msgid "ambiguous expression \"%s\"" msgstr "tvetydigt uttryck ”%s”" -#: plugins/sudoers/sudoreplay.c:1249 +#: plugins/sudoers/sudoreplay.c:1271 msgid "unmatched ')' in expression" msgstr "omatchat ”)” i uttryck" -#: plugins/sudoers/sudoreplay.c:1253 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "unknown search term \"%s\"" msgstr "okänt sökvillkor ”%s”" -#: plugins/sudoers/sudoreplay.c:1268 +#: plugins/sudoers/sudoreplay.c:1290 #, c-format msgid "%s requires an argument" msgstr "%s kräver ett argument" -#: 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:1276 +#: plugins/sudoers/sudoreplay.c:1300 #, c-format msgid "could not parse date \"%s\"" msgstr "kunde inte tolka datumet ”%s”" -#: plugins/sudoers/sudoreplay.c:1285 +#: plugins/sudoers/sudoreplay.c:1309 msgid "unmatched '(' in expression" msgstr "omatchat ”(” i uttryck" -#: plugins/sudoers/sudoreplay.c:1287 +#: plugins/sudoers/sudoreplay.c:1311 msgid "illegal trailing \"or\"" msgstr "ogiltigt avslutande ”or”" -#: plugins/sudoers/sudoreplay.c:1289 +#: plugins/sudoers/sudoreplay.c:1313 msgid "illegal trailing \"!\"" msgstr "ogiltigt efterföljande ”!”" -#: plugins/sudoers/sudoreplay.c:1347 +#: plugins/sudoers/sudoreplay.c:1371 #, c-format msgid "unknown search type %d" msgstr "okänd söktyp %d" -#: plugins/sudoers/sudoreplay.c:1614 +#: plugins/sudoers/sudoreplay.c:1650 #, 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:1617 +#: plugins/sudoers/sudoreplay.c:1652 #, 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:1626 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2990,7 +3510,7 @@ msgstr "" "%s - spela upp loggar från sudo-session\n" "\n" -#: plugins/sudoers/sudoreplay.c:1628 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3046,127 +3566,123 @@ msgstr "" "\n" "Kommando omatchat" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s är skrivbar för gruppen" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "kan inte trunkera tidsstämpelfil till %lld byte" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "ignorerar tidsstämpel från framtiden" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tidsstämpel är för långt in i framtiden: %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "kan inte låsa tidsstämpelfil %s" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "sökväg för lektionsstatus för lång: %s/%s" - -#: plugins/sudoers/toke_util.c:150 +#: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "sudoedit ska inte anges med en sökväg" -#: plugins/sudoers/visudo.c:224 +#: plugins/sudoers/visudo.c:254 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:226 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "överväg att använda verktyget cvtsudoers istället" -#: plugins/sudoers/visudo.c:277 plugins/sudoers/visudo.c:653 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "tryck på retur för att redigera %s: " -#: plugins/sudoers/visudo.c:338 +#: plugins/sudoers/visudo.c:326 +#, c-format +msgid "contents of edit session left in %s" +msgstr "innehållet från redigeringssessionen lämnat i %s" + +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "angiven redigerare (%s) finns inte" -#: plugins/sudoers/visudo.c:340 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "ingen textredigerare hittad (sökväg för textredigerare = %s)" -#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "kan inte ta status på %s" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "skrivfel" -#: plugins/sudoers/visudo.c:500 +#: plugins/sudoers/visudo.c:565 #, 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:507 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "temporärfil tom (%s), %s oförändrad" -#: plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "redigeraren (%s) misslyckades, %s är oförändrad" -#: plugins/sudoers/visudo.c:535 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s oförändrad" -#: plugins/sudoers/visudo.c:592 +#: plugins/sudoers/visudo.c:645 #, 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:604 +#: plugins/sudoers/visudo.c:658 #, 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:642 -#, c-format -msgid "internal error, unable to find %s in list!" -msgstr "internt fel, kan inte hitta %s i listan!" - -#: plugins/sudoers/visudo.c:722 plugins/sudoers/visudo.c:731 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, 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:754 +#: plugins/sudoers/visudo.c:809 #, 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:765 +#: plugins/sudoers/visudo.c:820 #, 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:775 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "fel vid namnbyte för %s, %s är oförändrad" -#: plugins/sudoers/visudo.c:796 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "Nu då? " -#: plugins/sudoers/visudo.c:810 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3178,46 +3694,41 @@ 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:856 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "kan inte köra %s" -#: plugins/sudoers/visudo.c:886 +#: plugins/sudoers/visudo.c:938 #, 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:893 +#: plugins/sudoers/visudo.c:949 #, 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:942 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s: tolkad OK\n" -#: plugins/sudoers/visudo.c:968 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s är upptagen, försök igen senare" -#: plugins/sudoers/visudo.c:971 -#, c-format -msgid "unable to lock %s" -msgstr "kan inte låsa %s" - -#: plugins/sudoers/visudo.c:972 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "Redigera ändå? [y/N]" -#: plugins/sudoers/visudo.c:1067 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "Varning: %s:%d:%d: oanvänd %s ”%s”" -#: plugins/sudoers/visudo.c:1183 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3226,13 +3737,14 @@ msgstr "" "%s - redigera sudoers-filen på ett säkert sätt\n" "\n" -#: plugins/sudoers/visudo.c:1185 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" @@ -3242,38 +3754,112 @@ msgstr "" " -c, --check genomför endast kontroller\n" " -f, --file=sudoers ange plats för sudoers-filen\n" " -h, --help visa hjälptext och avsluta\n" +" -I, --no-includes redigera inte include-filer\n" " -q, --quiet mindre utförliga (tysta) syntaxfelmeddelanden\n" " -s, --strict strikt syntaxkontroll\n" " -V, --version visa versionsinformation och avsluta\n" -#: toke.l:187 +#: toke.l:189 msgid "empty string" msgstr "tom sträng" -#: toke.l:199 toke.l:503 +#: toke.l:201 toke.l:571 msgid "empty group" msgstr "tom grupp" -#: toke.l:209 toke.l:501 +#: toke.l:211 toke.l:569 msgid "empty netgroup" msgstr "tom nätgrupp" -#: toke.l:305 toke.l:317 toke.l:329 toke.l:345 toke.l:364 toke.l:404 +#: toke.l:289 +msgid "unterminated regular expression" +msgstr "oavslutat reguljärt uttryck" + +#: toke.l:363 toke.l:375 toke.l:387 toke.l:403 toke.l:422 toke.l:462 msgid "invalid line continuation" msgstr "ogiltig radfortsättning" -#: toke.l:540 toke.l:552 +#: toke.l:608 toke.l:620 msgid "invalid IPv6 address" msgstr "ogiltig IPv6-adress" -#: toke.l:779 +#: toke.l:868 msgid "unexpected line break in string" msgstr "oväntad radbrytning i sträng" -#: toke.l:1109 +#: toke.l:1218 msgid "too many levels of includes" msgstr "för många nivåer av inkluderingar" +#~ msgid "%s:%d unknown key: %s" +#~ msgstr "%s:%d okänd nyckel: %s" + +#~ msgid "%s: write buffer already in use" +#~ msgstr "%s: skrivbuffert används redan" + +#~ msgid "unable to read diffie-hellman parameters: %s" +#~ msgstr "kunde inte läsa diffie-hellman-parametrar: %s" + +#~ msgid "Error: %s:%d:%d: cycle in %s \"%s\"" +#~ msgstr "Fel: %s:%d:%d: cykel i %s ”%s”" + +#~ msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" +#~ msgstr "Varning: %s:%d:%d: cykel i %s ”%s”" + +#~ msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" +#~ msgstr "Fel: %s:%d:%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" + +#~ msgid "parse error in %s near line %d\n" +#~ msgstr "tolkningsfel i %s nära rad %d\n" + +#~ msgid "parse error in %s\n" +#~ msgstr "tolkningsfel i %s\n" + +#~ msgid "%s: unknown defaults entry \"%s\"" +#~ msgstr "%s: okänd standardpost ”%s”" + +#~ msgid "%s:%d:%d: no value specified for \"%s\"" +#~ msgstr "%s:%d:%d: inget värde angivet för ”%s”" + +#~ msgid "%s:%d:%d: option \"%s\" does not take a value" +#~ msgstr "%s:%d:%d: flaggan ”%s” tar inte emot något värde" + +#~ msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" +#~ msgstr "%s:%d:%d: värdet ”%s” är ogiltigt för flaggan ”%s”" + +#~ 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 ”*”" + +#~ 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 ”/”" + +#~ msgid "parse error in %s near line %d" +#~ msgstr "tolkningsfel i %s nära rad %d" + +#~ msgid "parse error in %s" +#~ msgstr "tolkningsfel i %s" + +#~ 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" + +#~ 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" + +#~ msgid "problem with defaults entries" +#~ msgstr "problem med standardposter" + +#~ msgid "%s is group writable" +#~ msgstr "%s är skrivbar för gruppen" + +#~ msgid "lecture status path too long: %s/%s" +#~ msgstr "sökväg för lektionsstatus för lång: %s/%s" + +#~ msgid "internal error, unable to find %s in list!" +#~ msgstr "internt fel, kan inte hitta %s i listan!" + #~ msgid "%s:%u unable to parse \"%s\"" #~ msgstr "%s:%u kan inte tolka ”%s”" @@ -3429,12 +4015,6 @@ msgstr "för många nivåer av inkluderingar" #~ "\n" #~ "SSSD-roll: OKÄND\n" -#~ msgid "Warning: cycle in %s `%s'" -#~ msgstr "Varning: cykel i %s ”%s”" - -#~ msgid "Warning: %s `%s' referenced but not defined" -#~ msgstr "Varning: %s ”%s” refererad till men inte definierad" - #~ msgid "getaudit: failed" #~ msgstr "getaudit: misslyckades" diff --git a/plugins/sudoers/po/uk.mo b/plugins/sudoers/po/uk.mo index 61db982146013e960b96e144ea536cdfdbe465f1..39da58385f68b8dc6475eed43e6a913eba5d4c5a 100644 GIT binary patch delta 16268 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 VZtvpmiplWDxgiI4u5u3-{6Dx~fQJA8 diff --git a/plugins/sudoers/po/uk.po b/plugins/sudoers/po/uk.po index 3612f88033..ae3844bc03 100644 --- a/plugins/sudoers/po/uk.po +++ b/plugins/sudoers/po/uk.po @@ -4,10 +4,10 @@ # Yuri Chornoivan , 2011-2021, 2022. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.11b1\n" +"Project-Id-Version: sudoers 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 12:13+0300\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-11 12:21+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 20.12.0\n" -#: confstr.sh:1 gram.y:1218 +#: confstr.sh:1 gram.y:1220 plugins/sudoers/logging.c:862 msgid "syntax error" msgstr "синтаксична помилка" @@ -42,13 +42,13 @@ msgstr "*** Дані щодо ЗАХИСТУ %h ***" msgid "Sorry, try again." msgstr "Вибачте, повторіть спробу." -#: gram.y:236 gram.y:303 gram.y:312 gram.y:321 gram.y:331 gram.y:341 -#: gram.y:365 gram.y:392 gram.y:401 gram.y:409 gram.y:418 gram.y:427 -#: gram.y:501 gram.y:511 gram.y:523 gram.y:571 gram.y:580 gram.y:589 -#: gram.y:598 gram.y:730 gram.y:738 gram.y:749 gram.y:761 gram.y:780 -#: gram.y:943 gram.y:948 gram.y:956 gram.y:970 gram.y:976 gram.y:1098 -#: gram.y:1107 gram.y:1115 gram.y:1124 gram.y:1133 gram.y:1162 gram.y:1171 -#: gram.y:1179 gram.y:1272 gram.y:1402 gram.y:1769 gram.y:1816 +#: gram.y:237 gram.y:304 gram.y:313 gram.y:322 gram.y:332 gram.y:342 +#: gram.y:366 gram.y:393 gram.y:402 gram.y:410 gram.y:419 gram.y:428 +#: gram.y:502 gram.y:512 gram.y:524 gram.y:572 gram.y:581 gram.y:590 +#: gram.y:599 gram.y:731 gram.y:739 gram.y:750 gram.y:762 gram.y:781 +#: gram.y:944 gram.y:949 gram.y:957 gram.y:971 gram.y:977 gram.y:1099 +#: gram.y:1108 gram.y:1116 gram.y:1125 gram.y:1134 gram.y:1163 gram.y:1172 +#: gram.y:1180 gram.y:1280 gram.y:1410 gram.y:1777 gram.y:1827 #: lib/eventlog/eventlog.c:309 lib/eventlog/eventlog.c:382 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:904 #: lib/eventlog/eventlog.c:1204 lib/iolog/iolog_filter.c:142 @@ -58,50 +58,64 @@ msgstr "Вибачте, повторіть спробу." #: lib/iolog/iolog_legacy.c:100 lib/iolog/iolog_legacy.c:111 #: lib/iolog/iolog_legacy.c:123 lib/iolog/iolog_legacy.c:133 #: lib/iolog/iolog_legacy.c:139 lib/iolog/iolog_loginfo.c:76 -#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:84 -#: logsrvd/iolog_writer.c:89 logsrvd/iolog_writer.c:123 -#: logsrvd/iolog_writer.c:172 logsrvd/iolog_writer.c:212 -#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:261 -#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:301 -#: logsrvd/iolog_writer.c:314 logsrvd/iolog_writer.c:327 -#: logsrvd/iolog_writer.c:340 logsrvd/iolog_writer.c:355 -#: logsrvd/iolog_writer.c:393 logsrvd/iolog_writer.c:399 -#: logsrvd/iolog_writer.c:406 logsrvd/iolog_writer.c:412 -#: logsrvd/iolog_writer.c:596 logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 -#: logsrvd/logsrvd.c:305 logsrvd/logsrvd.c:1012 logsrvd/logsrvd.c:1075 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:203 logsrvd/logsrvd_journal.c:204 -#: logsrvd/logsrvd_journal.c:260 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_journal.c:422 logsrvd/logsrvd_local.c:174 -#: logsrvd/logsrvd_local.c:175 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:238 logsrvd/logsrvd_local.c:376 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:426 -#: logsrvd/logsrvd_local.c:431 logsrvd/logsrvd_local.c:432 -#: logsrvd/logsrvd_queue.c:154 logsrvd/logsrvd_queue.c:184 -#: logsrvd/logsrvd_queue.c:261 logsrvd/logsrvd_relay.c:439 -#: logsrvd/logsrvd_relay.c:738 logsrvd/logsrvd_relay.c:845 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 plugins/sudoers/audit.c:116 -#: plugins/sudoers/auth/bsdauth.c:150 plugins/sudoers/auth/kerb5.c:121 -#: plugins/sudoers/auth/kerb5.c:148 plugins/sudoers/auth/pam.c:687 -#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/check_aliases.c:168 plugins/sudoers/cvtsudoers.c:131 -#: plugins/sudoers/cvtsudoers.c:175 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:203 plugins/sudoers/cvtsudoers.c:333 -#: plugins/sudoers/cvtsudoers.c:372 plugins/sudoers/cvtsudoers.c:392 -#: plugins/sudoers/cvtsudoers.c:537 plugins/sudoers/cvtsudoers.c:670 -#: plugins/sudoers/cvtsudoers.c:688 plugins/sudoers/cvtsudoers.c:862 -#: plugins/sudoers/cvtsudoers.c:870 plugins/sudoers/cvtsudoers.c:1365 -#: plugins/sudoers/cvtsudoers.c:1369 plugins/sudoers/cvtsudoers.c:1471 -#: plugins/sudoers/cvtsudoers_csv.c:183 plugins/sudoers/cvtsudoers_csv.c:246 -#: 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:376 -#: plugins/sudoers/cvtsudoers_ldif.c:430 plugins/sudoers/cvtsudoers_ldif.c:438 -#: plugins/sudoers/cvtsudoers_ldif.c:449 plugins/sudoers/cvtsudoers_ldif.c:456 -#: plugins/sudoers/cvtsudoers_ldif.c:468 plugins/sudoers/cvtsudoers_ldif.c:481 -#: plugins/sudoers/cvtsudoers_ldif.c:489 plugins/sudoers/cvtsudoers_ldif.c:636 -#: plugins/sudoers/cvtsudoers_merge.c:47 plugins/sudoers/cvtsudoers_merge.c:52 +#: lib/iolog/iolog_loginfo.c:212 logsrvd/iolog_writer.c:95 +#: logsrvd/iolog_writer.c:100 logsrvd/iolog_writer.c:134 +#: logsrvd/iolog_writer.c:182 logsrvd/iolog_writer.c:215 +#: logsrvd/iolog_writer.c:225 logsrvd/iolog_writer.c:254 +#: logsrvd/iolog_writer.c:275 logsrvd/iolog_writer.c:287 +#: logsrvd/iolog_writer.c:297 logsrvd/iolog_writer.c:307 +#: logsrvd/iolog_writer.c:317 logsrvd/iolog_writer.c:329 +#: logsrvd/iolog_writer.c:364 logsrvd/iolog_writer.c:370 +#: logsrvd/iolog_writer.c:377 logsrvd/iolog_writer.c:383 +#: logsrvd/iolog_writer.c:567 logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 +#: logsrvd/logsrvd.c:310 logsrvd/logsrvd.c:1050 logsrvd/logsrvd.c:1113 +#: logsrvd/logsrvd.c:1582 logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 +#: logsrvd/logsrvd.c:1988 logsrvd/logsrvd_conf.c:357 +#: logsrvd/logsrvd_conf.c:370 logsrvd/logsrvd_conf.c:511 +#: logsrvd/logsrvd_conf.c:534 logsrvd/logsrvd_conf.c:538 +#: logsrvd/logsrvd_conf.c:556 logsrvd/logsrvd_conf.c:626 +#: logsrvd/logsrvd_conf.c:650 logsrvd/logsrvd_conf.c:678 +#: logsrvd/logsrvd_conf.c:692 logsrvd/logsrvd_conf.c:706 +#: logsrvd/logsrvd_conf.c:720 logsrvd/logsrvd_conf.c:734 +#: logsrvd/logsrvd_conf.c:748 logsrvd/logsrvd_conf.c:829 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1053 +#: logsrvd/logsrvd_conf.c:1448 logsrvd/logsrvd_conf.c:1595 +#: logsrvd/logsrvd_conf.c:1621 logsrvd/logsrvd_conf.c:1633 +#: logsrvd/logsrvd_conf.c:1640 logsrvd/logsrvd_conf.c:1646 +#: logsrvd/logsrvd_conf.c:1743 logsrvd/logsrvd_journal.c:75 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:214 +#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:432 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:216 logsrvd/logsrvd_local.c:278 +#: logsrvd/logsrvd_local.c:279 logsrvd/logsrvd_local.c:417 +#: logsrvd/logsrvd_local.c:466 logsrvd/logsrvd_local.c:467 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:473 +#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/logsrvd_relay.c:444 +#: logsrvd/logsrvd_relay.c:743 logsrvd/logsrvd_relay.c:850 +#: logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 logsrvd/sendlog.c:291 +#: logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 logsrvd/sendlog.c:1801 +#: plugins/sudoers/audit.c:116 plugins/sudoers/auth/bsdauth.c:150 +#: plugins/sudoers/auth/kerb5.c:121 plugins/sudoers/auth/kerb5.c:148 +#: plugins/sudoers/auth/pam.c:687 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/check_aliases.c:168 +#: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:192 plugins/sudoers/cvtsudoers.c:203 +#: plugins/sudoers/cvtsudoers.c:333 plugins/sudoers/cvtsudoers.c:372 +#: plugins/sudoers/cvtsudoers.c:392 plugins/sudoers/cvtsudoers.c:537 +#: plugins/sudoers/cvtsudoers.c:670 plugins/sudoers/cvtsudoers.c:688 +#: plugins/sudoers/cvtsudoers.c:862 plugins/sudoers/cvtsudoers.c:870 +#: plugins/sudoers/cvtsudoers.c:1365 plugins/sudoers/cvtsudoers.c:1369 +#: plugins/sudoers/cvtsudoers.c:1471 plugins/sudoers/cvtsudoers_csv.c:183 +#: plugins/sudoers/cvtsudoers_csv.c:246 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:376 plugins/sudoers/cvtsudoers_ldif.c:430 +#: plugins/sudoers/cvtsudoers_ldif.c:438 plugins/sudoers/cvtsudoers_ldif.c:449 +#: plugins/sudoers/cvtsudoers_ldif.c:456 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:481 plugins/sudoers/cvtsudoers_ldif.c:489 +#: plugins/sudoers/cvtsudoers_ldif.c:636 plugins/sudoers/cvtsudoers_merge.c:47 +#: plugins/sudoers/cvtsudoers_merge.c:52 #: plugins/sudoers/cvtsudoers_merge.c:353 #: plugins/sudoers/cvtsudoers_merge.c:399 #: plugins/sudoers/cvtsudoers_merge.c:446 @@ -111,11 +125,11 @@ msgstr "Вибачте, повторіть спробу." #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1158 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:228 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -124,124 +138,125 @@ msgstr "Вибачте, повторіть спробу." #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:688 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:294 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:689 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:294 #: plugins/sudoers/ldap_util.c:301 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:397 plugins/sudoers/log_client.c:710 -#: plugins/sudoers/log_client.c:731 plugins/sudoers/log_client.c:1451 -#: plugins/sudoers/log_client.c:1672 plugins/sudoers/log_client.c:2003 -#: plugins/sudoers/log_client.c:2059 plugins/sudoers/logging.c:112 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/match_command.c:333 plugins/sudoers/match_command.c:594 -#: plugins/sudoers/match_command.c:645 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:767 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:227 plugins/sudoers/parse.c:244 -#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:282 -#: plugins/sudoers/parse.c:299 plugins/sudoers/parse.c:322 -#: plugins/sudoers/parse.c:333 plugins/sudoers/parse_ldif.c:153 -#: plugins/sudoers/parse_ldif.c:184 plugins/sudoers/parse_ldif.c:253 -#: plugins/sudoers/parse_ldif.c:261 plugins/sudoers/parse_ldif.c:266 -#: plugins/sudoers/parse_ldif.c:342 plugins/sudoers/parse_ldif.c:353 -#: plugins/sudoers/parse_ldif.c:380 plugins/sudoers/parse_ldif.c:397 -#: plugins/sudoers/parse_ldif.c:409 plugins/sudoers/parse_ldif.c:413 -#: plugins/sudoers/parse_ldif.c:427 plugins/sudoers/parse_ldif.c:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:627 -#: plugins/sudoers/parse_ldif.c:652 plugins/sudoers/parse_ldif.c:710 -#: plugins/sudoers/parse_ldif.c:727 plugins/sudoers/parse_ldif.c:755 -#: plugins/sudoers/parse_ldif.c:762 plugins/sudoers/policy.c:606 -#: plugins/sudoers/policy.c:998 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:587 plugins/sudoers/pwutil.c:659 -#: plugins/sudoers/pwutil.c:857 plugins/sudoers/pwutil.c:913 -#: plugins/sudoers/pwutil.c:957 plugins/sudoers/pwutil.c:1014 -#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:185 -#: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 -#: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 -#: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:715 +#: plugins/sudoers/log_client.c:736 plugins/sudoers/log_client.c:1416 +#: plugins/sudoers/log_client.c:1537 plugins/sudoers/log_client.c:1637 +#: plugins/sudoers/log_client.c:1973 plugins/sudoers/log_client.c:2032 +#: plugins/sudoers/logging.c:110 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/match_command.c:335 +#: plugins/sudoers/match_command.c:603 plugins/sudoers/match_command.c:654 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:776 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:227 +#: plugins/sudoers/parse.c:244 plugins/sudoers/parse.c:263 +#: plugins/sudoers/parse.c:282 plugins/sudoers/parse.c:299 +#: plugins/sudoers/parse.c:322 plugins/sudoers/parse.c:333 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:261 +#: plugins/sudoers/parse_ldif.c:266 plugins/sudoers/parse_ldif.c:342 +#: plugins/sudoers/parse_ldif.c:353 plugins/sudoers/parse_ldif.c:380 +#: plugins/sudoers/parse_ldif.c:397 plugins/sudoers/parse_ldif.c:409 +#: plugins/sudoers/parse_ldif.c:413 plugins/sudoers/parse_ldif.c:427 +#: plugins/sudoers/parse_ldif.c:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:628 plugins/sudoers/parse_ldif.c:653 +#: plugins/sudoers/parse_ldif.c:711 plugins/sudoers/parse_ldif.c:728 +#: plugins/sudoers/parse_ldif.c:756 plugins/sudoers/parse_ldif.c:763 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 +#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 +#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 +#: plugins/sudoers/pwutil.c:659 plugins/sudoers/pwutil.c:857 +#: plugins/sudoers/pwutil.c:913 plugins/sudoers/pwutil.c:957 +#: plugins/sudoers/pwutil.c:1014 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:185 plugins/sudoers/sssd.c:414 +#: plugins/sudoers/sssd.c:479 plugins/sudoers/sssd.c:505 +#: plugins/sudoers/sssd.c:568 plugins/sudoers/sssd.c:761 +#: plugins/sudoers/strvec_join.c:53 plugins/sudoers/stubs.c:112 +#: plugins/sudoers/stubs.c:120 plugins/sudoers/sudoers.c:354 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:457 plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:827 plugins/sudoers/sudoers.c:877 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/sudoers.c:1075 +#: plugins/sudoers/sudoers.c:1330 plugins/sudoers/sudoreplay.c:562 #: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 #: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 #: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 +#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:588 +#: plugins/sudoers/timestamp.c:451 plugins/sudoers/timestamp.c:495 +#: plugins/sudoers/timestamp.c:1017 plugins/sudoers/timestamp.c:1146 #: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 #: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:161 #: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1226 +#: plugins/sudoers/visudo.c:150 plugins/sudoers/visudo.c:385 +#: plugins/sudoers/visudo.c:391 plugins/sudoers/visudo.c:498 +#: plugins/sudoers/visudo.c:1054 toke.l:1023 toke.l:1155 toke.l:1226 msgid "unable to allocate memory" msgstr "не вдалося отримати потрібний об’єм пам’яті" -#: gram.y:622 +#: gram.y:623 msgid "a digest requires a path name" msgstr "для контрольної суми слід вказати шлях" -#: gram.y:644 +#: gram.y:645 msgid "values for \"CWD\" must start with a '/', '~', or '*'" msgstr "значення «CWD» мають починатися з «/», «~» або «*»" -#: gram.y:650 +#: gram.y:651 msgid "\"CWD\" path too long" msgstr "Шлях «CWD» є надто довгим" -#: gram.y:660 +#: gram.y:661 msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" msgstr "значення «CHROOT» мають починатися з «/», «~» або «*»" -#: gram.y:666 +#: gram.y:667 msgid "\"CHROOT\" path too long" msgstr "Шлях «CHROOT» є надто довгим" -#: gram.y:801 +#: gram.y:802 #, c-format msgid "syntax error, reserved word %s used as an alias name" msgstr "синтаксична помилка, як назву замінника використано зарезервоване слово %s" -#: gram.y:824 +#: gram.y:825 msgid "invalid notbefore value" msgstr "некоректне значення notbefore" -#: gram.y:833 +#: gram.y:834 msgid "invalid notafter value" msgstr "некоректне значення notafter" -#: gram.y:843 plugins/sudoers/policy.c:376 +#: gram.y:844 plugins/sudoers/policy.c:383 msgid "timeout value too large" msgstr "значення часу очікування є надто великим" -#: gram.y:845 plugins/sudoers/policy.c:378 +#: gram.y:846 plugins/sudoers/policy.c:385 msgid "invalid timeout value" msgstr "некоректне значення часу очікування" -#: gram.y:966 plugins/sudoers/sudoers.c:1014 +#: gram.y:967 plugins/sudoers/sudoers.c:1033 msgid "command too long" msgstr "надто довга команда" -#: gram.y:1220 plugins/sudoers/check_aliases.c:96 -#: plugins/sudoers/defaults.c:1275 +#: gram.y:1224 plugins/sudoers/check_aliases.c:96 +#: plugins/sudoers/defaults.c:1276 #, c-format msgid "%s:%d:%d: %s\n" msgstr "%s:%d:%d: %s\n" -#: gram.y:1270 +#: gram.y:1278 #, c-format msgid "Alias \"%s\" already defined" msgstr "Замінник «%s» вже визначено" -#: gram.y:1769 gram.y:1816 lib/eventlog/eventlog.c:309 +#: gram.y:1777 gram.y:1827 lib/eventlog/eventlog.c:309 #: lib/eventlog/eventlog.c:827 lib/eventlog/eventlog.c:900 #: lib/eventlog/eventlog.c:903 lib/eventlog/eventlog.c:1204 #: lib/iolog/iolog_filter.c:142 lib/iolog/iolog_filter.c:202 @@ -251,33 +266,48 @@ msgstr "Замінник «%s» вже визначено" #: lib/iolog/iolog_legacy.c:111 lib/iolog/iolog_legacy.c:123 #: lib/iolog/iolog_legacy.c:133 lib/iolog/iolog_legacy.c:139 #: lib/iolog/iolog_loginfo.c:76 lib/iolog/iolog_loginfo.c:212 -#: logsrvd/iolog_writer.c:84 logsrvd/iolog_writer.c:89 -#: logsrvd/iolog_writer.c:123 logsrvd/iolog_writer.c:162 -#: logsrvd/iolog_writer.c:171 logsrvd/iolog_writer.c:189 -#: logsrvd/iolog_writer.c:211 logsrvd/iolog_writer.c:224 -#: logsrvd/iolog_writer.c:251 logsrvd/iolog_writer.c:260 -#: logsrvd/iolog_writer.c:276 logsrvd/iolog_writer.c:285 -#: logsrvd/iolog_writer.c:300 logsrvd/iolog_writer.c:313 -#: logsrvd/iolog_writer.c:326 logsrvd/iolog_writer.c:339 -#: logsrvd/iolog_writer.c:354 logsrvd/iolog_writer.c:393 -#: logsrvd/iolog_writer.c:399 logsrvd/iolog_writer.c:406 -#: logsrvd/iolog_writer.c:412 logsrvd/iolog_writer.c:596 -#: logsrvd/logsrv_util.c:64 logsrvd/logsrvd.c:296 logsrvd/logsrvd.c:305 -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:593 -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1403 logsrvd/logsrvd.c:1410 -#: logsrvd/logsrvd_conf.c:1443 logsrvd/logsrvd_journal.c:70 -#: logsrvd/logsrvd_journal.c:114 logsrvd/logsrvd_journal.c:203 -#: logsrvd/logsrvd_journal.c:233 logsrvd/logsrvd_journal.c:237 -#: logsrvd/logsrvd_journal.c:245 logsrvd/logsrvd_journal.c:268 -#: logsrvd/logsrvd_journal.c:272 logsrvd/logsrvd_journal.c:420 -#: logsrvd/logsrvd_local.c:174 logsrvd/logsrvd_local.c:237 -#: logsrvd/logsrvd_local.c:425 logsrvd/logsrvd_local.c:431 -#: logsrvd/logsrvd_local.c:450 logsrvd/logsrvd_queue.c:153 -#: logsrvd/logsrvd_queue.c:184 logsrvd/logsrvd_queue.c:261 -#: logsrvd/sendlog.c:246 logsrvd/sendlog.c:255 logsrvd/sendlog.c:333 -#: logsrvd/sendlog.c:640 logsrvd/sendlog.c:1526 logsrvd/sendlog.c:1533 -#: logsrvd/sendlog.c:1756 logsrvd/tls_init.c:299 logsrvd/tls_init.c:323 -#: logsrvd/tls_init.c:334 plugins/sudoers/audit.c:116 +#: logsrvd/iolog_writer.c:95 logsrvd/iolog_writer.c:100 +#: logsrvd/iolog_writer.c:134 logsrvd/iolog_writer.c:171 +#: logsrvd/iolog_writer.c:181 logsrvd/iolog_writer.c:194 +#: logsrvd/iolog_writer.c:214 logsrvd/iolog_writer.c:224 +#: logsrvd/iolog_writer.c:243 logsrvd/iolog_writer.c:253 +#: logsrvd/iolog_writer.c:264 logsrvd/iolog_writer.c:274 +#: logsrvd/iolog_writer.c:286 logsrvd/iolog_writer.c:296 +#: logsrvd/iolog_writer.c:306 logsrvd/iolog_writer.c:316 +#: logsrvd/iolog_writer.c:328 logsrvd/iolog_writer.c:364 +#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:377 +#: logsrvd/iolog_writer.c:383 logsrvd/iolog_writer.c:567 +#: logsrvd/logsrv_util.c:69 logsrvd/logsrvd.c:301 logsrvd/logsrvd.c:310 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:522 +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:660 +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:1124 +#: logsrvd/logsrvd.c:1439 logsrvd/logsrvd.c:1446 logsrvd/logsrvd.c:1582 +#: logsrvd/logsrvd.c:1587 logsrvd/logsrvd.c:1771 logsrvd/logsrvd.c:1988 +#: logsrvd/logsrvd_conf.c:357 logsrvd/logsrvd_conf.c:370 +#: logsrvd/logsrvd_conf.c:511 logsrvd/logsrvd_conf.c:534 +#: logsrvd/logsrvd_conf.c:538 logsrvd/logsrvd_conf.c:556 +#: logsrvd/logsrvd_conf.c:626 logsrvd/logsrvd_conf.c:649 +#: logsrvd/logsrvd_conf.c:678 logsrvd/logsrvd_conf.c:692 +#: logsrvd/logsrvd_conf.c:706 logsrvd/logsrvd_conf.c:720 +#: logsrvd/logsrvd_conf.c:734 logsrvd/logsrvd_conf.c:748 +#: logsrvd/logsrvd_conf.c:829 logsrvd/logsrvd_conf.c:1036 +#: logsrvd/logsrvd_conf.c:1053 logsrvd/logsrvd_conf.c:1448 +#: logsrvd/logsrvd_conf.c:1595 logsrvd/logsrvd_conf.c:1621 +#: logsrvd/logsrvd_conf.c:1633 logsrvd/logsrvd_conf.c:1640 +#: logsrvd/logsrvd_conf.c:1646 logsrvd/logsrvd_conf.c:1742 +#: logsrvd/logsrvd_journal.c:75 logsrvd/logsrvd_journal.c:122 +#: logsrvd/logsrvd_journal.c:213 logsrvd/logsrvd_journal.c:243 +#: logsrvd/logsrvd_journal.c:247 logsrvd/logsrvd_journal.c:255 +#: logsrvd/logsrvd_journal.c:278 logsrvd/logsrvd_journal.c:282 +#: logsrvd/logsrvd_journal.c:430 logsrvd/logsrvd_local.c:215 +#: logsrvd/logsrvd_local.c:278 logsrvd/logsrvd_local.c:466 +#: logsrvd/logsrvd_local.c:472 logsrvd/logsrvd_local.c:491 +#: logsrvd/logsrvd_queue.c:158 logsrvd/logsrvd_queue.c:189 +#: logsrvd/logsrvd_queue.c:266 logsrvd/sendlog.c:251 logsrvd/sendlog.c:260 +#: logsrvd/sendlog.c:291 logsrvd/sendlog.c:338 logsrvd/sendlog.c:615 +#: logsrvd/sendlog.c:1503 logsrvd/sendlog.c:1510 logsrvd/sendlog.c:1733 +#: logsrvd/sendlog.c:1801 logsrvd/tls_init.c:305 logsrvd/tls_init.c:329 +#: logsrvd/tls_init.c:340 plugins/sudoers/audit.c:116 #: plugins/sudoers/auth/pam.c:502 plugins/sudoers/auth/pam.c:687 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/check_aliases.c:168 #: plugins/sudoers/cvtsudoers.c:131 plugins/sudoers/cvtsudoers.c:174 @@ -307,11 +337,11 @@ msgstr "Замінник «%s» вже визначено" #: plugins/sudoers/cvtsudoers_merge.c:633 #: plugins/sudoers/cvtsudoers_merge.c:1157 #: plugins/sudoers/cvtsudoers_merge.c:1231 plugins/sudoers/defaults.c:434 -#: plugins/sudoers/defaults.c:657 plugins/sudoers/defaults.c:1018 -#: plugins/sudoers/defaults.c:1186 plugins/sudoers/editor.c:190 -#: plugins/sudoers/env.c:262 plugins/sudoers/exptilde.c:92 +#: plugins/sudoers/defaults.c:658 plugins/sudoers/defaults.c:1019 +#: plugins/sudoers/defaults.c:1187 plugins/sudoers/editor.c:188 +#: plugins/sudoers/env.c:263 plugins/sudoers/exptilde.c:92 #: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/gc.c:57 plugins/sudoers/group_plugin.c:227 #: plugins/sudoers/interfaces.c:68 plugins/sudoers/iolog.c:268 #: plugins/sudoers/iolog.c:668 plugins/sudoers/iolog.c:694 #: plugins/sudoers/ldap.c:184 plugins/sudoers/ldap.c:464 @@ -320,46 +350,47 @@ msgstr "Замінник «%s» вже визначено" #: plugins/sudoers/ldap.c:1798 plugins/sudoers/ldap.c:1879 #: plugins/sudoers/ldap.c:2014 plugins/sudoers/ldap.c:2115 #: plugins/sudoers/ldap.c:2131 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:443 -#: plugins/sudoers/ldap_conf.c:458 plugins/sudoers/ldap_conf.c:563 -#: plugins/sudoers/ldap_conf.c:596 plugins/sudoers/ldap_conf.c:687 -#: plugins/sudoers/ldap_conf.c:770 plugins/sudoers/ldap_util.c:293 +#: plugins/sudoers/ldap_conf.c:250 plugins/sudoers/ldap_conf.c:302 +#: plugins/sudoers/ldap_conf.c:338 plugins/sudoers/ldap_conf.c:444 +#: plugins/sudoers/ldap_conf.c:459 plugins/sudoers/ldap_conf.c:564 +#: plugins/sudoers/ldap_conf.c:597 plugins/sudoers/ldap_conf.c:688 +#: plugins/sudoers/ldap_conf.c:771 plugins/sudoers/ldap_util.c:293 #: plugins/sudoers/ldap_util.c:300 plugins/sudoers/ldap_util.c:614 -#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:112 -#: plugins/sudoers/log_client.c:223 plugins/sudoers/log_client.c:245 -#: plugins/sudoers/log_client.c:259 plugins/sudoers/log_client.c:397 -#: plugins/sudoers/log_client.c:710 plugins/sudoers/log_client.c:731 -#: plugins/sudoers/log_client.c:1451 plugins/sudoers/log_client.c:1672 -#: plugins/sudoers/log_client.c:2003 plugins/sudoers/log_client.c:2059 -#: plugins/sudoers/logging.c:112 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:193 plugins/sudoers/logging.c:461 -#: plugins/sudoers/logging.c:675 plugins/sudoers/logging.c:812 -#: plugins/sudoers/logging.c:882 plugins/sudoers/logging.c:894 -#: plugins/sudoers/match_command.c:332 plugins/sudoers/match_command.c:593 -#: plugins/sudoers/match_command.c:644 plugins/sudoers/match_command.c:719 -#: plugins/sudoers/match_command.c:766 plugins/sudoers/match_digest.c:93 -#: plugins/sudoers/parse.c:226 plugins/sudoers/parse.c:243 -#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:281 -#: plugins/sudoers/parse.c:298 plugins/sudoers/parse.c:321 -#: plugins/sudoers/parse.c:332 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: 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:484 -#: plugins/sudoers/parse_ldif.c:597 plugins/sudoers/parse_ldif.c:626 -#: plugins/sudoers/parse_ldif.c:651 plugins/sudoers/parse_ldif.c:709 -#: plugins/sudoers/parse_ldif.c:726 plugins/sudoers/parse_ldif.c:754 -#: plugins/sudoers/parse_ldif.c:761 plugins/sudoers/policy.c:152 -#: plugins/sudoers/policy.c:161 plugins/sudoers/policy.c:170 -#: plugins/sudoers/policy.c:198 plugins/sudoers/policy.c:361 -#: plugins/sudoers/policy.c:376 plugins/sudoers/policy.c:378 -#: plugins/sudoers/policy.c:414 plugins/sudoers/policy.c:423 -#: plugins/sudoers/policy.c:471 plugins/sudoers/policy.c:481 +#: plugins/sudoers/linux_audit.c:86 plugins/sudoers/log_client.c:117 +#: plugins/sudoers/log_client.c:228 plugins/sudoers/log_client.c:250 +#: plugins/sudoers/log_client.c:264 plugins/sudoers/log_client.c:402 +#: plugins/sudoers/log_client.c:715 plugins/sudoers/log_client.c:736 +#: plugins/sudoers/log_client.c:1416 plugins/sudoers/log_client.c:1537 +#: plugins/sudoers/log_client.c:1637 plugins/sudoers/log_client.c:1973 +#: plugins/sudoers/log_client.c:2032 plugins/sudoers/logging.c:110 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:189 +#: plugins/sudoers/logging.c:453 plugins/sudoers/logging.c:668 +#: plugins/sudoers/logging.c:805 plugins/sudoers/logging.c:876 +#: plugins/sudoers/logging.c:888 plugins/sudoers/match_command.c:334 +#: plugins/sudoers/match_command.c:602 plugins/sudoers/match_command.c:653 +#: plugins/sudoers/match_command.c:728 plugins/sudoers/match_command.c:775 +#: plugins/sudoers/match_digest.c:93 plugins/sudoers/parse.c:226 +#: plugins/sudoers/parse.c:243 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:281 plugins/sudoers/parse.c:298 +#: plugins/sudoers/parse.c:321 plugins/sudoers/parse.c:332 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 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:484 plugins/sudoers/parse_ldif.c:598 +#: plugins/sudoers/parse_ldif.c:627 plugins/sudoers/parse_ldif.c:652 +#: plugins/sudoers/parse_ldif.c:710 plugins/sudoers/parse_ldif.c:727 +#: plugins/sudoers/parse_ldif.c:755 plugins/sudoers/parse_ldif.c:762 +#: plugins/sudoers/policy.c:153 plugins/sudoers/policy.c:162 +#: plugins/sudoers/policy.c:171 plugins/sudoers/policy.c:199 +#: plugins/sudoers/policy.c:368 plugins/sudoers/policy.c:383 +#: plugins/sudoers/policy.c:385 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:480 #: plugins/sudoers/policy.c:490 plugins/sudoers/policy.c:499 -#: plugins/sudoers/policy.c:606 plugins/sudoers/policy.c:998 +#: plugins/sudoers/policy.c:508 plugins/sudoers/policy.c:517 +#: plugins/sudoers/policy.c:624 plugins/sudoers/policy.c:1026 #: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:199 #: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 #: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:587 @@ -372,25 +403,25 @@ msgstr "Замінник «%s» вже визначено" #: plugins/sudoers/sssd.c:414 plugins/sudoers/sssd.c:479 #: plugins/sudoers/sssd.c:505 plugins/sudoers/sssd.c:568 #: plugins/sudoers/sssd.c:761 plugins/sudoers/strvec_join.c:53 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/stubs.c:119 -#: plugins/sudoers/sudoers.c:349 plugins/sudoers/sudoers.c:375 -#: plugins/sudoers/sudoers.c:443 plugins/sudoers/sudoers.c:452 -#: plugins/sudoers/sudoers.c:493 plugins/sudoers/sudoers.c:858 -#: plugins/sudoers/sudoers.c:996 plugins/sudoers/sudoers.c:1055 -#: plugins/sudoers/sudoers.c:1320 plugins/sudoers/sudoreplay.c:562 -#: plugins/sudoers/sudoreplay.c:565 plugins/sudoers/sudoreplay.c:1281 -#: plugins/sudoers/sudoreplay.c:1503 plugins/sudoers/sudoreplay.c:1507 -#: plugins/sudoers/testsudoers.c:120 plugins/sudoers/testsudoers.c:224 -#: plugins/sudoers/testsudoers.c:241 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:424 plugins/sudoers/timestamp.c:468 -#: plugins/sudoers/timestamp.c:980 plugins/sudoers/timestamp.c:1118 -#: plugins/sudoers/toke_util.c:78 plugins/sudoers/toke_util.c:106 -#: plugins/sudoers/toke_util.c:131 plugins/sudoers/toke_util.c:160 -#: plugins/sudoers/toke_util.c:200 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:148 plugins/sudoers/visudo.c:380 -#: plugins/sudoers/visudo.c:386 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:1048 toke.l:1023 toke.l:1155 toke.l:1218 -#: toke.l:1226 +#: plugins/sudoers/stubs.c:112 plugins/sudoers/stubs.c:120 +#: plugins/sudoers/sudoers.c:354 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:457 +#: plugins/sudoers/sudoers.c:498 plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:877 plugins/sudoers/sudoers.c:1015 +#: plugins/sudoers/sudoers.c:1075 plugins/sudoers/sudoers.c:1330 +#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:565 +#: plugins/sudoers/sudoreplay.c:1281 plugins/sudoers/sudoreplay.c:1503 +#: plugins/sudoers/sudoreplay.c:1507 plugins/sudoers/testsudoers.c:120 +#: plugins/sudoers/testsudoers.c:224 plugins/sudoers/testsudoers.c:241 +#: plugins/sudoers/testsudoers.c:588 plugins/sudoers/timestamp.c:451 +#: plugins/sudoers/timestamp.c:495 plugins/sudoers/timestamp.c:1017 +#: plugins/sudoers/timestamp.c:1146 plugins/sudoers/toke_util.c:78 +#: plugins/sudoers/toke_util.c:106 plugins/sudoers/toke_util.c:131 +#: plugins/sudoers/toke_util.c:160 plugins/sudoers/toke_util.c:200 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:150 +#: plugins/sudoers/visudo.c:385 plugins/sudoers/visudo.c:391 +#: plugins/sudoers/visudo.c:498 plugins/sudoers/visudo.c:1054 toke.l:1023 +#: toke.l:1155 toke.l:1218 toke.l:1226 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -399,14 +430,14 @@ msgstr "%s: %s" #: lib/iolog/iolog_json.c:568 lib/iolog/iolog_json.c:574 #: plugins/sudoers/cvtsudoers_csv.c:192 plugins/sudoers/cvtsudoers_csv.c:199 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:326 -#: plugins/sudoers/env.c:333 plugins/sudoers/env.c:444 +#: plugins/sudoers/cvtsudoers_ldif.c:592 plugins/sudoers/env.c:340 +#: plugins/sudoers/env.c:347 plugins/sudoers/env.c:458 #: plugins/sudoers/ldap.c:526 plugins/sudoers/ldap.c:759 #: plugins/sudoers/ldap.c:1132 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/ldap_util.c:486 -#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:465 -#: plugins/sudoers/logging.c:820 plugins/sudoers/logging.c:830 -#: plugins/sudoers/policy.c:776 plugins/sudoers/policy.c:787 +#: plugins/sudoers/ldap_conf.c:313 plugins/sudoers/ldap_util.c:486 +#: plugins/sudoers/linux_audit.c:92 plugins/sudoers/logging.c:457 +#: plugins/sudoers/logging.c:813 plugins/sudoers/logging.c:823 +#: plugins/sudoers/policy.c:800 plugins/sudoers/policy.c:811 #: plugins/sudoers/prompt.c:168 plugins/sudoers/serialize_list.c:62 #: plugins/sudoers/serialize_list.c:71 plugins/sudoers/strvec_join.c:62 #: plugins/sudoers/testsudoers.c:245 plugins/sudoers/toke_util.c:213 @@ -449,7 +480,7 @@ msgstr "%8s : %s" msgid "%8s : (command continued) %s" msgstr "%8s : (команда продовжується) %s" -#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1241 +#: lib/iolog/iolog_filter.c:133 plugins/sudoers/defaults.c:1242 #: plugins/sudoers/sudoreplay.c:1293 plugins/sudoers/sudoreplay.c:1558 #, c-format msgid "invalid regular expression \"%s\": %s" @@ -564,14 +595,14 @@ msgstr "%s: не вказано даних щодо групи, від імен msgid "%s exists but is not a directory (0%o)" msgstr "%s існує, але не є каталогом (0%o)" -#: lib/iolog/iolog_mkdirs.c:119 lib/iolog/iolog_mkdtemp.c:77 -#: logsrvd/iolog_writer.c:810 plugins/sudoers/timestamp.c:205 +#: lib/iolog/iolog_mkdirs.c:123 lib/iolog/iolog_mkdtemp.c:78 +#: logsrvd/iolog_writer.c:781 plugins/sudoers/timestamp.c:209 #, c-format msgid "unable to mkdir %s" msgstr "не вдалося створити каталог %s" -#: lib/iolog/iolog_mkdtemp.c:81 plugins/sudoers/visudo.c:747 -#: plugins/sudoers/visudo.c:781 plugins/sudoers/visudo.c:787 +#: lib/iolog/iolog_mkdtemp.c:83 plugins/sudoers/visudo.c:753 +#: plugins/sudoers/visudo.c:787 plugins/sudoers/visudo.c:793 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не вдалося змінити режим доступу до %s на значення 0%o" @@ -586,150 +617,156 @@ msgstr "помилка під час спроби читання файла ча msgid "invalid timing file line: %s" msgstr "некоректний рядок у файлі timing: %s" -#: logsrvd/iolog_writer.c:130 plugins/sudoers/logging.c:982 -#: plugins/sudoers/policy.c:573 -msgid "unable to generate UUID" -msgstr "не вдалося створити UUID" +#: logsrvd/iolog_writer.c:65 +#, c-format +msgid "%s: protocol error: NULL key" +msgstr "%s: помилка протоколу: ключ NULL" -#: logsrvd/iolog_writer.c:158 logsrvd/iolog_writer.c:176 -#: logsrvd/iolog_writer.c:185 logsrvd/iolog_writer.c:203 -#: logsrvd/iolog_writer.c:216 logsrvd/iolog_writer.c:229 -#: logsrvd/iolog_writer.c:240 logsrvd/iolog_writer.c:247 -#: logsrvd/iolog_writer.c:265 logsrvd/iolog_writer.c:272 -#: logsrvd/iolog_writer.c:290 logsrvd/iolog_writer.c:305 -#: logsrvd/iolog_writer.c:318 logsrvd/iolog_writer.c:331 -#: logsrvd/iolog_writer.c:344 logsrvd/iolog_writer.c:359 +#: logsrvd/iolog_writer.c:69 #, c-format msgid "%s: protocol error: wrong type for %s" msgstr "%s: помилка протоколу: помилковий тип для %s" -#: logsrvd/iolog_writer.c:370 logsrvd/iolog_writer.c:375 -#: logsrvd/iolog_writer.c:380 logsrvd/iolog_writer.c:385 +#: logsrvd/iolog_writer.c:74 logsrvd/logsrvd_local.c:109 +#: logsrvd/logsrvd_local.c:123 logsrvd/logsrvd_local.c:131 +#: logsrvd/logsrvd_local.c:149 +#, c-format +msgid "%s: protocol error: NULL value found in %s" +msgstr "%s: помилка протоколу: виявлено значення NULL у %s" + +#: logsrvd/iolog_writer.c:141 plugins/sudoers/logging.c:976 +#: plugins/sudoers/policy.c:591 +msgid "unable to generate UUID" +msgstr "не вдалося створити UUID" + +#: logsrvd/iolog_writer.c:341 logsrvd/iolog_writer.c:346 +#: logsrvd/iolog_writer.c:351 logsrvd/iolog_writer.c:356 #, c-format msgid "%s: protocol error: %s missing from AcceptMessage" msgstr "%s: помилка протоколу: не вистачає %s з AcceptMessage" -#: logsrvd/iolog_writer.c:446 +#: logsrvd/iolog_writer.c:417 #, c-format msgid "%s: unable to format session id" msgstr "%s: не вдалося виконати форматування ідентифікатора сеансу" -#: logsrvd/iolog_writer.c:460 logsrvd/iolog_writer.c:474 -#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:503 -#: logsrvd/iolog_writer.c:517 logsrvd/iolog_writer.c:531 +#: logsrvd/iolog_writer.c:431 logsrvd/iolog_writer.c:445 +#: logsrvd/iolog_writer.c:459 logsrvd/iolog_writer.c:474 +#: logsrvd/iolog_writer.c:488 logsrvd/iolog_writer.c:502 #, c-format msgid "%s: %s is not set" msgstr "%s: %s не встановлено" -#: logsrvd/iolog_writer.c:567 logsrvd/iolog_writer.c:574 +#: logsrvd/iolog_writer.c:538 logsrvd/iolog_writer.c:545 #, c-format msgid "unable to expand iolog path %s" msgstr "не вдалося розгорнути шлях iolog %s" -#: logsrvd/iolog_writer.c:592 +#: logsrvd/iolog_writer.c:563 #, c-format msgid "unable to create iolog path %s" msgstr "не вдалося створити шлях iolog %s" -#: logsrvd/iolog_writer.c:622 +#: logsrvd/iolog_writer.c:593 #, c-format msgid "invalid iofd %d" msgstr "некоректний файловий дескриптор введення-виведення %d" -#: logsrvd/iolog_writer.c:642 +#: logsrvd/iolog_writer.c:613 #, c-format msgid "error closing iofd %d: %s" msgstr "помилка під час спроби закрити дескриптор файла введення-виведення %d: %s" -#: logsrvd/iolog_writer.c:662 +#: logsrvd/iolog_writer.c:633 #, c-format msgid "error flushing iofd %d: %s" msgstr "помилка під час спроби витерти дескриптор файла введення-виведення %d: %s" -#: logsrvd/iolog_writer.c:780 +#: logsrvd/iolog_writer.c:751 #, c-format msgid "invalid I/O log %s: %s referenced but not present" msgstr "некоректний журнал введення-виведення %s: маємо посилання на %s без самого запису" -#: logsrvd/iolog_writer.c:792 logsrvd/logsrvd_journal.c:372 +#: logsrvd/iolog_writer.c:763 logsrvd/logsrvd_journal.c:382 #, c-format msgid "%s: unable to find resume point [%lld, %ld]" msgstr "%s: не вдалося знайти точку відновлення [%lld, %ld]" -#: logsrvd/iolog_writer.c:814 logsrvd/logsrvd_journal.c:415 -#: logsrvd/logsrvd_queue.c:110 logsrvd/tls_init.c:250 -#: plugins/sudoers/check.c:282 plugins/sudoers/cvtsudoers.c:730 +#: logsrvd/iolog_writer.c:785 logsrvd/logsrvd_journal.c:425 +#: logsrvd/logsrvd_queue.c:115 logsrvd/tls_init.c:256 +#: plugins/sudoers/check.c:292 plugins/sudoers/cvtsudoers.c:730 #: plugins/sudoers/cvtsudoers.c:751 plugins/sudoers/cvtsudoers.c:1431 -#: plugins/sudoers/cvtsudoers_csv.c:692 plugins/sudoers/cvtsudoers_json.c:898 -#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1106 -#: plugins/sudoers/sudoreplay.c:1469 plugins/sudoers/timestamp.c:433 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:965 +#: plugins/sudoers/cvtsudoers_csv.c:695 plugins/sudoers/cvtsudoers_json.c:898 +#: plugins/sudoers/cvtsudoers_ldif.c:709 plugins/sudoers/sudoers.c:1113 +#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/sudoreplay.c:1469 +#: plugins/sudoers/timestamp.c:460 plugins/sudoers/tsdump.c:128 +#: plugins/sudoers/visudo.c:971 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: logsrvd/iolog_writer.c:826 logsrvd/logsrv_util.c:100 -#: logsrvd/logsrv_util.c:107 plugins/sudoers/sudoreplay.c:362 +#: logsrvd/iolog_writer.c:797 logsrvd/logsrv_util.c:105 +#: logsrvd/logsrv_util.c:112 plugins/sudoers/sudoreplay.c:362 #: plugins/sudoers/sudoreplay.c:368 #, c-format msgid "unable to open %s/%s" msgstr "не вдалося відкрити %s/%s" -#: logsrvd/iolog_writer.c:839 +#: logsrvd/iolog_writer.c:810 #, c-format msgid "unable to copy %s/%s to %s/%s: %s" msgstr "не вдалося скопіювати %s/%s до %s/%s: %s" -#: logsrvd/iolog_writer.c:868 logsrvd/logsrvd_journal.c:185 +#: logsrvd/iolog_writer.c:839 logsrvd/logsrvd_journal.c:195 #, c-format msgid "unable to rename %s to %s" msgstr "не вдалося перейменувати %s на %s" -#: logsrvd/logsrv_util.c:142 logsrvd/logsrv_util.c:171 +#: logsrvd/logsrv_util.c:147 logsrvd/logsrv_util.c:176 #, c-format msgid "%s/%s: unable to find resume point [%lld, %ld]" msgstr "%s/%s: не вдалося знайти точку відновлення [%lld, %ld]" -#: logsrvd/logsrv_util.c:154 +#: logsrvd/logsrv_util.c:159 #, c-format msgid "missing I/O log file %s/%s" msgstr "не вистачає файла журналу введення-виведення, %s/%s" -#: logsrvd/logsrv_util.c:161 +#: logsrvd/logsrv_util.c:166 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: неможливо виконати позиціювання вперед на %zu" -#: logsrvd/logsrvd.c:266 logsrvd/logsrvd_queue.c:130 +#: logsrvd/logsrvd.c:271 logsrvd/logsrvd_queue.c:135 msgid "unable to connect to relay" msgstr "не вдалося встановити з'єднання із ретранслятором" -#: logsrvd/logsrvd.c:325 logsrvd/logsrvd_relay.c:837 +#: logsrvd/logsrvd.c:330 logsrvd/logsrvd_relay.c:842 #, c-format msgid "server message too large: %zu" msgstr "надто велике повідомлення сервера: %zu" -#: logsrvd/logsrvd.c:417 logsrvd/logsrvd.c:534 logsrvd/logsrvd.c:613 -#: logsrvd/logsrvd.c:837 logsrvd/logsrvd.c:851 logsrvd/logsrvd.c:1011 -#: logsrvd/logsrvd.c:1136 logsrvd/logsrvd.c:1309 logsrvd/logsrvd.c:1327 -#: logsrvd/logsrvd.c:1428 logsrvd/logsrvd.c:1551 logsrvd/logsrvd.c:1735 -#: logsrvd/logsrvd_journal.c:484 logsrvd/logsrvd_local.c:197 -#: logsrvd/logsrvd_queue.c:159 logsrvd/logsrvd_relay.c:167 -#: logsrvd/logsrvd_relay.c:244 logsrvd/logsrvd_relay.c:248 -#: logsrvd/logsrvd_relay.c:384 logsrvd/logsrvd_relay.c:576 -#: logsrvd/logsrvd_relay.c:737 logsrvd/logsrvd_relay.c:1124 -#: logsrvd/sendlog.c:1316 logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 -#: logsrvd/tls_client.c:211 plugins/sudoers/audit.c:276 -#: plugins/sudoers/iolog.c:1031 plugins/sudoers/iolog.c:1164 -#: plugins/sudoers/iolog.c:1262 plugins/sudoers/log_client.c:116 -#: plugins/sudoers/log_client.c:338 plugins/sudoers/log_client.c:354 -#: plugins/sudoers/log_client.c:402 plugins/sudoers/log_client.c:606 -#: plugins/sudoers/log_client.c:613 plugins/sudoers/log_client.c:1138 -#: plugins/sudoers/log_client.c:1420 plugins/sudoers/log_client.c:1461 -#: plugins/sudoers/log_client.c:1469 plugins/sudoers/log_client.c:1628 -#: plugins/sudoers/log_client.c:1746 plugins/sudoers/log_client.c:2067 -#: plugins/sudoers/log_client.c:2075 plugins/sudoers/logging.c:150 -#: plugins/sudoers/logging.c:209 plugins/sudoers/sudoreplay.c:522 +#: logsrvd/logsrvd.c:422 logsrvd/logsrvd.c:545 logsrvd/logsrvd.c:631 +#: logsrvd/logsrvd.c:873 logsrvd/logsrvd.c:887 logsrvd/logsrvd.c:1049 +#: logsrvd/logsrvd.c:1174 logsrvd/logsrvd.c:1347 logsrvd/logsrvd.c:1365 +#: logsrvd/logsrvd.c:1464 logsrvd/logsrvd.c:1589 logsrvd/logsrvd.c:1773 +#: logsrvd/logsrvd_journal.c:494 logsrvd/logsrvd_local.c:238 +#: logsrvd/logsrvd_queue.c:164 logsrvd/logsrvd_relay.c:172 +#: logsrvd/logsrvd_relay.c:249 logsrvd/logsrvd_relay.c:253 +#: logsrvd/logsrvd_relay.c:389 logsrvd/logsrvd_relay.c:581 +#: logsrvd/logsrvd_relay.c:742 logsrvd/logsrvd_relay.c:1131 +#: logsrvd/sendlog.c:1291 logsrvd/tls_client.c:136 logsrvd/tls_client.c:152 +#: logsrvd/tls_client.c:216 plugins/sudoers/audit.c:278 +#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1166 +#: plugins/sudoers/iolog.c:1264 plugins/sudoers/log_client.c:121 +#: plugins/sudoers/log_client.c:343 plugins/sudoers/log_client.c:359 +#: plugins/sudoers/log_client.c:407 plugins/sudoers/log_client.c:611 +#: plugins/sudoers/log_client.c:618 plugins/sudoers/log_client.c:1103 +#: plugins/sudoers/log_client.c:1385 plugins/sudoers/log_client.c:1426 +#: plugins/sudoers/log_client.c:1434 plugins/sudoers/log_client.c:1593 +#: plugins/sudoers/log_client.c:1711 plugins/sudoers/log_client.c:2040 +#: plugins/sudoers/log_client.c:2048 plugins/sudoers/logging.c:147 +#: plugins/sudoers/logging.c:205 plugins/sudoers/sudoreplay.c:522 #: plugins/sudoers/sudoreplay.c:569 plugins/sudoers/sudoreplay.c:811 #: plugins/sudoers/sudoreplay.c:923 plugins/sudoers/sudoreplay.c:1014 #: plugins/sudoers/sudoreplay.c:1029 plugins/sudoers/sudoreplay.c:1036 @@ -738,633 +775,658 @@ msgstr "надто велике повідомлення сервера: %zu" msgid "unable to add event to queue" msgstr "не вдалося додати подію до черги обробки" -#: logsrvd/logsrvd.c:441 logsrvd/logsrvd.c:478 logsrvd/logsrvd.c:510 -#: logsrvd/logsrvd.c:558 logsrvd/logsrvd.c:630 logsrvd/logsrvd.c:660 -#: logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:720 logsrvd/logsrvd_relay.c:505 -#: logsrvd/logsrvd_relay.c:538 +#: logsrvd/logsrvd.c:446 logsrvd/logsrvd.c:483 logsrvd/logsrvd.c:515 +#: logsrvd/logsrvd.c:569 logsrvd/logsrvd.c:648 logsrvd/logsrvd.c:684 +#: logsrvd/logsrvd.c:720 logsrvd/logsrvd.c:756 logsrvd/logsrvd_relay.c:510 +#: logsrvd/logsrvd_relay.c:543 #, c-format msgid "unexpected state %d for %s" msgstr "неочікуваний стан %d %s" -#: logsrvd/logsrvd.c:442 logsrvd/logsrvd.c:479 logsrvd/logsrvd.c:511 -#: logsrvd/logsrvd.c:559 logsrvd/logsrvd.c:631 logsrvd/logsrvd.c:661 -#: logsrvd/logsrvd.c:691 logsrvd/logsrvd.c:721 logsrvd/logsrvd_relay.c:507 -#: logsrvd/logsrvd_relay.c:540 +#: logsrvd/logsrvd.c:447 logsrvd/logsrvd.c:484 logsrvd/logsrvd.c:516 +#: logsrvd/logsrvd.c:570 logsrvd/logsrvd.c:649 logsrvd/logsrvd.c:685 +#: logsrvd/logsrvd.c:721 logsrvd/logsrvd.c:757 logsrvd/logsrvd_relay.c:512 +#: logsrvd/logsrvd_relay.c:545 msgid "state machine error" msgstr "помилка скінченного автомата" -#: logsrvd/logsrvd.c:448 logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:453 logsrvd/logsrvd.c:454 msgid "invalid AcceptMessage" msgstr "некоректне AcceptMessage" -#: logsrvd/logsrvd.c:485 logsrvd/logsrvd.c:486 +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 msgid "invalid RejectMessage" msgstr "некоректне RejectMessage" -#: logsrvd/logsrvd.c:593 logsrvd/logsrvd.c:594 +#: logsrvd/logsrvd.c:522 logsrvd/logsrvd.c:523 +msgid "invalid ExitMessage" +msgstr "некоректне ExitMessage" + +#: logsrvd/logsrvd.c:576 logsrvd/logsrvd.c:577 +msgid "invalid RestartMessage" +msgstr "некоректне RestartMessage" + +#: logsrvd/logsrvd.c:611 logsrvd/logsrvd.c:612 msgid "invalid AlertMessage" msgstr "некоректне AlertMessage" -#: logsrvd/logsrvd.c:635 logsrvd/logsrvd.c:665 logsrvd/logsrvd.c:695 +#: logsrvd/logsrvd.c:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format msgid "%s: unexpected IoBuffer" msgstr "%s: неочікуване значення IoBuffer" -#: logsrvd/logsrvd.c:636 logsrvd/logsrvd.c:666 logsrvd/logsrvd.c:696 +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 msgid "protocol error" msgstr "помилка протоколу" -#: logsrvd/logsrvd.c:746 logsrvd/logsrvd_journal.c:283 -#: logsrvd/logsrvd_relay.c:647 logsrvd/sendlog.c:1217 -#: plugins/sudoers/log_client.c:1618 +#: logsrvd/logsrvd.c:660 logsrvd/logsrvd.c:661 +msgid "invalid IoBuffer" +msgstr "некоректне IoBuffer" + +#: logsrvd/logsrvd.c:696 logsrvd/logsrvd.c:697 +msgid "invalid ChangeWindowSize" +msgstr "некоректне ChangeWindowSize" + +#: logsrvd/logsrvd.c:732 logsrvd/logsrvd.c:733 +msgid "invalid CommandSuspend" +msgstr "некоректне CommandSuspend" + +#: logsrvd/logsrvd.c:782 logsrvd/logsrvd_journal.c:293 +#: logsrvd/logsrvd_relay.c:652 logsrvd/sendlog.c:1192 +#: plugins/sudoers/log_client.c:1583 #, c-format msgid "unable to unpack %s size %zu" msgstr "не вдалося розпакувати %s, розмір %zu" -#: logsrvd/logsrvd.c:791 logsrvd/logsrvd_journal.c:357 -#: logsrvd/logsrvd_local.c:125 logsrvd/logsrvd_relay.c:671 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "неочікуване значення type_case %d у %s від %s" -#: logsrvd/logsrvd.c:793 +#: logsrvd/logsrvd.c:829 msgid "unrecognized ClientMessage type" msgstr "нерозпізнаний тип ClientMessage" -#: logsrvd/logsrvd.c:883 +#: logsrvd/logsrvd.c:919 #, c-format msgid "timed out writing to client %s" msgstr "перевищено час очікування на завершення запису до клієнта %s" -#: logsrvd/logsrvd.c:888 logsrvd/logsrvd_relay.c:909 logsrvd/sendlog.c:1420 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format msgid "missing write buffer for client %s" msgstr "пропущено буфер запису для клієнта %s" -#: logsrvd/logsrvd.c:982 +#: logsrvd/logsrvd.c:1020 #, c-format msgid "timed out reading from client %s" msgstr "перевищено час очікування на читання з клієнта %s" -#: logsrvd/logsrvd.c:1023 logsrvd/logsrvd_relay.c:772 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format msgid "EOF from %s without proper TLS shutdown" msgstr "EOF від %s без належного закриття TLS" -#: logsrvd/logsrvd.c:1067 logsrvd/logsrvd_relay.c:200 logsrvd/sendlog.c:317 -#: plugins/sudoers/log_client.c:716 +#: logsrvd/logsrvd.c:1105 logsrvd/logsrvd_relay.c:205 logsrvd/sendlog.c:322 +#: plugins/sudoers/log_client.c:721 #, c-format msgid "client message too large: %zu" msgstr "повідомлення клієнта є надто довгим: %zu" -#: logsrvd/logsrvd.c:1068 logsrvd/logsrvd_journal.c:246 -#: logsrvd/logsrvd_journal.c:247 +#: logsrvd/logsrvd.c:1106 logsrvd/logsrvd_journal.c:256 +#: logsrvd/logsrvd_journal.c:257 msgid "client message too large" msgstr "повідомлення клієнта є надто великим" -#: logsrvd/logsrvd.c:1086 logsrvd/logsrvd.c:1087 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 msgid "invalid ClientMessage" msgstr "некоректне ClientMessage" -#: logsrvd/logsrvd.c:1389 +#: logsrvd/logsrvd.c:1425 msgid "unable to get remote IP addr" msgstr "не вдалося отримати віддалену IP-адресу" -#: logsrvd/logsrvd.c:1420 logsrvd/tls_client.c:198 -#: plugins/sudoers/log_client.c:276 +#: logsrvd/logsrvd.c:1456 logsrvd/tls_client.c:203 +#: plugins/sudoers/log_client.c:281 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Не вдалося долучити дані користувача до об'єкта SSL: %s" -#: logsrvd/logsrvd.c:1601 logsrvd/logsrvd.c:1953 +#: logsrvd/logsrvd.c:1639 logsrvd/logsrvd.c:1992 msgid "unable to setup listen socket" msgstr "не вдалося налаштувати сокет очікування на дані" -#: logsrvd/logsrvd.c:1718 +#: logsrvd/logsrvd.c:1756 #, c-format msgid "unexpected signal %d" msgstr "неочікуваний сигнал %d" -#: logsrvd/logsrvd.c:1855 +#: logsrvd/logsrvd.c:1894 msgid "sudo log server" msgstr "сервер журналу sudo" -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:116 +#: logsrvd/logsrvd.c:1896 logsrvd/sendlog.c:121 msgid "Options:" msgstr "Параметри:" -#: logsrvd/logsrvd.c:1859 +#: logsrvd/logsrvd.c:1898 msgid "path to configuration file" msgstr "шлях до файла налаштувань" -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:118 +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 msgid "display help message and exit" msgstr "показати довідкове повідомлення і завершити роботу" -#: logsrvd/logsrvd.c:1863 +#: logsrvd/logsrvd.c:1902 msgid "do not fork, run in the foreground" msgstr "не відгалужувати, не переходити у фоновий режим під час виконання" -#: logsrvd/logsrvd.c:1865 +#: logsrvd/logsrvd.c:1904 msgid "percent chance connections will drop" msgstr "ймовірність розірвання з'єднання" -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:148 +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 msgid "display version information and exit" msgstr "показати дані щодо версії і завершити роботу" -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1725 +#: logsrvd/logsrvd.c:1956 logsrvd/sendlog.c:1702 msgid "Protobuf-C version 1.3 or higher required" msgstr "Потрібна версія Protobuf-C 1.3 або новіша" -#: logsrvd/logsrvd.c:1933 +#: logsrvd/logsrvd.c:1972 #, c-format msgid "invalid random drop value: %s" msgstr "некоректне значення ймовірності скидання: %s" -#: logsrvd/logsrvd.c:1936 logsrvd/sendlog.c:1779 +#: logsrvd/logsrvd.c:1975 logsrvd/sendlog.c:1756 #: plugins/sudoers/cvtsudoers.c:246 plugins/sudoers/sudoreplay.c:301 -#: plugins/sudoers/visudo.c:180 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "%s, версія %s\n" -#: logsrvd/logsrvd_conf.c:417 plugins/sudoers/check.c:347 +#: logsrvd/logsrvd_conf.c:422 plugins/sudoers/check.c:353 #: plugins/sudoers/exptilde.c:85 plugins/sudoers/iolog.c:122 -#: plugins/sudoers/policy.c:1234 plugins/sudoers/sudoers.c:500 -#: plugins/sudoers/sudoers.c:1362 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/policy.c:1264 plugins/sudoers/sudoers.c:505 +#: plugins/sudoers/sudoers.c:1372 plugins/sudoers/testsudoers.c:215 #: plugins/sudoers/testsudoers.c:382 #, c-format msgid "unknown user %s" msgstr "невідомий користувач %s" -#: logsrvd/logsrvd_conf.c:434 plugins/sudoers/iolog.c:148 -#: plugins/sudoers/sudoers.c:505 plugins/sudoers/sudoers.c:1396 +#: logsrvd/logsrvd_conf.c:439 plugins/sudoers/iolog.c:148 +#: plugins/sudoers/sudoers.c:510 plugins/sudoers/sudoers.c:1406 #: plugins/sudoers/testsudoers.c:406 #, c-format msgid "unknown group %s" msgstr "невідома група %s" -#: logsrvd/logsrvd_conf.c:452 +#: logsrvd/logsrvd_conf.c:457 #, c-format msgid "unable to parse iolog mode %s" msgstr "не вдалося обробити запис режиму iolog %s" -#: logsrvd/logsrvd_conf.c:469 logsrvd/logsrvd_conf.c:1238 +#: logsrvd/logsrvd_conf.c:474 logsrvd/logsrvd_conf.c:1243 #, c-format msgid "invalid value for %s: %s" msgstr "некоректне значення %s: %s" -#: logsrvd/logsrvd_conf.c:522 +#: logsrvd/logsrvd_conf.c:527 msgid "TLS not supported" msgstr "Підтримки TLS не передбачено" -#: logsrvd/logsrvd_conf.c:544 +#: logsrvd/logsrvd_conf.c:549 #, c-format msgid "%s:%s" msgstr "%s:%s" -#: logsrvd/logsrvd_conf.c:617 logsrvd/logsrvd_conf.c:1027 +#: logsrvd/logsrvd_conf.c:622 logsrvd/logsrvd_conf.c:1032 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: не є повноцінним записом шляхуnot a fully qualified path" -#: logsrvd/logsrvd_conf.c:945 logsrvd/logsrvd_conf.c:961 -#: logsrvd/logsrvd_conf.c:1671 +#: logsrvd/logsrvd_conf.c:951 logsrvd/logsrvd_conf.c:967 +#: logsrvd/logsrvd_conf.c:1676 #, c-format msgid "unknown syslog facility %s" msgstr "невідома можливість syslog %s" -#: logsrvd/logsrvd_conf.c:977 logsrvd/logsrvd_conf.c:993 -#: logsrvd/logsrvd_conf.c:1009 logsrvd/logsrvd_conf.c:1675 -#: logsrvd/logsrvd_conf.c:1679 logsrvd/logsrvd_conf.c:1683 +#: logsrvd/logsrvd_conf.c:983 logsrvd/logsrvd_conf.c:999 +#: logsrvd/logsrvd_conf.c:1015 logsrvd/logsrvd_conf.c:1680 +#: logsrvd/logsrvd_conf.c:1684 logsrvd/logsrvd_conf.c:1688 #, c-format msgid "unknown syslog priority %s" msgstr "невідома пріоритетність syslog %s" -#: logsrvd/logsrvd_conf.c:1192 +#: logsrvd/logsrvd_conf.c:1197 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d «[» без пари: %s" -#: logsrvd/logsrvd_conf.c:1198 +#: logsrvd/logsrvd_conf.c:1203 #, c-format msgid "%s:%d garbage after ']': %s" msgstr "%s:%d мотлох після «]»: %s" -#: logsrvd/logsrvd_conf.c:1210 +#: logsrvd/logsrvd_conf.c:1215 #, c-format msgid "%s:%d invalid config section: %s" msgstr "%s:%d некоректний розділ налаштувань: %s" -#: logsrvd/logsrvd_conf.c:1218 +#: logsrvd/logsrvd_conf.c:1223 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "%s:%d некоректний рядок налаштувань: %s" -#: logsrvd/logsrvd_conf.c:1224 +#: logsrvd/logsrvd_conf.c:1229 #, c-format msgid "%s:%d expected section name: %s" msgstr "%s:%d мало бути вказано назву розділу: %s" -#: logsrvd/logsrvd_conf.c:1246 +#: logsrvd/logsrvd_conf.c:1251 #, c-format msgid "%s:%d [%s] illegal key: %s" msgstr "%s:%d [%s] заборонений ключ: %s" -#: logsrvd/logsrvd_conf.c:1276 plugins/sudoers/cvtsudoers.c:268 -#: plugins/sudoers/logging.c:1035 +#: logsrvd/logsrvd_conf.c:1281 plugins/sudoers/cvtsudoers.c:268 +#: plugins/sudoers/logging.c:1029 #, c-format msgid "unable to open log file %s" msgstr "не вдалося відкрити файл журналу %s" -#: logsrvd/logsrvd_conf.c:1757 +#: logsrvd/logsrvd_conf.c:1763 msgid "unable to initialize server TLS context" msgstr "не вдалося ініціалізувати контекст сервера TLS" -#: logsrvd/logsrvd_conf.c:1777 +#: logsrvd/logsrvd_conf.c:1783 msgid "unable to initialize relay TLS context" msgstr "не вдалося ініціалізувати контекст ретранслятора TLS" -#: logsrvd/logsrvd_journal.c:136 logsrvd/logsrvd_journal.c:411 -#: logsrvd/logsrvd_journal.c:416 +#: logsrvd/logsrvd_journal.c:146 logsrvd/logsrvd_journal.c:421 +#: logsrvd/logsrvd_journal.c:426 msgid "unable to create journal file" msgstr "не вдалося створити файл журналу" -#: logsrvd/logsrvd_journal.c:140 logsrvd/logsrvd_queue.c:104 -#: plugins/sudoers/visudo.c:1020 +#: logsrvd/logsrvd_journal.c:150 logsrvd/logsrvd_queue.c:109 +#: plugins/sudoers/visudo.c:1026 #, c-format msgid "unable to lock %s" msgstr "не вдалося заблокувати %s" -#: logsrvd/logsrvd_journal.c:143 +#: logsrvd/logsrvd_journal.c:153 msgid "unable to lock journal file" msgstr "не вдалося заблокувати файл журналу" -#: logsrvd/logsrvd_journal.c:151 +#: logsrvd/logsrvd_journal.c:161 msgid "unable to open journal file" msgstr "не вдалося відкрити файл журналу" -#: logsrvd/logsrvd_journal.c:172 logsrvd/logsrvd_journal.c:447 -#: logsrvd/logsrvd_journal.c:452 +#: logsrvd/logsrvd_journal.c:182 logsrvd/logsrvd_journal.c:457 +#: logsrvd/logsrvd_journal.c:462 msgid "unable to write journal file" msgstr "не вдалося записати файл журналу" -#: logsrvd/logsrvd_journal.c:180 logsrvd/logsrvd_journal.c:187 +#: logsrvd/logsrvd_journal.c:190 logsrvd/logsrvd_journal.c:197 msgid "unable to rename journal file" msgstr "не вдалося перейменувати файл журналу" -#: logsrvd/logsrvd_journal.c:234 logsrvd/logsrvd_journal.c:235 -#: logsrvd/logsrvd_journal.c:269 logsrvd/logsrvd_journal.c:270 +#: logsrvd/logsrvd_journal.c:244 logsrvd/logsrvd_journal.c:245 +#: logsrvd/logsrvd_journal.c:279 logsrvd/logsrvd_journal.c:280 msgid "unexpected EOF reading journal file" msgstr "неочікуваний символ кінця файла під час читання файла журналу" -#: logsrvd/logsrvd_journal.c:238 logsrvd/logsrvd_journal.c:239 -#: logsrvd/logsrvd_journal.c:273 logsrvd/logsrvd_journal.c:274 +#: logsrvd/logsrvd_journal.c:248 logsrvd/logsrvd_journal.c:249 +#: logsrvd/logsrvd_journal.c:283 logsrvd/logsrvd_journal.c:284 msgid "error reading journal file" msgstr "помилка під час спроби читання файла журналу" -#: logsrvd/logsrvd_journal.c:285 logsrvd/logsrvd_journal.c:371 +#: logsrvd/logsrvd_journal.c:295 logsrvd/logsrvd_journal.c:381 msgid "invalid journal file, unable to restart" msgstr "некоректний файл журналу, неможливо перезапустити" -#: logsrvd/logsrvd_journal.c:430 +#: logsrvd/logsrvd_journal.c:440 #, c-format msgid "unable to seek to [%lld, %ld] in journal file %s" msgstr "не вдалося встановити позицію [%lld, %ld] у файлі журналу %s" -#: logsrvd/logsrvd_local.c:153 +#: logsrvd/logsrvd_local.c:166 +#, c-format +msgid "unexpected value_case %d in %s from %s" +msgstr "неочікуване значення value_case %d у %s з %s" + +#: logsrvd/logsrvd_local.c:194 msgid "error parsing AcceptMessage" msgstr "помилка під час спроби обробити AcceptMessage" -#: logsrvd/logsrvd_local.c:164 +#: logsrvd/logsrvd_local.c:205 msgid "error creating I/O log" msgstr "помилка під час створення журналу введення-виведення" -#: logsrvd/logsrvd_local.c:187 +#: logsrvd/logsrvd_local.c:228 msgid "error logging accept event" msgstr "помилка під час обробки події підтвердження дії журналу" -#: logsrvd/logsrvd_local.c:226 +#: logsrvd/logsrvd_local.c:267 msgid "error parsing RejectMessage" msgstr "помилка під час проби обробити RejectMessage" -#: logsrvd/logsrvd_local.c:250 +#: logsrvd/logsrvd_local.c:291 msgid "error logging reject event" msgstr "помилка під час обробки події відмови у записі до журналу" -#: logsrvd/logsrvd_local.c:386 logsrvd/logsrvd_local.c:394 +#: logsrvd/logsrvd_local.c:427 logsrvd/logsrvd_local.c:435 msgid "error logging exit event" msgstr "помилка під час спроби записати до журналу подію виходу" -#: logsrvd/logsrvd_local.c:451 logsrvd/logsrvd_local.c:452 +#: logsrvd/logsrvd_local.c:492 logsrvd/logsrvd_local.c:493 msgid "log is already complete, cannot be restarted" msgstr "журнал вже завершено — його не можна перезапустити" -#: logsrvd/logsrvd_local.c:482 +#: logsrvd/logsrvd_local.c:523 msgid "unable to restart log" msgstr "не вдалося перезапустити журнал" -#: logsrvd/logsrvd_local.c:498 +#: logsrvd/logsrvd_local.c:539 msgid "error parsing AlertMessage" msgstr "помилка під час спроби обробити AlertMessage" -#: logsrvd/logsrvd_local.c:508 +#: logsrvd/logsrvd_local.c:549 msgid "error logging alert event" msgstr "помилка під час обробки події критичного повідомлення журналу" -#: logsrvd/logsrvd_local.c:544 logsrvd/logsrvd_local.c:607 -#: logsrvd/logsrvd_local.c:642 +#: logsrvd/logsrvd_local.c:585 logsrvd/logsrvd_local.c:648 +#: logsrvd/logsrvd_local.c:683 #, c-format msgid "unable to format timing buffer, length %d" msgstr "не вдалося виконати форматування буфера часових позначок, довжина — %d" -#: logsrvd/logsrvd_local.c:558 logsrvd/logsrvd_local.c:566 -#: logsrvd/logsrvd_local.c:614 logsrvd/logsrvd_local.c:649 +#: logsrvd/logsrvd_local.c:599 logsrvd/logsrvd_local.c:607 +#: logsrvd/logsrvd_local.c:655 logsrvd/logsrvd_local.c:690 #: plugins/sudoers/sudoreplay.c:351 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: logsrvd/logsrvd_local.c:577 +#: logsrvd/logsrvd_local.c:618 msgid "randomly dropping connection" msgstr "випадковим чином розривати з'єднання" -#: logsrvd/logsrvd_local.c:589 +#: logsrvd/logsrvd_local.c:630 msgid "error writing IoBuffer" msgstr "помилка під час спроби записати IoBuffer" -#: logsrvd/logsrvd_local.c:624 +#: logsrvd/logsrvd_local.c:665 msgid "error writing ChangeWindowSize" msgstr "помилка під час спроби записати ChangeWindowSize" -#: logsrvd/logsrvd_local.c:659 +#: logsrvd/logsrvd_local.c:700 msgid "error writing CommandSuspend" msgstr "помилка під час спроби записати CommandSuspend" -#: logsrvd/logsrvd_relay.c:430 +#: logsrvd/logsrvd_relay.c:435 msgid "TLS handshake with relay host failed" msgstr "помилка спроби ініціалізації зв'язку TLS із вузлом ретранслятора" -#: logsrvd/logsrvd_relay.c:458 +#: logsrvd/logsrvd_relay.c:463 msgid "unable to connect to relay host" msgstr "не вдалося встановити з'єднання із вузлом ретранслятора" -#: logsrvd/logsrvd_relay.c:513 +#: logsrvd/logsrvd_relay.c:518 #, c-format msgid "%s: invalid ServerHello, missing server_id" msgstr "%s: некоректне значення ServerHello — пропущено server_id" -#: logsrvd/logsrvd_relay.c:515 logsrvd/sendlog.c:1121 -#: plugins/sudoers/log_client.c:1504 +#: logsrvd/logsrvd_relay.c:520 logsrvd/sendlog.c:1096 +#: plugins/sudoers/log_client.c:1469 msgid "invalid ServerHello" msgstr "некоректне ServerHello" -#: logsrvd/logsrvd_relay.c:674 +#: logsrvd/logsrvd_relay.c:679 msgid "unrecognized ServerMessage type" msgstr "нерозпізнаний тип ServerMessage" -#: logsrvd/logsrvd_relay.c:703 +#: logsrvd/logsrvd_relay.c:708 #, c-format msgid "timed out reading from relay %s (%s)" msgstr "перевищено час очікування на читання з ретранслятора %s (%s)" -#: logsrvd/logsrvd_relay.c:705 +#: logsrvd/logsrvd_relay.c:710 msgid "timeout reading from relay" msgstr "перевищено час очікування на читання з ретранслятора" -#: logsrvd/logsrvd_relay.c:757 +#: logsrvd/logsrvd_relay.c:762 msgid "relay host name does not match certificate" msgstr "назва вузла ретранслятора не відповідає сертифікату" -#: logsrvd/logsrvd_relay.c:763 logsrvd/logsrvd_relay.c:777 -#: logsrvd/logsrvd_relay.c:784 +#: logsrvd/logsrvd_relay.c:768 logsrvd/logsrvd_relay.c:782 +#: logsrvd/logsrvd_relay.c:789 msgid "error reading from relay" msgstr "помилка під час спроби читання з ретранслятора" -#: logsrvd/logsrvd_relay.c:805 +#: logsrvd/logsrvd_relay.c:810 msgid "unable to read from relay" msgstr "не вдалося прочитати з ретранслятора" -#: logsrvd/logsrvd_relay.c:820 logsrvd/logsrvd_relay.c:938 +#: logsrvd/logsrvd_relay.c:825 logsrvd/logsrvd_relay.c:943 msgid "relay server closed connection" msgstr "сервер-ретранслятор розірвав з'єднання" -#: logsrvd/logsrvd_relay.c:838 +#: logsrvd/logsrvd_relay.c:843 msgid "server message too large" msgstr "повідомлення сервера є надто великим" -#: logsrvd/logsrvd_relay.c:902 +#: logsrvd/logsrvd_relay.c:907 #, c-format msgid "timed out writing to relay %s (%s)" msgstr "перевищено час очікування на завершення запису до ретранслятора %s (%s)" -#: logsrvd/logsrvd_relay.c:904 +#: logsrvd/logsrvd_relay.c:909 msgid "timeout writing to relay" msgstr "перевищено час очікування на запис до ретранслятора" -#: logsrvd/logsrvd_relay.c:957 logsrvd/logsrvd_relay.c:964 -#: logsrvd/logsrvd_relay.c:974 +#: logsrvd/logsrvd_relay.c:962 logsrvd/logsrvd_relay.c:969 +#: logsrvd/logsrvd_relay.c:981 msgid "error writing to relay" msgstr "помилка під час спроби записати до ретранслятора" -#: logsrvd/sendlog.c:114 +#: logsrvd/sendlog.c:119 msgid "send sudo I/O log to remote server" msgstr "надіслати журнал введення-виведення sudo на віддалений сервер" -#: logsrvd/sendlog.c:120 +#: logsrvd/sendlog.c:125 msgid "only send an accept event (no I/O)" msgstr "надіслати лише подію прийняття (без введення-виведення)" -#: logsrvd/sendlog.c:123 +#: logsrvd/sendlog.c:128 msgid "certificate bundle file to verify server's cert against" msgstr "файл пакунка сертифікатів, за яким слід перевіряти сертифікат сервера" -#: logsrvd/sendlog.c:125 +#: logsrvd/sendlog.c:130 msgid "certificate file for TLS handshake" msgstr "файл сертифіката для підтвердження зв'язку TLS" -#: logsrvd/sendlog.c:128 +#: logsrvd/sendlog.c:133 msgid "host to send logs to" msgstr "вузол, на який слід надіслати журнал" -#: logsrvd/sendlog.c:130 +#: logsrvd/sendlog.c:135 msgid "remote ID of I/O log to be resumed" msgstr "віддалений ідентифікатор журналу введення-виведення, який слід продовжити" -#: logsrvd/sendlog.c:133 +#: logsrvd/sendlog.c:138 msgid "private key file" msgstr "файл закритого ключа" -#: logsrvd/sendlog.c:135 +#: logsrvd/sendlog.c:140 msgid "do not verify server certificate" msgstr "не перевіряти сертифікат сервера" -#: logsrvd/sendlog.c:138 +#: logsrvd/sendlog.c:143 msgid "port to use when connecting to host" msgstr "порт, яким слід скористатися для з'єднання із вузлом" -#: logsrvd/sendlog.c:140 +#: logsrvd/sendlog.c:145 msgid "restart previous I/O log transfer" msgstr "перезапустити попередній обмін даними журналу введення-виведення" -#: logsrvd/sendlog.c:142 +#: logsrvd/sendlog.c:147 msgid "reject the command with the given reason" msgstr "відкинути команду із вказаною причиною" -#: logsrvd/sendlog.c:144 +#: logsrvd/sendlog.c:149 msgid "stop transfer after reaching this time" msgstr "припинити передавання даних після досягнення цієї тривалості" -#: logsrvd/sendlog.c:146 +#: logsrvd/sendlog.c:151 msgid "test audit server by sending selected I/O log n times in parallel" msgstr "перевірити сервер аудиту надсиланням вибраного журналу введення-виведення n разів у паралельному режимі" -#: logsrvd/sendlog.c:171 plugins/sudoers/log_client.c:448 +#: logsrvd/sendlog.c:176 plugins/sudoers/log_client.c:453 #, c-format msgid "unable to look up %s:%s: %s" msgstr "не вдалося виконати пошук %s:%s: %s" -#: logsrvd/sendlog.c:209 +#: logsrvd/sendlog.c:214 msgid "unable to get server IP addr" msgstr "не вдалося отримати IP-адресу сервера" -#: logsrvd/sendlog.c:295 plugins/sudoers/sudoreplay.c:871 +#: logsrvd/sendlog.c:300 plugins/sudoers/sudoreplay.c:871 #, c-format msgid "unable to read %s/%s: %s" msgstr "не вдалося прочитати %s/%s: %s" -#: logsrvd/sendlog.c:1045 plugins/sudoers/iolog.c:949 -#: plugins/sudoers/iolog.c:1024 +#: logsrvd/sendlog.c:1020 plugins/sudoers/iolog.c:951 +#: plugins/sudoers/iolog.c:1026 #, c-format msgid "unexpected I/O event %d" msgstr "неочікувана подія введення-виведення — %d" -#: logsrvd/sendlog.c:1098 logsrvd/sendlog.c:1115 logsrvd/sendlog.c:1149 -#: plugins/sudoers/log_client.c:1153 plugins/sudoers/log_client.c:1430 -#: plugins/sudoers/log_client.c:1498 plugins/sudoers/log_client.c:1537 +#: logsrvd/sendlog.c:1073 logsrvd/sendlog.c:1090 logsrvd/sendlog.c:1124 +#: plugins/sudoers/log_client.c:1118 plugins/sudoers/log_client.c:1395 +#: plugins/sudoers/log_client.c:1463 plugins/sudoers/log_client.c:1502 #, c-format msgid "%s: unexpected state %d" msgstr "%s: неочікуваний стан — %d" -#: logsrvd/sendlog.c:1185 plugins/sudoers/log_client.c:1586 +#: logsrvd/sendlog.c:1160 plugins/sudoers/log_client.c:1551 #, c-format msgid "error message received from server: %s" msgstr "отримано повідомлення про помилку від сервера: %s" -#: logsrvd/sendlog.c:1198 plugins/sudoers/log_client.c:1599 +#: logsrvd/sendlog.c:1173 plugins/sudoers/log_client.c:1564 #, c-format msgid "abort message received from server: %s" msgstr "отримано повідомлення про переривання від сервера: %s" -#: logsrvd/sendlog.c:1257 plugins/sudoers/log_client.c:1649 +#: logsrvd/sendlog.c:1232 plugins/sudoers/log_client.c:1614 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: неочікуване значення type_case — %d" -#: logsrvd/sendlog.c:1286 +#: logsrvd/sendlog.c:1261 msgid "timeout reading from server" msgstr "перевищено час очікування на читання з сервера" -#: logsrvd/sendlog.c:1335 plugins/sudoers/log_client.c:1765 +#: logsrvd/sendlog.c:1310 plugins/sudoers/log_client.c:1730 msgid "host name does not match certificate" msgstr "назва вузла не відповідає сертифікату" -#: logsrvd/sendlog.c:1368 +#: logsrvd/sendlog.c:1343 msgid "premature EOF" msgstr "передчасне завершення файла" -#: logsrvd/sendlog.c:1381 plugins/sudoers/log_client.c:1812 +#: logsrvd/sendlog.c:1356 plugins/sudoers/log_client.c:1777 #, c-format msgid "server message too large: %u" msgstr "повідомлення сервера є надто великим: %u" -#: logsrvd/sendlog.c:1437 +#: logsrvd/sendlog.c:1412 msgid "timeout writing to server" msgstr "перевищено час очікування на запис на сервері" -#: logsrvd/sendlog.c:1802 +#: logsrvd/sendlog.c:1779 msgid "both restart point and iolog ID must be specified" msgstr "слід вказати одночасно точку перезапуску та ідентифікатор журналу введення-виведення" -#: logsrvd/sendlog.c:1806 +#: logsrvd/sendlog.c:1783 msgid "a restart point may not be set when no I/O is sent" msgstr "точку перезапуску не можна встановлювати, якщо не надсилається жодних даних введення-виведення" -#: logsrvd/sendlog.c:1882 +#: logsrvd/sendlog.c:1859 #, c-format msgid "exited prematurely with state %d" msgstr "передчасний вихід зі станом %d" -#: logsrvd/sendlog.c:1883 +#: logsrvd/sendlog.c:1860 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "на сервер надіслано дані щодо часу, який лишився [%lld, %ld]" -#: logsrvd/sendlog.c:1885 +#: logsrvd/sendlog.c:1862 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "отримано точку внеску від сервера [%lld, %ld]" -#: logsrvd/tls_client.c:106 plugins/sudoers/log_client.c:310 +#: logsrvd/tls_client.c:111 plugins/sudoers/log_client.c:315 msgid "TLS handshake timeout occurred" msgstr "сталося перевищення часу очікування на узгодження зв'язку TLS" -#: logsrvd/tls_client.c:126 logsrvd/tls_client.c:142 -#: plugins/sudoers/log_client.c:332 plugins/sudoers/log_client.c:348 +#: logsrvd/tls_client.c:131 logsrvd/tls_client.c:147 +#: plugins/sudoers/log_client.c:337 plugins/sudoers/log_client.c:353 msgid "unable to set event" msgstr "не вдалося встановити подію" -#: logsrvd/tls_client.c:152 logsrvd/tls_client.c:156 +#: logsrvd/tls_client.c:157 logsrvd/tls_client.c:161 #, c-format msgid "TLS connection failed: %s" msgstr "Не вдалося встановити з'єднання TLS: %s" -#: logsrvd/tls_client.c:191 +#: logsrvd/tls_client.c:196 #, c-format msgid "unable to allocate ssl object: %s" msgstr "не вдалося розмістити об'єкт SSL у пам'яті: %s" -#: logsrvd/tls_client.c:205 +#: logsrvd/tls_client.c:210 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Не вдалося долучити сокет до об'єкта SSL: %s" -#: logsrvd/tls_client.c:233 +#: logsrvd/tls_client.c:238 msgid "unable to initialize TLS context" msgstr "не вдалося ініціалізувати контекст TLS" -#: logsrvd/tls_init.c:132 logsrvd/tls_init.c:140 +#: logsrvd/tls_init.c:138 logsrvd/tls_init.c:146 #, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" msgstr "не вдалося встановити комплекс шифрування TLS 1.2 у %s: %s" -#: logsrvd/tls_init.c:160 logsrvd/tls_init.c:168 +#: logsrvd/tls_init.c:166 logsrvd/tls_init.c:174 #, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "не вдалося встановити комплекс шифрування TLS 1.3 у %s: %s" -#: logsrvd/tls_init.c:200 logsrvd/tls_init.c:221 +#: logsrvd/tls_init.c:206 logsrvd/tls_init.c:227 #, c-format msgid "unable to set diffie-hellman parameters: %s" msgstr "не вдалося встановити параметри Діфі-Гелмана: %s" -#: logsrvd/tls_init.c:277 +#: logsrvd/tls_init.c:283 #, c-format msgid "unable to create TLS context: %s" msgstr "не вдалося створити контекст TLS: %s" -#: logsrvd/tls_init.c:284 +#: logsrvd/tls_init.c:290 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" msgstr "не вдалося встановити мінімальну версію протоколу у значення TLS 1.2: %s" -#: plugins/sudoers/audit.c:267 plugins/sudoers/audit.c:419 -#: plugins/sudoers/log_client.c:986 plugins/sudoers/log_client.c:1035 -#: plugins/sudoers/log_client.c:1084 plugins/sudoers/log_client.c:1210 -#: plugins/sudoers/logging.c:599 plugins/sudoers/logging.c:696 -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:989 -#: plugins/sudoers/policy.c:123 +#: plugins/sudoers/audit.c:269 plugins/sudoers/audit.c:429 +#: plugins/sudoers/log_client.c:951 plugins/sudoers/log_client.c:1000 +#: plugins/sudoers/log_client.c:1049 plugins/sudoers/log_client.c:1175 +#: plugins/sudoers/logging.c:591 plugins/sudoers/logging.c:689 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:983 +#: plugins/sudoers/policy.c:124 msgid "unable to get time of day" msgstr "не вдалося отримати дані щодо пори доби" @@ -1501,7 +1563,7 @@ msgstr "Строк дії облікового запису збіг або у msgid "PAM account management error: %s" msgstr "Помилка керування обліковими записами PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:266 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:271 #, c-format msgid "you do not exist in the %s database" msgstr "вас немає у базі даних %s" @@ -1574,17 +1636,17 @@ msgstr "Не вдалося визначити умови аудита" msgid "unable to commit audit record" msgstr "не вдалося надіслати запис аудита" -#: plugins/sudoers/check.c:275 +#: plugins/sudoers/check.c:285 #, c-format msgid "error reading lecture file %s" msgstr "помилка під час спроби читання файла настанов %s" -#: plugins/sudoers/check.c:278 +#: plugins/sudoers/check.c:288 #, c-format msgid "ignoring lecture file %s: not a regular file" msgstr "ігноруємо файл настанов %s: він не є звичайним файлом" -#: plugins/sudoers/check.c:291 +#: plugins/sudoers/check.c:301 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -1604,14 +1666,14 @@ msgstr "" " #3) Користування широкими правами розширює сферу відповідальності.\n" "\n" -#: plugins/sudoers/check.c:342 plugins/sudoers/check.c:352 -#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:901 -#: plugins/sudoers/sudoers.c:922 plugins/sudoers/tsdump.c:119 +#: plugins/sudoers/check.c:348 plugins/sudoers/check.c:358 +#: plugins/sudoers/parse.c:64 plugins/sudoers/sudoers.c:920 +#: plugins/sudoers/sudoers.c:941 plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid %u" msgstr "невідоме значення uid %u" -#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format msgid "%s: %s\n" msgstr "%s: %s\n" @@ -1641,7 +1703,7 @@ msgstr "початковий порядок: %s: %s" msgid "order padding: %s: %s" msgstr "доповнення порядку: %s: %s" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:182 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "Граматична перевірка %s, версія %d\n" @@ -1661,14 +1723,14 @@ msgstr "непідтримуваний формат виведення, %s" msgid "%s: input and output files must be different" msgstr "%s: файли вхідних і вихідних даних мають бути різними файлами" -#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:165 -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/testsudoers.c:254 -#: plugins/sudoers/visudo.c:275 plugins/sudoers/visudo.c:644 -#: plugins/sudoers/visudo.c:969 +#: plugins/sudoers/cvtsudoers.c:399 plugins/sudoers/sudoers.c:166 +#: plugins/sudoers/sudoers.c:222 plugins/sudoers/testsudoers.c:254 +#: plugins/sudoers/visudo.c:280 plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:975 msgid "unable to initialize sudoers default values" msgstr "не вдалося ініціалізувати типові значення sudoers" -#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:433 +#: plugins/sudoers/cvtsudoers.c:525 plugins/sudoers/ldap_conf.c:434 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" @@ -1693,18 +1755,18 @@ msgstr "некоректний тип придушення: %s" msgid "invalid filter: %s" msgstr "некоректний фільтр: %s" -#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/cvtsudoers.c:754 plugins/sudoers/visudo.c:980 #, c-format msgid "failed to parse %s file, unknown error" msgstr "не вдалося обробити файл %s, невідома помилка" #: plugins/sudoers/cvtsudoers.c:1478 plugins/sudoers/sudoreplay.c:1145 -#: plugins/sudoers/timestamp.c:317 plugins/sudoers/timestamp.c:320 +#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:346 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" -#: plugins/sudoers/cvtsudoers.c:1501 +#: plugins/sudoers/cvtsudoers.c:1506 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1713,7 +1775,7 @@ msgstr "" "%s — перетворення форматів файлів sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1503 +#: plugins/sudoers/cvtsudoers.c:1508 msgid "" "\n" "Options:\n" @@ -2166,359 +2228,383 @@ msgid "Log user's input for the command being run" msgstr "Записувати дані, вказані користувачем під час виконання команди" #: plugins/sudoers/def_data.c:356 +msgid "Log the command's standard input if not connected to a terminal" +msgstr "Записувати до журналу джерело стандартних вхідних даних команди, якщо команду не з'єднано із терміналом" + +#: plugins/sudoers/def_data.c:360 +msgid "Log the user's terminal input for the command being run" +msgstr "Записувати дані, вказані користувачем у терміналі, під час виконання команди" + +#: plugins/sudoers/def_data.c:364 msgid "Log the output of the command being run" msgstr "Записувати дані, виведені командою під час виконання" -#: plugins/sudoers/def_data.c:360 +#: plugins/sudoers/def_data.c:368 +msgid "Log the command's standard output if not connected to a terminal" +msgstr "Записувати до журналу стандартне виведення команди, якщо команду не з'єднано із терміналом" + +#: plugins/sudoers/def_data.c:372 +msgid "Log the command's standard error if not connected to a terminal" +msgstr "Записувати до журналу стандартне виведення помилок команди, якщо команду не з'єднано із терміналом" + +#: plugins/sudoers/def_data.c:376 +msgid "Log the terminal output of the command being run" +msgstr "Записувати дані, виведені командою до термінала під час виконання" + +#: plugins/sudoers/def_data.c:380 msgid "Compress I/O logs using zlib" msgstr "Стискати журнали за допомогою zlib" -#: plugins/sudoers/def_data.c:364 +#: plugins/sudoers/def_data.c:384 msgid "Always run commands in a pseudo-tty" msgstr "Завжди запускати команди у псевдо-tty" -#: plugins/sudoers/def_data.c:368 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Додаток для підтримки не-Unix груп: %s" -#: plugins/sudoers/def_data.c:372 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Каталог, у якому слід зберігати журнали введення/виведення: %s" -#: plugins/sudoers/def_data.c:376 +#: plugins/sudoers/def_data.c:396 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Файл, у якому слід зберігати журнал введення/виведення даних: %s" -#: plugins/sudoers/def_data.c:380 +#: plugins/sudoers/def_data.c:400 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додати запис до файла utmp/utmpx під час розміщення pty" -#: plugins/sudoers/def_data.c:384 +#: plugins/sudoers/def_data.c:404 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Встановити користувача у utmp у значення користувача, від імені якого виконується команда" -#: plugins/sudoers/def_data.c:388 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Set of permitted privileges: %s" msgstr "Набір дозвільних прав доступу: %s" -#: plugins/sudoers/def_data.c:392 +#: plugins/sudoers/def_data.c:412 #, c-format msgid "Set of limit privileges: %s" msgstr "Набір обмежувальних прав доступу: %s" -#: plugins/sudoers/def_data.c:396 +#: plugins/sudoers/def_data.c:416 msgid "Run commands on a pty in the background" msgstr "Виконувати команди у pty у фоновому режимі" -#: plugins/sudoers/def_data.c:400 +#: plugins/sudoers/def_data.c:420 #, c-format msgid "PAM service name to use: %s" msgstr "Назва служби PAM, якою слід скористатися: %s" -#: plugins/sudoers/def_data.c:404 +#: plugins/sudoers/def_data.c:424 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Назва служби PAM, якою слід скористатися для оболонок входу до системи: %s" -#: plugins/sudoers/def_data.c:408 +#: plugins/sudoers/def_data.c:428 #, c-format msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "Назва служби PAM, якою слід скористатися, якщо sudo запущено з параметром -A: %s" -#: plugins/sudoers/def_data.c:412 +#: plugins/sudoers/def_data.c:432 msgid "Attempt to establish PAM credentials for the target user" msgstr "Спробувати встановити реєстраційні дані PAM для користувача, від імені якого виконуватимуться дії" -#: plugins/sudoers/def_data.c:416 +#: plugins/sudoers/def_data.c:436 msgid "Create a new PAM session for the command to run in" msgstr "Створити сеанс PAM для виконання команди" -#: plugins/sudoers/def_data.c:420 +#: plugins/sudoers/def_data.c:440 msgid "Perform PAM account validation management" msgstr "Виконати керування коректністю облікового запису PAM" -#: plugins/sudoers/def_data.c:424 +#: plugins/sudoers/def_data.c:444 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Максимальний номер у послідовності журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:428 +#: plugins/sudoers/def_data.c:448 msgid "Enable sudoers netgroup support" msgstr "Увімкнути підтримку мережевих груп у sudoers" -#: plugins/sudoers/def_data.c:432 +#: plugins/sudoers/def_data.c:452 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Перевіряти можливість запису до батьківського каталогу під час редагування фалів за допомогою sudoedit" -#: plugins/sudoers/def_data.c:436 +#: plugins/sudoers/def_data.c:456 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Переходити за символічними посиланнями під час редагування файлів за допомогою sudoedit" -#: plugins/sudoers/def_data.c:440 +#: plugins/sudoers/def_data.c:460 msgid "Query the group plugin for unknown system groups" msgstr "Надсилати запит до додатка груп щодо невідомих груп системи" -#: plugins/sudoers/def_data.c:444 +#: plugins/sudoers/def_data.c:464 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Встановлювати відповідність мережевим групам за усім кортежем даних: користувачем, вузлом і доменом" -#: plugins/sudoers/def_data.c:448 +#: plugins/sudoers/def_data.c:468 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до журналу аудиту" -#: plugins/sudoers/def_data.c:452 +#: plugins/sudoers/def_data.c:472 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до журналу введення-виведення" -#: plugins/sudoers/def_data.c:456 +#: plugins/sudoers/def_data.c:476 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до файла журналу" -#: plugins/sudoers/def_data.c:460 +#: plugins/sudoers/def_data.c:480 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Визначати групи у sudoers і встановлювати відповідність не назві, а ідентифікатору групи" -#: plugins/sudoers/def_data.c:464 +#: plugins/sudoers/def_data.c:484 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Записи журналу, які виявляться довшими за це значення, буде поділено на декілька повідомлень журналу системи: %u" -#: plugins/sudoers/def_data.c:468 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Користувач, який буде власником усіх файлів журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:472 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Група, яка буде власником усіх файлів журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:476 +#: plugins/sudoers/def_data.c:496 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Режим доступу до файлів, яким слід скористатися для файлів журналу введення-виведення: 0%o" -#: plugins/sudoers/def_data.c:480 +#: plugins/sudoers/def_data.c:500 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Виконати команди за дескриптором файла замість виконання за шляхом: %s" -#: plugins/sudoers/def_data.c:484 +#: plugins/sudoers/def_data.c:504 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ігнорувати невідомі записи Defaults у sudoers замість показу попередження" -#: plugins/sudoers/def_data.c:488 +#: plugins/sudoers/def_data.c:508 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Час у секундах, який має минути, щоб команду буде перервано: %u" -#: plugins/sudoers/def_data.c:492 +#: plugins/sudoers/def_data.c:512 msgid "Allow the user to specify a timeout on the command line" msgstr "Надати змогу користувачеві встановлювати час очікування у командному рядку" -#: plugins/sudoers/def_data.c:496 +#: plugins/sudoers/def_data.c:516 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Скидати дані журналу введення-виведення на диск негайно, без буферизації" -#: plugins/sudoers/def_data.c:500 +#: plugins/sudoers/def_data.c:520 msgid "Include the process ID when logging via syslog" msgstr "Включати ідентифікатор процесу до журналів syslog" -#: plugins/sudoers/def_data.c:504 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Тип запису часової позначки розпізнавання: %s" -#: plugins/sudoers/def_data.c:508 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Authentication failure message: %s" msgstr "Повідомлення про помилку розпізнавання: %s" -#: plugins/sudoers/def_data.c:512 +#: plugins/sudoers/def_data.c:532 msgid "Ignore case when matching user names" msgstr "Ігнорувати регістр символів при пошуку імен користувачів" -#: plugins/sudoers/def_data.c:516 +#: plugins/sudoers/def_data.c:536 msgid "Ignore case when matching group names" msgstr "Ігнорувати регістр символів при пошуку назв груп" -#: plugins/sudoers/def_data.c:520 +#: plugins/sudoers/def_data.c:540 msgid "Log when a command is allowed by sudoers" msgstr "Записувати до журналу дані, коли виконання команди дозволене sudoers" -#: plugins/sudoers/def_data.c:524 +#: plugins/sudoers/def_data.c:544 msgid "Log when a command is denied by sudoers" msgstr "Записувати до журналу дані, коли виконання команди заборонене sudoers" -#: plugins/sudoers/def_data.c:528 +#: plugins/sudoers/def_data.c:548 msgid "Sudo log server(s) to connect to with optional port" msgstr "Сервер або сервери журналу sudo, з якими слід встановити з'єднання, з необов'язковим зазначенням порту" -#: plugins/sudoers/def_data.c:532 +#: plugins/sudoers/def_data.c:552 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Час очікування на дії сервера журналу sudo у секундах: %u" -#: plugins/sudoers/def_data.c:536 +#: plugins/sudoers/def_data.c:556 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Увімкнути параметр сокета SO_KEEPALIVE на сокеті, який з'єднано із сервером журналу" -#: plugins/sudoers/def_data.c:540 +#: plugins/sudoers/def_data.c:560 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Шлях до файла пакета CA сервера аудиту: %s" -#: plugins/sudoers/def_data.c:544 +#: plugins/sudoers/def_data.c:564 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Шлях до файла сертифікатів sudoers: %s" -#: plugins/sudoers/def_data.c:548 +#: plugins/sudoers/def_data.c:568 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Шлях до файла закритого ключа sudoers: %s" -#: plugins/sudoers/def_data.c:552 +#: plugins/sudoers/def_data.c:572 msgid "Verify that the log server's certificate is valid" msgstr "Перевірити, чи є сертифікат сервера журналювання чинним" -#: plugins/sudoers/def_data.c:556 +#: plugins/sudoers/def_data.c:576 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Дозволити використання невідомих значень імені користувача і/або ідентифікатора групи для runas" -#: plugins/sudoers/def_data.c:560 +#: plugins/sudoers/def_data.c:580 msgid "Only permit running commands as a user with a valid shell" msgstr "Дозволяти виконання команд лише від імені користувачів із коректним записом командної оболонки" -#: plugins/sudoers/def_data.c:564 +#: plugins/sudoers/def_data.c:584 msgid "Set the pam remote user to the user running sudo" msgstr "Встановити для віддаленого користувача PAM те саме ім'я, що і для користувача, від імені якого запущено sudo" -#: plugins/sudoers/def_data.c:568 +#: plugins/sudoers/def_data.c:588 msgid "Set the pam remote host to the local host name" msgstr "Встановити для віддаленого вузла PAM назву локального вузла" -#: plugins/sudoers/def_data.c:572 +#: plugins/sudoers/def_data.c:592 #, c-format msgid "Working directory to change to before executing the command: %s" msgstr "Робочий каталог, до якого слід перейти перед виконанням команди: %s" -#: plugins/sudoers/def_data.c:576 +#: plugins/sudoers/def_data.c:596 #, c-format msgid "Root directory to change to before executing the command: %s" msgstr "Кореневий каталог, до якого слід перейти перед виконанням команди: %s" -#: plugins/sudoers/def_data.c:580 +#: plugins/sudoers/def_data.c:600 #, c-format msgid "The format of logs to produce: %s" msgstr "Формат журналу: %s" -#: plugins/sudoers/def_data.c:584 +#: plugins/sudoers/def_data.c:604 msgid "Enable SELinux RBAC support" msgstr "Увімкнути підтримку RBAC SELinux" -#: plugins/sudoers/def_data.c:588 +#: plugins/sudoers/def_data.c:608 #, c-format msgid "Path to the file that is created the first time sudo is run: %s" msgstr "Шлях до файла, який було створено під час першого запуску sudo: %s" -#: plugins/sudoers/def_data.c:592 +#: plugins/sudoers/def_data.c:612 msgid "Intercept further commands and apply sudoers restrictions to them" msgstr "Перехоплювати подальші команди і застосовувати до них обмеження sudoers" -#: plugins/sudoers/def_data.c:596 +#: plugins/sudoers/def_data.c:616 msgid "Log sub-commands run by the original command" msgstr "Записувати до журналу підкоманди, які запущено початковою командою" -#: plugins/sudoers/def_data.c:600 +#: plugins/sudoers/def_data.c:620 msgid "Log the exit status of commands" msgstr "Записувати до журналу стан виходу команд" -#: plugins/sudoers/def_data.c:604 +#: plugins/sudoers/def_data.c:624 msgid "Subsequent commands in an intercepted session must be authenticated" msgstr "Для виконання наступних команд у перехопленому сеансі слід пройти розпізнавання" -#: plugins/sudoers/def_data.c:608 +#: plugins/sudoers/def_data.c:628 msgid "Allow an intercepted command to run set setuid or setgid programs" msgstr "Дозволити перехопленій команді запускати програми зі встановлення setuid або setgid" -#: plugins/sudoers/def_data.c:612 +#: plugins/sudoers/def_data.c:632 #, c-format msgid "The maximum size to which the process's address space may grow (in bytes): %s" msgstr "Максимальний розмір, до якого може зростати адресний простір процесу (у байтах): %s" -#: plugins/sudoers/def_data.c:616 +#: plugins/sudoers/def_data.c:636 #, c-format msgid "The largest size core dump file that may be created (in bytes): %s" msgstr "Найбільший розмір файла дампа ядра, який може бути створено (у байтах): %s" -#: plugins/sudoers/def_data.c:620 +#: plugins/sudoers/def_data.c:640 #, c-format msgid "The maximum amount of CPU time that the process may use (in seconds): %s" msgstr "Максимальна кількість часу процесора, який може використовувати процес (у секундах): %s" -#: plugins/sudoers/def_data.c:624 +#: plugins/sudoers/def_data.c:644 #, c-format msgid "The maximum size of the data segment for the process (in bytes): %s" msgstr "Максимальний розмір сегмента даних для процесу (у байтах): %s" -#: plugins/sudoers/def_data.c:628 +#: plugins/sudoers/def_data.c:648 #, c-format msgid "The largest size file that the process may create (in bytes): %s" msgstr "Найбільший розмір файла, який може створювати процес (у байтах): %s" -#: plugins/sudoers/def_data.c:632 +#: plugins/sudoers/def_data.c:652 #, c-format msgid "The maximum number of locks that the process may establish: %s" msgstr "Максимальна кількість блокувань, які може встановлювати процес: %s" -#: plugins/sudoers/def_data.c:636 +#: plugins/sudoers/def_data.c:656 #, c-format msgid "The maximum size that the process may lock in memory (in bytes): %s" msgstr "Максимальний розмір, який процес може блокувати у пам'яті (у байтах): %s" -#: plugins/sudoers/def_data.c:640 +#: plugins/sudoers/def_data.c:660 #, c-format msgid "The maximum number of files that the process may have open: %s" msgstr "Максимальна кількість файлів, які може відкривати процес: %s" -#: plugins/sudoers/def_data.c:644 +#: plugins/sudoers/def_data.c:664 #, c-format msgid "The maximum number of processes that the user may run simultaneously: %s" msgstr "Максимальна кількість процесів, які користувач може запускати одночасно: %s" -#: plugins/sudoers/def_data.c:648 +#: plugins/sudoers/def_data.c:668 #, c-format msgid "The maximum size to which the process's resident set size may grow (in bytes): %s" msgstr "Максимальний розмір, до якого може зростати розмір резидентного набору (у байтах): %s" -#: plugins/sudoers/def_data.c:652 +#: plugins/sudoers/def_data.c:672 #, c-format msgid "The maximum size to which the process's stack may grow (in bytes): %s" msgstr "Максимальний розмір, до якого може зростати стос процесу (у байтах): %s" -#: plugins/sudoers/def_data.c:656 +#: plugins/sudoers/def_data.c:676 msgid "Attempt authentication even when in non-interactive mode" msgstr "Намагатися пройти розпізнавання, навіть якщо працюємо не в інтерактивному режимі" -#: plugins/sudoers/def_data.c:660 +#: plugins/sudoers/def_data.c:680 msgid "Store plaintext passwords in I/O log input" msgstr "Зберігати звичайний текст паролів у вхідних даних журналу введення-виведення" -#: plugins/sudoers/def_data.c:664 +#: plugins/sudoers/def_data.c:684 msgid "List of regular expressions to use when matching a password prompt" msgstr "Список формальних виразів для встановлення відповідності при запиті пароля" -#: plugins/sudoers/def_data.c:668 +#: plugins/sudoers/def_data.c:688 #, c-format msgid "The mechanism used by the intercept and log_subcmds options: %s" msgstr "Механізм, який використано для параметрів intercept і log_subcmds: %s" -#: plugins/sudoers/def_data.c:672 +#: plugins/sudoers/def_data.c:692 +msgid "Attempt to verify the command and arguments after execution" +msgstr "Спробувати перевірити команду і аргументи після виконання" + +#: plugins/sudoers/def_data.c:696 #, c-format msgid "AppArmor profile to use in the new security context: %s" msgstr "Профіль AppArmor, який слід використати у новому контексті захисту: %s" @@ -2553,31 +2639,31 @@ msgstr "некоректний тип Defaults, 0x%x, для параметра msgid "value \"%s\" is invalid for option \"%s\"" msgstr "значення «%s» є некоректним для параметра «%s»" -#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 -#: plugins/sudoers/policy.c:216 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format msgid "path name for \"%s\" too long" msgstr "назва шляху для «%s» є надто довгою" -#: plugins/sudoers/defaults.c:1133 +#: plugins/sudoers/defaults.c:1134 #, c-format msgid "values for \"%s\" must start with a '/', '~', or '*'" msgstr "значення для «%s» має починатися з «/», «~» або «*»" -#: plugins/sudoers/defaults.c:1140 +#: plugins/sudoers/defaults.c:1141 #, c-format msgid "values for \"%s\" must start with a '/'" msgstr "значення для «%s» має починатися з «/»" -#: plugins/sudoers/env.c:412 +#: plugins/sudoers/env.c:426 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: помилкове значення envp, невідповідність довжин" -#: plugins/sudoers/env.c:1095 +#: plugins/sudoers/env.c:1109 msgid "unable to rebuild the environment" msgstr "не вдалося перебудувати середовище" -#: plugins/sudoers/env.c:1169 +#: plugins/sudoers/env.c:1183 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "вибачте, вам не дозволено встановлювати такі змінні середовища: %s" @@ -2592,27 +2678,27 @@ msgstr "непідтримуваний тип контрольної суми, % msgid "%s: read error" msgstr "%s: помилка читання" -#: plugins/sudoers/group_plugin.c:83 +#: plugins/sudoers/group_plugin.c:169 #, c-format msgid "%s must be owned by uid %d" msgstr "%s має належати користувачеві з uid %d" -#: plugins/sudoers/group_plugin.c:87 +#: plugins/sudoers/group_plugin.c:173 #, c-format msgid "%s must only be writable by owner" msgstr "%s має бути доступним до запису лише для власника" -#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:576 +#: plugins/sudoers/group_plugin.c:185 plugins/sudoers/sssd.c:576 #, c-format msgid "unable to load %s: %s" msgstr "не вдалося завантажити %s: %s" -#: plugins/sudoers/group_plugin.c:102 +#: plugins/sudoers/group_plugin.c:197 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "не вдалося знайти символ «group_plugin» у %s" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:202 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: несумісна основна версія додатка обробки груп %d, мало бути — %d" @@ -2635,10 +2721,10 @@ msgstr "Пари локальних IP-адрес і масок мережі:\n" msgid "unable to update sequence file" msgstr "не вдалося оновити файл послідовності" -#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:907 -#: plugins/sudoers/iolog.c:1069 plugins/sudoers/iolog.c:1076 -#: plugins/sudoers/iolog.c:1197 plugins/sudoers/iolog.c:1204 -#: plugins/sudoers/iolog.c:1303 plugins/sudoers/iolog.c:1310 +#: plugins/sudoers/iolog.c:719 plugins/sudoers/iolog.c:909 +#: plugins/sudoers/iolog.c:1071 plugins/sudoers/iolog.c:1078 +#: plugins/sudoers/iolog.c:1199 plugins/sudoers/iolog.c:1206 +#: plugins/sudoers/iolog.c:1305 plugins/sudoers/iolog.c:1312 #, c-format msgid "unable to write to I/O log file: %s" msgstr "не вдалося здійснити запис до файла журналу введення-виведення: %s" @@ -2648,25 +2734,25 @@ msgstr "не вдалося здійснити запис до файла жур msgid "unable to create %s/%s" msgstr "не вдалося створити %s/%s" -#: plugins/sudoers/iolog.c:955 +#: plugins/sudoers/iolog.c:957 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: внутрішня помилка, файл журналу введення-виведення для події %d не відкрито" -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1182 -#: plugins/sudoers/iolog.c:1287 plugins/sudoers/timestamp.c:849 -#: plugins/sudoers/timestamp.c:941 plugins/sudoers/visudo.c:546 -#: plugins/sudoers/visudo.c:552 +#: plugins/sudoers/iolog.c:1056 plugins/sudoers/iolog.c:1184 +#: plugins/sudoers/iolog.c:1289 plugins/sudoers/timestamp.c:879 +#: plugins/sudoers/timestamp.c:971 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:558 msgid "unable to read the clock" msgstr "не вдалося прочитати час на годиннику" -#: plugins/sudoers/iolog.c:1279 plugins/sudoers/log_client.c:1228 -#: plugins/sudoers/log_client.c:1238 plugins/sudoers/log_client.c:1242 +#: plugins/sudoers/iolog.c:1281 plugins/sudoers/log_client.c:1193 +#: plugins/sudoers/log_client.c:1203 plugins/sudoers/log_client.c:1207 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: внутрішня помилка, некоректний сигнал %d" -#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:291 +#: plugins/sudoers/ldap.c:177 plugins/sudoers/ldap_conf.c:292 msgid "starttls not supported when using ldaps" msgstr "підтримки starttls, якщо використовується ldaps, не передбачено" @@ -2689,7 +2775,7 @@ msgstr "не вдалося ініціалізувати LDAP: %s" 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:1886 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1886 plugins/sudoers/parse_ldif.c:748 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "некоректний атрибут sudoOrder: %s" @@ -2699,12 +2785,12 @@ msgstr "некоректний атрибут sudoOrder: %s" msgid "%s: port too large" msgstr "%s: порт є надто великим" -#: plugins/sudoers/ldap_conf.c:260 +#: plugins/sudoers/ldap_conf.c:261 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "непідтримуваний тип адреси LDAP: %s" -#: plugins/sudoers/ldap_conf.c:287 +#: plugins/sudoers/ldap_conf.c:288 msgid "unable to mix ldap and ldaps URIs" msgstr "не можна використовувати суміш з адрес ldap і ldaps" @@ -2729,111 +2815,111 @@ msgstr "не вдалося відкрити систему аудита" msgid "unable to send audit message" msgstr "не вдалося надіслати повідомлення аудита" -#: plugins/sudoers/log_client.c:120 plugins/sudoers/log_client.c:407 -#: plugins/sudoers/log_client.c:1475 plugins/sudoers/log_client.c:2083 +#: plugins/sudoers/log_client.c:125 plugins/sudoers/log_client.c:412 +#: plugins/sudoers/log_client.c:1440 plugins/sudoers/log_client.c:2056 msgid "error in event loop" msgstr "помилка у циклі обробки подій" -#: plugins/sudoers/log_client.c:200 +#: plugins/sudoers/log_client.c:205 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Не вдалося створити об'єкт SSL_CTX: %s" -#: plugins/sudoers/log_client.c:225 +#: plugins/sudoers/log_client.c:230 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "не вдалося завантажити комплект служби сертифікації %s" -#: plugins/sudoers/log_client.c:247 +#: plugins/sudoers/log_client.c:252 #, c-format msgid "unable to load certificate %s" msgstr "не вдалося завантажити сертифікат %s" -#: plugins/sudoers/log_client.c:261 +#: plugins/sudoers/log_client.c:266 #, c-format msgid "unable to load private key %s" msgstr "не вдалося завантажити закритий ключ %s" -#: plugins/sudoers/log_client.c:270 +#: plugins/sudoers/log_client.c:275 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Не вдалося розмістити об'єкт SSL у пам'яті: %s" -#: plugins/sudoers/log_client.c:359 plugins/sudoers/log_client.c:364 +#: plugins/sudoers/log_client.c:364 plugins/sudoers/log_client.c:369 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "Не вдалося встановити з'єднання TLS із %s:%s: %s" -#: plugins/sudoers/log_client.c:538 +#: plugins/sudoers/log_client.c:543 msgid "TLS initialization was unsuccessful" msgstr "Спроба ініціалізувати TLS завершилася невдало" -#: plugins/sudoers/log_client.c:548 +#: plugins/sudoers/log_client.c:553 msgid "TLS handshake was unsuccessful" msgstr "Спроба узгодити зв'язок TLS завершилася невдало" -#: plugins/sudoers/log_client.c:1246 +#: plugins/sudoers/log_client.c:1211 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: внутрішня помилка, некоректний стан виходу %d" -#: plugins/sudoers/log_client.c:1775 plugins/sudoers/log_client.c:1799 +#: plugins/sudoers/log_client.c:1740 plugins/sudoers/log_client.c:1764 msgid "lost connection to log server" msgstr "втрачено зв’язок з сервером журналу" -#: plugins/sudoers/log_client.c:1876 +#: plugins/sudoers/log_client.c:1841 msgid "missing write buffer" msgstr "не вказано буфер запису" -#: plugins/sudoers/log_client.c:2024 +#: plugins/sudoers/log_client.c:1995 msgid "unable to connect to log server" msgstr "не вдалося встановити з'єднання із сервером журналу" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:290 msgid "user NOT in sudoers" msgstr "користувача немає у списку sudoers" -#: plugins/sudoers/logging.c:300 +#: plugins/sudoers/logging.c:292 msgid "user NOT authorized on host" msgstr "користувача не уповноважено на дії на вузлі" -#: plugins/sudoers/logging.c:302 +#: plugins/sudoers/logging.c:294 msgid "command not allowed" msgstr "виконання команди заборонено" -#: plugins/sudoers/logging.c:323 +#: plugins/sudoers/logging.c:315 #, c-format msgid "%s is not in the sudoers file.\n" msgstr "%s немає у файлі sudoers.\n" -#: plugins/sudoers/logging.c:326 +#: plugins/sudoers/logging.c:318 #, c-format msgid "%s is not allowed to run sudo on %s.\n" msgstr "%s не має права виконувати sudo на %s.\n" -#: plugins/sudoers/logging.c:329 +#: plugins/sudoers/logging.c:321 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Вибачте, користувач %s не має права виконувати sudo на %s.\n" -#: plugins/sudoers/logging.c:332 +#: plugins/sudoers/logging.c:324 #, 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:342 +#: plugins/sudoers/logging.c:334 msgid "This incident has been reported to the administrator.\n" msgstr "Про цю подію подано звіт адміністратору.\n" -#: plugins/sudoers/logging.c:373 plugins/sudoers/sudoers.c:643 -#: plugins/sudoers/sudoers.c:645 plugins/sudoers/sudoers.c:647 -#: plugins/sudoers/sudoers.c:649 plugins/sudoers/sudoers.c:799 -#: plugins/sudoers/sudoers.c:801 +#: plugins/sudoers/logging.c:365 plugins/sudoers/sudoers.c:648 +#: plugins/sudoers/sudoers.c:650 plugins/sudoers/sudoers.c:652 +#: plugins/sudoers/sudoers.c:654 plugins/sudoers/sudoers.c:805 +#: plugins/sudoers/sudoers.c:807 #, c-format msgid "%s: command not found" msgstr "%s: команду не знайдено" -#: plugins/sudoers/logging.c:375 plugins/sudoers/sudoers.c:639 +#: plugins/sudoers/logging.c:367 plugins/sudoers/sudoers.c:644 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2842,7 +2928,7 @@ msgstr "" "пропущено «%s» знайдений у «.»\n" "Скористайтеся командою «sudo ./%s», якщо вам потрібно виконати саме «%s»." -#: plugins/sudoers/logging.c:395 +#: plugins/sudoers/logging.c:387 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2851,24 +2937,24 @@ msgstr[1] "%u невдалих спроби введення пароля" msgstr[2] "%u невдалих спроб введення пароля" msgstr[3] "одна невдала спроба введення пароля" -#: plugins/sudoers/logging.c:485 +#: plugins/sudoers/logging.c:477 msgid "authentication failure" msgstr "помилка під час спроби розпізнавання" -#: plugins/sudoers/logging.c:524 plugins/sudoers/logging.c:543 +#: plugins/sudoers/logging.c:516 plugins/sudoers/logging.c:535 msgid "a password is required" msgstr "слід вказати пароль" -#: plugins/sudoers/logging.c:806 plugins/sudoers/logging.c:818 +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 msgid "problem parsing sudoers" msgstr "проблема із обробкою sudoers" -#: plugins/sudoers/logging.c:879 plugins/sudoers/logging.c:891 +#: plugins/sudoers/logging.c:873 plugins/sudoers/logging.c:885 #, c-format msgid "%s:%d:%d: %s" msgstr "%s:%d:%d: %s" -#: plugins/sudoers/logging.c:1068 +#: plugins/sudoers/logging.c:1062 #, c-format msgid "unable to write log file: %s" msgstr "не вдалося виконати запис до файла журналу: %s" @@ -2883,7 +2969,7 @@ msgstr "контрольна сума для %s (%s) має помилкову msgid "digest for %s (%s) is not in %s form" msgstr "контрольну суму для %s (%s) подано не у формі %s" -#: plugins/sudoers/parse.c:585 +#: plugins/sudoers/parse.c:591 #, c-format msgid "" "\n" @@ -2892,7 +2978,7 @@ msgstr "" "\n" "Роль LDAP: %s\n" -#: plugins/sudoers/parse.c:588 +#: plugins/sudoers/parse.c:594 msgid "" "\n" "Sudoers entry:\n" @@ -2900,110 +2986,110 @@ msgstr "" "\n" "Запис sudoers:\n" -#: plugins/sudoers/parse.c:590 +#: plugins/sudoers/parse.c:596 msgid " RunAsUsers: " msgstr " Користувачі для запуску: " -#: plugins/sudoers/parse.c:605 +#: plugins/sudoers/parse.c:611 msgid " RunAsGroups: " msgstr " Групи для запуску: " -#: plugins/sudoers/parse.c:615 +#: plugins/sudoers/parse.c:621 msgid " Options: " msgstr " Параметри: " -#: plugins/sudoers/parse.c:679 +#: plugins/sudoers/parse.c:685 msgid " Commands:\n" msgstr " Команди:\n" -#: plugins/sudoers/parse.c:870 +#: plugins/sudoers/parse.c:876 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Відповідність записів Defaults для %s на %s:\n" -#: plugins/sudoers/parse.c:888 +#: plugins/sudoers/parse.c:894 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Типові значення для запуску від імені і команд для %s:\n" -#: plugins/sudoers/parse.c:906 +#: plugins/sudoers/parse.c:912 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Користувач %s має право виконувати на %s такі команди:\n" -#: plugins/sudoers/parse.c:921 +#: plugins/sudoers/parse.c:927 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Користувач %s не має права виконувати sudo на %s.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:618 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "ігноруємо неповний запис sudoRole: cn: %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:678 #, c-format msgid "invalid LDIF attribute: %s" msgstr "некоректний атрибут LDIF: %s" -#: plugins/sudoers/policy.c:80 plugins/sudoers/policy.c:111 +#: plugins/sudoers/policy.c:81 plugins/sudoers/policy.c:112 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "оболонкою sudo встановлено некоректне значення параметра %.*s" -#: plugins/sudoers/policy.c:351 plugins/sudoers/testsudoers.c:268 +#: plugins/sudoers/policy.c:358 plugins/sudoers/testsudoers.c:268 msgid "unable to parse network address list" msgstr "не вдалося обробити список мережевих адрес" -#: plugins/sudoers/policy.c:508 +#: plugins/sudoers/policy.c:526 msgid "user name not set by sudo front-end" msgstr "ім'я користувача не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:512 +#: plugins/sudoers/policy.c:530 msgid "user-ID not set by sudo front-end" msgstr "ідентифікатор користувача не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:516 +#: plugins/sudoers/policy.c:534 msgid "group-ID not set by sudo front-end" msgstr "ідентифікатор групи не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:520 +#: plugins/sudoers/policy.c:538 msgid "host name not set by sudo front-end" msgstr "назву вузла не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:730 #, c-format msgid "invalid working directory: %s" msgstr "некоректний робочий каталог: %s" -#: plugins/sudoers/policy.c:886 +#: plugins/sudoers/policy.c:914 #, c-format msgid "invalid chroot directory: %s" msgstr "некоректний каталог chroot: %s" -#: plugins/sudoers/policy.c:1071 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/policy.c:1101 plugins/sudoers/visudo.c:259 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/policy.c:1141 plugins/sudoers/policy.c:1178 -#: plugins/sudoers/policy.c:1200 plugins/sudoers/policy.c:1226 +#: plugins/sudoers/policy.c:1171 plugins/sudoers/policy.c:1208 +#: plugins/sudoers/policy.c:1230 plugins/sudoers/policy.c:1256 #, c-format msgid "%s: invalid mode flags from sudo front end: 0x%x" msgstr "%s: некоректні прапорці режиму від оболонки sudo: 0x%x" -#: plugins/sudoers/policy.c:1262 +#: plugins/sudoers/policy.c:1292 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Додаток правил sudoers версії %s\n" -#: plugins/sudoers/policy.c:1264 +#: plugins/sudoers/policy.c:1294 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматична перевірка файла sudoers версії %d\n" -#: plugins/sudoers/policy.c:1268 +#: plugins/sudoers/policy.c:1298 #, c-format msgid "" "\n" @@ -3012,27 +3098,27 @@ msgstr "" "\n" "Шлях до sudoers: %s\n" -#: plugins/sudoers/policy.c:1271 +#: plugins/sudoers/policy.c:1301 #, c-format msgid "nsswitch path: %s\n" msgstr "Шлях до nsswitch: %s\n" -#: plugins/sudoers/policy.c:1273 +#: plugins/sudoers/policy.c:1303 #, c-format msgid "ldap.conf path: %s\n" msgstr "Шлях до ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1274 +#: plugins/sudoers/policy.c:1304 #, c-format msgid "ldap.secret path: %s\n" msgstr "Шлях до ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1307 +#: plugins/sudoers/policy.c:1337 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "неможливо зареєструвати процедуру перехоплення типу %d (версія %d.%d)" -#: plugins/sudoers/policy.c:1325 +#: plugins/sudoers/policy.c:1355 #, c-format msgid "unable to deregister hook of type %d (version %d.%d)" msgstr "неможливо скасувати реєстрацію процедури перехоплення типу %d (версія %d.%d)" @@ -3171,148 +3257,142 @@ msgstr "Не вдалося ініціалізувати джерело SSS. Ч msgid "unable to find symbol \"%s\" in %s" msgstr "не вдалося знайти символ «%s» у %s" -#: plugins/sudoers/sudoers.c:258 +#: plugins/sudoers/sudoers.c:263 #, c-format msgid "unable to get defaults from %s" msgstr "на вдалося отримати типові значення від %s" -#: plugins/sudoers/sudoers.c:265 +#: plugins/sudoers/sudoers.c:270 msgid "no valid sudoers sources found, quitting" msgstr "не знайдено коректних джерел даних sudoers, завершення роботи" -#: plugins/sudoers/sudoers.c:341 +#: plugins/sudoers/sudoers.c:346 #, c-format msgid "user not allowed to change root directory to %s" msgstr "користувачеві заборонено змінювати кореневий каталог на %s" -#: plugins/sudoers/sudoers.c:343 +#: plugins/sudoers/sudoers.c:348 #, c-format msgid "you are not permitted to use the -R option with %s" msgstr "вам не дозволено використовувати параметр -R з %s" -#: plugins/sudoers/sudoers.c:368 +#: plugins/sudoers/sudoers.c:373 #, c-format msgid "user not allowed to change directory to %s" msgstr "користувачеві заборонено змінювати каталог на %s" -#: plugins/sudoers/sudoers.c:369 +#: plugins/sudoers/sudoers.c:374 #, c-format msgid "you are not permitted to use the -D option with %s" msgstr "вам не дозволено використовувати параметр -D з %s" -#: plugins/sudoers/sudoers.c:396 +#: plugins/sudoers/sudoers.c:401 msgid "no command specified" msgstr "не вказано команду" -#: plugins/sudoers/sudoers.c:421 +#: plugins/sudoers/sudoers.c:426 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers вказує, що sudo не можна користуватися для виконання команд від root" -#: plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:476 msgid "user not allowed to override closefrom limit" msgstr "користувачеві заборонено перевизначати обмеження closefrom" -#: plugins/sudoers/sudoers.c:472 +#: plugins/sudoers/sudoers.c:477 msgid "you are not permitted to use the -C option" msgstr "вам не дозволено використовувати параметр -C" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:537 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник часового штампа (%s): не знайдено користувача з таким іменем" -#: plugins/sudoers/sudoers.c:547 +#: plugins/sudoers/sudoers.c:552 msgid "no tty" msgstr "немає tty" -#: plugins/sudoers/sudoers.c:548 +#: plugins/sudoers/sudoers.c:553 msgid "sorry, you must have a tty to run sudo" msgstr "вибачте, для виконання sudo вашому користувачеві потрібен tty" -#: plugins/sudoers/sudoers.c:555 +#: plugins/sudoers/sudoers.c:560 #, c-format msgid "invalid shell for user %s: %s" msgstr "некоректний запис оболонки для користувача %s: %s" -#: plugins/sudoers/sudoers.c:638 +#: plugins/sudoers/sudoers.c:643 msgid "command in current directory" msgstr "команда у поточному каталозі" -#: plugins/sudoers/sudoers.c:653 +#: plugins/sudoers/sudoers.c:658 msgid "\"cd\" is a shell built-in command, it cannot be run directly." msgstr "«cd» є вбудованою командою оболонки, її не може бути запущено безпосередньо." -#: plugins/sudoers/sudoers.c:655 +#: plugins/sudoers/sudoers.c:660 msgid "the -s option may be used to run a privileged shell." msgstr "параметр -s може бути використано для запуску привілейованої оболонки." -#: plugins/sudoers/sudoers.c:657 +#: plugins/sudoers/sudoers.c:662 msgid "the -D option may be used to run a command in a specific directory." msgstr "параметр -D може бути використано для запуску команди у вказаному каталозі." -#: plugins/sudoers/sudoers.c:666 +#: plugins/sudoers/sudoers.c:671 msgid "user not allowed to set a command timeout" msgstr "користувачеві заборонено встановлювати час очікування на виконання команди" -#: plugins/sudoers/sudoers.c:668 +#: plugins/sudoers/sudoers.c:673 msgid "sorry, you are not allowed set a command timeout" msgstr "вибачте, вам не дозволено встановлювати час очікування на виконання команди" -#: plugins/sudoers/sudoers.c:676 +#: plugins/sudoers/sudoers.c:681 msgid "user not allowed to preserve the environment" msgstr "користувачеві заборонено зберігати середовище" -#: plugins/sudoers/sudoers.c:678 +#: plugins/sudoers/sudoers.c:683 msgid "sorry, you are not allowed to preserve the environment" msgstr "вибачте, вам не дозволено зберігати середовище" -#: plugins/sudoers/sudoers.c:1053 +#: plugins/sudoers/sudoers.c:1073 msgid "sudoedit doesn't need to be run via sudo" msgstr "Немає потреби у запуску sudoedit за допомогою sudo" -#: plugins/sudoers/sudoers.c:1110 plugins/sudoers/sudoreplay.c:1584 +#: plugins/sudoers/sudoers.c:1118 plugins/sudoers/sudoreplay.c:1584 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "не вдалося прочитати %s" -#: plugins/sudoers/sudoers.c:1135 plugins/sudoers/visudo.c:485 -#: plugins/sudoers/visudo.c:764 -#, c-format -msgid "unable to stat %s" -msgstr "не вдалося виконати stat для %s" - -#: plugins/sudoers/sudoers.c:1139 plugins/sudoers/visudo.c:1058 +#: plugins/sudoers/sudoers.c:1147 plugins/sudoers/visudo.c:1064 #, c-format msgid "%s is not a regular file" msgstr "%s не є звичайним файлом" -#: plugins/sudoers/sudoers.c:1143 plugins/sudoers/timestamp.c:252 toke.l:1247 +#: plugins/sudoers/sudoers.c:1151 plugins/sudoers/timestamp.c:263 toke.l:1247 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s належить uid %u, має належати %u" -#: plugins/sudoers/sudoers.c:1147 toke.l:1252 +#: plugins/sudoers/sudoers.c:1155 plugins/sudoers/timestamp.c:270 toke.l:1252 #, c-format msgid "%s is world writable" msgstr "Запис до «%s» можливий для довільного користувача" -#: plugins/sudoers/sudoers.c:1151 toke.l:1255 +#: plugins/sudoers/sudoers.c:1159 plugins/sudoers/timestamp.c:275 toke.l:1255 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s належить gid %u, має належати %u" -#: plugins/sudoers/sudoers.c:1184 +#: plugins/sudoers/sudoers.c:1194 #, c-format msgid "only root can use \"-c %s\"" msgstr "використовувати «-c %s» може лише root" -#: plugins/sudoers/sudoers.c:1203 +#: plugins/sudoers/sudoers.c:1213 #, c-format msgid "unknown login class %s" msgstr "невідомий клас входу %s" -#: plugins/sudoers/sudoers.c:1290 plugins/sudoers/sudoers.c:1305 +#: plugins/sudoers/sudoers.c:1300 plugins/sudoers/sudoers.c:1315 #, c-format msgid "unable to resolve host %s" msgstr "не вдалося визначити адресу вузла %s" @@ -3410,17 +3490,17 @@ msgstr "помилкове завершальне «!»" msgid "unknown search type %d" msgstr "невідомий тип пошуку %d" -#: plugins/sudoers/sudoreplay.c:1651 +#: plugins/sudoers/sudoreplay.c:1650 #, 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:1654 +#: plugins/sudoers/sudoreplay.c:1652 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "використання: %s [-h] [-d каталог] -l [вираз для пошуку]\n" -#: plugins/sudoers/sudoreplay.c:1663 +#: plugins/sudoers/sudoreplay.c:1666 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -3429,7 +3509,7 @@ msgstr "" "%s — відтворення журналів сеансів sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1665 +#: plugins/sudoers/sudoreplay.c:1668 msgid "" "\n" "Options:\n" @@ -3485,127 +3565,122 @@ msgstr "" "\n" "Не знайдено відповідника команди" -#: plugins/sudoers/timestamp.c:260 -#, c-format -msgid "%s is group writable" -msgstr "%s доступний до запису учасниками групи" - -#: plugins/sudoers/timestamp.c:328 plugins/sudoers/timestamp.c:663 +#: plugins/sudoers/timestamp.c:354 plugins/sudoers/timestamp.c:693 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "не вдалося обрізати файл часової позначки до %lld байтів" -#: plugins/sudoers/timestamp.c:860 +#: plugins/sudoers/timestamp.c:890 msgid "ignoring time stamp from the future" msgstr "ігноруємо часову позначку з майбутнього" -#: plugins/sudoers/timestamp.c:883 +#: plugins/sudoers/timestamp.c:913 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "занадто далека часова позначка у майбутньому: %20.20s" -#: plugins/sudoers/timestamp.c:1005 +#: plugins/sudoers/timestamp.c:1042 #, c-format msgid "unable to lock time stamp file %s" msgstr "не вдалося заблокувати файл часової позначки %s" -#: plugins/sudoers/timestamp.c:1049 plugins/sudoers/timestamp.c:1069 -#, c-format -msgid "lecture status path too long: %s/%s" -msgstr "шлях до даних щодо стану отримання настанов є занадто довгим: %s/%s" - #: plugins/sudoers/toke_util.c:156 msgid "sudoedit should not be specified with a path" msgstr "sudoedit не слід вказувати разом із шляхом" -#: plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:254 msgid "the -x option will be removed in a future release" msgstr "параметр -x буде вилучено у наступному випуску" -#: plugins/sudoers/visudo.c:251 +#: plugins/sudoers/visudo.c:256 msgid "please consider using the cvtsudoers utility instead" msgstr "будь ласка, скористайтеся замість нього програмою cvtsudoers" -#: plugins/sudoers/visudo.c:306 plugins/sudoers/visudo.c:692 +#: plugins/sudoers/visudo.c:311 plugins/sudoers/visudo.c:698 #, c-format msgid "press return to edit %s: " msgstr "натисніть Enter для редагування %s: " -#: plugins/sudoers/visudo.c:321 +#: plugins/sudoers/visudo.c:326 #, c-format msgid "contents of edit session left in %s" msgstr "дані сеансу редагування залишилися у %s" -#: plugins/sudoers/visudo.c:397 +#: plugins/sudoers/visudo.c:402 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "вказаного редактора (%s) не існує" -#: plugins/sudoers/visudo.c:399 +#: plugins/sudoers/visudo.c:404 #, c-format msgid "no editor found (editor path = %s)" msgstr "не знайдено жодного редактора (шлях до редактора = %s)" -#: plugins/sudoers/visudo.c:505 plugins/sudoers/visudo.c:513 +#: plugins/sudoers/visudo.c:491 plugins/sudoers/visudo.c:770 +#, c-format +msgid "unable to stat %s" +msgstr "не вдалося виконати stat для %s" + +#: plugins/sudoers/visudo.c:511 plugins/sudoers/visudo.c:519 msgid "write error" msgstr "помилка запису" -#: plugins/sudoers/visudo.c:559 +#: plugins/sudoers/visudo.c:565 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не вдалося обробити stat файл тимчасових даних (%s), %s не змінено" -#: plugins/sudoers/visudo.c:566 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "файл тимчасових даних має нульовий об’єм (%s), %s не змінено" -#: plugins/sudoers/visudo.c:572 +#: plugins/sudoers/visudo.c:578 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "помилка редактора (%s), %s не змінено" -#: plugins/sudoers/visudo.c:594 +#: plugins/sudoers/visudo.c:600 #, c-format msgid "%s unchanged" msgstr "%s не змінено" -#: plugins/sudoers/visudo.c:639 +#: plugins/sudoers/visudo.c:645 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не вдалося повторно відкрити файл тимчасових даних (%s), %s не змінено." -#: plugins/sudoers/visudo.c:652 +#: plugins/sudoers/visudo.c:658 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "не вдалося обробити файл тимчасових даних (%s), невідома помилка" -#: plugins/sudoers/visudo.c:738 plugins/sudoers/visudo.c:768 -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:744 plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:781 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не вдалося встановити (uid, gid) %s у значення (%u, %u)" -#: plugins/sudoers/visudo.c:803 +#: plugins/sudoers/visudo.c:809 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s і %s не перебувають у одній файловій системі, використовуємо mv для перейменування" -#: plugins/sudoers/visudo.c:814 +#: plugins/sudoers/visudo.c:820 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "помилка команди: «%s %s %s», %s не змінено" -#: plugins/sudoers/visudo.c:821 +#: plugins/sudoers/visudo.c:827 #, c-format msgid "error renaming %s, %s unchanged" msgstr "помилка перейменування %s, %s не змінено" -#: plugins/sudoers/visudo.c:841 +#: plugins/sudoers/visudo.c:847 msgid "What now? " msgstr "А зараз що? " -#: plugins/sudoers/visudo.c:855 +#: plugins/sudoers/visudo.c:861 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -3617,41 +3692,41 @@ msgstr "" " (x) — вийти без внесення змін до файла sudoers\n" " (Q) — вийти зі збереженням файла sudoers (НЕБЕЗПЕЧНО!)\n" -#: plugins/sudoers/visudo.c:901 +#: plugins/sudoers/visudo.c:907 #, c-format msgid "unable to run %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/visudo.c:932 +#: plugins/sudoers/visudo.c:938 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: помилковий власник (uid, gid), має бути (%u, %u)\n" -#: plugins/sudoers/visudo.c:943 +#: plugins/sudoers/visudo.c:949 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: помилкові права доступу, режим доступу має бути 0%o\n" -#: plugins/sudoers/visudo.c:991 plugins/sudoers/visudo.c:998 +#: plugins/sudoers/visudo.c:997 plugins/sudoers/visudo.c:1004 #, c-format msgid "%s: parsed OK\n" msgstr "%s: вдала обробка\n" -#: plugins/sudoers/visudo.c:1017 +#: plugins/sudoers/visudo.c:1023 #, c-format msgid "%s busy, try again later" msgstr "%s зайнято, повторіть спробу пізніше" -#: plugins/sudoers/visudo.c:1021 +#: plugins/sudoers/visudo.c:1027 msgid "Edit anyway? [y/N]" msgstr "Редагувати попри усе? [y/N]" -#: plugins/sudoers/visudo.c:1117 +#: plugins/sudoers/visudo.c:1128 #, c-format msgid "Warning: %s:%d:%d: unused %s \"%s\"" msgstr "Попередження: %s:%d:%d: не використано %s «%s»" -#: plugins/sudoers/visudo.c:1229 +#: plugins/sudoers/visudo.c:1240 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -3660,13 +3735,14 @@ msgstr "" "%s — безпечне редагування файла sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1231 +#: plugins/sudoers/visudo.c:1242 msgid "" "\n" "Options:\n" " -c, --check check-only mode\n" " -f, --file=sudoers specify sudoers file location\n" " -h, --help display help message and exit\n" +" -I, --no-includes do not edit include files\n" " -q, --quiet less verbose (quiet) syntax error messages\n" " -s, --strict strict syntax checking\n" " -V, --version display version information and exit\n" @@ -3676,6 +3752,7 @@ msgstr "" " -c, --check режим лише перевірки\n" " -f, --file=файл вказати розташування файла sudoers\n" " -h, --help показати довідкове повідомлення і завершити роботу\n" +" -I, --no-includes не редагувати включені файли\n" " -q, --quiet стислі повідомлення щодо синтаксичних помилок\n" " -s, --strict строга перевірка синтаксису\n" " -V, --version показати дані щодо версії і завершити роботу\n" @@ -3712,6 +3789,12 @@ msgstr "неочікуваний розрив рядків у рядку" msgid "too many levels of includes" msgstr "занадто високий рівень вкладеності" +#~ msgid "%s is group writable" +#~ msgstr "%s доступний до запису учасниками групи" + +#~ msgid "lecture status path too long: %s/%s" +#~ msgstr "шлях до даних щодо стану отримання настанов є занадто довгим: %s/%s" + #~ msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" #~ msgstr "Попередження: %s:%d:%d: цикл у %s «%s»" diff --git a/po/cs.mo b/po/cs.mo index 426ae846351c03ac6dffe00ae9ad77f805f7b5d8..bc3aaacf812bcffea469f46f4d8bf58cf804e6db 100644 GIT binary patch delta 5910 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 Qv%`m`UlkRuD6i=HZ_Q^}?EnA( delta 5421 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\n" "Language-Team: Czech \n" "Language: cs\n" @@ -32,76 +32,75 @@ msgid "unable to restore registry" msgstr "registr nelze obnovit" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/gidlist.c:76 -#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "nelze alokovat paměť" @@ -115,23 +114,23 @@ msgstr "nelze získat údaje o %.*s" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s existuje, ale nejedná se o adresář (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "%s nelze otevřít" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "%.*s nelze otevřít" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "adresář %.*s nelze vytvořit" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "%.*s nelze otevřít" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "regulární výraz je příliš dlouhý" @@ -140,8 +139,8 @@ msgstr "regulární výraz je příliš dlouhý" msgid "Unknown signal" msgstr "Neznámý signál" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "neplatná hodnota" @@ -153,87 +152,87 @@ msgstr "hodnota je příliš velká" msgid "value too small" msgstr "hodnota je příliš malá" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "neplatná hodnota Path „%s“ v %s, řádek %u" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "neplatná hodnota pro %s „%s“ v %s, řádek %u" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "nepodporovaný zdroj skupin „%s“ v %s, řádek %u" # This is about maximal GID. English text "max groups" is wrong. -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "neplatné maximum skupin „%s“ v %s, řádek %u" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "nelze získat údaje o %s" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s není obyčejný soubor" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s je vlastněn UID %u, avšak UID by mělo být %u" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s je zapisovatelný pro všechny" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s je zapisovatelný pro skupinu" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "nepodařilo se určit uzavření AppArmoru" -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "profil AppArmoru nelze změnit na %s" -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: zkrátit %s na nula bajtů? (y pro ano / n pro ne) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "%s nebude přepsáno" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "z %s nelze číst" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "do %s nelze zapsat" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "nelze získat údaje o %s" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: nejedná se o obyčejný soubor" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: chybná práva souboru: 0%o" @@ -243,61 +242,60 @@ msgid "unable to restore current working directory" msgstr "současný pracovní adresář nelze obnovit" # This sets an inhertiable set of Solaris process privileges. -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "nelze nastavit množinu děditelných oprávnění" # This sets a limit set of Solaris process privileges. -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "nelze nastavit množinu omezující oprávnění" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "neznámá přihlašovací třída %s" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "nelze nastavit kontext uživatele" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "nelze nastavit prioritu procesu" -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "kořenový adresář nelze změnit na %s" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "nelze změnit UID na (%u, %u)" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "pracovní adresář nelze změnit na %s" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "začíná se od %s" -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "obsluhu pro signál %d nelze nastavit" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "režim zachytávání není na tomto systému se selinuxovým RBAC podporován" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "na tomto systému se selinuxovým RBAC nelze zaznamenávat podpříkazy" @@ -305,58 +303,84 @@ msgstr "na tomto systému se selinuxovým RBAC nelze zaznamenávat podpříkazy" msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "z PRIV_LIMIT nelze odstranit PRIV_PROC_EXEC" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "událost nelze přidat do fronty" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "příkaz nenastaven bezpečnostní politikou" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "příkaz zamítnut politikou" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "chyba schvalovacího modulu" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "chyba modulu s politikou" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "neplatný požadavek PolicyCheckRequest" -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "požadavek od klienta je příliš dlouhý: %zu" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "nelze rozbalit %s o velikosti %zu" -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "nečekaná hodnota type_case %d v %s od %s" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "zpráva serveru je příliš dlouhá: %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "chyba vstupně-výstupního modulu" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "příkaz zamítnut vstupně-výstupním modulem" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "chyba pozastavování protokolu" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "chyba při měnění velikosti okna" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "chyba při čtení z dvojice socketů" @@ -366,224 +390,213 @@ msgstr "chyba při čtení z dvojice socketů" msgid "unexpected reply type on backchannel: %d" msgstr "neočekávaný druh odpovědi na zpětném kanálu: %d" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "řídicí terminál nelze nastavit" -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "nelze vytvořit rouru" -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "od rodiče nelze přijmout zprávu" -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "nelze vytvořit potomka" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "nelze obnovit značku TTY" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "%s nelze spustit" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "modul s politikami zrušil inicializaci relace" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "nelze vytvořit sockety" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "chyba ve smyčce s událostmi" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "nedostatek místa pro argumenty volání execve" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" -msgstr "nelze přečíst %s volání execve pro proces %d" +msgid "internal error, %s overflow" +msgstr "vnitřní chyba, přetečení v %s" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "nelze nastavit registry pro proces %d" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "proces %d nečekaně skončil" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "nelze nastavit filtr seccomp" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "argument interpretru, očekáváno „%s“, obdrženo „%s“" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "cesta neodpovídá, očekáváno „%s“, obdrženo „%s“" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "%s[%d] neodpovídá, očekáváno „%s“, obdrženo „%s“" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "proces %d má nečekaný stav 0x%x" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "nelze získat zprávu o události v procesu %d" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "nelze získat registry procesu %d" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "nelze alokovat PTY" -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "chyba vstupně-výstupního modulu" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "příkaz zamítnut vstupně-výstupním modulem" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "chyba pozastavování protokolu" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "chyba při měnění velikosti okna" - -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "nelze obnovit obsluhu signálu %d" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "dohlížejícímu procesu nelze odeslat zprávu" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "chyba v %s na řádku %d při zavádění modulu „%s“" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s musí být vlastněn UID %d" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s musí být zapisovatelný jen vlastníkem" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "ignoruje je opakovaný modul „%s“ v %s na řádku %d" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "%s nelze zavést: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "v %s nelze nalézt symbol „%s“" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "neslučitelná hlavní verze modulu %d (očekáváno %d) nalezena v %s" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignoruje se modul politiky „%s“ v %s na řádku %d" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "lze zadat pouze jeden modul s politikou" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "v %2$s nalezen neznámý druh modulu %1$d" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "modul s politikou %s neobsahuje metodu check_policy" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "vnitřní chyba, přetečení v %s" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "neplatný název proměnné prostředí: %s" -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argument u -C musí být číslo větší nebo rovno 3" -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "nesmíte zadávat přepínače -i a -s spolu" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "nesmíte zadávat přepínače -i a -E spolu" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "přepínač -E není platný v režimu úprav" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "v režimu úprav nesmíte zadávat proměnné prostředí" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "přepínač -U smí být použit jen s přepínačem -l" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "přepínače -A a -S smí nesmí být použity spolu" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "na této platformě není sudoedit podporován" -#: src/parse_args.c:757 +#: src/parse_args.c:767 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Smí být zadán pouze jeden z přepínačů -e, -h, -i, -K, -l, -s, -v nebo -V" -#: src/parse_args.c:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "Smí být zadán pouze jeden z přepínačů -K, -k nebo -N" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -592,7 +605,7 @@ msgstr "" "%s – upraví soubory jako jiný uživatel\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -601,7 +614,7 @@ msgstr "" "%s – vykoná příkaz jako jiný uživatel\n" "\n" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -609,131 +622,131 @@ msgstr "" "\n" "Přepínače:\n" -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "dotazuje se na heslo prostřednictvím pomocného programu" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "použije zadaný druh BSD autentizace" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "spustí příkaz na pozadí" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "při výzvě vydá zvukové znamení" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "uzavře všechny deskriptory souboru >= číslu" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "spustí příkaz se zadanou přihlašovací třídou BSD" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "změní pracovní adresář před spuštěním příkazu" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "při spuštění příkazu zachová uživatelské prostředí" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "zachová určité proměnné prostředí" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "místo spuštění příkazu upraví soubory" -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "spustí příkaz jako skupina určení názvem nebo ID" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "nastaví proměnnou HOME na domovský adresář uživatele" -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "zobrazí nápovědu a skončí" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "spustí příkaz na stroji (je-li podporováno modulem)" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "spustí přihlašovací shell jako cílový uživatel; příkaz lze rovněž zadat" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "úplně odstraní soubor s časovými údaji" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "zneplatní soubor s časovými údaji" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "vypíše oprávnění uživatele nebo zkontroluje určitý příkaz; pro delší výstup použijte dvakrát" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "neinteraktivní režim, nepoužijí se žádné dotazy" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "zachová vektor skupin namísto nastavení na skupiny cíle" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "použije určený dotaz na heslo" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "změní kořenový adresář přes spuštěním příkazu" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "vytvoří selinuxový bezpečnostní kontext se zadanou rolí" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "načte heslo ze standardní vstupu" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "spustí shell jako cílový uživatel; příkaz lze rovněž zadat" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "vytvoří selinuxový bezpečnostní kontext se zadaným typem" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "po uplynutí zadaného času ukončí příkaz" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "v režimu výpisu zobrazí oprávnění uživatele" -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "spustí příkaz (nebo upraví soubor) jako uživatel určený jménem nebo ID" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "zobrazí údaje o verzi a skončí" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "aktualizuje časové údaje uživatele bez spuštění příkazu" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "přestane zpracovávat argumenty příkazového řádku" @@ -833,37 +846,42 @@ msgstr "nepodařilo se nastavit kontext pro spuštění na %s" msgid "unable to set key creation context to %s" msgstr "nepodařilo se nastavit kontext pro vytváření klíčů na %s" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "je třeba alespoň jeden argument" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "Smí být zadán pouze jeden z přepínačů -c nebo -i" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "neplatné číslo deskriptoru souboru: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 #, c-format -msgid "unable to run %s as a login shell" -msgstr "%s nelze spustit jako přihlašovací shell" +msgid "The -%c option may not be used in edit mode." +msgstr "Přepínač -%c nesmí být použit v režimu úprav." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:184 src/sesh.c:189 +#, c-format +msgid "The -%c option may only be used in edit mode." +msgstr "Přepínač -%c smí být použit v režimu úprav." + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: úprava symbolických odkazů není dovolena" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: úprava souborů v adresáři, do kterého lze zapisovat, není dovolena" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "obsah relace s úpravami ponechán v %s" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "nelze získat seznam skupin" @@ -947,118 +965,122 @@ msgstr "neexistujete v databázi %s" msgid "unable to determine tty" msgstr "nelze určit terminál" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "Je nastaven příznak „žádná další oprávnění“, což brání sudu, aby běželo jako root" -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "Běží-li sudo v kontejneru, můžete potřebovat upravit nastavení kontejneru, aby se tento příznak vypnul." -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s musí být vlastněn UID %d a mít nastaven bit setuid" -#: src/sudo.c:964 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "efektivní UID není %d, nalézá se %s na souborovém systému s nastavenou volbou „nosuid“ nebo na souborovém systému NFS bez práv roota?" -#: src/sudo.c:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "efektivní UID není %d, je sudo nainstalované jako setuid vlastněné rootem?" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "nelze nastavit ID doplňkových skupin" -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "efektivní GID nelze nastavit na %u" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID nelze nastavit na %u" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "pole argumentů nenastaveno bezpečnostní politikou" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "pole proměnných prostředí nenastaveno bezpečnostní politikou" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "neočekávaný důvod ukončení potomka: %d" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "modul s politikami nelze inicializovat" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "modulu s politikami %s chybí metoda „check_policy“" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "modul s politikami %s nepodporuje získání seznamu oprávnění" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "modul s politikami %s nepodporuje přepínač -v" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "modul s politikami %s nepodporuje přepínače -k/-K" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "chyba při inicializaci vstupně-výstupního modulu %s" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "chyba při inicializaci vstupně-výstupního modulu" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "chyba při inicializaci auditního modulu %s" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s nelze zaznamenat chybovou událost%s%s" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s nelze zaznamenat přijímací událost%s%s " -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "chyba auditního modulu" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s nelze zaznamenat zamítací událost%s%s " -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "chyba při inicializaci schvalovacího modulu %s" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "příkaz zamítnut schvalovatelem" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "chyba schvalovacího modulu" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "nenalezen žádný dočasný adresář, do kterého lze zapisovat" @@ -1068,7 +1090,7 @@ msgstr "nenalezen žádný dočasný adresář, do kterého lze zapisovat" msgid "%s left unmodified" msgstr "%s ponechán nezměněn" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s nezměněn" @@ -1081,37 +1103,37 @@ msgstr "sesh: vnitřní chyba: lichý počet cest" msgid "sesh: unable to create temporary files" msgstr "sesh: nelze vytvořit dočasné soubory" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: zabit signálem" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: neznámá chyba %d" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "dočasné soubory nelze zkopírovat zpět na jejich původní místo" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "některé z dočasných souborů nelze zkopírovat zpět na jejich původní místo" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "UID nelze změnit na roota (%u)" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "chyba modulu: programu sudoedit chybí seznam souborů" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "nelze přečíst hodiny" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "zachytávací port nenastaven" @@ -1162,6 +1184,18 @@ msgstr "standardní vstup nelze zduplikovat voláním dup2" msgid "unable to restore stdin" msgstr "standardní vstup nelze obnovit" +#~ msgid "insufficient space for execve arguments" +#~ msgstr "nedostatek místa pro argumenty volání execve" + +#~ msgid "unable to read execve %s for process %d" +#~ msgstr "nelze přečíst %s volání execve pro proces %d" + +#~ msgid "requires at least one argument" +#~ msgstr "je třeba alespoň jeden argument" + +#~ msgid "unable to run %s as a login shell" +#~ msgstr "%s nelze spustit jako přihlašovací shell" + #~ msgid "unable to dup intercept fd" #~ msgstr "zachycený deskriptor souboru nelze zduplikovat" diff --git a/po/de.mo b/po/de.mo index 1ffb3872af624496dbb693357ca08d4a1bad9e81..2fa91ba9c6244b0c431983906bd677979a420c94 100644 GIT binary patch delta 5926 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 Q=uqQ~X_2A0nVD_>1;ph}asU7T delta 5397 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 AQ2+n{ diff --git a/po/de.po b/po/de.po index 0c5d4ee5fd..ee2307aa1e 100644 --- a/po/de.po +++ b/po/de.po @@ -4,10 +4,10 @@ # Mario Blättermann , 2012, 2014-2017, 2019-2022. msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.11b1\n" +"Project-Id-Version: sudo 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 11:15+0200\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-12 20:10+0200\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" "Language: de\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 22.04.1\n" +"X-Generator: Lokalize 22.08.1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -32,76 +32,75 @@ msgid "unable to restore registry" msgstr "Registrierungsdatenbank konnte nicht wiederhergestellt werden" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/gidlist.c:76 -#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "Speicher konnte nicht zugewiesen werden" @@ -115,23 +114,23 @@ msgstr "stat konnte nicht auf %.*s angewendet werden" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s existiert, aber ist kein Verzeichnis (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "%s konnte nicht geöffnet werden" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "%.*s konnte nicht geöffnet werden" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "Verzeichnis %.*s konnte nicht erstellt werden" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "%.*s konnte nicht geöffnet werden" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "regulärer Ausdruck ist zu groß" @@ -140,8 +139,8 @@ msgstr "regulärer Ausdruck ist zu groß" msgid "Unknown signal" msgstr "Unbekanntes Signal" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "ungültiger Wert" @@ -153,86 +152,86 @@ msgstr "Wert zu groß" msgid "value too small" msgstr "Wert zu klein" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "Ungültiger Pfad-Wert »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "Ungültiger Wert für %s »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "Nicht unterstützte Gruppenquelle »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "Ungültige Maximalzahl an Gruppen »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "stat konnte nicht auf %s angewendet werden" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s gehört Benutzer mit UID %u, sollte allerdings %u gehören" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s kann von allen verändert werden" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s kann von der Gruppe verändert werden" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "AppArmor-Zugriffskontrolle konnte nicht bestimmt werden." -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "AppArmor-Profil konnte nicht zu %s geändert werden" -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " -msgstr "%s: %s auf null Byte kürzen? (j/n) [n] " +msgstr "%s: %s auf null Byte kürzen? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "%s wird nicht überschrieben" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "Aus %s konnte nicht gelesen werden" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "%s konnte nicht beschrieben werden" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "stat konnte nicht auf %s angewendet werden" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: Keine reguläre Datei" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: falscher Dateimodus: 0%o" @@ -241,60 +240,59 @@ msgstr "%s: falscher Dateimodus: 0%o" msgid "unable to restore current working directory" msgstr "Aktueller Arbeitsordner konnte nicht wiederhergestellt werden" -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "Privilegien konnten nicht gesetzt werden" -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "Privilegien konnten nicht eingeschränkt werden" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "Unbekannte Anmeldungsklasse %s" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "Benutzerkontext konnte nicht gesetzt werden" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "Prozesspriorität konnte nicht gesetzt werden" -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "Wurzelverzeichnis konnte nicht zu %s geändert werden" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "Es konnte nicht zu »runas«-GID gewechselt werden (%u, %u)" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "In Verzeichnis »%s« konnte nicht gewechselt werden" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "beginnend mit %s" -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "Handler für Signal %d konnte nicht gesetzt werden" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "Abfangmodus wird mit SELinux RBAC auf diesem System nicht unterstützt" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "Unterbefehle können mit SELinux RBAC auf diesem System nicht protokolliert werden" @@ -302,58 +300,84 @@ msgstr "Unterbefehle können mit SELinux RBAC auf diesem System nicht protokolli msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "PRIV_PROC_EXEC konnte nicht von PRIV_LIMIT entfernt werden" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "Ereignis konnte nicht zur Warteschlange hinzugefügt werden" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "Befehl wurde durch Sicherheitsregelwerk nicht gesetzt" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "Befehl wurde durch Regelwerk abgewiesen" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "Genehmigungs-Plugin-Fehler" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "Regelwerk-Plugin-Fehler" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "ungültige PolicyCheckRequest" -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "Client-Anfrage ist zu groß: %zu" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "%s, Größe %zu, kann nicht entpackt werden" -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "unerwarteter Wert %d für type_case in %s aus %s" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "Server-Meldung ist zu groß: %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "E/A-Pluginfehler" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "Befehl wurde vom E/A-Plugin abgewiesen" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "Fehler bei der Aussetzung der Protokollierung" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "Fehler beim Ändern der Fenstergröße" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "Fehler beim Lesen des Socket-Paars" @@ -363,224 +387,213 @@ msgstr "Fehler beim Lesen des Socket-Paars" msgid "unexpected reply type on backchannel: %d" msgstr "Unerwarteter Antworttyp auf Rückmeldungskanal: %d" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "Kontrollierendes TTY konnte nicht gesetzt werden" -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "Weiterleitung konnte nicht erstellt werden" -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "Die Nachricht konnte nicht empfangen werden" -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "Es konnte nicht geforkt werden" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "TTY-Kennzeichnung konnte nicht wiederhergestellt werden" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "%s konnte nicht ausgeführt werden" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "Regelwerks-Plugin konnte Sitzung nicht initialisieren" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "Sockets konnten nicht hergestellt werden" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "Fehler in Ereignisschleife" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "Ungenügender Speicher für execve-Argumente" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" -msgstr "execve %s konnte für Prozess %d nicht gelesen werden" +msgid "internal error, %s overflow" +msgstr "Interner Fehler: %s-Überlauf" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "Register konnten für Prozess %d nicht gesetzt werden" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "Prozess %d wurde unerwartet beendet" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "seccomp-Filter konnte nicht gesetzt werden" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "Interpreter-Argument: »%s« wurde erwartet, »%s« erhalten" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "Pfadname passt nicht, »%s« wurde erwartet, »%s« erhalten" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "%s[%d] passt nicht, »%s« wurde erwartet, »%s« erhalten" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "Prozess %d hat den unerwarteten Status 0x%x" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "Ereignismeldung für Prozess %d konnte nicht erhalten werden" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "Register konnten für Prozess %d nicht erhalten werden" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "PTY konnte nicht vergeben werden" -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "E/A-Pluginfehler" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "Befehl wurde vom E/A-Plugin abgewiesen" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "Fehler bei der Aussetzung der Protokollierung" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "Fehler beim Ändern der Fenstergröße" - -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "Handler für Signal %d konnte nicht wiederhergestellt werden" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "Die Nachricht konnte nicht an den überwachenden Prozess verschickt werden" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "Fehler in %s, Zeile %d, während Plugin »%s« geladen wurde" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s muss Benutzer mit UID %d gehören" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s darf nur vom Besitzer beschreibbar sein" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "Doppelt vorhandenes Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "»%s« konnte nicht geladen werden: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "Symbol »%s« konnte in %s nicht gefunden werden" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "Inkompatible Hauptversion %d des Regelwerks (%d erwartet) wurde in %s gefunden" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "Regelwerks-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "Nur ein einziges Regelwerks-Plugin kann geladen werden" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "Unbekannter Plugintyp %d wurde in %s gefunden" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "Das Regelwerks-Plugin %s enthält keine check_policy-Methode" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "Interner Fehler: %s-Überlauf" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "Unzulässiger Name der Umgebungsvariable: %s" -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "Das Argument für -C muss eine Zahl größer oder gleich 3 sein" -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "Die Optionen -i und -s können nicht gemeinsam benutzt werden" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "Die Optionen -i und -E können nicht gemeinsam benutzt werden" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "Die Option -E ist im Bearbeiten-Modus ungültig" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "Im Bearbeiten-Modus können keine Umgebungsvariablen gesetzt werden" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "Die Option -U kann nur zusammen mit -l benutzt werden" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "Die Optionen -A und -S können nicht gemeinsam benutzt werden" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ist auf dieser Plattform nicht verfügbar" -#: src/parse_args.c:757 +#: src/parse_args.c:767 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Nur eine der Optionen -e, -h, -i, -K, -l, -s, -v oder -V darf angegeben werden" -#: src/parse_args.c:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "Nur eine der Optionen -K, -k oder -N darf angegeben werden" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -589,7 +602,7 @@ msgstr "" "%s - Dateien als anderer Benutzer verändern\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -598,7 +611,7 @@ msgstr "" "%s - Einen Befehl als anderer Benutzer ausführen\n" "\n" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -606,131 +619,131 @@ msgstr "" "\n" "Optionen:\n" -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "Hilfsprogramm zum Eingeben des Passworts verwenden" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "Angegebenen BSD-Legitimierungstypen verwenden" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "Befehl im Hintergrund ausführen" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "Bei Eingabeaufforderung Systemklang abspielen" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "Alle Dateideskriptoren >= num schließen" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "Befehl unter angegebener Login-Klasse ausführen" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "Arbeitsverzeichnis vor der Ausführung des Befehls wechseln" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "Benutzerumgebung beim Starten des Befehls beibehalten" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "Spezifische Umgebungsvariablen beibehalten" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "Dateien bearbeiten, statt einen Befehl auszuführen" -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "Befehl unter angegebenem Gruppennamen oder Gruppen-ID ausführen" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "HOME-Variable als Home-Verzeichnis des Zielbenutzers setzen" -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "Hilfe ausgeben und beenden" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "Befehl auf entferntem System ausführen (falls vom Plugin unterstützt)" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "Anmeldeshell als Zielbenutzer starten; es kann auch ein Befehl angegeben werden" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "Zeitstempeldateien komplett entfernen" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "Zeitstempeldatei ungültig machen" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "Benutzerrechte aufzählen oder einen bestimmten Befehl testen; für ein längeres Format zweimal angeben" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "Nicht-interaktiver Modus, es werden keine Eingabeaufforderungen verwendet" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "Gruppen-Vektor beibehalten, statt auf den des Zielbenutzers zu setzen" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "Angegebene Passwort-Eingabeaufforderung benutzen" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "Wurzelverzeichnis vor der Ausführung des Befehls wechseln" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "SELinux-Sicherheitskontext mit angegebener Funktion erstellen" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "Passwort von der Standardeingabe lesen" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "Shell als Zielbenutzer ausführen; es kann auch ein Befehl angegeben werden" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "SELinux-Sicherheitskontext mit angegebenem Typ erstellen" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "Befehlausführung nach der angegebenen Zeitbegrenzung abbrechen" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "im Aufzählungsmodus, Rechte des Benutzers anzeigen" -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "Befehl oder Datei unter angegebenem Benutzernamen oder Benutzer-ID ausführen bzw. ändern" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "Versionsinformation anzeigen und beenden" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "Den Zeitstempel des Benutzers erneuern, ohne einen Befehl auszuführen" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "Aufhören, die Befehlszeilenargumente zu verarbeiten" @@ -834,37 +847,42 @@ msgstr "Ausführungskontext konnte nicht auf »%s« gesetzt werden" msgid "unable to set key creation context to %s" msgstr "Kontext der Schüsselerstellung konnte nicht auf %s festgelegt werden." -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "Benötigt mindestens ein Argument" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "Nur eine der Optionen -c oder -i darf angegeben werden" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "Unzulässige Dateideskriptornummer: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 #, c-format -msgid "unable to run %s as a login shell" -msgstr "%s konnte nicht als Anmeldeshell ausgeführt werden" +msgid "The -%c option may not be used in edit mode." +msgstr "Die Option -%c darf im Bearbeiten-Modus nicht verwendet werden." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:184 src/sesh.c:189 +#, c-format +msgid "The -%c option may only be used in edit mode." +msgstr "Die Option -%c darf nur im Bearbeiten-Modus verwendet werden." + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: Bearbeiten symbolischer Links ist nicht erlaubt" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: Bearbeiten von Dateien in einem beschreibbaren Ordner ist nicht erlaubt" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "Bearbeitungssitzung wurden in %s gelassen" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "Gruppenliste konnte nicht geholt werden" @@ -948,118 +966,122 @@ msgstr "Sie sind in der %s-Datenbank nicht enthalten" msgid "unable to determine tty" msgstr "TTY konnte nicht ermittelt werden" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "Der Schalter »no new privileges« ist gesetzt, welcher sudo daran hindert, als Root ausgeführt zu werden." -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "Falls sudo in einem Container ausgeführt wird, könnte es nötig sein, die Containerkonfiguration anzupassen, um diesen Schalter zu deaktivieren." -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s muss dem Benutzer mit UID %d gehören und das »setuid«-Bit gesetzt haben" -#: src/sudo.c:964 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "Effektive UID ist nicht %d. Liegt %s auf einem Dateisystem mit gesetzter »nosuid«-Option oder auf einem NFS-Dateisystem ohne Root-Rechte?" -#: src/sudo.c:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "Effektive UID ist nicht %d. Wurde sudo mit »setuid root« installiert?" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "Zusätzliche Gruppenkennungen konnten nicht gesetzt werden" -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "Effektive GID konnte nicht auf »runas«-GID %u gesetzt werden" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID konnte nicht auf »runas«-GID %u gesetzt werden" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "argv wurde durch Sicherheitsregelwerk nicht gesetzt" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "envp wurde durch Sicherheitsregelwerk nicht gesetzt" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "Unerwartete Abbruchbedingung eines Unterprozesses: %d" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "Regelwerks-Plugin konnte nicht initialisiert werden" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "Dem Regelwerks-Plugin %s fehlt die »check_policy«-Methode" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "Regelwerks-Plugin %s unterstützt das Auflisten von Privilegien nicht" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "Regelwerks-Plugin %s unterstützt die Option -v nicht" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "Regelwerks-Plugin %s unterstützt die Optionen -k und -K nicht" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "E/A-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "E/A-Plugin konnte nicht initialisiert werden" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "Audit-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: Fehlerereignis%s%s konnte nicht protokolliert werden" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: Ereignis%s%s konnte für das Protokoll nicht akzeptiert werden" -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "Audit-Pluginfehler" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: Ereignis%s%s wurde vom Protokoll abgewiesen" -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "Genehmigungs-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "Befehl wurde vom Genehmigenden abgewiesen" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "Genehmigungs-Plugin-Fehler" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "Kein beschreibbares temporäres Verzeichnis gefunden" @@ -1069,7 +1091,7 @@ msgstr "Kein beschreibbares temporäres Verzeichnis gefunden" msgid "%s left unmodified" msgstr "%s blieb unverändert" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s unverändert" @@ -1082,37 +1104,37 @@ msgstr "sesh: interner Fehler: seltsame Anzahl an Pfaden" msgid "sesh: unable to create temporary files" msgstr "sesh: Temporäre Dateien konnten nicht angelegt werden" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: von einem Signal getötet" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: unbekannter Fehler %d" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "Temporäre Dateien konnten nicht an ihre ursprünglichen Orte zurück kopiert werden" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "Einige der temporären Dateien konnten nicht an ihre ursprünglichen Orte zurück kopiert werden" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "UID konnte nicht zu Root (%u) geändert werden" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "Plugin-Fehler: Fehlende Dateiliste für sudoedit" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "Die Uhr konnte nicht gelesen werden" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "Intercept-Port ist nicht gesetzt" @@ -1162,15 +1184,3 @@ msgstr "dup2 konnte nicht auf die Standardeingabe angewendet werden" #: src/utmp.c:293 msgid "unable to restore stdin" msgstr "Standardeingabe konnte nicht wiederhergestellt werden" - -#~ msgid "%s%s: %s" -#~ msgstr "%s%s: %s" - -#~ msgid "unable to set tty context to %s" -#~ msgstr "TTY-Kontext konnte nicht auf %s gesetzt werden" - -#~ msgid "%s: short write" -#~ msgstr "%s: Zu kurzer Schreibvorgang" - -#~ msgid "unable to read temporary file" -#~ msgstr "Temporäre Datei konnte nicht gelesen werden" diff --git a/po/fr.mo b/po/fr.mo index e31a9472830891f55c3ccc492774d539b3d8e59a..1179a391cdda3e7751dcec6e917ff18da61d35a0 100644 GIT binary patch delta 5906 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 AasU7T diff --git a/po/fr.po b/po/fr.po index 63170ea1e3..ee484c11ef 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.11b1\n" +"Project-Id-Version: sudo 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 11:22+0200\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-12 13:31+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -33,76 +33,75 @@ msgid "unable to restore registry" msgstr "impossible de rétablir le registre" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/gidlist.c:76 -#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "impossible d'allouer la mémoire" @@ -116,23 +115,23 @@ msgstr "impossible d'évaluer par stat() %.*s" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s existe mais il n'est pas un répertoire (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "impossible d'ouvrir %s" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "impossible d'ouvrir %.*s" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "impossible d'exécuter mkdir %.*s" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "impossible d'ouvrir %.*s" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "l'expression régulière est trop grande" @@ -141,8 +140,8 @@ msgstr "l'expression régulière est trop grande" msgid "Unknown signal" msgstr "Signal inconnu" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "valeur incorrecte" @@ -154,86 +153,86 @@ msgstr "valeur trop grande" msgid "value too small" msgstr "valeur trop petite" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "valeur de chemin « %s » incorrecte dans %s, ligne %u" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "valeur « %2$s » incorrecte pour %1$s dans %3$s, ligne %4$u" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "source de groupe « %s » non supportée dans %s, ligne %u" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "groupes max « %s » incorrects dans %s, ligne %u" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "impossible d'évaluer par stat() %s" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s n'est pas un fichier régulier" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s est la propriété du uid %u alors que ça devrait être %u" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s peut être écrit par tout le monde" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s peut être écrit par le groupe" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "impossible de déterminer le confinement de AppArmor" -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "impossible de changer le profil de AppArmor en %s" -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: tronquer %s à zéro octets ? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "n'écrase pas %s" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "impossible de lire depuis %s" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "impossible d'écrire dans %s" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "impossible d'évaluer par stat() %s" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: pas un fichier régulier" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: mauvais mode de fichier : 0%o" @@ -242,60 +241,59 @@ msgstr "%s: mauvais mode de fichier : 0%o" msgid "unable to restore current working directory" msgstr "impossible de rétablir le répertoire de travail actuel" -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "impossible de définir les privilèges" -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "impossible de définir la limite des privilèges" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "classe de login %s inconnue" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "impossible de changer le contexte utilisateur" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "impossible de changer la priorité du processus" -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "impossible de changer root en %s" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "impossible de changer vers runas uid (%u, %u)" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "impossible de changer le répertoire vers %s" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "au départ de %s" -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "impossible de spécifier le gestionnaire pour le signal %d" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "le mode d'interception n'est pas supporté avec SELinux RBAC sur ce système" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "impossible d'écrire les sous-commandes dans le journal avec SELinux RBAC sur ce système" @@ -303,58 +301,84 @@ msgstr "impossible d'écrire les sous-commandes dans le journal avec SELinux RBA msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "impossible de supprimer PRIV_PROC_EXEC de PRIV_LIMIT" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "impossible d'ajouter l'événement à la queue" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "commande pas définie par la politique de sécurité" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "commande rejetée par la politique" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "erreur du greffon d'approbation" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "erreur du greffon de politique" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "PolicyCheckRequest invalide" -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "demande client trop grand : %zu" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "impossible de décompresser %s avec une taille de %zu" -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "valeur %d inattendue pour type_case dans %s de %s" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "message serveur trop grand : %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "erreur du greffon d'E/S" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "commande rejetée par le greffon d'E/S" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "l'enregistrement des erreurs est suspendu" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "erreur lors du changement de la taille de la fenêtre" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "erreur de lecture sur la paire de sockets" @@ -364,224 +388,213 @@ msgstr "erreur de lecture sur la paire de sockets" msgid "unexpected reply type on backchannel: %d" msgstr "réponse inattendue sur le backchannel : %d" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "impossible de choisir le tty de contrôle" -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "impossible de créer le tube" -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "impossible de recevoir un message du parent" -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "erreur de fork" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "impossible de rétablir l'étiquette du tty" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "impossible d'exécuter %s" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "le greffon de règles a échoué lors de l'initialisation de la session" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "impossible de créer des sockets" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "erreur dans la boucle des événements" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "espace insuffisant pour les arguments de execve" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" -msgstr "impossible de lire execve %s pour le processus %d" +msgid "internal error, %s overflow" +msgstr "erreur interne, débordement %s" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "impossible de définir les registres pour le processus %d" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "le processus %d s'est terminé de manière inattendue" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "impossible de définir le filtre seccomp" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "interpréteur d'argument, « %s » attendu, « %s » obtenu" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "désaccord dans le nom du chemin, « %s » attendu, « %s » obtenu" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "désaccord dans %s[%d], « %s » attendu, « %s » obtenu" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "le processus %d a retourné le statut inattendu 0x%x" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "impossible d'obtenir le message de l'événement pour le processus %d" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "impossible d'obtenir les registres pour le processus %d" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "impossible d'allouer le pty" -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "erreur du greffon d'E/S" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "commande rejetée par le greffon d'E/S" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "l'enregistrement des erreurs est suspendu" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "erreur lors du changement de la taille de la fenêtre" - -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "impossible de rétablir le gestionnaire pour le signal %d" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "impossible d'envoyer le message au processus de monitoring" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "erreur dans %s, ligne %d lors du chargement du greffon « %s »" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s doit être la propriété du uid %d" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "seul le propriétaire doit pouvoir écrire dans %s" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "ignore le greffon en double « %s » dans %s, ligne %d" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "impossible de charger %s : %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "impossible de trouver le symbole « %s » dans %s" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "greffon à la version majeure %d incompatible (%d attendu) trouvé dans %s" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignore le greffon de règles « %s » dans %s, ligne %d" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "un seul greffon de règles peut être spécifié" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "type de greffon %d inconnu dans %s" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "le greffon de règles %s ne contient pas de méthode check_policy" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "erreur interne, débordement %s" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "nom de variable d'environnement invalide: %s" -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "l'argument à -C doit être un nombre plus grand ou égal à 3" -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "vous ne pouvez pas spécifier les options -i et -s en même temps" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "vous ne pouvez pas spécifier les options -i et -E en même temps" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "l'option -E n'est pas valable en mode édition" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "vous ne pouvez pas spécifier de variable d'environnement en mode édition" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "l'option -U ne peut être utilisée qu'avec l'option -l" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "les options -A et -S ne peuvent pas être utilisées ensemble" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "sudoedit n'est pas pris en charge sur cette plate-forme" -#: src/parse_args.c:757 +#: src/parse_args.c:767 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Seule une des options -e, -h, -i, -K, -l, -s, -v ou -V peut être spécifiée" -#: src/parse_args.c:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "Seule une des options -K, -k ou -N peut être spécifiée" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -590,7 +603,7 @@ msgstr "" "%s – édite les fichiers en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -599,7 +612,7 @@ msgstr "" "%s – exécute une commande en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -607,131 +620,131 @@ msgstr "" "\n" "Options:\n" -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "utiliser un programme adjoint pour demander le mot de passe" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "utiliser le type d'authentification BSD spécifié" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "exécuter la commande en arrière-plan" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "émettre un signal sonore lors d'une demande" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "fermer tous les descripteurs de fichiers >= n°" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "exécuter la commande avec la classe de login BSD" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "changer le répertoire de travail avant d'exécuter la commande" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "préserver l'environnement de l'utilisateur en exécutant la commande" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "préserver les variables d'environnement spécifiques" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "éditer les fichiers au lieu d'exécuter une commande" -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "exécuter la commande en tant que le nom ou ID de groupe spécifié" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "assigner à la variable HOME le répertoire personnel de l'utilisateur cible" -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "afficher le message d'aide et terminer" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "exécuter la commande sur l'hôte (si supporté par le greffon)" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "exécuter le shell de login comme l'utilisateur cible. Une commande peut aussi être spécifiée" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "supprime complètement le fichier d'horodatage" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "invalide le fichier d'horodatage" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "afficher les privilèges de l'utilisateur ou vérifie une commande spécifique. Utilisez deux fois pour une forme plus longue" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "mode non interactif, aucune invite utilisée" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "préserve le vecteur des groupes au lieu de le changer en celui de la cible" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "utiliser l'invite de mot de passe spécifié" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "changer le répertoire racine avant d'exécuter la commande" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "créer le contexte de sécurité SELinux avec le rôle spécifié" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "lire le mot de passe depuis l'entrée standard" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "exécuter le shell en tant que l'utilisateur cible. Une commande peut aussi être spécifiée" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "créer le contexte de sécurité SELinux avec le type spécifié" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "terminer la commande après la limite de temps spécifiée" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "en mode liste, afficher les privilèges de l'utilisateur" -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "exécuter la commande (ou éditer le fichier) sous le nom d'utilisateur ou le ID spécifié" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "afficher les informations de version et terminer" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "mettre à jour l'horodatage de l'utilisateur sans exécuter de commande" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "arrêter de traiter les arguments en ligne de commande" @@ -831,37 +844,42 @@ msgstr "impossible de changer le contexte exec en %s" msgid "unable to set key creation context to %s" msgstr "impossible de changer le contexte de création de clé en %s" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "exige au moins un argument" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "Seule une des options -c ou -i peut être spécifiée" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "numéro de descripteur de fichier invalide: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 #, c-format -msgid "unable to run %s as a login shell" -msgstr "impossible d'exécuter %s comme un shell de login" +msgid "The -%c option may not be used in edit mode." +msgstr "L'option -%c n'est pas valable en mode édition." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:184 src/sesh.c:189 +#, c-format +msgid "The -%c option may only be used in edit mode." +msgstr "L'option -%c ne peut être utilisée qu'en mode édition." + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: l'édition de liens symboliques n'est pas permise" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: l'édition de fichiers dans un répertoire accessible en écriture n'est pas permis" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "contenu de la session d'édition laissé dans %s" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "impossible d'obtenir la liste des groupes" @@ -945,118 +963,122 @@ msgstr "vous n'existez pas dans la base de données %s" msgid "unable to determine tty" msgstr "impossible de déterminer le tty" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "Le fanion « no new privileges » (« pas de nouveau privilèges ») est défini. Il empêche sudo de s'exécuter en tant que root." -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "Si sudo est exécuté dans un conteneur, vous devrez ajuster la configuration du conteneur pour désactiver ce fanion." -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s doit être la propriété du uid %d et avoir le bit setuid mis" -#: src/sudo.c:964 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "le uid effectif n'est pas %d. Est-ce que %s est sur un système de fichiers avec l'option « nosuid » ou un système de fichiers NFS sans privilèges root ?" -#: src/sudo.c:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "le uid effectif n'est pas %d. Est-ce que sudo est installé setuid root ?" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "impossible d'attribuer les ID de groupe supplémentaires" -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "impossible de changer le gid effectif à runas gid %u" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "impossible de changer le gid à runas gid %u" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "argv pas défini par la politique de sécurité" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "envp pas défini par la politique de sécurité" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "condition de fin de l'enfant inconnue: %d" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "impossible d'initialiser le greffon de règles" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "le greffon de règles %s n'a pas de méthode « check_policy »" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "le greffon de règles %s ne supporte pas les privilèges de listage" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "le greffon de règles %s ne supporte pas l'option -v" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "le greffon de règles %s ne supporte pas les options -k/-K" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "erreur à l'initialisation du greffon E/S %s" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "erreur à l'initialisation du greffon E/S" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "erreur à l'initialisation du greffon d'audit %s" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: impossible d'enregistrer dans le journal l'événement d'erreur%s%s" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: impossible d'enregistrer dans le journal l'événement d'acceptation%s%s" -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "erreur du greffon d'audit" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: impossible d'enregistrer dans le journal l'événement de rejet%s%s" -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "erreur à l'initialisation du greffon d'approbation %s" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "commande rejetée par l'approbateur" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "erreur du greffon d'approbation" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "aucun répertoire temporaire est disponible en écriture" @@ -1066,7 +1088,7 @@ msgstr "aucun répertoire temporaire est disponible en écriture" msgid "%s left unmodified" msgstr "%s laissé tel quel" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s non modifié" @@ -1079,37 +1101,37 @@ msgstr "sesh: erreur interne: nombre impaire de chemins" msgid "sesh: unable to create temporary files" msgstr "sesh: impossible de créer des fichiers temporaires" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: tué par un signal" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: erreur %d inconnue" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "impossible de copier les fichiers temporaires à leurs emplacements d'origine" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "impossible de copier quelques fichiers temporaires à leurs emplacements d'origine" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "impossible de changer le uid en root (%u)" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "erreur de greffon : liste de fichiers manquantes pour sudoedit" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "impossible de lire l'horloge" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "port d'interception non défini" @@ -1160,6 +1182,18 @@ msgstr "impossible d'exécuter dup2 sur stdin" msgid "unable to restore stdin" msgstr "impossible de rétablir stdin" +#~ msgid "insufficient space for execve arguments" +#~ msgstr "espace insuffisant pour les arguments de execve" + +#~ msgid "unable to read execve %s for process %d" +#~ msgstr "impossible de lire execve %s pour le processus %d" + +#~ msgid "requires at least one argument" +#~ msgstr "exige au moins un argument" + +#~ msgid "unable to run %s as a login shell" +#~ msgstr "impossible d'exécuter %s comme un shell de login" + #~ msgid "unable to dup intercept fd" #~ msgstr "impossible de dupliquer le fd intercepté" diff --git a/po/ja.mo b/po/ja.mo index 937db2f1a021a952e6fcdb41e97ecef10ea9d6b0..b33813f29e8c3f6a9e33c959da4ee749a2dc4998 100644 GIT binary patch delta 7014 zcmbuD3v^V~y@z)ao*Etr2_z8UBoZW$AR!Pi7$HEQBJVe-NJxe-Kqk2}2_aA&lK6-S zC>$b1P%Fh&g`j1ygqKLQYN@SKZ);T)Z~&pw+OE>8wAXd-_nUKKvD)iht9#Awe0%S+ zAOFYRCt}lEQE#4$3Vs;hs?kvXfKt#sZH>u~GUif8^%`@!i!s;0Gq4}L1XE#Rg3}%b z<7h90{EVN+Ab3Aag3T})o`BcEPar?jDbbjCV}hm+l|FO~gWcinFc((CShxqafrnsM z_*0k%--QEU0-fp~#UlgGfoZT7%Fvx|`&B3hE<%1LzMCkDF^?D#SLk1IpuOh^OWxRAfGdInct}p6qXCQjw*8 z*cWbwz2G6Jl)MM|na_A=!T27=42QXppDE{|1s`;I6!xV37pTa_vB>o>7p{g2;4t_e z3`Q1Yv^L0v1K~7Cn#~%>&ur#l!M!jYz6}-PD^Q-MU@cWM7%Ie5Ax@eam$u6$m#;zX zd!`rhR|s48Hl{z!fy&_mcr$E(qu^^$IcsM*9`}YabOcnymO?qO5z4^bPzL@Q>iu6~ z2be;bWnh0O181ZLjhRBFjE-D*1d>j38IFM+SVap?gEFidDwj_}oq>H&hM#d6i(Bd+ z1{LBGI0SBoO3?{;18hxRbk>FjsVLOTpiZ;eny?EhXQ!b&ZHE;^%?yLsW@fuw2}z@Q z6k2dU)V$w8IU@IENHSEUr$MDE2xVySF)G^NI2;47zX{Zgn%ZG?&JZ}w3c0gpp% z*oL_1O!R>IwB7(orzwE)tQ6|n)k8&KE0n>{Lv8pv)c7+{hpjCS3l4+$X68ag>>e0Y zh<8)b0kWK?}YEwch7Yq3?|QitJ!W z`ps;p!yL>e{#xL1I%N4__r-6ZLUkEx!ybbjkA_1nya3AZ6;P4d2;<;WP#f%rns*v1 zQeQx&qziXY?{9`WL!~*yUzXR>p-?tK<>nQroPG>Rqv^?=#1=CFYW#PhLi{w8hrfb~ z$e&;**qzB@e|QtjgNi^kBr9f{%i}>RxpZ7{2MnUoGn&5%FrI$@aOc$C3rEp@%Vpe+ zPHLvZLi(#=DLeu>MkYPaS$763qP-R>=a*b2aNsmAcoP-YGoJAjX^DLTwmV;2hQ|@Fm*IU~iZ?+W9j*5o*J2ke@logQd+EQ2XWc zwae4}uc0!Nj(u~MJrYJ*%pXSc#qNH$Ce z%HTgit<#^EI&7HGI1Kb1k zB6ha3a5hxv?tBO3Gg6c`^I4tGLr_yJVzI^O0)VlrfkSqiy8<`sxjCgyhMi#Hd_ARi=%W(U;# z%P)JQ0u_a@Ly>cs#zTd$1onWNpbXdpv*9V20OJ;M#b9432i8L! z<`Yo!lenvTKMu;{CMb_Dz%3d*o1I0?S*_Gc`0QdI=C@e@#I>o^R`^B7K^CZ<7!YAU<| zKIrn0`~DLsLz0&}f5oQ4Oxi(sE8Gn;;O9^qrIk7BO@fMK1Jpk6Lu@zgeZ;>X6~E89 z4%;BnGN&O?HRH>j!_x%i`Tsx}R#@SjnJTEm^&CusQUBqvJJfB+fx}<}yam4G@*2N0 zf2N=KkK)A!I-;QRzXr9GXty%X<%95I%S+hk*1rpz&ayxlqBlFN>^I(LvmY#-p*Q6Ov~E)KY4w=mx3mM3*8p=S!#Rwdf{v1}ROG&}O6( zoXkUqOhutm{)lqqFBSMo;mUtw*+}my^w2lH<-aZHC*@z3iEfRo1g$Gb8v;w`1T1rPM3(-JyAKHPqT*g8w@u+X4M*MeCSsZEbj|Vsi zl^_mrr2NKZHQa&@qr2R`>s(gBE~qWqi|$3bniJ5SsHME?Rvv>tM)Q>a<7fy{IfCv$ zbJd`1NBSllMSnoQMk+Zd3r#_~83pJZDnc#gSt=LMt7s|u5qc4QA624Xpx|>n^3hiG z2zn2x=zfku?<0K^RPIOLK_k_0%P}|_z2LTg4@aP6^fu~_9z}ALOJ>fZ4d^H6r|N!_ ziatWOp`PdvN=GVF(KeKZ)}g1-CX|cjpws9hr1EpL9?e2;q1R9`rdmBmXkEzimdPjRKE#7avKq-9#A z<&}||Jv{NLYj4f8vX)upek*IT{oje*lcxBV*I4B~k5#_ds$Al+vWg=wy?SZCk@)P8 znd(fZx1!Qp?z75@YAhcMF7jAa0k-h^EKiBI(kd%2@eDNXVEf7Rd@nBdEvBQ)mRjCOV_2a*3~~ z%=7ID3*FQ^GkR2ozr5HJ2w3SQB-Sgts(dXOUS4Cadi{@nD^OWfSrxDbtxR8Om!=kn zE~YlO>iVVs%vtPR?y)M%t@J?Xp}zB@Q#>nVc^MlOm3pkj1nD0O+wb+8ol;8H{GL)T zj{5`uJRm(|Z1(c?DuH6={v%_m@BUj1_*X{||J{PWiG+g_maP3wG^Ger_H|nr&yYWQ4bLS$H zpJ24E-t@eTPF%IC`n>A1PbT)T$K~yh;l|n9XAWr_UQ=hB`t_aJ>FD|G51d<@Fh*}EpT5B+UKa%8BzF8@0F zqueg)v`-Wygs#v3ON`xlWWqPE;o*|GYg`jbE|?V^|K%CN^K%V9xw!RVyZzh&A>SBJ z^q8+)m57ad!gV{t^`UUxQJGeEC|tiKT;C9`-=Svx1Ch|#iXpbw9SGOoXJ4K%z<#^X zJLxMEH4FbDi?HqC#`BHOYwrIy3!xF?vRaMa$QI`wUjJ_-G_+_!V@$t@6HW4_?tpHk z7ChK+eml9{7Ovg>@e6fl58fB9+hnKCNG$x8LGn2gnxk55&`K+PrNz_>M>n?|HxAts z_J2*<5Ne*hzHP6o!|&Qr-x#iYG7_#`c5t>8DxAG4rk5i26%(CIY*jMq8|;O*C)jcG zyVytOeb4&($ok#kx@P4g5^+0rev&=^))d<}e`NkQruc<${UhNz7JfXk`~#7#BMGYg zT5>~8^Q&V*3l`iR9q$~Uh@VfKfBG36rK3g3_Q{1ewz;aASTr#0>k;1*{wE`u*{$XF zhZT|^gzLEpIx<={G^VH^D!p#g*~85j8}~=fCI`X2%~roiU!y(_Rz@heXiw|^1@8fu ASO5S3 delta 5070 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\n" "Language-Team: Japanese \n" "Language: ja\n" @@ -18,7 +18,7 @@ msgstr "" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 2.4.2\n" -"X-Poedit-Basepath: sudo-1.9.8b2\n" +"X-Poedit-Basepath: sudo-1.9.12b2\n" "X-Poedit-SearchPath-0: .\n" #: lib/util/aix.c:89 lib/util/aix.c:169 @@ -35,75 +35,75 @@ 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:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:206 src/exec_monitor.c:456 -#: src/exec_monitor.c:462 src/exec_monitor.c:470 src/exec_monitor.c:478 -#: src/exec_monitor.c:485 src/exec_monitor.c:492 src/exec_monitor.c:499 -#: src/exec_monitor.c:506 src/exec_monitor.c:513 src/exec_monitor.c:520 -#: src/exec_monitor.c:527 src/exec_nopty.c:219 src/exec_nopty.c:228 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:306 src/exec_nopty.c:503 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_pty.c:840 -#: src/exec_pty.c:849 src/exec_pty.c:906 src/exec_pty.c:1059 -#: src/exec_pty.c:1231 src/exec_pty.c:1240 src/exec_pty.c:1247 -#: src/exec_pty.c:1254 src/exec_pty.c:1261 src/exec_pty.c:1268 -#: src/exec_pty.c:1275 src/exec_pty.c:1282 src/exec_pty.c:1289 -#: src/exec_pty.c:1296 src/exec_pty.c:1303 src/exec_pty.c:1311 -#: src/exec_pty.c:1774 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:192 src/parse_args.c:213 src/parse_args.c:287 -#: src/parse_args.c:632 src/parse_args.c:654 src/parse_args.c:679 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:483 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:709 src/sudo.c:719 src/sudo.c:744 src/sudo.c:767 -#: src/sudo.c:776 src/sudo.c:785 src/sudo.c:802 src/sudo.c:844 src/sudo.c:854 -#: src/sudo.c:883 src/sudo.c:1083 src/sudo.c:1104 src/sudo.c:1397 -#: src/sudo.c:1566 src/sudo.c:1793 src/sudo.c:2127 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:100 -#: src/exec_intercept.c:330 src/exec_intercept.c:354 src/exec_intercept.c:377 -#: src/exec_intercept.c:385 src/exec_intercept.c:410 src/exec_intercept.c:416 -#: src/exec_intercept.c:425 src/exec_intercept.c:431 src/exec_intercept.c:565 -#: src/exec_intercept.c:706 src/exec_monitor.c:456 src/exec_monitor.c:462 -#: src/exec_monitor.c:470 src/exec_monitor.c:478 src/exec_monitor.c:485 -#: src/exec_monitor.c:492 src/exec_monitor.c:499 src/exec_monitor.c:506 -#: src/exec_monitor.c:513 src/exec_monitor.c:520 src/exec_monitor.c:527 -#: src/exec_nopty.c:219 src/exec_nopty.c:228 src/exec_nopty.c:235 -#: 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:298 -#: src/exec_nopty.c:306 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_pty.c:840 src/exec_pty.c:849 src/exec_pty.c:906 -#: src/exec_pty.c:1231 src/exec_pty.c:1240 src/exec_pty.c:1247 -#: src/exec_pty.c:1254 src/exec_pty.c:1261 src/exec_pty.c:1268 -#: src/exec_pty.c:1275 src/exec_pty.c:1282 src/exec_pty.c:1289 -#: src/exec_pty.c:1296 src/exec_pty.c:1303 src/exec_pty.c:1311 -#: src/exec_pty.c:1774 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:192 src/parse_args.c:214 src/parse_args.c:287 -#: src/parse_args.c:632 src/parse_args.c:654 src/parse_args.c:679 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:483 src/sesh.c:113 -#: src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:883 src/sudo.c:1083 -#: src/sudo.c:1104 src/sudo.c:1397 src/sudo.c:1566 src/sudo.c:1793 -#: src/sudo.c:2127 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 -#: src/sudo_edit.c:438 src/sudo_edit.c:539 src/sudo_edit.c:546 -#: src/sudo_edit.c:677 src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "メモリ割り当てを行えませんでした" @@ -117,23 +117,23 @@ msgstr "%.*s の状態取得 (stat) ができません" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s は存在しますが、ディレクトリではありません (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "%s を開けません" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "%.*s を開けません" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "%.*s を mkdir できません" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "%.*s を開けません" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "正規表現が長すぎます。" @@ -142,8 +142,8 @@ msgstr "正規表現が長すぎます。" msgid "Unknown signal" msgstr "不明なシグナルです" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "無効な値" @@ -155,77 +155,86 @@ msgstr "値が大き過ぎます" msgid "value too small" msgstr "値が小さ過ぎます" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "無効な Path の値 \"%s\" が %s の %u 行目 にあります" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "無効な %s の値 \"%s\" が %s の %u 行目 にあります" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "サポートしていないグループソース \"%s\" が %s の %u 行目で指定されています" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "無効な最大グループの値 \"%s\" が %s の %u 行目 にあります" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "%s の状態取得 (stat) ができません" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s は通常ファイルではありません" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s はユーザーID %u によって所有されています。これは %u であるべきです" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s は誰でも書き込み可能です" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s はグループのメンバーによる書き込みが可能です" -#: src/copy_file.c:93 +#: src/apparmor.c:85 +msgid "failed to determine AppArmor confinement" +msgstr "AppArmor の制限を決定することができません。" + +#: src/apparmor.c:93 +#, c-format +msgid "unable to change AppArmor profile to %s" +msgstr "AppArmor のプロファイルを %s へ変更できません" + +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: %s をゼロバイトに切り詰めますか? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "%s を上書きしません" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "%s から読み込むことができません" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "%s へ書き込むことができません" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "%s の状態取得 (stat) ができません" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: 通常ファイルではありません" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: ファイルのモードが異常です: 0%o" @@ -234,99 +243,144 @@ msgstr "%s: ファイルのモードが異常です: 0%o" msgid "unable to restore current working directory" msgstr "カレントディレクトリを復元できません" -#: src/exec.c:130 +#: src/exec.c:111 +msgid "unable to set privileges" +msgstr "権限を設定できません" + +#: src/exec.c:117 src/exec.c:122 +msgid "unable to set limit privileges" +msgstr "制限した権限を設定できません" + +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "不明なログインクラス %s です" -#: src/exec.c:142 +#: src/exec.c:157 msgid "unable to set user context" msgstr "ユーザーコンテキストを設定できません" -#: src/exec.c:158 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "プロセス優先度を設定できません" -#: src/exec.c:175 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "root を %s へ変更できません" -#: src/exec.c:188 src/exec.c:194 src/exec.c:201 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "実行時のユーザーID (uid) (%u, %u) へ変更できません" -#: src/exec.c:219 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "ディレクトリーを %s に変更できません" -#: src/exec.c:223 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "%s から始めます" -#: src/exec.c:305 src/exec_monitor.c:565 src/exec_monitor.c:567 -#: src/exec_nopty.c:561 src/exec_pty.c:581 src/exec_pty.c:1411 -#: src/exec_pty.c:1413 src/signal.c:144 src/signal.c:151 src/signal.c:165 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "シグナル %d のハンドラを設定できません" +#: src/exec.c:422 +msgid "intercept mode is not supported with SELinux RBAC on this system" +msgstr "SELinux RBAC でのインターセプトモードはこのシステムではサポートされていません" + +#: src/exec.c:427 +msgid "unable to log sub-commands with SELinux RBAC on this system" +msgstr "SELinux RBAC でのサブコマンドログはこのシステムではサポートされていません" + #: src/exec_common.c:56 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "PRIV_LIMIT から PRIV_PROC_EXEC を取り除くことができません" -#: src/exec_intercept.c:112 src/exec_intercept.c:116 src/exec_intercept.c:667 -#: src/exec_intercept.c:671 src/exec_intercept.c:857 src/exec_intercept.c:861 -#: src/exec_intercept.c:872 src/exec_intercept.c:876 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:221 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:300 -#: src/exec_nopty.c:308 src/exec_pty.c:706 src/exec_pty.c:711 -#: src/exec_pty.c:808 src/exec_pty.c:815 src/exec_pty.c:912 -#: src/exec_pty.c:1233 src/exec_pty.c:1242 src/exec_pty.c:1249 -#: src/exec_pty.c:1256 src/exec_pty.c:1263 src/exec_pty.c:1270 -#: src/exec_pty.c:1277 src/exec_pty.c:1284 src/exec_pty.c:1291 -#: src/exec_pty.c:1298 src/exec_pty.c:1305 src/exec_pty.c:1727 -#: src/exec_pty.c:1737 src/exec_pty.c:1782 src/exec_pty.c:1789 -#: src/exec_pty.c:1816 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "キューにイベントを追加できません" -#: src/exec_intercept.c:314 -msgid "invalid PolicyCheckRequest" -msgstr "無効な PolicyCheckRequest" +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "セキュリティーポリシーによりコマンドが設定されていません" -#: src/exec_intercept.c:362 src/sudo.c:1209 src/sudo.c:1254 src/sudo.c:1298 +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "ポリシーによりコマンドが拒否されました" -#: src/exec_intercept.c:455 src/sudo.c:1214 src/sudo.c:1259 src/sudo.c:1303 -#: src/sudo.c:1377 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "承認プラグイン エラー" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "ポリシープラグインエラー" -#: src/exec_intercept.c:561 +#: src/exec_intercept.c:543 +msgid "invalid PolicyCheckRequest" +msgstr "無効な PolicyCheckRequest" + +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "クライアントリクエストが大き過ぎます: %zu" -#: src/exec_intercept.c:659 +#: src/exec_intercept.c:720 +#, c-format +msgid "unable to unpack %s size %zu" +msgstr "%s を伸長できません (長さ %zu )" + +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "予期しない type_case の値 %d が %s の中にあります、 %s から出てきたものです。" -#: src/exec_intercept.c:694 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "サーバーメッセージが大き過ぎます: %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "I/O プラグインエラー" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "I/O プラグインによりコマンドが拒否されました" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "エラーの記録が一時中断しています" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "ウィンドウサイズの変更でエラー" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "ソケットペアからの読み込み中にエラーが発生しました" @@ -336,180 +390,213 @@ msgstr "ソケットペアからの読み込み中にエラーが発生しまし msgid "unexpected reply type on backchannel: %d" msgstr "バックチャンネルに関する予期しないリプレイタイプです: %d" -#: src/exec_monitor.c:583 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "tty の制御設定ができません" -#: src/exec_monitor.c:591 src/exec_nopty.c:369 src/exec_pty.c:1490 -#: src/exec_pty.c:1511 src/exec_pty.c:1531 src/tgetpass.c:307 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "パイプを作成できません" -#: src/exec_monitor.c:601 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "親からのメッセージを受け取ることができません" -#: src/exec_monitor.c:617 src/exec_nopty.c:407 src/exec_pty.c:1569 -#: src/sudo_edit.c:361 src/tgetpass.c:311 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 +#: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "fork できません" -#: src/exec_monitor.c:621 src/exec_monitor.c:722 src/exec_nopty.c:471 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "tty ラベルを復旧できません" -#: src/exec_monitor.c:637 src/sesh.c:123 src/sudo.c:1160 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "%s を実行できません" -#: src/exec_nopty.c:363 src/exec_pty.c:1420 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "ポリシープラグインがセッションの初期化に失敗しました" -#: src/exec_nopty.c:377 src/exec_pty.c:1391 src/exec_pty.c:1399 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "ソケットを作成できません" -#: src/exec_nopty.c:459 src/exec_pty.c:1666 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "イベントループでエラーが発生しました" -#: src/exec_nopty.c:569 src/exec_pty.c:619 src/signal.c:101 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to restore handler for signal %d" -msgstr "シグナル %d のハンドラを復元できません" +msgid "internal error, %s overflow" +msgstr "内部エラー、 %s がオーバーフローしました" -#: src/exec_pty.c:158 -msgid "unable to allocate pty" -msgstr "pty を割り当てられません" +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 +#, c-format +msgid "unable to set registers for process %d" +msgstr "プロセス %d のレジスターを設定できません" -#: src/exec_pty.c:222 src/exec_pty.c:262 src/exec_pty.c:302 src/exec_pty.c:353 -#: src/exec_pty.c:404 -msgid "I/O plugin error" -msgstr "I/O プラグインエラー" +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "プロセス %d が予期せぬ終了をしました" -#: src/exec_pty.c:226 src/exec_pty.c:266 src/exec_pty.c:306 src/exec_pty.c:357 -#: src/exec_pty.c:408 -msgid "command rejected by I/O plugin" -msgstr "I/O プラグインによりコマンドが拒否されました" +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "seccomp フィルターを設定できません" -#: src/exec_pty.c:455 -msgid "error logging suspend" -msgstr "エラーの記録が一時中断しています" +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "インタープリターの引数は、 \"%s\" のはずですが、\"%s\" です" -#: src/exec_pty.c:489 -msgid "error changing window size" -msgstr "ウィンドウサイズの変更でエラー" +#: src/exec_ptrace.c:1503 +#, c-format +msgid "pathname mismatch, expected \"%s\", got \"%s\"" +msgstr "パス名が一致しません、 \"%s\" のはずですが、\"%s\" です" + +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 +#, c-format +msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" +msgstr "%s[%d] が一致しません、 \"%s\" のはずですが、\"%s\" です" + +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "プロセス %d が予期せぬ終了ステータス 0x %x を返しました" + +#: src/exec_ptrace.c:1711 +#, c-format +msgid "unable to get event message for process %d" +msgstr "プロセス %d のイベントメッセージを取得できません" + +#: src/exec_ptrace.c:1718 +#, c-format +msgid "unable to get registers for process %d" +msgstr "プロセス %d のレジスターを取得できません" + +#: src/exec_pty.c:103 +msgid "unable to allocate pty" +msgstr "pty を割り当てられません" + +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "シグナル %d のハンドラを復元できません" -#: src/exec_pty.c:1615 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "監視プロセスへメッセージを送ることができません" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "%s, %d 行目 プラグイン \"%s\" をロード中にエラーが発生しました" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s の所有者は uid %d でなければいけません" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s は所有者のみ書き込み可能で無ければいけません" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "重複しているプラグイン \"%s\" を無視します。%s の %d 行目" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "%s をロードできません: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "シンボル \"%s\" が %s に見つかりません" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "互換性の無いポリシーメジャーバージョン %d (予期されるのは %d)が %s で見つかりました" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ポリシープラグイン \"%s\" を無視します。%s の %d 行目" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "1つのポリシープラグインのみ指定できます" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "不明なプラグインタイプ %d が %s で見つかりました" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "内部エラー、 %s がオーバーフローしました" - -#: src/parse_args.c:234 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "無効な環境変数名です: %s" -#: src/parse_args.c:337 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C の引数は 3 以上の数値でなければいけません" -#: src/parse_args.c:568 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "-i と -s オプションを同時に指定することはできません" -#: src/parse_args.c:573 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "-i と -E オプションを同時に指定することはできません" -#: src/parse_args.c:583 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "-E オプションは編集モードでは無効です" -#: src/parse_args.c:586 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "編集モードでは環境変数を指定できません" -#: src/parse_args.c:596 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "-U オプションを使うには -l オプションも必要です" -#: src/parse_args.c:600 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "-A と -S オプションは同時に指定できません" -#: src/parse_args.c:693 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "sudoedit はこのプラットフォームではサポートされていません" -#: src/parse_args.c:776 +#: src/parse_args.c:767 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:792 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "-K, -k または -N のうち一つのみ指定できます" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -518,7 +605,7 @@ msgstr "" "%s - 別のユーザーとしてファイルを編集します\n" "\n" -#: src/parse_args.c:794 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -527,7 +614,7 @@ msgstr "" "%s - 別のユーザーとしてコマンドを実行します\n" "\n" -#: src/parse_args.c:800 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -535,131 +622,131 @@ msgstr "" "\n" "オプション:\n" -#: src/parse_args.c:802 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "パスワード要求のために補助プログラムを使用する" -#: src/parse_args.c:805 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "指定した BSD 認証タイプを使用する" -#: src/parse_args.c:809 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "コマンドをバックグラウンドで実行する" -#: src/parse_args.c:812 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "プロンプトと同時にベルを鳴らす" -#: src/parse_args.c:814 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "num 以上のすべてのファイル記述子を閉じる" -#: src/parse_args.c:817 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "指定した BSD ログインクラスでコマンドを実行する" -#: src/parse_args.c:820 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "コマンド実行前に作業ディレクトリを変更する" -#: src/parse_args.c:823 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "コマンドを実行する時にユーザーの環境変数を維持する" -#: src/parse_args.c:825 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "指定の環境変数を維持する" -#: src/parse_args.c:827 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "コマンドを実行するのではなくファイルを編集する" -#: src/parse_args.c:830 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "指定したグループ名またはグループIDでコマンドを実行する" -#: src/parse_args.c:833 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "HOME 変数を変更先となるユーザーのホームディレクトリに設定する" -#: src/parse_args.c:836 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "このヘルプを表示して終了する" -#: src/parse_args.c:838 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "host でコマンドを実行する(プラグインがサポートしている場合)" -#: src/parse_args.c:841 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "変更先のユーザーとしてログインシェルを実行する; コマンドを指定することもできます" -#: src/parse_args.c:843 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "タイムスタンプファイルを完全に削除する" -#: src/parse_args.c:846 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "無効なタイムスタンプファイルです" -#: src/parse_args.c:849 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "ユーザーの権限を一覧表示するまたは指定したコマンドについて確認する ;長い表示にするには2回指定すること" -#: src/parse_args.c:852 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "非対話モードで実行し、ユーザーに入力を求めない" -#: src/parse_args.c:855 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "グループベクトルを保護する (変更先のユーザーのものに設定しない)" -#: src/parse_args.c:858 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "指定したパスワードプロンプトを使用する" -#: src/parse_args.c:860 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "コマンド実行前にルートディレクトリを変更する" -#: src/parse_args.c:863 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "指定した役割で SELinux セキュリティーコンテキストを作成する" -#: src/parse_args.c:866 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "標準入力からパスワードを読み込む" -#: src/parse_args.c:869 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "変更先のユーザーとしてシェルを実行する; コマンドを指定することもできます" -#: src/parse_args.c:873 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "指定したタイプで SELinux セキュリティーコンテキストを作成する" -#: src/parse_args.c:876 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "指定した制限時間でコマンドの実行を中止する" -#: src/parse_args.c:879 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "リストモードで、ユーザーの権限を表示する" -#: src/parse_args.c:882 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "指定したユーザー名またはユーザーIDでコマンドを実行する (またはファイルを編集する)" -#: src/parse_args.c:884 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "バージョン情報を表示して終了する" -#: src/parse_args.c:887 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "コマンドを実行せずにユーザーのタイムスタンプを更新する" -#: src/parse_args.c:890 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "コマンドライン引数の処理を終了する" @@ -759,37 +846,42 @@ msgstr "実行コンテキストを %s に設定できません" msgid "unable to set key creation context to %s" msgstr "キー作成コンテキストを %s へ設定できません" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "最低でも一つ以上おの引数が必要です" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "-c または -i のうち一つのみ指定できます" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "無効なファイル記述子の番号: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 +#, c-format +msgid "The -%c option may not be used in edit mode." +msgstr "-%c オプションは編集モードでは無効です。" + +#: src/sesh.c:184 src/sesh.c:189 #, c-format -msgid "unable to run %s as a login shell" -msgstr "%s をログインシェルとして実行できません" +msgid "The -%c option may only be used in edit mode." +msgstr "-%c オプションは編集モードでのみ有効です。" -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: シンボリックリンクの編集は許可されていません" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: 書き込み可能なディレクトリ内のファイルの編集は許可されていません" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "編集セッションの内容が %s 内に残っています" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "グループリストを取得できません" @@ -873,118 +965,122 @@ msgstr "あなたは %s データベースに存在しません" msgid "unable to determine tty" msgstr "tty を特定できません" -#: src/sudo.c:908 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "権限変更不可フラグがセットされていて、sudo を root として実行できません。" -#: src/sudo.c:910 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "sudo をコンテナーで実行しているなら、コンテナーの構成でフラグを無効にする必要があるかもしれません。" -#: src/sudo.c:944 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s は所有者が uid %d である必要があり、かつ setuid が設定されている必要があります" -#: src/sudo.c:947 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "実効 uid が %d ではありません、%s は 'nosuid' が設定されたファイルシステムにあるか、root 権限のないNFSファイルシステムにあるのでは?" -#: src/sudo.c:953 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "実効 uid が %d ではありません、sudo は setuid root を設定してインストールされていますか?" -#: src/sudo.c:969 src/tgetpass.c:333 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "追加のグループIDを設定できません" -#: src/sudo.c:976 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "実行時のグループID (gid) %u を実効グループIDに設定できません" -#: src/sudo.c:982 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "実行時のグループID (gid) %u をグループIDに設定できません" -#: src/sudo.c:1025 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "セキュリティーポリシーにより argv が設定されていません" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "セキュリティーポリシーにより envp が設定されていません" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "予期しない子プロセスの終了コードです: %d" -#: src/sudo.c:1132 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "ポリシープラグインを初期化できません" -#: src/sudo.c:1194 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" -#: src/sudo.c:1240 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "ポリシープラグイン %s は権限の一覧表示をサポートしていません" -#: src/sudo.c:1284 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "ポリシープラグイン %s は -v オプションをサポートしません" -#: src/sudo.c:1322 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "ポリシープラグイン %s は -k/-K オプションをサポートしません" -#: src/sudo.c:1451 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "I/O プラグイン %s を初期化中にエラーが発生しました" -#: src/sudo.c:1454 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "I/O プラグインを初期化中にエラーが発生しました" -#: src/sudo.c:1603 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "認証プラグイン %s を初期化中にエラーが発生しました" -#: src/sudo.c:1682 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: ログにエラーイベントを書き込むことができません%s%s" -#: src/sudo.c:1718 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: ログに accept イベントを書き込むことができません%s%s" -#: src/sudo.c:1723 src/sudo.c:1761 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "認証プラグインエラー" -#: src/sudo.c:1756 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: ログに reject イベントを書き込むことができません%s%s" -#: src/sudo.c:1816 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "承認プラグイン %s を初期化中にエラーが発生しました" -#: src/sudo.c:1886 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "承認者によりコマンドが拒否されました" -#: src/sudo.c:1896 -msgid "approval plugin error" -msgstr "承認プラグイン エラー" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "書き込み可能な一時ディレクトリが見つかりません" @@ -994,7 +1090,7 @@ msgstr "書き込み可能な一時ディレクトリが見つかりません" msgid "%s left unmodified" msgstr "%s を修正しないままにします" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s を変更しません" @@ -1007,37 +1103,37 @@ msgstr "sesh: 内部エラー: パスの数がおかしいです" msgid "sesh: unable to create temporary files" msgstr "sesh: 一時ファイルを作成することができません" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: シグナルにより kill されました" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: 不明なエラー %d" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "一時ファイルを元の場所に戻すことができません" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "一時ファイルのいくつかを元の場所に戻すことができません" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "ユーザーID (uid) を root (%u) に変更できません" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "プラグインエラー: sudoedit 用のファイル一覧がありません" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "時刻を読み込むことができません" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "傍受ポートが設定されていません" @@ -1061,17 +1157,17 @@ msgstr "パスワードを読み取るために端末が必要です。 -S オ msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "パスワードを尋ねる (askpass) プログラムが指定されていません。 SUDO_ASKPASS を設定し、やり直してください" -#: src/tgetpass.c:328 +#: src/tgetpass.c:326 #, c-format msgid "unable to set gid to %u" msgstr "グループIDを %u に設定できません" -#: src/tgetpass.c:338 +#: src/tgetpass.c:336 #, c-format msgid "unable to set uid to %u" msgstr "ユーザーIDを %u に設定できません" -#: src/tgetpass.c:343 +#: src/tgetpass.c:341 #, c-format msgid "unable to run %s" msgstr "%s を実行できません" @@ -1088,6 +1184,18 @@ msgstr "標準入力へ dup2 を実行できません" msgid "unable to restore stdin" msgstr "標準入力を復元できません" +#~ msgid "insufficient space for execve arguments" +#~ msgstr "execve の引数のためのスペースが足りません" + +#~ msgid "unable to read execve %s for process %d" +#~ msgstr "execve の %s を読み取れません(プロセス %d)" + +#~ msgid "requires at least one argument" +#~ msgstr "最低でも一つ以上おの引数が必要です" + +#~ msgid "unable to run %s as a login shell" +#~ msgstr "%s をログインシェルとして実行できません" + #~ msgid "unable to dup intercept fd" #~ msgstr "傍受fdの dup を実行できません" diff --git a/po/ka.mo b/po/ka.mo index 8b7ba0fd912195b3d6f54015455452e86f953048..d88c221698c70d795300d76010821edf3e263149 100644 GIT binary patch delta 7607 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 delta 5164 zcmYk<2UHbT9>?+fKoG2eQ7oWiK?MXUO0zc<#JX5f0R;s?P>N!G=);ClNk$^p)z}Rh z&8S(8t5J6&8eL0b$yzzPZZ__Td)9K!o*0w;{@)CHGABPi_YU)B?)~38Pjd6L%iAq3 z_QyW;Diz0l;zu63D-~ckT@}&j#EI3|8mlo1FJmM81sRiS$fsJM55{3224jYGz5)a3AHWWH z3uU0Mt$vH<=I3M4i}Ry#HqTe-G!i&*&H65&b z0Hg60%8i5h5sL9h(Nrbh%&*%DyW>*=(y&2J|V8 z!Ydest*9%-QKNAXW~1Ej2+BadK{l6qhuzStojK4xDE%yy%2l?b{yk`1=Y*8rMPofN z3VY&Alu~X-*=)y9u78NK6y7Yflspz?&9nHy5k1{{doLXAUtU{Q?bH!+)ae=4RAU9y}Oj#Dy4++psTQM_I#0d|K>+GUI_LOO=W;fQ6`G1c zj{K*t^MfL&*O(~pe+!->H%>>{jJr@~bPAb_x`Dp<3VD@PLpFw}p< zmZ3cG1j=;}P$u#kr6QdvUvqi?6KKc{Q&HBs2<01X4Ki7^6=eorq73jM$_!tk49t`A z$phM>Tpx$Bhtg2P3Y4Wdj?6(lLaCe^Cw+Oo(rCy7Vo=s58Kp#-$f~H-C9 z+3GRMUhrVU&{UmK!?7p>D@3`^I+RKtK_;(mp?vNqw9D>n$qtl}N27djD#{3pQ7Te_ zQjxtVH#mh-i6_Wp)En!(#>SC7kbp9v87P(7h*I+XC`)q%dA9mBl={n>bfaGKfoUiM zDMuOkF_f9!#-{kQWg~WKZ~A^HGn<6mQ!TZu#whv^tl#_akV`hsp;Yvz2$l!iMNIb;IAl~GNuP*#|4;zofy9Sz7$8|X_V_cc$&;`DCXg89E9KDVf2qSCsc#( z^q=EU{EwZ+MjEl)bp~ERc~D5K`GB>!n*Mz(!?ZZlXV{Pa>|SO`52GtHe2SAe|98qG zmF&xx##_ulS-Lbv+l1@ZqFiUM;x00hmpBjO`YW{pt5GiKK7emAT#FePK9E-oKf+{m zXPOR7!F~7yN8`%D{7Z;;Epvt_HG#g0=ie8Yh)d-C-$|o{5w&3ya)V97l$wlj36vcx zaRfF_G}kNzGwGj2E>#_do7d%FHvPXLw^SpN%=>Jz{5Ov0d?Gg!cjHER|Nl!PhZAd9 z(AoGJKg85gO5MSiC?l_7T8u?$W6TQ7#$ft?#T0ZOtJEx zY{i5lDBljAuad@@o9H<{q#wxe=At`KU5^Ve5ZxxS4A>o4;%Qut{a7d2bQka>hVhi` z_z%?4!RX}ozEhN971b(Shc#%gq>(&TsRDeCn{nzi^MW^+OMiK)x!GPI#ZjSYW~rB= z?49rNQ|zA3tBX%iDmHt%QakY?$^g`Rk z;U4s+zEoA6L>agTAL@!b@ho1(G%RBy$nT$_Y~sbN>wLU}(obT&WvTb)Q2#_4-b|Ba zR8vsa=qR#G%5#qSMKcv;=36lVe?VFDNT!v98}S4_#Lw{qUXi|-z&c8W)}XvCH*p{a z%rn2Rvg|ZsII$UJGu=d1LH&#}u*s~;CESOshRQB92U>&jpw>lvP2+8p8xNxsit8{M z&tOk{iOaAnWsnITz*w}qEHFpd+p-LKWz{ug63V;8ti*Cmqkjk2VAMkXfx+`A*GDem zZ+k33dHqhHOzbVDVUNZ9%ZimK*ELw;+*@`PPh$@!3{1fZOWC2)M|nUT!NskvDnp?ofpS3^E`4w<}iTVehMwHRdpr!h_5|2H)Ha$>y0d~hXB zqVHE`euvLT_KP}$y|FXz9{W$tz>o23WVKWtquzo~QC_b_tNAMk-6yGzmWLO>EQ0J=@jnk}iU!g0RNQPMF##stql2Srp z)D7~R!>;<%t0Xsnb9SHAzJ&6{vWaxJ&i%pi3{p7fKTaL3bAqh>U&yya-lV!?B#lW{ zXOCrwEX)+E)5!9V*oE+lJCF7J+)TQX%j7&^$(_d-ejX*a%&zlWPQD*HS^a8c|2h8( z8jozX{~v4*wL#Wjj)9~t*+%5GYeyo89A`<1vt|CT_&2ndkl&M!$N;jF$kBn^CZ41Z zNh5Nw_nd#yNxSZu!|U3iG~^AC<2va_97HFdkXFQ-$ngR3A-QBDIYbIb-7(B+oWz-= z8`(v&NK0~>#1iYUJHKX&>GdFASZ6=R=2p9*rM&yct@iskl=zZh(wWR71_>f3NF-@W zwh}pN2;XVWKWGDRFqu(Tix27SCrL!!(W~Sj`JBkHog5=Y0c)wz#X$SHD!l#@8( zPbQG*M2`9<$^~WbIKNIuStq~7K;lJ~k~U-(nM^K{Wa3B0l6X?4dwVrAo;LGz)qQ;T z>TO$Y(S2GS&>yurZ(M3U+Qo?W?`Sg|ZAaR4A1&C()#kexjXMUp=p_Nu{pJ;C7i1P{ z=|x&@W_n?fmYk)dIFo0!hFIAcJ} z2oK}O{)=qJp+QS*x_4!Bqb%NT(}T-f=s#4nG>#4Pb}^ENd)7A|j-BkPAD-Z)Ki<&J zxHjIco*tIsr|(Z$rN5iuWt^MRufG0vQgdTzMv%KcxvH6wk<-!Uzq{5^QR_HT>!_-A z?5cI_psUq7HaR<+^{&Njy{qVNb6&+I+iM+%jj~*=v3_)QJH0xg>7JNH?#9*91~z>` zR)p@K?4xg4QE1$79CGuaP9c1jCsaFcyi3#X=XbL0)_>_)mrxn^8k iySAR*dUPc|kScPkpW7{U5J&;J4JPwD^w diff --git a/po/ka.po b/po/ka.po index 2a021deb25..d48f5e949a 100644 --- a/po/ka.po +++ b/po/ka.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.10b1\n" +"Project-Id-Version: sudo 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-02-12 09:31-0700\n" -"PO-Revision-Date: 2022-04-27 15:21+0200\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-17 09:43+0200\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian <(nothing)>\n" "Language: ka\n" @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.0.1\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.1.1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -32,75 +32,75 @@ 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:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:206 src/exec_monitor.c:456 -#: src/exec_monitor.c:462 src/exec_monitor.c:470 src/exec_monitor.c:478 -#: src/exec_monitor.c:485 src/exec_monitor.c:492 src/exec_monitor.c:499 -#: src/exec_monitor.c:506 src/exec_monitor.c:513 src/exec_monitor.c:520 -#: src/exec_monitor.c:527 src/exec_nopty.c:219 src/exec_nopty.c:228 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:306 src/exec_nopty.c:503 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_pty.c:840 -#: src/exec_pty.c:849 src/exec_pty.c:906 src/exec_pty.c:1059 -#: src/exec_pty.c:1231 src/exec_pty.c:1240 src/exec_pty.c:1247 -#: src/exec_pty.c:1254 src/exec_pty.c:1261 src/exec_pty.c:1268 -#: src/exec_pty.c:1275 src/exec_pty.c:1282 src/exec_pty.c:1289 -#: src/exec_pty.c:1296 src/exec_pty.c:1303 src/exec_pty.c:1311 -#: src/exec_pty.c:1774 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:192 src/parse_args.c:213 src/parse_args.c:287 -#: src/parse_args.c:632 src/parse_args.c:654 src/parse_args.c:679 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:483 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:709 src/sudo.c:719 src/sudo.c:744 src/sudo.c:767 -#: src/sudo.c:776 src/sudo.c:785 src/sudo.c:802 src/sudo.c:844 src/sudo.c:854 -#: src/sudo.c:883 src/sudo.c:1083 src/sudo.c:1104 src/sudo.c:1397 -#: src/sudo.c:1566 src/sudo.c:1793 src/sudo.c:2127 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:100 -#: src/exec_intercept.c:330 src/exec_intercept.c:354 src/exec_intercept.c:377 -#: src/exec_intercept.c:385 src/exec_intercept.c:410 src/exec_intercept.c:416 -#: src/exec_intercept.c:425 src/exec_intercept.c:431 src/exec_intercept.c:565 -#: src/exec_intercept.c:706 src/exec_monitor.c:456 src/exec_monitor.c:462 -#: src/exec_monitor.c:470 src/exec_monitor.c:478 src/exec_monitor.c:485 -#: src/exec_monitor.c:492 src/exec_monitor.c:499 src/exec_monitor.c:506 -#: src/exec_monitor.c:513 src/exec_monitor.c:520 src/exec_monitor.c:527 -#: src/exec_nopty.c:219 src/exec_nopty.c:228 src/exec_nopty.c:235 -#: 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:298 -#: src/exec_nopty.c:306 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_pty.c:840 src/exec_pty.c:849 src/exec_pty.c:906 -#: src/exec_pty.c:1231 src/exec_pty.c:1240 src/exec_pty.c:1247 -#: src/exec_pty.c:1254 src/exec_pty.c:1261 src/exec_pty.c:1268 -#: src/exec_pty.c:1275 src/exec_pty.c:1282 src/exec_pty.c:1289 -#: src/exec_pty.c:1296 src/exec_pty.c:1303 src/exec_pty.c:1311 -#: src/exec_pty.c:1774 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:192 src/parse_args.c:214 src/parse_args.c:287 -#: src/parse_args.c:632 src/parse_args.c:654 src/parse_args.c:679 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:483 src/sesh.c:113 -#: src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:883 src/sudo.c:1083 -#: src/sudo.c:1104 src/sudo.c:1397 src/sudo.c:1566 src/sudo.c:1793 -#: src/sudo.c:2127 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 -#: src/sudo_edit.c:438 src/sudo_edit.c:539 src/sudo_edit.c:546 -#: src/sudo_edit.c:677 src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "მეხსიერების გამოყოფის შეცდომა" @@ -114,23 +114,23 @@ msgstr "%.*s-ის აღმოჩენის შეცდომა" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s არსებობს, მაგრამ საქაღალდე არაა (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "%s-ის გახსნის შეცდომა" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "%.*s-ის გახსნის შეცდომა" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "%.*s-ის mkdir-ის შეცდომა" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "%.*s-ის გახსნის შეცდომა" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "რეგულარული გამოსახულება ძალიან გრძელია" @@ -139,8 +139,8 @@ msgstr "რეგულარული გამოსახულება ძ msgid "Unknown signal" msgstr "უცნობი სიგნალი" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "არასწორი მნიშვნელობა" @@ -152,77 +152,86 @@ msgstr "მნიშვნელობა ძალიან გრძელი msgid "value too small" msgstr "მნიშვნელობა ძალიან პატარაა" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "ბილიკის არასწორი მისამართი (\"%s\") %s-ში, %u ხაზზე" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "%s -ის არასწორი მნიშვნელობა \"%s\", %s-ში, %u-ე ხაზზე" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "ჯგუფის მხარდაუჭერელი წყარო \"%s\" %s-ში, %u-ე ხაზზე" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "არასწორი მაქს. ჯგუფები \"%s\" %s-ში, %u-ე ხაზზე" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "%s-ის აღმოჩენის შეცდომა" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s: არ წარმოადგენს ჩვეულებრივ ფაილს" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s-ის მფლობლის UID-ია %u. უნდა იყოს %u" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s ყველას მიერ ჩაწერადია" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s ჯგუფის მიერ ჩაწერადია" -#: src/copy_file.c:93 +#: src/apparmor.c:85 +msgid "failed to determine AppArmor confinement" +msgstr "შეცდომა AppArmor-ის ჩაკეტილობის დადგენისას" + +#: src/apparmor.c:93 +#, c-format +msgid "unable to change AppArmor profile to %s" +msgstr "შეცდომა AppArmor-ის პროფილის %s -ზე შეცვლისას" + +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: შევკვეცო %s ნულ ბაიტამდე? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "არ გადავაწერ %s-ს" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "%s-დან წაკითხვა შეუძლებელია" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "%s-ში ჩაწერა შეუძლებელია" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "%s-ის აღმოჩენის შეცდომა" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: არ წარმოადგენს ჩვეულებრივ ფაილს" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: ფაილის არასწორი რეჟიმი: 0%o" @@ -231,99 +240,144 @@ msgstr "%s: ფაილის არასწორი რეჟიმი: 0%o" msgid "unable to restore current working directory" msgstr "მიმდინარე სამუშაო საქაღალდის აღდგენა შეუძლებელია" -#: src/exec.c:130 +#: src/exec.c:111 +msgid "unable to set privileges" +msgstr "პრივილეგიების დაყენების შეცდომა" + +#: src/exec.c:117 src/exec.c:122 +msgid "unable to set limit privileges" +msgstr "შეზღუდული პრივილეგიების დაყენების შეცდომა" + +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "შესვლის უცნობი კლასი: %s" -#: src/exec.c:142 +#: src/exec.c:157 msgid "unable to set user context" msgstr "მომხმარებლის კონტექსტის დაყენების შეცდომა" -#: src/exec.c:158 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "პროცესის პრიორიტეტის დაყენების შეცდომა" -#: src/exec.c:175 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "root საქაღალდის %s-ზე გადართვის" -#: src/exec.c:188 src/exec.c:194 src/exec.c:201 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "გამშვებ UID-ზე (%u, %u) გადართვის შეცდომა" -#: src/exec.c:219 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "საქაღალდის შეცვლის შეცდომა: %s" -#: src/exec.c:223 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "%s-დან დაწყებული" -#: src/exec.c:305 src/exec_monitor.c:565 src/exec_monitor.c:567 -#: src/exec_nopty.c:561 src/exec_pty.c:581 src/exec_pty.c:1411 -#: src/exec_pty.c:1413 src/signal.c:144 src/signal.c:151 src/signal.c:165 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "სიგნაგლისთვის (%d) სახელურის დაყენების შეცდომა" +#: src/exec.c:422 +msgid "intercept mode is not supported with SELinux RBAC on this system" +msgstr "ამ სისტემაზე SELinux RBAC-ის გამოყენებისას გადაჭერის რეჟიმი მხარდაუჭერელია" + +#: src/exec.c:427 +msgid "unable to log sub-commands with SELinux RBAC on this system" +msgstr "ამ სისტემაზე SELinux RBAC-თან ერთად ქვებრძანებების ჟურნალში ჩაწერა შეუძლებელია" + #: src/exec_common.c:56 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "pRIV_LIMIT-დან PRIV_PROC_EXEC-ის წაშლის შეცდომა" -#: src/exec_intercept.c:112 src/exec_intercept.c:116 src/exec_intercept.c:667 -#: src/exec_intercept.c:671 src/exec_intercept.c:857 src/exec_intercept.c:861 -#: src/exec_intercept.c:872 src/exec_intercept.c:876 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:221 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:300 -#: src/exec_nopty.c:308 src/exec_pty.c:706 src/exec_pty.c:711 -#: src/exec_pty.c:808 src/exec_pty.c:815 src/exec_pty.c:912 -#: src/exec_pty.c:1233 src/exec_pty.c:1242 src/exec_pty.c:1249 -#: src/exec_pty.c:1256 src/exec_pty.c:1263 src/exec_pty.c:1270 -#: src/exec_pty.c:1277 src/exec_pty.c:1284 src/exec_pty.c:1291 -#: src/exec_pty.c:1298 src/exec_pty.c:1305 src/exec_pty.c:1727 -#: src/exec_pty.c:1737 src/exec_pty.c:1782 src/exec_pty.c:1789 -#: src/exec_pty.c:1816 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "რიგში მოვლენის ჩამატების შეცდომა" -#: src/exec_intercept.c:314 -msgid "invalid PolicyCheckRequest" -msgstr "არასწორი PolicyCheckRequest" +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "უსაფრთხოების პოლიტიკის მიერ ბრძანება დაყენებული არაა" -#: src/exec_intercept.c:362 src/sudo.c:1209 src/sudo.c:1254 src/sudo.c:1298 +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "ბრძანება უარყოფილია წესის მიერ" -#: src/exec_intercept.c:455 src/sudo.c:1214 src/sudo.c:1259 src/sudo.c:1303 -#: src/sudo.c:1377 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "ნებადამრთველი დამატების შეცდომა" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "წესის დამატების შეცდომა" -#: src/exec_intercept.c:561 +#: src/exec_intercept.c:543 +msgid "invalid PolicyCheckRequest" +msgstr "არასწორი PolicyCheckRequest" + +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "კლიენტის მოთხოვნა ძალიან დიდია: %zu" -#: src/exec_intercept.c:659 +#: src/exec_intercept.c:720 +#, c-format +msgid "unable to unpack %s size %zu" +msgstr "შეცდომა %s -ის გაშლისას ზომა %zu" + +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "type_case-ის მოულოდნელი მნიშვნელობა %d %s-ში %s-დან" -#: src/exec_intercept.c:694 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "სერვერის შეტყობინება ძალიან დიდია: %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "I/O დამატების შეცდომა" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "ბრძანება უარყოფილია I/O დამატების მიერ" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "ჟურნალში ჩაწერის შეჩერება შეუძლებელია" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "ფანჯრის ზომის შეცვლა შეუძლებელია" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "socketpair-დან წაკითხვის შეცდომა" @@ -333,180 +387,213 @@ msgstr "socketpair-დან წაკითხვის შეცდომა" msgid "unexpected reply type on backchannel: %d" msgstr "blackchannel-ის პასუხის მოულოდნელი ტიპი: %d" -#: src/exec_monitor.c:583 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "საკონტროლო tty-ის დაყენების შეცდომა" -#: src/exec_monitor.c:591 src/exec_nopty.c:369 src/exec_pty.c:1490 -#: src/exec_pty.c:1511 src/exec_pty.c:1531 src/tgetpass.c:307 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "ფაიფის შექმნის შეცდომა" -#: src/exec_monitor.c:601 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "მშობლისგან შეტყობინების მიღების შეცდომა" -#: src/exec_monitor.c:617 src/exec_nopty.c:407 src/exec_pty.c:1569 -#: src/sudo_edit.c:361 src/tgetpass.c:311 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 +#: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "პროცესის განტოტვის შეცდომა" -#: src/exec_monitor.c:621 src/exec_monitor.c:722 src/exec_nopty.c:471 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "tty-ის ჭდის აღდგენის შეცდომა" -#: src/exec_monitor.c:637 src/sesh.c:123 src/sudo.c:1160 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "%s-ის გაშვების შეცდომა" -#: src/exec_nopty.c:363 src/exec_pty.c:1420 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "წესების დამატების შეცდომა სესიის ინიციალიზაციისას" -#: src/exec_nopty.c:377 src/exec_pty.c:1391 src/exec_pty.c:1399 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "სოკეტების შექმნის შეცდომა" -#: src/exec_nopty.c:459 src/exec_pty.c:1666 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "მოვლენების მარყუჟის შეცდომა" -#: src/exec_nopty.c:569 src/exec_pty.c:619 src/signal.c:101 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to restore handler for signal %d" -msgstr "სიგნალისთვის სახელურის აღდგენის შეცდომა: %d" +msgid "internal error, %s overflow" +msgstr "შიდა შეცდომა: %s-ის გადავსება" -#: src/exec_pty.c:158 -msgid "unable to allocate pty" -msgstr "pty-ის გამოყოფის შეცდომა" +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 +#, c-format +msgid "unable to set registers for process %d" +msgstr "პროცესისთვის (%d) რეგისტრების დაყენება შეუძლებელია" -#: src/exec_pty.c:222 src/exec_pty.c:262 src/exec_pty.c:302 src/exec_pty.c:353 -#: src/exec_pty.c:404 -msgid "I/O plugin error" -msgstr "I/O დამატების შეცდომა" +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "პროცესი %d მოულოდნელად დასრულდა" -#: src/exec_pty.c:226 src/exec_pty.c:266 src/exec_pty.c:306 src/exec_pty.c:357 -#: src/exec_pty.c:408 -msgid "command rejected by I/O plugin" -msgstr "ბრძანება უარყოფილია I/O დამატების მიერ" +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "seccomp ფილტრის დაყენების შეცდომა" -#: src/exec_pty.c:455 -msgid "error logging suspend" -msgstr "ჟურნალში ჩაწერის შეჩერება შეუძლებელია" +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "ინტერპრეტატორის არგუმენტი. მოველოდი \"%s\", მივიღე \"%s\"" -#: src/exec_pty.c:489 -msgid "error changing window size" -msgstr "ფანჯრის ზომის შეცვლა შეუძლებელია" +#: src/exec_ptrace.c:1503 +#, c-format +msgid "pathname mismatch, expected \"%s\", got \"%s\"" +msgstr "ბილიკი არ ემთხვევა. მოველოდი \"%s\", მივიღე \"%s\"" + +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 +#, c-format +msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" +msgstr "%s[%d] არ ემთხვევა. მოველოდი \"%s\", მივიღე \"%s\"" + +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "პროცესის %d მოულოდნელი სტატუსი 0x%x" + +#: src/exec_ptrace.c:1711 +#, c-format +msgid "unable to get event message for process %d" +msgstr "მოვლენის შეტყობინების მიღების შეცდომა პროცესისთვის %d" + +#: src/exec_ptrace.c:1718 +#, c-format +msgid "unable to get registers for process %d" +msgstr "პროცესისთვის (%d) რეგისტრების მიღება შეუძლებელია" + +#: src/exec_pty.c:103 +msgid "unable to allocate pty" +msgstr "pty-ის გამოყოფის შეცდომა" + +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "სიგნალისთვის სახელურის აღდგენის შეცდომა: %d" -#: src/exec_pty.c:1615 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "მაყურებელი პროცესისთვის შეტყობინების გაგზავნა შეუძლებელია" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "%s-ის შეცდომა %d ხაზზე \"%s\"დამატების ჩატვირთვისას" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s-ის მფლობლის UID %d უნდა იყოს" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s ჩაწერადი მხოლოდ მფლობლის მიერ უნდა იყოს" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "ორჯერ აღწერილი დამატება \"%s\", \"%s\"-ში, %d-ე ხაზზე" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "%s-ის ჩატვირთვის შეცდომა: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "სიმბოლო \"%s\"-ის %s-ში პოვნა შეუძლებელია" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "დამატების შეუთავსებელი ძირითადი ვერსია: %d (ველოდებოდით %d-ს), რომელიც ნაპოვნია %s-ში" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "წესებს დამატების (\"%s\") იგნორი %s-ში, %d-ე ხაზზე" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "დაშვებულია წესების მხოლოდ ერთი დამატების მითითება" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "დამატების ტიპი (%d) უცნობია. ნაპოვნია %s-ში" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "წესების დამატება %s არ შეიცავს check_policy მეთოდს" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "შიდა შეცდომა: %s-ის გადავსება" - -#: src/parse_args.c:234 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "გარემოს ცვლადის არასწორი სახელი: %s" -#: src/parse_args.c:337 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C -ის არგუმენტი რიცხვი უნდა იყოს, 3 ან მეტი" -#: src/parse_args.c:568 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "-i და -s პარამეტრების ერთად მითითება აკრძალულია" -#: src/parse_args.c:573 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "-i და -E პარამეტრების ერთად მითითება აკრძალულია" -#: src/parse_args.c:583 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "ჩასწორების რეჟიმში -E-ის მითითება აკრძალულია" -#: src/parse_args.c:586 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "ჩასწორების რეჟიმში გარემოს ცვლადების მითითება არ შეგიძლიათ" -#: src/parse_args.c:596 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "პარამეტრები -U და -I შეუთავსებლებია" -#: src/parse_args.c:600 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "პარამეტრები -A და -S შეუთავსებლებია" -#: src/parse_args.c:693 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "ამ პლატფორმაზე sudoedit-ი მხარდაუჭერელია" -#: src/parse_args.c:776 +#: src/parse_args.c:767 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:792 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "-K, -k და -N -დან მხოლოდ ერთ ერთი პარამეტრის მითითებაა შესაძლებელი" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -515,146 +602,146 @@ msgstr "" "%s - ფაილების სხვა მომხმარებლით ჩასწორება\n" "\n" -#: src/parse_args.c:794 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" "\n" msgstr "%s - sსხვ\n" -#: src/parse_args.c:800 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" msgstr "" "\n" -"პარამეტრები:\n" +"პარამეტრები\n" -#: src/parse_args.c:802 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "პაროლის მოსათხოვნად დამხმარე პროგრამის გამოყენება" -#: src/parse_args.c:805 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "bsd ავთენტიკაციის მოთხოვნილი ტიპის გამოყენება" -#: src/parse_args.c:809 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "ბრძანების ფონურ რეჟიმში გაშვება" -#: src/parse_args.c:812 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "მოთხოვნისას ზარის დარეკვა" -#: src/parse_args.c:814 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "ყველა იმ ფაილის დესკრიპტორის დახურვა, რომლის ნომერიც >= რიცხვზე" -#: src/parse_args.c:817 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "ბრძანების BSD-ის მითითებული კლასით გაშვება" -#: src/parse_args.c:820 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "ბრძანების გაშვებამდე სამუშაო საქაღალდის შეცვლა" -#: src/parse_args.c:823 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "ბრძანების გაშვებისას მომხმარებლის გარემოს შენარჩუნება" -#: src/parse_args.c:825 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "გარემოს მითითებული ცვლადების შენარჩუნება" -#: src/parse_args.c:827 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "ბრძანების გაშვების მაგიერ ფაილების ჩასწორება" -#: src/parse_args.c:830 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "ბრძანების მითითებული ჯგუფის სახელით ან ID-ით გაშვება" -#: src/parse_args.c:833 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "გარემოს ცვლადის HOME მომხმარებლის საწყის საქაღალდეზე დაყენება" -#: src/parse_args.c:836 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "დახმარების გამოტანა და გამოსვლა" -#: src/parse_args.c:838 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "ჰოსტზე ბრძანების გაშვება (თუ მხარდაჭერილია დამატების მიერ)" -#: src/parse_args.c:841 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "შესვლის გარსის სამიზნე მომხმარებლით გაშვება; ასევე შეიძლება მიეთითოს ბრძანებაც" -#: src/parse_args.c:843 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "timestamp ფაილის სრულად წაშლა" -#: src/parse_args.c:846 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "timestamp ფაილის არასწორად გამოცხადება" -#: src/parse_args.c:849 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "მომხმარებლის პრივილეგიების სიის ან მითითებული ბრძანების გამოტანა; მეტი ინფორმაციისთვის მიუთითეთ ორჯერ" -#: src/parse_args.c:852 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "არაინტერაქტიური რეჟიმი. შეყვანა მოთხვნილი არ იქნება" -#: src/parse_args.c:855 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "სამიზნის დაყენების მაგიერ ჯგუფის ვექტორის შენარჩუნება" -#: src/parse_args.c:858 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "პაროლის მითითებული ტიპის მოთხოვნის გამოყენება" -#: src/parse_args.c:860 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "ბრძანების გაშვებამდე root საქაღალდის შეცვლა" -#: src/parse_args.c:863 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "მითითებული როლით SELinux-ის საუფრთხოების კონტექსტის შექმნა" -#: src/parse_args.c:866 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "პაროლის სტანდარტული შეტანის მექანიზმიდან წაკითხვა" -#: src/parse_args.c:869 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "გარსის სამიზნე მომხმარებლით გაშვება; ასევე შეიძლება მიეთითოს ბრძანებაც" -#: src/parse_args.c:873 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "მითითებული ტიპის SELinux-ის უსაფრთხოების კონტექსტის შექმნა" -#: src/parse_args.c:876 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "ბრძანების შესრულების მითითებული დროის შემდეგ შეწყვეტა" -#: src/parse_args.c:879 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "სიის რეჟიმის დროს მომხმარებლის პრივილეგიების ჩვენება" -#: src/parse_args.c:882 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "ბრძანების მითითებული სახელით ან ID-ით გაშვება (ან ფაილის ჩასწორება)" -#: src/parse_args.c:884 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "ვერსიის ჩვენება და გასვლა" -#: src/parse_args.c:887 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "მომხმარებლის timestamp-ის ბრძანების გაშვების გარეშე განახლება" -#: src/parse_args.c:890 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "ბრძანების სტრიქონიდან ჩაწოდებული არგუმენტების დამუშავების შეწყვეტა" @@ -754,37 +841,42 @@ msgstr "%s-ზე გაშვების კონტექსტის და msgid "unable to set key creation context to %s" msgstr "%s-ზე გასაღების შექმნის კონტექსტის დაყენების შეცდომა" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "საჭიროა ერთი არგუმენტი მაინც" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "-c და -i -დან მხოლოდ ერთ ერთი პარამეტრის მითითებაა შესაძლებელი" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "ფაილის დესკრიპტორის არასწორი ნომერი: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 +#, c-format +msgid "The -%c option may not be used in edit mode." +msgstr "-%c პარამეტრის გამოყენება ჩასწორების რეჟიმში შეუძლებელია." + +#: src/sesh.c:184 src/sesh.c:189 #, c-format -msgid "unable to run %s as a login shell" -msgstr "%s - სწორ შესვლის გარსს არ წარმოადგენს" +msgid "The -%c option may only be used in edit mode." +msgstr "-%c პარამეტრის გამოყენება მხოლოდ ჩასწორების რეჟიმშია შესაძლებელი." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: სიმბმულების ჩასწორება შეუძლებელია" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: ჩაწერად საქაღალდეში ფაილების ჩასწორება აკრძალულია" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "ნაპოვნია ჩასწორების სესიის ნარჩენი შემცველობა: %s" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "ჯგუფების სიის მიღების შეცდომა" @@ -868,118 +960,122 @@ msgstr "ბაზაში \"%s\" თქვენ არ არსებობ msgid "unable to determine tty" msgstr "tty-ის დადგენა შეუძლებელია" -#: src/sudo.c:908 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "დაყენებულია ალამი \"ახალი პრივილეგიების გარეშე\", რომელიც sudo-ს საშუალებას არ აძლევს, root-ით გაეშვას." -#: src/sudo.c:910 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "თუ sudo კონტეინერში ეშვება, ალმის გასათიშად შეიძლება კონტეინერის კონფიგურაციი ცვლილება დაგჭირდეთ." -#: src/sudo.c:944 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s-ის მფლობელი UID %d უნდა იყოს. ასევე დაყენებული უნდა ჰქონდეს setuid ბიტი" -#: src/sudo.c:947 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "მიმდინარე uid არ უდრის %d-ს, არამედ %s-ს, ფაილურ სისტემაზე, რომელსაც პარამეტრად \"nosuid\" აქვს მითითებული.თუ ეს NFS ფაილური სისტემაა root პრივილეგიების გარეშე?" -#: src/sudo.c:953 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "მიმდინარე uid %d-ს არ უდრის. შეამოწმეთ, აქვს sudo-ს setuid ბიტი მინიჭებული?" -#: src/sudo.c:969 src/tgetpass.c:333 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "ჯგუფის დამატებითი ID-ების დაყენების შეცდომა" -#: src/sudo.c:976 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "მიმდინარე gid-ის შესრულებად gid(%u)-ად დაყენების შეცდომა" -#: src/sudo.c:982 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "gid-ის შესრულებად gid(%u)-ად დაყენების შეცდომა" -#: src/sudo.c:1025 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "უსაფრთხოების პოლიტიკის მიერ argv დაყენებული არაა" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "უსაფრთხოების პოლიტიკის მიერ envp დაყენებული არაა" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "შვილეული პროცესის დასრულების მოულოდნელი პირობა: %d" -#: src/sudo.c:1132 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "წესების დამატების ინიციაცლიზაციის შეცდომა" -#: src/sudo.c:1194 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "წესების დამატება %s არ შეიცავს check_policy მეთოდს" -#: src/sudo.c:1240 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "წესების დამატება %s-ს პრივილეგიების ჩამოთვლის მხარდაჭერა არ გააჩნია" -#: src/sudo.c:1284 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "წესების დამატება %s-ს -v პარამეტრის მხარდაჭერა არ გააჩნია" -#: src/sudo.c:1322 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "წესების დამატება %s-ს -k/-K პარამეტრების მხარდაჭერა არ გააჩნია" -#: src/sudo.c:1451 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "i/o დამატების (%s) ინიციალიზაციის შეცდომა" -#: src/sudo.c:1454 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "i/o დამატების ინიციალიზაციის შეცდომა" -#: src/sudo.c:1603 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "აუდიტის დამატების (%s) ინიციალიზაციის შეცდომა" -#: src/sudo.c:1682 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: ჟურნალში შეცდომის მოვლენის ჩასწერის შეცდომა (%s%s)" -#: src/sudo.c:1718 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: ჟურნალში თანხმობის მოვლენის ჩასწერის შეცდომა (%s%s)" -#: src/sudo.c:1723 src/sudo.c:1761 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "აუდიტის დამატების შეცდომა" -#: src/sudo.c:1756 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: ჟურნალში უარყოფის მოვლენის ჩასწერის შეცდომა (%s%s)" -#: src/sudo.c:1816 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "ნებადამრთველი დამატების (%s)" -#: src/sudo.c:1886 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "ბრძანება უარყოფილია ნებადამრთველის მიერ" -#: src/sudo.c:1896 -msgid "approval plugin error" -msgstr "ნებადამრთველი დამატების შეცდომა" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "არცერთი დროებითი საქაღალდე ჩაწერადი არაა" @@ -989,7 +1085,7 @@ msgstr "არცერთი დროებითი საქაღალდ msgid "%s left unmodified" msgstr "%s არ შეცვლილა" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s შეუცვლელია" @@ -1002,37 +1098,37 @@ msgstr "sesh: შიდა შეცდომა: ბილიკების msgid "sesh: unable to create temporary files" msgstr "sesh: დროებითი ფაილების შექმნის შეცდომა" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: გარდაიცვალა სიგნალით" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: უცნობი შეცდომა (%d)" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "დროებითი ფაილების თავიანთ პირველად მდებარეობაზე კოპირების შეცდომა" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "ზოგიერთი დროებითი ფაილის პირველად მდებარეობაზე კოპირების შეცდომა" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "uid-ის root-ზე(%u) გადართვის შეცდომა" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "დამატების შეცდომა: sudoedit-ს ფაილების სია ესაჭიროება" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "საათის წაკითხვის შეცდომა" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "გადაჭერის პორტი დაყენებული არაა" @@ -1056,17 +1152,17 @@ msgstr "პაროლის წასაკითხად აუცილე msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "askpass-ის ტიპის პროგრამა მითითებული არაა. სცადეთ დააყენოთ SUDO_ASKPASS" -#: src/tgetpass.c:328 +#: src/tgetpass.c:326 #, c-format msgid "unable to set gid to %u" msgstr "gid-ის %u-ზე დაყენების შეცდომა" -#: src/tgetpass.c:338 +#: src/tgetpass.c:336 #, c-format msgid "unable to set uid to %u" msgstr "uid-ის %u-ზე დაყენების შეცდომა" -#: src/tgetpass.c:343 +#: src/tgetpass.c:341 #, c-format msgid "unable to run %s" msgstr "%s-ის გაშვების შეცდომა" diff --git a/po/ko.mo b/po/ko.mo index bf8baf1abf6b15d2a4f80347073a41a2a314bbed..ea4f51795ddb91f5a05b94e0db68cb4c7ae93dbb 100644 GIT binary patch delta 5999 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 delta 5426 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 mzUYiTjY0~0*H\n" "Language-Team: Korean \n" "Language: ko\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=1; plural=0;\n" -"X-Generator: Poedit 2.3.1\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 3.1.1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -33,76 +33,75 @@ 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:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "메모리를 할당할 수 없습니다" @@ -116,23 +115,23 @@ msgstr "%.*s의 상태를 가져올 수 없습니다" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s(이)가 있지만 디렉터리는 아닙니다 (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "%s을(를) 열 수 없습니다" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "%.*s을(를) 열 수 없습니다" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "%.*s 디렉터리를 새로 만들 수 없습니다" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "%.*s을(를) 열 수 없습니다" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "정규 표현식이 너무 깁니다" @@ -141,8 +140,8 @@ msgstr "정규 표현식이 너무 깁니다" msgid "Unknown signal" msgstr "알 수 없는 시그널" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "부적절한 값" @@ -154,86 +153,86 @@ msgstr "값이 너무 큽니다" msgid "value too small" msgstr "값이 너무 작습니다" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "%2$s의 %3$u번째 줄에 부적절한 경로 값 \"%1$s\"" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "%3$s의 %4$u번째 줄에 %1$s의 부적절한 값 \"%2$s\"" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "%2$s의 %3$u번째 줄에 지원하지 않는 그룹 원본 \"%1$s\"" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "%2$s의 %3$u번째 줄에 부적절한 최대 그룹 값 \"%1$s\"" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "%s의 상태를 가져올 수 없습니다" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s은(는) 일반 파일이 아닙니다" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s은(는) %u uid에서 소유하고 있지만 %u uid가 소유해야 합니다" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s에 모두가 기록할 수 있습니다" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s에 그룹 구성원이 기록할 수 있습니다" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "AppArmor 격리 여부를 알 수 없습니다" -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "AppArmor 프로파일을 %s(으)로 바꿀 수 없습니다" -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: %s 문자열을 0 바이트로 자릅니까? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "%s 덮어쓰지 않음" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "%s을(를) 읽을 수 없습니다" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "%s에 기록할 수 없습니다" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "%s의 상태를 가져올 수 없습니다" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: 일반 파일 아님" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: 잘못된 파일 모드: 0%o" @@ -242,60 +241,59 @@ msgstr "%s: 잘못된 파일 모드: 0%o" msgid "unable to restore current working directory" msgstr "현재 작업 디렉터리를 복원할 수 없습니다" -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "권한을 설정할 수 없습니다" -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "권한 한계를 설정할 수 없습니다" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "알 수 없는 로그인 클래스 %s" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "사용자 컨텍스트를 설정할 수 없습니다" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "프로세스 우선순위를 설정할 수 없습니다" -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "루트를 %s(으)로 바꿀 수 없습니다" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "실행 uid로 바꿀 수 없습니다 (%u, %u)" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "%s 디렉터리로 바꿀 수 없습니다" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "%s에서 시작 중" -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "%d 시그널의 핸들러를 설정할 수 없습니다" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "이 시스템의 SELinux RBAC에서는 가로채기 모드를 지원하지 않습니다" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "이 시스템의 SELinux RBAC에서는 하위 명령을 기록할 수 없습니다" @@ -303,58 +301,84 @@ msgstr "이 시스템의 SELinux RBAC에서는 하위 명령을 기록할 수 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "PRIV_LIMIT에서 PRIV_PROC_EXEC를 제거할 수 없습니다" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "큐에 이벤트를 추가할 수 없습니다" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "보안 정책에 따라 명령을 설정하지 않았습니다" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "정책을 통해 명령을 거부 했습니다" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "승인 플러그인 오류" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "정책 플러그인 오류" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "부적절한 PolicyCheckRequest" -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "클라이언트 요청이 너무 깁니다: %zu" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "%2$zu 크기의 %1$s을(를) 언팩할 수 없습니다" -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "%3$s의 %2$s에서 예기치 못한 type_case 값 %1$d번" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "서버 메시지 길이가 너무 깁니다: %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "입출력 플러그인 오류" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "입출력 플러그인에서 명령을 거부했습니다" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "오류 로깅 대기" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "윈도우 크기 변경 오류" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "소켓쌍 읽기 오류" @@ -364,225 +388,214 @@ msgstr "소켓쌍 읽기 오류" msgid "unexpected reply type on backchannel: %d" msgstr "백 채널에 잘못된 응답 형식: %d" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "처리 tty를 설정할 수 없습니다" -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "파이프를 만들 수 없습니다" # parent가 정확히 무슨 의미인지 알 수 없음 -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "상위로부터 메시지를 받을 수 없습니다" -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "포킹할 수 없습니다" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "tty 레이블을 복원할 수 없습니다" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "%s을(를) 실행할 수 없습니다" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "정책 플러그인에서 세션 초기화에 실패했습니다" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "소켓을 만들 수 없습니다" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "이벤트 루프에 오류" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "execve 인자 공간이 부족합니다" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" -msgstr "프로세스 %2$d번의 %1$s execve를 읽을 수 없습니다" +msgid "internal error, %s overflow" +msgstr "내부 오류, %s 오버플로우" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "프로세스 %d번의 레지스터를 설정할 수 없습니다" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "프로세스 %d번이 갑자기 끝났습니다" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "seccomp 필터를 설정할 수 없습니다" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "해석기 인자에서 \"%s\"이(가) 필요하지만 \"%s\"을(를) 지정했습니다" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "경로 이름이 일치하지 않습니다. \"%s\"을(를) 예상했지만, \"%s\"이(가) 나왔습니다" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "%s[%d]이(가) 일치하지 않습니다. \"%s\"을(를) 예상했지만, \"%s\"이(가) 나왔습니다" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "프로세스 %d번이 갑자기 0x%x 상태를 나타냈습니다" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "프로세스 %d번의 이벤트 메시지를 가져올 수 없습니다" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "프로세스 %d번의 레지스터를 가져올 수 없습니다" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "pty를 할당할 수 없습니다" -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "입출력 플러그인 오류" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "입출력 플러그인에서 명령을 거부했습니다" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "오류 로깅 대기" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "윈도우 크기 변경 오류" - -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "%d 시그널의 핸들러를 복원할 수 없습니다" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "감사 프로세스에 메시지를 보낼 수 없습니다" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "%s의 %d번째 줄에서 \"%s\" 플러그인을 불러오는 중 오류" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s은(는) uid %d에서 소유해야 합니다" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s은(는) 소유자만 기록할 수 있어야 합니다" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "%2$s의 %3$d번째 줄에서 \"%1$s\" 중복 플러그인 무시" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "%s을(를) 불러올 수 없습니다: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "%2$s에서 \"%1$s\" 심볼을 찾을 수 없습니다" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "%3$s에 주 버전이(%2$d을(를) 기대했지만) %1$d인 비호환 플러그인이 있습니다" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "%2$s의 %3$d번째 줄에서 \"%1$s\" 정책 플러그인 무시" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "단일 정책 플러그인을 지정하십시오" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "%2$s에 알 수 없는 정책 유형 %1$d이(가) 있습니다" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "%s 정책 플러그인에 check_policy 메서드가 없습니다" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "내부 오류, %s 오버플로우" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "부적절한 환경 변수 이름: %s" -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C의 인자 값은 3보다 크거나 같아야 합니다" -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "-i 옵션과 -s 옵션을 함께 지정할 수 없습니다" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "-i 옵션과 -E 옵션을 함께 지정할 수 없습니다" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "-E 옵션은 편집 모드에서 유효하지 않습니다" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "편집 모드에서 환경 변수를 지정할 수 없습니다" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "-U 옵션에는 -l 옵션만 함께 쓸 수 있습니다" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "-A 옵션과 -S 옵션을 함께 쓸 수 없습니다" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "이 플랫폼에서 sudoedit를 지원하지 않습니다" -#: src/parse_args.c:757 +#: src/parse_args.c:767 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:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "-K, -k, -N 옵션 중 하나만 지정해야합니다" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -591,7 +604,7 @@ msgstr "" "%s - 다른 사용자 권한으로 파일을 편집합니다\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -600,7 +613,7 @@ msgstr "" "%s - 다른 사용자 권한으로 명령을 실행합니다\n" "\n" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -608,131 +621,131 @@ msgstr "" "\n" "옵션:\n" -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "암호 질문에 보조 프로그램 활용" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "지정 BSD 인증 형식 활용" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "백그라운드에서 명령 실행" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "프롬프트를 띄울 때 알림 소리를 냅니다" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "num 보다 크거나 같은 모든 파일 서술자를 닫습니다" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "지정 BSD 로그인 클래스로 명령을 실행합니다" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "명령 실행 전 작업 디렉터리를 바꿉니다" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "명령을 실행할 때 사용자 환경을 유지합니다" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "지정 환경 변수 값을 유지합니다" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "명령을 실행하는 대신 파일을 편집합니다" -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "지정 그룹 이름 또는 ID로 명령을 실행합니다" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "대상 사용자의 내 폴더에 HOME 변수를 지정합니다" -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "도움말을 보여주고 빠져나갑니다" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "(플러그인에서 지원한다면)호스트에서 명령을 실행합니다" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "대상 사용자 자격으로 셸에 로그인하며 명령을 지정할 수 있습니다" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "타임스탬프 파일을 완전히 제거합니다" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "타임스탬프 파일을 초기화합니다" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "사용자 권한을 보여주거나 지정 명령을 확인합니다. 긴 형식으로 보려면 옵션을 두 번 사용하십시오" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "비대화형 모드. 프롬프트를 사용하지 않습니다" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "대상을 설정하는 대신 그룹 벡터를 유지합니다" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "지정 암호 프롬프트를 활용합니다" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "명령 실행 전 루트 디렉터리를 바꿉니다" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "지정 역할을 지닌 SELinux 보안 컨텍스트를 만듭니다" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "표준 입력으로 암호를 입력 받습니다" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "셸을 대상 사용자 명의로 실행하며 명령을 지정할 수 있습니다" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "지정 유형의 SELinux 보안 컨텍스트를 만듭니다" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "지정 제한 시간 이후로 명령 실행을 멈춥니다" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "목록 모드에서 사용자 권한을 보여줍니다" -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "지정한 사용자 이름 또는 ID로 명령을 실행(또는 파일 편집)" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "버전 정보를 보여주고 나갑니다" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "명령을 실행하지 않고 사용자 타임스탬프를 업데이트합니다" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "명령행 인자 처리를 멈춥니다" @@ -832,37 +845,42 @@ msgstr "exec 컨텍스트를 %s(으)로 설정할 수 없습니다" msgid "unable to set key creation context to %s" msgstr "키 생성 컨텍스트를 %s(으)로 설정할 수 없습니다" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "최소한 하나의 인자가 필요합니다" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "-c, -i 옵션 중 하나만 지정해야합니다" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "부적절한 파일 서술자 번호: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 #, c-format -msgid "unable to run %s as a login shell" -msgstr "%s(을)를 로그인 쉘로 실행할 수 없습니다" +msgid "The -%c option may not be used in edit mode." +msgstr "-%c 옵션은 편집 모드에서 사용하면 안됩니다." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:184 src/sesh.c:189 +#, c-format +msgid "The -%c option may only be used in edit mode." +msgstr "-%c 옵션은 편집 모드에서만 사용해야합니다." + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: 심볼릭 링크 편집을 허용하지 않습니다" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: 기록 가능한 디렉터리에서 파일 편집을 허용하지 않습니다" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "%s에 편집 세션 내용 남음" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "그룹 목록을 가져올 수 없습니다" @@ -946,118 +964,122 @@ msgstr "%s 데이터베이스에 없는 사용자입니다" msgid "unable to determine tty" msgstr "tty를 지정할 수 없습니다" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "sudo를 루트 권한으로 실행하지 못하게 하는 \"no new privileges\" 플래그를 설정했습니다." -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "컨테이너에서 sudo를 실행할 때, 플래그를 끄는 컨테이너 설정이 필요할 수 있습니다." -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s은(는) %d uid를 소유해야 하며 setuid 비트를 설정해야 합니다" -#: src/sudo.c:964 +#: src/sudo.c:957 #, 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:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "%d은(는) 유효한 uid가 아닙니다. sudo에 setuid root를 설치했습니까?" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "추가 그룹 ID를 설정할 수 없습니다" -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "유효한 gid를 %u 실행 gid로 설정할 수 없습니다" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "gid를 실행 gid %u(으)로 설정할 수 없습니다" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "보안 정책에 따라 argv를 설정하지 않았습니다" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "보안 정책에 따라 envp를 설정하지 않았습니다" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "예상치 못한 하위 프로세스 중단 상태: %d" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "정책 플러그인을 초기화할 수 없습니다" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "%s 정책 플러그인에 \"check_policy\" 메서드가 빠졌습니다" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "%s 정책 플러그인에서 권한 조회를 지원하지 않습니다" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "%s 정책 플러그인에서 -v 옵션을 지원하지 않습니다" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "%s 정책 플러그인에서 -k/-K 옵션을 지원하지 않습니다" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "%s 입출력 플러그인 초기화 오류" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "입출력 플러그인 초기화 오류" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "%s 감사 플러그인 초기화 오류" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: %s%s 오류 이벤트를 기록할 수 없습니다" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: %s%s 허용 이벤트를 기록할 수 없습니다" -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "감사 플러그인 오류" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: %s%s 거부 이벤트를 기록할 수 없습니다" -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "%s 승인 플러그인 초기화 오류" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "승인자가 명령을 거부했습니다" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "승인 플러그인 오류" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "기록 가능한 임시 디렉터리를 찾을 수 없습니다" @@ -1067,7 +1089,7 @@ msgstr "기록 가능한 임시 디렉터리를 찾을 수 없습니다" msgid "%s left unmodified" msgstr "%s 수정하지 않은 상태로 남음" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s 바꾸지 않음" @@ -1080,37 +1102,37 @@ msgstr "sesh: 내부 오류: 경로에 잘못된 파일" msgid "sesh: unable to create temporary files" msgstr "sesh: 임시 파일을 만들 수 없습니다" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: 시그널을 받아 죽음" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: 잘못된 오류 %d" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "원위치에 임시 파일을 복사할 수 없습니다" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "원 위치에 임시 파일 일부를 복사할 수 없습니다" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "uid를 루트로 바꿀 수 없습니다(%u)" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "플러그인 오류: sudoedit에 파일 목록이 빠짐" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "클록을 읽을 수 없습니다" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "차단 포트를 설정하지 않았습니다" @@ -1161,6 +1183,18 @@ msgstr "표준 입력을 dup2 처리할 수 없습니다" msgid "unable to restore stdin" msgstr "표준 입력을 복원할 수 없습니다" +#~ msgid "insufficient space for execve arguments" +#~ msgstr "execve 인자 공간이 부족합니다" + +#~ msgid "unable to read execve %s for process %d" +#~ msgstr "프로세스 %2$d번의 %1$s execve를 읽을 수 없습니다" + +#~ msgid "requires at least one argument" +#~ msgstr "최소한 하나의 인자가 필요합니다" + +#~ msgid "unable to run %s as a login shell" +#~ msgstr "%s(을)를 로그인 쉘로 실행할 수 없습니다" + #~ msgid "unable to dup intercept fd" #~ msgstr "가로채기 파일 서술자를 복제할 수 없습니다" diff --git a/po/pl.mo b/po/pl.mo index 9245c40f510379cabbea77fa1326b9b100a2eb37..2b6bc0ba503eb20817319592d47a2c3e9e09c9b6 100644 GIT binary patch delta 5879 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 r*UO$8O%1*C(cc!x*V9ocwgRqTHNVRk*0 delta 5375 zcmYk<33yFs9>?)F_I=4BL6(CgwuU4kwuXo$c50d0x#EgM77`IjhD+LN6}4Q{)-ouy zRmUCLqL!w#jE<#aX=~{iRmQY69r`e4o|*42=jb?3e)sd9bIdMTm=1o%Y^bB7#>@^drUn*a3w#-y;2vlHEY@fL5e8xnK4LKfLvRQ- z#0+ePFCl+sJ0JeWc+6oMksLUSjqm{`V%;EPYGH4zg2S)@j>gV716$*6=lB(D$^K8+ z6dQ7~I{G|ne>`dc^N~NZlaG2l-yElr$$<;l7n6eZg)y(bRSsSY50F*h6^ zI|gu)j>n+pG!FISgQ;)bnJ= zX{h6?QKc=z1bl*;l32>t7AIqST!||6Y1E>;jyk^v<JlG2G`KS%5+z2BO3MK6jaGFupcf$J>U{*@dnW=jjT0NMAH+4 zaVqkYV&*xnLY=o0ExrF`H0p5R7HTg4iF#m5%0bf%L0wRS8re$J_a{-6`T^B}ddx!? zj7B|h5^7BpqJAM4A=Ni;p$1llK|J5wprMgJL{%b;30BV&P!Aq}y3mbUbc@i!L&&qu zRn+y>ml4ejqExHbmL0YS0e~Tm97J- zbp25e7>BxW0jlI%P*e1g^ZhNbp&`6u| za;rmwP$Qg)s>o`ri^m+#;q&Z&i>g2vFFVCE-5sZ6BKsRr-(SKv{rCySYV5DzOLbtq zhX&6!pQAeR1XYQc4t5E9VG8?csF80&3(Jsdn_C!xfgSD2C7|vz7&YSg*d4cGeY}lT z@Db{Mp8wL&4@GDvyT_wZbGIB-+P%m#%-2Zgjelo*KNVF<4+i6Y48$*RF5bkR=;D=7 z<+kBOJb?8unDV{J<)#G&y7{u&1Uy4rD(I z^`L{;7jIxwY)QSw1*nd^hpNC;)PQRB;U6EE+=u$>f?^Kn_1l5! z*+tZ%s>$$JN2VF-_;^%DS0b}yPGU=}($B77EH+_(B&d8TQe`JND69=6e6={mZ3)eCF(V= zILNMKBI^EqJT&<6GjmZV?nRw=16!d#-PG|UR7bN>BiV>C_$ju=pD_xEMX7scGi=g`yU1x8O}3~H`FL<*1U&3O^V<2$G+xPqDj&8OB#45~vzQEQ_VHK2D<9XNv?-N(RQA+^VY8y;L#*@ z)*-fh!mFVF2A2QWL-}@;PfeD#I%EN9LXHz{uajc(4f%>pB`mn|Z3Um2mobE2IP)6O z#w%@JWvMj-)%s`r<67U4{YVTW3EWTaZ@dGZI8z zBF}ET5yrFgnIprUc2g`Qyo=^ANh8`WlHU`(PcM^ax4G;jk$Pm0^F?#4?X=Hfw$omS zbI5wl|I_WyG|rGpq_T7H8jd1gkp9lGTG)uZO}3FQiMCAg3JD?lsnhle8C2e~-&Or^ z)FeloV?&=lKZ66$lLO8d?>UMD@+W8i1TG;Z&^u~>9Q2psJ^1ahv4D>x3S+|1s?&#Vf eR;FuOt~EWkkmpa!&~S1KT{#&p-!G#Js{Icn7N!pX diff --git a/po/pl.po b/po/pl.po index f1766782f7..5c15dec190 100644 --- a/po/pl.po +++ b/po/pl.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.11b1\n" +"Project-Id-Version: sudo 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 21:12+0200\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-11 21:30+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -30,76 +30,75 @@ msgid "unable to restore registry" msgstr "nie udało się odtworzyć rejestru" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/gidlist.c:76 -#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "nie udało się przydzielić pamięci" @@ -113,23 +112,23 @@ msgstr "nie udało się wykonać stat na %.*s" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s istnieje, ale nie jest katalogiem (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "nie udało się otworzyć %.*s" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "nie udało się utworzyć katalogu %.*s" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "nie udało się otworzyć %.*s" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "wyrażenie regularne zbyt długie" @@ -138,8 +137,8 @@ msgstr "wyrażenie regularne zbyt długie" msgid "Unknown signal" msgstr "Nieznany sygnał" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "błędna wartość" @@ -151,86 +150,86 @@ msgstr "wartość zbyt duża" msgid "value too small" msgstr "wartość zbyt mała" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "błędna wartość Path \"%s\" w %s, w linii %u" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "błędna wartość opcji %s \"%s\" w %s, w linii %u" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "nieobsługiwane źródło grup \"%s\" w %s, w linii %u" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "błędna maksymalna liczba grup \"%s\" w %s, w linii %u" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "nie udało się wykonać stat na %s" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s nie jest zwykłym plikiem" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "właścicielem %s jest uid %u, powinien być %u" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s jest zapisywalny dla świata" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s jest zapisywalny dla grupy" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "nie udało się określić ograniczeń AppArmor" -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "nie udało się zmienić profilu AppArmor na %s" -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: uciąć %s to zera bajtów? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "bez nadpisywania %s" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "nie można czytać z %s" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "nie można pisać do %s" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "nie udało się wykonać stat na %s" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: nie jest zwykłym plikiem" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: błędny tryb pliku: 0%o" @@ -239,60 +238,59 @@ msgstr "%s: błędny tryb pliku: 0%o" msgid "unable to restore current working directory" msgstr "nie udało się odtworzyć bieżącego kartalogu roboczego" -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "nie udało się ustawić uprawnień" -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "nie udało się ustawić ograniczonych uprawnień" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "nieznana klasa logowania %s" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "nie udało się ustawić kontekstu użytkownika" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "nie udało się ustawić priorytetu procesu" -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "nie udało się zmienić katalogu głównego na %s" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "nie udało się zmienić uid-ów, aby działać jako (%u, %u)" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "nie udało się zmienić katalogu na %s" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "zaczynając od %s" -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "nie udało się ustawić procedury obsługi dla sygnału %d" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "tryb przechwytywania nie jest obsługiwany z RBAC SELinux na tym systemie" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "nie można logować podpoleceń z RBAC SELinux na tym systemie" @@ -300,58 +298,84 @@ msgstr "nie można logować podpoleceń z RBAC SELinux na tym systemie" msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "nie udało się usunąć PRIV_PROC_EXEC z PRIV_LIMIT" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "nie udało się dodać zdarzenia do kolejki" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "polecenie nie ustawione przez politykę bezpieczeństwa" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "polecenie odrzucone przez politykę" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "błąd wtyczki zgody" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "błąd wtyczki polityki" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "błędne żądanie PolicyCheckRequest" -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "żądanie klienta zbyt duże: %zu" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "nie udało się rozpakować %s, rozmiar %zu" -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "nieoczekiwana wartość type_case %d w %s od %s" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "komunikat serwera zbyt duży: %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "błąd wtyczki we/wy" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "polecenie odrzucone przez wtyczkę we/wy" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "błąd logowania odroczenia" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "błąd zmiany rozmiaru okna" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "błąd odczytu z pary gniazd" @@ -361,224 +385,213 @@ msgstr "błąd odczytu z pary gniazd" msgid "unexpected reply type on backchannel: %d" msgstr "nieoczekiwany typ odpowiedzi z kanału zwrotnego: %d" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "nie udało się ustawić sterującego tty" -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "nie udało się utworzyć potoku" -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "nie udało się odebrać komunikatu od rodzica" -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "nie udało się wykonać fork" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "nie udało się przywrócić etykiety tty" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "nie udało się wykonać %s" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "nie udało się zainicjować sesji przez wtyczkę polityki" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "nie udało się utworzyć gniazd" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "błąd w pętli zdarzeń" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "za mało miejsca na argumenty execve" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" -msgstr "nie udało się odczytać execve %s dla procesu %d" +msgid "internal error, %s overflow" +msgstr "błąd wewnętrzny, przepełnienie %s" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "nie udało się ustawić rejestrów dla procesu %d" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "proces %d nieoczekiwanie zakończył się" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "nie udało się ustawić filtra seccomp" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "argument interpretera - oczekiwano \"%s\", napotkano \"%s\"" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "niezgodność ścieżki, oczekiwano \"%s\", napotkano \"%s\"" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "niezgodność %s[%d], oczekiwano \"%s\", napotkano \"%s\"" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "proces %d nieoczekiwany status 0x%x" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "nie udało się pobrać komunikatu zdarzenia dla procesu %d" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "nie udało się pobrać rejestrów dla procesu %d" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "nie udało się przydzielić pty" -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "błąd wtyczki we/wy" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "polecenie odrzucone przez wtyczkę we/wy" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "błąd logowania odroczenia" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "błąd zmiany rozmiaru okna" - -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "nie udało się przywrócić procedury obsługi dla sygnału %d" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "nie udało się wysłać komunikatu do procesu monitorującego" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "błąd w %s, w linii %d podczas wczytywania wtyczki \"%s\"" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "właścicielem %s musi być uid %d" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "prawo zapisu do %s może mieć tylko właściciel" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "zignotowano powtórzoną wtyczkę \"%s\" w %s, w linii %d" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "nie udało się załadować %s: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "nie udało się odnaleźć symbolu \"%s\" w %s" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "niezgodna główna wersja polityki %d (zamiast oczekiwanej %d) napotkana w %s" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "zignorowano wtyczkę polityki \"%s\" w %s, w linii %d" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "może być podana tylko jedna wtyczka polityki" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "nieznany typ wtyczki %d napotkany w %s" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "wtyczka polityki %s nie zawiera metody check_policy" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "błąd wewnętrzny, przepełnienie %s" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "błędna nazwa zmiennej środowiskowej: %s" -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argument opcji -C musi być większy lub równy 3" -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "nie można podać jednocześnie opcji -i oraz -s" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "nie można podać jednocześnie opcji -i oraz -E" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "opcja -E nie jest poprawna w trybie edycji" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "w trybie edycji nie można przekazywać zmiennych środowiskowych" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "opcji -U można używać tylko wraz z opcją -l" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "opcji -A oraz -S nie można używać jednocześnie" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "sudoedit nie jest obsługiwane na tej platformie" -#: src/parse_args.c:757 +#: src/parse_args.c:767 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Można podać tylko jedną z opcji -e, -h, -i, -K, -l, -s, -v lub -V" -#: src/parse_args.c:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "Można podać tylko jedną z opcji -K, -k lub -N" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -587,7 +600,7 @@ msgstr "" "%s - modyfikowanie plików jako inny użytkownik\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -596,7 +609,7 @@ msgstr "" "%s - wykonywanie poleceń jako inny użytkownik\n" "\n" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -604,131 +617,131 @@ msgstr "" "\n" "Opcje:\n" -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "użycie programu pomocniczego do pytań o hasło" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "użycie podanego rodzaju uwierzytelnienia BSD" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "uruchomienie polecenia w tle" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "dzwonek przy zapytaniu" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "zamknięcie wszystkich deskryptorów >= fd" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "uruchomienie polecenia z podaną klasą logowania BSD" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "zmiana katalogu roboczego przed uruchomieniem polecenia" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "zachowanie środowiska użytkownika przy uruchamianiu polecenia" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "zachowanie określonych zmiennych środowiskowych" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "modyfikowanie plików zamiast uruchomienia polecenia" -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "wywołanie polecenia jako określona grupa lub ID" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "ustawienie zmiennej HOME na katalog domowy użytkownika docelowego" -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "wyświetlenie opisu i zakończenie" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "uruchomienie polecenia na hoście (jeśli obsługiwane przez wtyczkę)" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "uruchomienie powłoki logowania jako użytkownik docelowy; można także podać polecenie" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "całkowite usunięcie pliku znacznika czasu" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "unieważnienie pliku znacznika czasu" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "wypisanie uprawnień użytkownika lub sprawdzenie określonego polecenia; dwukrotne użycie to dłuższy format" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "tryb nieinteraktywny, bez pytań" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "zachowanie wektora grup zamiast ustawiania docelowych" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "użycie podanego pytania o hasło" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "zmiana katalogu głównego przed uruchomieniem polecenia" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podaną rolą" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "odczyt hasła ze standardowego wejścia" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "uruchomienie powłoki jako użytkownik docelowy; można także podać polecenie" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podanym typem" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "zakończenie polecenia po zadanym limicie czasu" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "w trybie listy - wyświetlenie uprawnień użytkownika" -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "uruchomienie polecenia (lub modyfikowanie pliku) jako podany użytkownik lub ID" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "wyświetlenie informacji o wersji i zakończenie" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "uaktualnienie znacznika czasu użytkownika bez uruchamiania polecenia" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "zakończenie przetwarzania argumentów linii poleceń" @@ -828,37 +841,42 @@ msgstr "nie udało się ustawić kontekstu wykonywania na %s" msgid "unable to set key creation context to %s" msgstr "nie udało się ustawić kontekstu tworzenia klucza na %s" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "wymagany jest przynajmniej jeden argument" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "Można podać tylko jedną z opcji -c lub -i" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "błędny numer deskryptora pliku: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 +#, c-format +msgid "The -%c option may not be used in edit mode." +msgstr "Opcja -%c nie może być użyta w trybie edycji." + +#: src/sesh.c:184 src/sesh.c:189 #, c-format -msgid "unable to run %s as a login shell" -msgstr "nie udało się uruchomić %s jako powłoki logowania" +msgid "The -%c option may only be used in edit mode." +msgstr "Opcji -%c można używać tylko w trybie edycji." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: edycja dowiązań symbolicznych nie jest dozwolona" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: edycja plików w katalogu zapisywalnym nie jest dozwolona" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "zawartość sesji edycji pozostawiono w %s" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "nie udało się uzyskać listy grup" @@ -942,118 +960,122 @@ msgstr "nie istniejesz w bazie danych %s" msgid "unable to determine tty" msgstr "nie udało się określić tty" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "Ustawiona jest flaga \"bez nowych uprawnień\", która nie pozwala na uruchamianie sudo jako root." -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "Jeśli sudo jest uruchomione w kontenerze, może być potrzebne dostosowanie konfiguracji kontenera w celu wyłączenia flagi." -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s musi mieć uid %d jako właściciela oraz ustawiony bit setuid" -#: src/sudo.c:964 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "efektywny uid nie wynosi %d, czy %s jest na systemie plików z opcją 'nosuid' albo systemie plików NFS bez uprawnień roota?" -#: src/sudo.c:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "efektywny uid nie wynosi %d, czy sudo jest zainstalowane z setuid root?" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "nie udało się ustawić ID dodatkowych grup" -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "nie udało się ustawić efektywnego gid-a w celu działania jako gid %u" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "nie udało się ustawić gid-a w celu działania jako gid %u" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "argv nie ustawione przez politykę bezpieczeństwa" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "envp nie ustawione przez politykę bezpieczeństwa" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "nieoczekiwane zakończenie procesu potomnego: %d" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "nie udało się zainicjować wtyczki polityki" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "wtyczka polityki %s nie zawiera metody \"check_policy\"" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "wtyczka polityki %s nie obsługuje wypisywania uprawnień" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "wtyczka polityki %s nie obsługuje opcji -v" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "wtyczka polityki %s nie obsługuje opcji -k/-K" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "błąd inicjalizacji wtyczki we/wy %s" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "błąd inicjowania wtyczki we/wy" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "błąd inicjowania wtyczki audytu %s" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: nie udało się zalogować zdarzenia błędu%s%s" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: nie udało się zalogować zdarzenia akceptacji%s%s" -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "błąd wtyczki audytu" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: nie udało się zalogować zdarzenia odrzucenia%s%s" -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "błąd inicjowania wtyczki zgody %s" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "polecenie odrzucone przez wtyczkę zgody" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "błąd wtyczki zgody" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "nie znaleziono katalogu tymczasowego z prawem zapisu" @@ -1063,7 +1085,7 @@ msgstr "nie znaleziono katalogu tymczasowego z prawem zapisu" msgid "%s left unmodified" msgstr "pozostawiono bez zmian: %s" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "nie zmieniono: %s" @@ -1076,37 +1098,37 @@ msgstr "sesh: błąd wewnętrzny: nieparzysta liczba ścieżek" msgid "sesh: unable to create temporary files" msgstr "sesh: nie udało się utworzyć plików tymczasowych" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: zabito sygnałem" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: nieznany błąd %d" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "nie udało się skopiować plików tymczasowych z powrotem w ich oryginalne miejsce" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "nie udało się skopiować części plików tymczasowych z powrotem w ich oryginalne miejsce" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "nie udało się zmienić uid-a na roota (%u)" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "błąd wtyczki: brak listy plików dla sudoedit" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "nie udało się odczytać zegara" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "port przechwytywania nie ustawiony" diff --git a/po/ro.mo b/po/ro.mo index 5f0524dbb7cd65b9a0ddd93f642f6a3a32e07cba..a5ebf2f11894befc40af7f5999db8b09083557cc 100644 GIT binary patch delta 5955 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\n" "Language-Team: Romanian \n" "Language: ro\n" @@ -24,7 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 3.0.1\n" +"X-Generator: Poedit 3.1.1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -40,76 +41,75 @@ msgid "unable to restore registry" msgstr "nu se poate restaura registrul" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/gidlist.c:76 -#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "nu se poate aloca memoria" @@ -123,23 +123,23 @@ msgstr "nu se poate stabili starea lui %.*s" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s există, dar nu este un director (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "nu se poate deschide %s" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "nu se poate deschide %.*s" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "nu se poate executa mkdir %.*s" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "nu se poate deschide %.*s" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "expresia regulată este prea lungă" @@ -148,8 +148,8 @@ msgstr "expresia regulată este prea lungă" msgid "Unknown signal" msgstr "Semnal necunoscut" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "valoare nevalidă" @@ -161,37 +161,32 @@ msgstr "valoare prea mare" msgid "value too small" msgstr "valoare prea mică" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "valoare de cale(path) nevalidă „%s” în %s, linia %u" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "valoare nevalidă pentru %s „%s” în %s, linia %u" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "sursă de grup nesuportată „%s” în %s, linia %u" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "grupuri maxime nevalide „%s” în %s, linia %u" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "nu se poate stat %s" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s nu este un fișier regulat" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s este deținut de uid-ul %u, ar trebui să fie %u" @@ -201,7 +196,7 @@ msgstr "%s este deținut de uid-ul %u, ar trebui să fie %u" # la „inscriptibil” # - 1. pentru a fi =n consonanță cu celelalte mesaje # - 2. referința este pentru fișier, și nu pentru conținutul său -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s este inscriptibil global" @@ -209,12 +204,12 @@ msgstr "%s este inscriptibil global" # Modificare: # de la: „este inscriptibil pe grup” # la:„este inscriptibil de către grup” -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s este inscriptibil de către grup" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "nu s-a reușit să se determine confinarea (izolarea) AppArmor" @@ -224,7 +219,7 @@ msgstr "nu s-a reușit să se determine confinarea (izolarea) AppArmor" # *** # asta, cînd mesajul în engleză, era: # „unable to change root to %s” -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "nu se poate schimba profilul AppArmor la %s" @@ -233,34 +228,39 @@ msgstr "nu se poate schimba profilul AppArmor la %s" # de întrebat băieții de la sudo, dacă se poate traduce (y/n) precum (d/n) sau nu... # și bineînțeles..., ca programul să răspundă cu # normalitate la schimbarea făcută -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: se trunchiază %s la zero octeți? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "nu se suprascrie %s" # Corectare: # de la „scrie” la „citi” -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "nu se poate citi de la %s" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "nu se poate scrie la %s" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "nu se poate stat %s" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: nu este un fișier regulat" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: mod de fișier defectuos: 0%o" @@ -271,46 +271,46 @@ msgstr "nu se poate restaura directorul de lucru curent" # Schimbat de la: 1linia de asamblare” # la: „tubul conector” -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "nu se pot stabili privilegiile" -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "nu se poate stabili limita privilegiilor" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "clasă de autentificare necunoscută %s" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "nu se poate stabili contextul utilizatorului" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "nu se poate stabili prioritatea procesului" # Modificat, de la: # „nu se poate schimba de root la”, la: # „nu se poate schimba directorul rădăcină la” -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "nu se poate schimba directorul rădăcină la %s" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "nu se poate schimba la uid-ul run_as (%u, %u)" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "nu se poate schimba directorul la %s" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "începând de la %s" @@ -318,19 +318,18 @@ msgstr "începând de la %s" # Modificare: # de la: „nu se poate stabili mânerul pentru semnalul” # la: „nu se poate stabili manipulantul pentru semnalul” -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "nu se poate stabili manipulantul pentru semnalul %d" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "modul de interceptare nu este acceptat cu SELinux RBAC pe acest sistem" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "nu se pot înregistra sub-comenzi cu SELinux RBAC pe acest sistem" @@ -338,35 +337,43 @@ msgstr "nu se pot înregistra sub-comenzi cu SELinux RBAC pe acest sistem" msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "nu se poate elimina PRIV_PROC_EXEC de la PRIV_LIMIT" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "nu se poate adăuga evenimentul la coadă" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "comanda nu este stabilită de politica de securitate" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "comandă respinsă de politică" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "eroare la modulul de aprobare" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "eroare de modul de politică" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "PolicyCheckRequest nevalid" @@ -379,12 +386,12 @@ msgstr "PolicyCheckRequest nevalid" # Eu, unul n-am posibilitatea de-a verifica în practică, toate mesajele... # Acesta pare să fie un mesaj pentru LDAP..., iar # eu nu utilizez LDAP -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "cererea clientului este prea mare: %zu" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "nu se poate despacheta %s cu dimensiunea %zu" @@ -393,16 +400,38 @@ msgstr "nu se poate despacheta %s cu dimensiunea %zu" # „type_case cu o valoare neașteptată %d în %s de la %s” # poate suna/era mai bine: # „valoare (a) type_case neașteptată %d, în %s de la %s” -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "type_case cu o valoare neașteptată %d în %s de la %s" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "mesaj de la server prea mare: %zu" +# Modificare de la: +# „Eroare de plugin I/O” +# la: „Eroare a modulului In/Ieș(I/O)” +# Pentru coerență cu restul traducerii, și nu numai... +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "Eroare a modulului In/Ieș(I/O)" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "comandă respinsă de modulul In/Ieș/(I/O)" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "eroare la suspendarea jurnalizării" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "eroare la schimbarea dimensiunii ferestrei" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "eroare la citirea de la socketpair" @@ -419,142 +448,129 @@ msgstr "eroare la citirea de la socketpair" msgid "unexpected reply type on backchannel: %d" msgstr "tip de răspuns neașteptat pe backchannel: %d" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "nu se poate stabili tty de control" # Schimbat de la: „linia de asamblare” # la: „tubul conector” -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "nu se poate crea „tubul conector”(pipe)" # Modificat de la: „de la superior” # la: „de la procesul părinte” -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "nu se poate primi mesajul de la procesul părinte" # Modificat de la: # „nu se poate da fork” # la: „nu se poate bifurca” -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "nu se poate bifurca" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "nu se poate restaura eticheta tty" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "nu se poate executa %s" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "modulul de politică a eșuat la inițializarea sesiunii" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "nu se pot crea socluri" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "eroare în bucla de eveniment" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "spațiu insuficient pentru argumentele de execve" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" -msgstr "nu se poate citi execve %s pentru procesul %d" +msgid "internal error, %s overflow" +msgstr "eroare internă, supraplin %s" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "nu se pot configura registrele pentru procesul %d" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "procesul %d a ieșit în mod neașteptat" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "nu se poate configura filtrul seccomp" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "argument interpret, era așteptat „%s”, s-a primit „%s”" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "nepotrivire în numele de cale, era așteptat „%s”, s-a primit „%s”" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "nepotrivire în %s[%d], era așteptat „%s”, s-a primit „%s”" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "stare neașteptată a procesului %d: 0x%x" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "nu s-a putut obține mesajul de eveniment pentru procesul %d" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "nu se pot obține registrele pentru procesul %d" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "nu se poate aloca pty" -# Modificare de la: -# „Eroare de plugin I/O” -# la: „Eroare a modulului In/Ieș(I/O)” -# Pentru coerență cu restul traducerii, și nu numai... -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "Eroare a modulului In/Ieș(I/O)" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "comandă respinsă de modulul In/Ieș/(I/O)" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "eroare la suspendarea jurnalizării" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "eroare la schimbarea dimensiunii ferestrei" - # Modificare: # de la: „nu se poate stabili mânerul pentru semnalul” # la: „nu se poate stabili manipulantul pentru semnalul” -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "nu se poate restaura manipulantul pentru semnalul %d" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "nu se poate trimite mesajul la procesul de monitorizare" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "eroare în %s, linia %d în timpul încărcării modulului „%s”" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s trebuie să fie deținut de uid-ul %d" @@ -566,22 +582,22 @@ msgstr "%s trebuie să fie deținut de uid-ul %d" # în schimb, deținătorul decît deține ceva, deobicei este vremelnic(sau pe un timp determinat) # Exp: # arendașul, deține un teren(deobicei agricol, deci e un deținător de teren) drept pentru care se poate folosi de acel teren pe timpul și în condițiile financiare stabilite de proprietarul acelui teren(care este singurul care are drepturi depline asupra acelui teren. -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s trebuie să fie inscriptibil doar de proprietar" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "se ignoră modulul duplicat „%s” în %s, linia %d" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "nu se poate încărca %s: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "nu se poate găsi simbolul „%s” în %s" @@ -593,83 +609,81 @@ msgstr "nu se poate găsi simbolul „%s” în %s" # e posibil ca poziția corectă a primei variabile, „%d”; # să fie: # „versiune majoră a modulului %d incompatibilă” -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "versiune majoră a modulului incompatibilă %d (se aștepta %d) găsită în %s" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "se ignoră modulul de politică „%s” în %s, linia %d" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "doar un singur modul de politică poate fi specificat" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "tip de modul necunoscut %d găsit în %s" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "modulul de politică %s nu include o metodă check_policy" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "eroare internă, supraplin %s" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "nume de variabilă de mediu nevalid: %s" # Modificat de la: „mai mare decît sau egal cu 3” # la: „mai mare sau egal cu 3” -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argumentul la -C trebuie să fie un număr mai mare sau egal cu 3" # Modificat de la: „trebuie să specificați amândouă opțiunile -i și -s” # la: „nu puteți specifica ambele opțiuni, -i și -s” # ATENȚIE, și la traducerea următoare, mesajul de tradus este aproape identic acestuia, traducerea nu chiar... -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "nu puteți specifica ambele opțiuni, -i și -s" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "nu puteți specifica amândouă opțiunile -i și -E" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "opțiunea -E nu este validă în modul editare" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "nu puteți specifica variabile de mediu în modul editare" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "opțiunea -U poate fi utilizată doar cu opțiunea -l" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "opțiunile -A și -S nu pot fi utilizate împreună" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "sudoedit nu este suportat pe această platformă" -#: src/parse_args.c:757 +#: src/parse_args.c:767 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Doar una dintre opțiunile -e, -h, -i, -K, -l, -s, -v sau -V poate fi specificată" -#: src/parse_args.c:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "Doar una dintre opțiunile -K, -k sau -N poate fi specificată" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -678,7 +692,7 @@ msgstr "" "%s - editează fișiere ca alt utilizator\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -687,7 +701,7 @@ msgstr "" "%s - execută o comandă ca alt utilizator\n" "\n" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -701,118 +715,118 @@ msgstr "" # - „utilizează un program auxiliar pentru solicitarea parolei” # Recenzie, Daniel Șegărceanu: a doua variantă, sună mai bine. # Am aplicat-o, în fond era și impresia mea, dar nu vroiam să modific prea mult fișierul... -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "utilizează un program auxiliar pentru solicitarea parolei" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "utilizează un tip de autentificare BSD specificat" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "rulează comanda în fundal" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "sună din clopoțel atunci când se solicită" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "închide toți descriptorii de fișier >= num" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "rulează comanda cu clasa de autentificare BSD specificată" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "schimbă directorul de lucru înainte de-a executa comanda" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "păstrează mediul utilizatorului atunci când se rulează comanda" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "păstrează variabile de mediu specifice" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "editează fișiere în locul rulării unei comenzi" # Modificat de la: „rulează comanda ca numele sau ID-ul de grup specificat" # la: # „rulează comanda ca grupul cu numele sau ID-ul specificat” -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "rulează comanda ca grupul cu numele sau ID-ul specificat" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "stabilește variabila HOME să țintească spre directorul personal al utilizatorului" -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "afișează mesajul de ajutor și iese" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "rulează comanda pe gazdă (dacă este suportat de modul)" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "rulează shell-ul de autentificare ca utilizatorul țintă; o comandă poate fi, de asemenea, specificată" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "elimină complet fișierul de datare" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "invalidează fișierul de datare" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "listează privilegiile utilizatorului sau verifică o comandă specifică; utilizează de două ori pentru formatul mai lung" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "mod neinteractiv, nu sunt utilizate solicitări" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "păstrează vectorul grupului în loc să configurați pe cel al țintei" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "utilizează solicitarea de parolă specificată" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "schimbă la directorul rădăcină, înainte de a rula comanda" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "creează contextul de securitate SELinux cu rolul specificat" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "citește parola de la intrarea standard" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "rulează shell-ul ca utilizatorul țintă; o comandă poate fi, de asemenea, specificată" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "creează contextul de securitate SELinux cu tipul specificat" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "termină comanda după limita de timp specificată" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "în modul listă, afișează privilegiile pentru utilizator" @@ -820,19 +834,19 @@ msgstr "în modul listă, afișează privilegiile pentru utilizator" # „rulează comanda (sau fișierul de editare) ca nume specificat sau ID de utilizator” # la: # „rulează comanda (sau editează fișierul) ca utilizator cu numele sau ID-ul specificat” -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "rulează comanda (sau editează fișierul) ca utilizator cu numele sau ID-ul specificat" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "afișează informațiile de versiune și iese" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "actualizează datarea utilizatorului fără să se ruleze o comandă" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "oprește procesarea argumentelor în linia de comandă" @@ -932,37 +946,42 @@ msgstr "nu se poate stabili contextul exec la %s" msgid "unable to set key creation context to %s" msgstr "nu se poate stabili contextul de creare a cheii la %s" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "necesită cel puțin un argument" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "Doar una dintre opțiunile -c sau -i poate fi specificată" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "număr de descriptor de fișier nevalid: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 #, c-format -msgid "unable to run %s as a login shell" -msgstr "nu se poate rula %s ca shell de autentificare" +msgid "The -%c option may not be used in edit mode." +msgstr "Opțiunea -%c nu poate fi utilizată în modul de editare." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:184 src/sesh.c:189 +#, c-format +msgid "The -%c option may only be used in edit mode." +msgstr "Opțiunea -%c poate fi utilizată numai în modul de editare." + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: editarea legăturilor simbolice nu este permisă" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: editarea fișierelor într-un director inscriptibil nu este permisă" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "conținutul sesiunii de editare rămase în %s" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "nu se poate obține lista de grup %s" @@ -1053,120 +1072,124 @@ msgstr "nu existați în baza de date %s" msgid "unable to determine tty" msgstr "nu se poate determina tty" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "Este setat indicatorul „fără privilegii noi”, ceea ce împiedică rularea «sudo» ca root." -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "Dacă «sudo» rulează într-un container, poate fi necesar să ajustați configurația containerului pentru a dezactiva indicatorul." -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s trebuie să fie deținut de uid-ul %d și să aibă bitul setuid stabilit" # Notă: eficient -> efectiv -#: src/sudo.c:964 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "uid-ul efectiv nu este %d, este %s pe un sistem de fișiere cu opțiunea „nosuid” stabilită sau un sistem de fișiere NFS fără privilegii de root?" -#: src/sudo.c:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "uid-ul efectiv nu este %d, este sudo instalat root setuid?" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "nu se pot stabili ID-urile de grup suplimentare" # Notă: eficiente -> efective -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "nu se pot stabili gid-uri efective către gid-uri run_as %u" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "nu se poate stabili gid-ul către gid-ul run_as %u" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "argv nu este stabilit de politica de securitate" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "envp nu este stabilit de politica de securitate" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "condiție de terminare a procesului copil neașteptată: %d" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "nu se poate inițializa modulul de politică" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "modulului de politică %s îi lipsește metoda „check_policy”" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "modulul de politică %s nu suportă listarea privilegiilor" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "modulul de politică %s nu suportă opțiunea -v" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "modulul de politică %s nu suportă opțiunile -k/-K" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "eroare la inițializarea modulului In/Ieș(I/O) %s" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "eroare la inițializarea modulului In/Ieș(I/O)" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "eroare la inițializarea modulului auditare %s" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: nu se poate înregistra evenimentul de eroare%s%s" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: nu se poate înregistra evenimentul de acceptare%s%s" -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "eroare a modulului de auditare" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: nu se poate înregistra evenimentul de respingere%s%s" -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "eroare la inițializarea modulului de aprobare %s" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "comandă respinsă de aprobator" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "eroare la modulul de aprobare" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "nu s-a găsit niciun director temporar inscriptibil" @@ -1176,7 +1199,7 @@ msgstr "nu s-a găsit niciun director temporar inscriptibil" msgid "%s left unmodified" msgstr "%s lăsat nemodificat" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s neschimbat" @@ -1189,37 +1212,37 @@ msgstr "sesh: eroare internă: număr impar de căi(paths)" msgid "sesh: unable to create temporary files" msgstr "sesh: nu se pot crea fișierele temporare" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: omorât de un semnal" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: eroare necunoscută %d" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "nu se pot copia fișierele temporare înapoi la locația lor originală" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "nu se pot copia o parte din fișierele temporare înapoi la locația lor originală" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "nu se poate schimba uid-ul la root (%u)" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "eroare de modul: lipsește lista de fișiere pentru sudoedit" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "nu se poate citi ceasul" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "portul de interceptare nu este definit" @@ -1270,6 +1293,18 @@ msgstr "nu se poate dup2 stdin" msgid "unable to restore stdin" msgstr "nu se poate restaura stdin" +#~ msgid "insufficient space for execve arguments" +#~ msgstr "spațiu insuficient pentru argumentele de execve" + +#~ msgid "unable to read execve %s for process %d" +#~ msgstr "nu se poate citi execve %s pentru procesul %d" + +#~ msgid "requires at least one argument" +#~ msgstr "necesită cel puțin un argument" + +#~ msgid "unable to run %s as a login shell" +#~ msgstr "nu se poate rula %s ca shell de autentificare" + #~ msgid "%s%s: %s" #~ msgstr "%s%s: %s" diff --git a/po/sr.mo b/po/sr.mo index f13442f7e51b06b3275dd3627c8f7534d30c12da..f8305f5487513e7cec0b046d37c7cd58f306ce57 100644 GIT binary patch delta 6658 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 delta 4885 zcmY+`33OD|9mnziBoH8k009z~fD^Wm1xNy9V<&833;S9~*aHb`2ul$LsmSJnK2StZ zR2tS)Z~#$i1zQ!Yk+M{=AU&tFxX|{rfCt*sV!yw6FCKdjzxmwzX6D`XO*nAh_vK%F zfg3S3b{OR4QU_6#`r#_;pf;CYd11$ zh6&gPyQ4l=h!xysW)jl2>&;zdlx z?@>#i%rtx9SY)xxLEf@M*d9Mb`n12H22#5v>#vb?qIZ2@6zbfqL>;y#Py>1c3-CN< zVl&p2#j%l?hx1T3tV9juGIF@=znF>*9&rcS6V)z8t=x`BSpTk6s<@z~5A(C1n2FtR z4r(cPqYm3q)aS3GwxS^$ttHPv?RhaTOwP8TANM0;uyd%-e}x)&eP*ozbO=z- zoTZ{Y{2Fzd8?lb+xIb#dWtfgHVK1yg?O_z(mWikt_d{(}A!-1t(2v_tXW$s}&#HJ~ z5$qlg(eocmFS_w`)M4Cx>(-(=JdXO@ zHPl4zp;n|l%hyEDe?Ar6un@J^%TT{)n~=%cF4PRppaysyHN!iofz@I8)IkF3^SP)q zRD^!qhT4i_$Qa~|p2zVF2PYfn;HFMVMeY9L!sBR`6o=_Ra> z|M86Cr1qd4kDA#e>Iv-TGDTE05;(+qi_o5V4}BAjj>v6!+484i{jTTz4y8#ph|CMt4O!XU*S+a{~h@DRNh#IlkgH2Vk#TF0iQ%ZYcZS{ZN)?! zgNINvd5GGYKD?;IEm(k`VmoX##Qpz7f7EpckKs*RLI1Xclc&d_9@AQfxu~;n8g=7n z)~Pj4#Gl}5)IhGH&Q9_Ovl85crC5hvG{EJk75W$_V+$HQ5VjmO(ft_EjeNYYO*RIn zql0XteTO^{)|Jsr#A4LmpGEqz`=})!NNDupyzNr zuE%dsOIH!MOe`Ay8h4E9M& zSc)7UyN&HJYli#7G!0W}SD@~H8H?}%>id&sx@RNcP|@S{XVi=v%yNGZ@~|K6h1ds= zVGq26Y@>Ca?XJM%*p>EY*ca>0aofXD16q%)z8yrZR5<&h364Pq5-^7f2i>Z$7d9{E zFCR`q?d5x@Gf-!qyJy*`8*N37hh0MrG-JN|_?6=z+Ha%2=i|{(I}LUJm8gllg#~*4 z?@?*Th5kG{JW)0u*>*dHow4x(_Yn0*wO>IVUAusM-I_0Sw_q2pq4S$u^Qseos^qNT41sFOu#=We*uiv_#dVF%`BwRJ1kAiDtxM4wVmi4JSN(pEBe-)kJR^%nZc?tck*5j!1OQM6N5=kzTN69PXdD54>OjKHv zOQa6bSt=qbn@ICe%{{cL4ke-fJ5kZ2p;AS9lb;cX945_3L!$C5i6J~3_6#{lIFCP+ z!CvhI^2mpNg!W=FX-eKEIm9c0&|j)@TKW+=?OlBhn|SrQo;=Q>KbvYkNd}QPl0w>( zB_v3a$#K$!)F-=$$~m%vG$NtL9cQ}pcYnJpxG;>YCLfanj0TNl6W$j3?z?} z|0}`rMp5CxL$R?D!EfRR`hq)K9SjSWCM1UiPqfLY8H`OD9Oi6J8RXng$#F_kcLq~C z)(Uq?&X)T?rk8~K(wt`9hD2s`Oz-B;NYBkk4=(7oyH;>~&%1S< zujf~VIpfDf2m1^^RnyrxHYQj+CbCBG@PvtxPP^`L!QvVJsNq!3J?!i)E(`9Ox4{=I kE*Tx+oLL;@EE-bNX|XgTRNuZdTL!0>J?aa#Dc=zBKgelJ0RR91 diff --git a/po/sr.po b/po/sr.po index 5a2ef2423c..22198ceff4 100644 --- a/po/sr.po +++ b/po/sr.po @@ -1,12 +1,13 @@ # Serbian translations for sudo package. # This file is put in the public domain. # Мирослав Николић , 2011–2022. +# msgid "" msgstr "" -"Project-Id-Version: sudo-1.9.10b1\n" +"Project-Id-Version: sudo-1.9.11b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-02-12 09:31-0700\n" -"PO-Revision-Date: 2022-02-15 21:21+0200\n" +"POT-Creation-Date: 2022-05-27 08:39-0600\n" +"PO-Revision-Date: 2022-09-08 20:38+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -32,32 +33,33 @@ 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:183 lib/util/sudo_conf.c:218 #: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:206 src/exec_monitor.c:456 -#: src/exec_monitor.c:462 src/exec_monitor.c:470 src/exec_monitor.c:478 -#: src/exec_monitor.c:485 src/exec_monitor.c:492 src/exec_monitor.c:499 -#: src/exec_monitor.c:506 src/exec_monitor.c:513 src/exec_monitor.c:520 -#: src/exec_monitor.c:527 src/exec_nopty.c:219 src/exec_nopty.c:228 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:306 src/exec_nopty.c:503 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_pty.c:840 -#: src/exec_pty.c:849 src/exec_pty.c:906 src/exec_pty.c:1059 -#: src/exec_pty.c:1231 src/exec_pty.c:1240 src/exec_pty.c:1247 -#: src/exec_pty.c:1254 src/exec_pty.c:1261 src/exec_pty.c:1268 -#: src/exec_pty.c:1275 src/exec_pty.c:1282 src/exec_pty.c:1289 -#: src/exec_pty.c:1296 src/exec_pty.c:1303 src/exec_pty.c:1311 -#: src/exec_pty.c:1774 src/load_plugins.c:156 src/load_plugins.c:181 +#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 +#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 +#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 +#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 +#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 +#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 +#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 +#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 +#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 +#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 +#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 +#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 +#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 #: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:192 src/parse_args.c:213 src/parse_args.c:287 -#: src/parse_args.c:632 src/parse_args.c:654 src/parse_args.c:679 +#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 +#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:483 src/sesh.c:113 +#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 #: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:709 src/sudo.c:719 src/sudo.c:744 src/sudo.c:767 -#: src/sudo.c:776 src/sudo.c:785 src/sudo.c:802 src/sudo.c:844 src/sudo.c:854 -#: src/sudo.c:883 src/sudo.c:1083 src/sudo.c:1104 src/sudo.c:1397 -#: src/sudo.c:1566 src/sudo.c:1793 src/sudo.c:2127 src/sudo_edit.c:89 +#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 +#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 +#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 +#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 #: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 #: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 #: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 @@ -69,36 +71,36 @@ msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 #: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:100 -#: src/exec_intercept.c:330 src/exec_intercept.c:354 src/exec_intercept.c:377 -#: src/exec_intercept.c:385 src/exec_intercept.c:410 src/exec_intercept.c:416 -#: src/exec_intercept.c:425 src/exec_intercept.c:431 src/exec_intercept.c:565 -#: src/exec_intercept.c:706 src/exec_monitor.c:456 src/exec_monitor.c:462 -#: src/exec_monitor.c:470 src/exec_monitor.c:478 src/exec_monitor.c:485 -#: src/exec_monitor.c:492 src/exec_monitor.c:499 src/exec_monitor.c:506 -#: src/exec_monitor.c:513 src/exec_monitor.c:520 src/exec_monitor.c:527 -#: src/exec_nopty.c:219 src/exec_nopty.c:228 src/exec_nopty.c:235 -#: 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:298 -#: src/exec_nopty.c:306 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_pty.c:840 src/exec_pty.c:849 src/exec_pty.c:906 -#: src/exec_pty.c:1231 src/exec_pty.c:1240 src/exec_pty.c:1247 -#: src/exec_pty.c:1254 src/exec_pty.c:1261 src/exec_pty.c:1268 -#: src/exec_pty.c:1275 src/exec_pty.c:1282 src/exec_pty.c:1289 -#: src/exec_pty.c:1296 src/exec_pty.c:1303 src/exec_pty.c:1311 -#: src/exec_pty.c:1774 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:192 src/parse_args.c:214 src/parse_args.c:287 -#: src/parse_args.c:632 src/parse_args.c:654 src/parse_args.c:679 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:483 src/sesh.c:113 -#: src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:883 src/sudo.c:1083 -#: src/sudo.c:1104 src/sudo.c:1397 src/sudo.c:1566 src/sudo.c:1793 -#: src/sudo.c:2127 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 -#: src/sudo_edit.c:438 src/sudo_edit.c:539 src/sudo_edit.c:546 -#: src/sudo_edit.c:677 src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 +#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 +#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 +#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 +#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 +#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 +#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 +#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 +#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 +#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 +#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 +#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 +#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 +#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 +#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 +#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 +#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 +#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 +#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 +#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 +#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 +#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 +#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 +#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 +#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 +#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 +#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 +#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 +#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" @@ -195,6 +197,15 @@ msgstr "%s је светски уписив" msgid "%s is group writable" msgstr "%s је групно уписив" +#: src/apparmor.c:79 +msgid "failed to determine AppArmor confinement" +msgstr "нисам успео да одредим оивичење АпАрмора" + +#: src/apparmor.c:87 +#, c-format +msgid "unable to change AppArmor profile to %s" +msgstr "не могу да променим АпАрмор профил на „%s“" + #: src/copy_file.c:93 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " @@ -229,95 +240,115 @@ msgstr "%s: лош режим датотеке: 0%o" msgid "unable to restore current working directory" msgstr "не могу да повратим текући радни директоријум" -#: src/exec.c:130 +#: src/exec.c:103 +msgid "unable to set privileges" +msgstr "не могу да поставим привилегије" + +#: src/exec.c:109 src/exec.c:114 +msgid "unable to set limit privileges" +msgstr "не могу да поставим привилегије ограничења" + +#: src/exec.c:137 #, c-format msgid "unknown login class %s" msgstr "непозната класа пријаве %s" -#: src/exec.c:142 +#: src/exec.c:149 msgid "unable to set user context" msgstr "не могу да подесим кориснички контекст" -#: src/exec.c:158 +#: src/exec.c:165 msgid "unable to set process priority" msgstr "не могу да подесим приоритет процеса" -#: src/exec.c:175 +#: src/exec.c:182 #, c-format msgid "unable to change root to %s" msgstr "не могу да променим администратора на %s" -#: src/exec.c:188 src/exec.c:194 src/exec.c:201 +#: src/exec.c:195 src/exec.c:201 src/exec.c:208 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не могу да се пребацим у покрени_као уид (%u, %u)" -#: src/exec.c:219 +#: src/exec.c:226 #, c-format msgid "unable to change directory to %s" msgstr "не могу да променим директоријум у %s" -#: src/exec.c:223 +#: src/exec.c:230 #, c-format msgid "starting from %s" msgstr "почевши од „%s“" -#: src/exec.c:305 src/exec_monitor.c:565 src/exec_monitor.c:567 -#: src/exec_nopty.c:561 src/exec_pty.c:581 src/exec_pty.c:1411 -#: src/exec_pty.c:1413 src/signal.c:144 src/signal.c:151 src/signal.c:165 +#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 +#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 +#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 +#: src/signal.c:165 src/suspend_nopty.c:89 #, c-format msgid "unable to set handler for signal %d" msgstr "не могу да подесим руковаоца за сигнал „%d“" +#: src/exec.c:391 +msgid "intercept mode is not supported with SELinux RBAC on this system" +msgstr "режим пресретања није подржан са СЕЛинукс РБАЦ-ом на овом систему" + +#: src/exec.c:396 +msgid "unable to log sub-commands with SELinux RBAC on this system" +msgstr "не могу да забележим садржане наредбе са СЕЛинукс РБАЦ-ом на овом систему" + #: src/exec_common.c:56 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "не могу да уклоним PRIV_PROC_EXEC из PRIV_LIMIT" -#: src/exec_intercept.c:112 src/exec_intercept.c:116 src/exec_intercept.c:667 -#: src/exec_intercept.c:671 src/exec_intercept.c:857 src/exec_intercept.c:861 -#: src/exec_intercept.c:872 src/exec_intercept.c:876 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:221 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:300 -#: src/exec_nopty.c:308 src/exec_pty.c:706 src/exec_pty.c:711 -#: src/exec_pty.c:808 src/exec_pty.c:815 src/exec_pty.c:912 -#: src/exec_pty.c:1233 src/exec_pty.c:1242 src/exec_pty.c:1249 -#: src/exec_pty.c:1256 src/exec_pty.c:1263 src/exec_pty.c:1270 -#: src/exec_pty.c:1277 src/exec_pty.c:1284 src/exec_pty.c:1291 -#: src/exec_pty.c:1298 src/exec_pty.c:1305 src/exec_pty.c:1727 -#: src/exec_pty.c:1737 src/exec_pty.c:1782 src/exec_pty.c:1789 -#: src/exec_pty.c:1816 +#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 +#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 +#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 +#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 +#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 +#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 +#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 +#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 +#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 +#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 +#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 +#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 +#: src/exec_pty.c:1826 src/exec_pty.c:1853 msgid "unable to add event to queue" msgstr "не могу да додам догађај у ред" -#: src/exec_intercept.c:314 -msgid "invalid PolicyCheckRequest" -msgstr "неисправан захтев провере политике" - -#: src/exec_intercept.c:362 src/sudo.c:1209 src/sudo.c:1254 src/sudo.c:1298 +#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 msgid "command rejected by policy" msgstr "наредба је одбачена политиком" -#: src/exec_intercept.c:455 src/sudo.c:1214 src/sudo.c:1259 src/sudo.c:1303 -#: src/sudo.c:1377 +#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 +#: src/sudo.c:1394 msgid "policy plugin error" msgstr "грешка прикључка политике" -#: src/exec_intercept.c:561 +#: src/exec_intercept.c:462 +msgid "invalid PolicyCheckRequest" +msgstr "неисправан захтев провере политике" + +#: src/exec_intercept.c:584 #, c-format msgid "client request too large: %zu" msgstr "захтев клијента је превелик: %zu" -#: src/exec_intercept.c:659 +#: src/exec_intercept.c:622 +#, c-format +msgid "unable to unpack %s size %zu" +msgstr "не могу да распакујем „%s“ величине %zu" + +#: src/exec_intercept.c:665 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "неочекивана вредност врсте_слова %d у „%s“ из „%s“" -#: src/exec_intercept.c:694 +#: src/exec_intercept.c:695 #, c-format msgid "server message too large: %zu" msgstr "порука сервера је превелика: %zu" @@ -331,73 +362,117 @@ msgstr "грешка у читању из пара прикључка" msgid "unexpected reply type on backchannel: %d" msgstr "неочекивана врста одговора на повратном каналу: %d" -#: src/exec_monitor.c:583 +#: src/exec_monitor.c:593 msgid "unable to set controlling tty" msgstr "не могу да подесим контролисање tty" -#: src/exec_monitor.c:591 src/exec_nopty.c:369 src/exec_pty.c:1490 -#: src/exec_pty.c:1511 src/exec_pty.c:1531 src/tgetpass.c:307 +#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 +#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "не могу да направим спојку" -#: src/exec_monitor.c:601 +#: src/exec_monitor.c:611 msgid "unable to receive message from parent" msgstr "не могу да примим поруку од родитеља" -#: src/exec_monitor.c:617 src/exec_nopty.c:407 src/exec_pty.c:1569 -#: src/sudo_edit.c:361 src/tgetpass.c:311 +#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "не могу да поделим" -#: src/exec_monitor.c:621 src/exec_monitor.c:722 src/exec_nopty.c:471 +#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 msgid "unable to restore tty label" msgstr "не могу да повратим tty натпис" -#: src/exec_monitor.c:637 src/sesh.c:123 src/sudo.c:1160 +#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим %s" -#: src/exec_nopty.c:363 src/exec_pty.c:1420 +#: src/exec_nopty.c:376 src/exec_pty.c:1456 msgid "policy plugin failed session initialization" msgstr "није успело покретање сесије прикључка политике" -#: src/exec_nopty.c:377 src/exec_pty.c:1391 src/exec_pty.c:1399 +#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 msgid "unable to create sockets" msgstr "не могу да направим утичнице" -#: src/exec_nopty.c:459 src/exec_pty.c:1666 +#: src/exec_nopty.c:506 src/exec_pty.c:1703 msgid "error in event loop" msgstr "грешка у петљи догађаја" -#: src/exec_nopty.c:569 src/exec_pty.c:619 src/signal.c:101 +#: src/exec_ptrace.c:647 +msgid "insufficient space for execve arguments" +msgstr "недовољно простора за „execve“ аргументе" + +#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 #, c-format -msgid "unable to restore handler for signal %d" -msgstr "не могу да повратим руковаоца за сигнал „%d“" +msgid "unable to read execve %s for process %d" +msgstr "не могу да прочитам „execve %s“ за процес %d" + +#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#, c-format +msgid "unable to set registers for process %d" +msgstr "не могу да поставим регистре за процес %d" -#: src/exec_pty.c:158 +#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "процес %d је изашао неочекивано" + +#: src/exec_ptrace.c:843 +msgid "unable to set seccomp filter" +msgstr "не могу да поставим „seccomp“ филтер" + +#: src/exec_ptrace.c:934 +#, c-format +msgid "pathname mismatch, expected \"%s\", got \"%s\"" +msgstr "назив путање не одговара, очекивах „%s“, добих „%s“" + +#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 +#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#, c-format +msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" +msgstr "%s[%d] не одговара, очекивах „%s“, добих „%s“" + +#: src/exec_ptrace.c:1013 +#, c-format +msgid "unable to get event message for process %d" +msgstr "не могу да добавим поруку догађаја за процес %d" + +#: src/exec_ptrace.c:1019 +#, c-format +msgid "unable to get registers for process %d" +msgstr "не могу да добавим регистре за процес %d" + +#: src/exec_pty.c:163 msgid "unable to allocate pty" msgstr "не могу да доделим pty" -#: src/exec_pty.c:222 src/exec_pty.c:262 src/exec_pty.c:302 src/exec_pty.c:353 -#: src/exec_pty.c:404 +#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 +#: src/exec_pty.c:409 msgid "I/O plugin error" msgstr "грешка У/И прикључка" -#: src/exec_pty.c:226 src/exec_pty.c:266 src/exec_pty.c:306 src/exec_pty.c:357 -#: src/exec_pty.c:408 +#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 +#: src/exec_pty.c:413 msgid "command rejected by I/O plugin" msgstr "наредбу је одбацио У/И прикључак" -#: src/exec_pty.c:455 +#: src/exec_pty.c:460 msgid "error logging suspend" msgstr "грешка обуставе писања дневника" -#: src/exec_pty.c:489 +#: src/exec_pty.c:494 msgid "error changing window size" msgstr "грешка промене величине прозора" -#: src/exec_pty.c:1615 +#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "не могу да повратим руковаоца за сигнал „%d“" + +#: src/exec_pty.c:1651 msgid "unable to send message to monitor process" msgstr "не могу да пошаљем поруку процесу праћења" @@ -463,48 +538,48 @@ msgstr "прикључак сигурности %s не садржи метод msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење функције „%s“" -#: src/parse_args.c:234 +#: src/parse_args.c:211 #, c-format msgid "invalid environment variable name: %s" msgstr "неисправан назив променљиве окружења: %s" -#: src/parse_args.c:337 +#: src/parse_args.c:314 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргумент уз -C мора бити број већи или једнак 3" -#: src/parse_args.c:568 +#: src/parse_args.c:545 msgid "you may not specify both the -i and -s options" msgstr "не можете да наведете обе опције „-i“ и „-s“" -#: src/parse_args.c:573 +#: src/parse_args.c:550 msgid "you may not specify both the -i and -E options" msgstr "не можете да наведете обе опције „-i“ и „-E“" -#: src/parse_args.c:583 +#: src/parse_args.c:560 msgid "the -E option is not valid in edit mode" msgstr "опција „-E“ није исправна у режиму уређивања" -#: src/parse_args.c:586 +#: src/parse_args.c:563 msgid "you may not specify environment variables in edit mode" msgstr "не можете да одредите променљиве окружења у режиму уређивања" -#: src/parse_args.c:596 +#: src/parse_args.c:573 msgid "the -U option may only be used with the -l option" msgstr "опција „-U“ може бити коришћена само са опцијом „-l“" -#: src/parse_args.c:600 +#: src/parse_args.c:577 msgid "the -A and -S options may not be used together" msgstr "опције „-A“ и „-S“ не могу бити коришћене заједно" -#: src/parse_args.c:693 +#: src/parse_args.c:674 msgid "sudoedit is not supported on this platform" msgstr "„sudoedit“ није подржано на овој платформи" -#: src/parse_args.c:776 +#: src/parse_args.c:757 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:792 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -513,7 +588,7 @@ msgstr "" "%s — уредите датотеке као други корисник\n" "\n" -#: src/parse_args.c:794 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -522,7 +597,7 @@ msgstr "" "%s — извршите наредбу као други корисник\n" "\n" -#: src/parse_args.c:800 +#: src/parse_args.c:781 msgid "" "\n" "Options:\n" @@ -530,131 +605,131 @@ msgstr "" "\n" "Опције:\n" -#: src/parse_args.c:802 +#: src/parse_args.c:783 msgid "use a helper program for password prompting" msgstr "користи програм испомоћи за упит лозинке" -#: src/parse_args.c:805 +#: src/parse_args.c:786 msgid "use specified BSD authentication type" msgstr "користи наведену врсту БСД потврде идентитета" -#: src/parse_args.c:809 +#: src/parse_args.c:790 msgid "run command in the background" msgstr "покреће наредбу у позадини" -#: src/parse_args.c:812 +#: src/parse_args.c:793 msgid "ring bell when prompting" msgstr "звони приликом постављања упита" -#: src/parse_args.c:814 +#: src/parse_args.c:795 msgid "close all file descriptors >= num" msgstr "затвара све описнике датотеке >= fd" -#: src/parse_args.c:817 +#: src/parse_args.c:798 msgid "run command with the specified BSD login class" msgstr "покреће наредбу са наведеним разредом БСД пријаве" -#: src/parse_args.c:820 +#: src/parse_args.c:801 msgid "change the working directory before running command" msgstr "мења радни директоријум пре покретања наредбе" -#: src/parse_args.c:823 +#: src/parse_args.c:804 msgid "preserve user environment when running command" msgstr "чува корисничко окружење приликом покретања наредбе" -#: src/parse_args.c:825 +#: src/parse_args.c:806 msgid "preserve specific environment variables" msgstr "чува нарочите променљиве окружења" -#: src/parse_args.c:827 +#: src/parse_args.c:808 msgid "edit files instead of running a command" msgstr "уређује датотеке уместо да изврши наредбу" -#: src/parse_args.c:830 +#: src/parse_args.c:811 msgid "run command as the specified group name or ID" msgstr "извршава наредбу као наведени назив групе или ИБ" -#: src/parse_args.c:833 +#: src/parse_args.c:814 msgid "set HOME variable to target user's home dir" msgstr "подешава променљиву ЛИЧНО у циљну корисничку личну фасциклу" -#: src/parse_args.c:836 +#: src/parse_args.c:817 msgid "display help message and exit" msgstr "приказује поруку помоћи и излази" -#: src/parse_args.c:838 +#: src/parse_args.c:819 msgid "run command on host (if supported by plugin)" msgstr "покреће наредбу на домаћину (ако је подржано прикључком)" -#: src/parse_args.c:841 +#: src/parse_args.c:822 msgid "run login shell as the target user; a command may also be specified" msgstr "покреће љуску пријаве као крајњи корисник; наредба може такође бити наведена" -#: src/parse_args.c:843 +#: src/parse_args.c:824 msgid "remove timestamp file completely" msgstr "потпуно уклања датотеку записа датума и времена" -#: src/parse_args.c:846 +#: src/parse_args.c:827 msgid "invalidate timestamp file" msgstr "чини неисправном датотеку датума и времена" -#: src/parse_args.c:849 +#: src/parse_args.c:830 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "исписује привилегије корисника или проверава посебну наредбу; користи се двапута за дуже записе" -#: src/parse_args.c:852 +#: src/parse_args.c:833 msgid "non-interactive mode, no prompts are used" msgstr "немеђудејствени режим, не користи упите" -#: src/parse_args.c:855 +#: src/parse_args.c:836 msgid "preserve group vector instead of setting to target's" msgstr "чува вектор групе уместо да подеси на циљеве" -#: src/parse_args.c:858 +#: src/parse_args.c:839 msgid "use the specified password prompt" msgstr "користи упит наведене лозинке" -#: src/parse_args.c:860 +#: src/parse_args.c:841 msgid "change the root directory before running command" msgstr "мења корени директоријум пре покретања наредбе" -#: src/parse_args.c:863 +#: src/parse_args.c:844 msgid "create SELinux security context with specified role" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:866 +#: src/parse_args.c:847 msgid "read password from standard input" msgstr "чита лозинку са стандардног улаза" -#: src/parse_args.c:869 +#: src/parse_args.c:850 msgid "run shell as the target user; a command may also be specified" msgstr "покреће љуску као крајњи корисник; наредба такође може бити наведена" -#: src/parse_args.c:873 +#: src/parse_args.c:854 msgid "create SELinux security context with specified type" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:876 +#: src/parse_args.c:857 msgid "terminate command after the specified time limit" msgstr "окончава наредбу након наведеног временског ограничења" -#: src/parse_args.c:879 +#: src/parse_args.c:860 msgid "in list mode, display privileges for user" msgstr "у режиму списка, приказује привилегије за корисника" -#: src/parse_args.c:882 +#: src/parse_args.c:863 msgid "run command (or edit file) as specified user name or ID" msgstr "покреће наредбу (или уређује датотеку) као наведени корисник" -#: src/parse_args.c:884 +#: src/parse_args.c:865 msgid "display version information and exit" msgstr "приказује податке о издању и излази" -#: src/parse_args.c:887 +#: src/parse_args.c:868 msgid "update user's timestamp without running a command" msgstr "освежава кориснички запис датума и времена без покретања наредбе" -#: src/parse_args.c:890 +#: src/parse_args.c:871 msgid "stop processing command line arguments" msgstr "зауставља обрађивање аргумената линије наредби" @@ -868,115 +943,115 @@ msgstr "не постојите у „%s“ бази података" msgid "unable to determine tty" msgstr "не могу да одредим конзолу" -#: src/sudo.c:908 +#: src/sudo.c:925 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "Опција „no new privileges“ је постављена, што спречава „sudo“-а да ради као администратор." -#: src/sudo.c:910 +#: src/sudo.c:927 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "Ако судо ради у садржаоцу, треба да прилагодите подешавање садржаоца да искључи опцију." -#: src/sudo.c:944 +#: src/sudo.c:961 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s мора бити власништвo уида %d и треба да има подешен бит „setuid“" -#: src/sudo.c:947 +#: src/sudo.c:964 #, 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:953 +#: src/sudo.c:970 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "стварни уид није %d, већ сетуид администратор инсталиран судоом?" -#: src/sudo.c:969 src/tgetpass.c:333 +#: src/sudo.c:986 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "не могу да подесим додатне ИБ-ове групе" -#: src/sudo.c:976 +#: src/sudo.c:993 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не могу да подесим ефективан гид да се покрене_као гид %u" -#: src/sudo.c:982 +#: src/sudo.c:999 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не могу да подесим гид да се покрене као гид %u" -#: src/sudo.c:1025 +#: src/sudo.c:1042 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочекивани услов завршетка потпроцеса: %d" -#: src/sudo.c:1132 +#: src/sudo.c:1149 msgid "unable to initialize policy plugin" msgstr "не могу да започнем прикључак сигурности" -#: src/sudo.c:1194 +#: src/sudo.c:1211 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "прикључак сигурности %s не садржи метод „check_policy“" -#: src/sudo.c:1240 +#: src/sudo.c:1257 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "прикључак сигурности %s не подржава привилегије исписивања" -#: src/sudo.c:1284 +#: src/sudo.c:1301 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "прикључак сигурности %s не подржава опцију -v" -#: src/sudo.c:1322 +#: src/sudo.c:1339 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "прикључак сигурности %s не подржава опције -k/-K" -#: src/sudo.c:1451 +#: src/sudo.c:1468 #, c-format msgid "error initializing I/O plugin %s" msgstr "грешка приликом покретања У/И прикључка %s" -#: src/sudo.c:1454 +#: src/sudo.c:1471 msgid "error initializing I/O plugin" msgstr "грешка приликом покретања У/И прикључка" -#: src/sudo.c:1603 +#: src/sudo.c:1620 #, c-format msgid "error initializing audit plugin %s" msgstr "грешка покретања аудит прикључка „%s“" -#: src/sudo.c:1682 +#: src/sudo.c:1699 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: не могу да забележим догађај грешке%s%s" -#: src/sudo.c:1718 +#: src/sudo.c:1735 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: не могу да забележим догађај прихватања%s%s" -#: src/sudo.c:1723 src/sudo.c:1761 +#: src/sudo.c:1740 src/sudo.c:1778 msgid "audit plugin error" msgstr "грешка аудит прикључка" -#: src/sudo.c:1756 +#: src/sudo.c:1773 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: не могу да забележим догађај одбијања%s%s" -#: src/sudo.c:1816 +#: src/sudo.c:1833 #, c-format msgid "error initializing approval plugin %s" msgstr "грешка покретања прикључка одобравања „%s“" -#: src/sudo.c:1886 +#: src/sudo.c:1903 msgid "command rejected by approver" msgstr "наредбу је одбацио одобравач" -#: src/sudo.c:1896 +#: src/sudo.c:1913 msgid "approval plugin error" msgstr "грешка прикључка одобравања" @@ -1056,17 +1131,17 @@ msgstr "терминал је потребан за читање лозинке; msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "није наведен програм за пропуштање, покушајте да подесите SUDO_ASKPASS" -#: src/tgetpass.c:328 +#: src/tgetpass.c:326 #, c-format msgid "unable to set gid to %u" msgstr "не могу да подесим гид у %u" -#: src/tgetpass.c:338 +#: src/tgetpass.c:336 #, c-format msgid "unable to set uid to %u" msgstr "не могу да подесим уид у %u" -#: src/tgetpass.c:343 +#: src/tgetpass.c:341 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" diff --git a/po/sv.mo b/po/sv.mo index 115cc142c13b01fde9a787a714f4d04fece88adf..beddaad0b919a2bb1179c1deb38a64e6e25a213c 100644 GIT binary patch delta 8457 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 delta 4912 zcmZA23vg7`9mnyr3lfY5LwMw6;D!(q5)$%&Bm^|kKp=`iKu|!ciCJSLY+$niRCHCO zK2Rbad>~jsffB^}xIzm)D8XulTBM^^Y{#~~3RA7x+R-{X^!wX;GvoA5e)~E1a`&Ed z{^#7~{Z|6tZwu#bsE6YcUP?VLBee96W`(FDbOFWB7ISWq zL7HB4@LkNsZ*UZ5QD6EnwWto}qe>n1UGKZgw-+_wKVuQ<=2!t1(@^Oa;Q6=)HIrV{ z+J1oQ_zb44jtf!O8!-vHPcv+y;nz~MZMKFuXqhu5N>w>y*itK+x0z;c@J za2zI4XAP_xbsoY>d;lll5mbp!<9IA*`V;XQRK+%-_Qunw`%j=sK8STxWh+oi8yZ3V z9U6CXfj_g058e1WYQ$flIvzOED_Je_EE7fz>|WFZ_oHTZ63@eNj#ts^QP0_ks@T)W zYMZxF1N=vfhDw^saMV#XYS%_kUs!{x#BS8)dsyOBQ3KD-FuLp?Z$t*gz}jGECZfDCKI`2ickZdi@L7^ zHKVntfowr_`~vF!H&J`!-{@ctWmD;=VxHdrWi(W>M^F!NQ5_sbEydqa75NsKjLBfD zYo;}*(q4wz#LH28V>7CQ{pjE)sOJvgCOu~as&ciMPyeQchQ4?ovfs>8sF5E*_LKP% z^?+nHf(Dw8sz@F3Y%>p4iCd6Av(dkP5VhtfQ56a@DpfcgwFFZzrd=GNp(S`6`7_7) z&;WiwjW~y!7=xLH=U|7gzC4BVZq$r^huWN9`i|sRrh@ZE)W5IA?*qp4U?S%`$5VgW z<~bHfyZbMwnIv<c&wl7?U$IQ2%}dYH4~ z!8Ei~8&FGh9OvLkRH-MkBQ>yQREOQD3hqEw!5l@+{4`F{`(MBhwo28C^kI5X1Nj)4 zl*wQn(s3^8`ck|QpF{^gMa?vUQR%!A&&4Y+1G`Xbe?RIu2T*(GZ5$V)kx}d2I32YV z&8U(-h!^7#WUyv9qtyF87xkdksF^*4L+~Y}%H}OpV2<5ZLU?Q*Kr4GAn&3|{=I*_ zpuv0IBHx>RA4e_KA=EGJJ24t#X#_6vHccVwfiqBhAdF-1N&ox^>i*NH0gq*a=s_2w zmTo2LHQb4#@B`HM12eq==A*tpALC1PD~$p!Jb{_`CaQ#|P^HSe#QTAohz{rTP!(B$ zDrq<7;cn!GF@L~9Oy;F$gPSR+w`MhJV$Y+4?_rhR|Nqh$%!RU9o>P&cnE9w1x8is_ zF ziDVmDLN<~g9}jS{OpBvKFXW5ymiLha`hnH4owShqhXk11Hkm-FFeRJ_?vX^A~*J^wRVl4@iViF~{ zk)7mLQcs>FzajDY52m5xW{>#Zf5LCy=-bCS8oSB$WW9g!LSJzcd7eB-a>yg(b#j0- zko(CMWCh{nj`tt`&zN&FpX?*Oq>AXcoXjI>ap(ZM#$CzTgxG-K3m?pk0+a+V0QIK6iOnTO`!!G)0~EP*Z2r z=?I6Mrbuho(oi_+{xNrFz}=kpP0&41Fe7N|i;C^$qDcu$m$bA+oLsl4_*5V@(iLV% zP7{Aldq-a6ADX8?U9P(_O;4dyScI`b$TcqiZn$#BGt~N9if)C zs8d!vp}5SBtg5l=s#e@ z!I;0ef}*P`kCh%>BInwxGMcp*?74&CIszXJ(}@i5%X( zA{23!wuPxvC>rgnliM@%^?ZDA_d8g2`>c6KglYIo1P;$*;PEzGcU7v|Y#7Ywr} g78duXjzxCVf-yE>(QLb7QH?#Z=z2GN, 2012. -# Sebastian Rasmussen , 2016, 2017, 2018, 2019, 2020. +# Sebastian Rasmussen , 2016, 2017, 2018, 2019, 2020, 2022. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.3b1\n" +"Project-Id-Version: sudo 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-12-26 03:44+0100\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-11 13:40+0200\n" "Last-Translator: Sebastian Rasmussen \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.4.2\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 3.1.1\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 @@ -35,97 +35,115 @@ msgid "unable to restore registry" msgstr "kunde inte återställa registret" #: 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 -#: 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 -#: src/exec_monitor.c:484 src/exec_monitor.c:491 src/exec_monitor.c:498 -#: src/exec_monitor.c:505 src/exec_monitor.c:512 src/exec_monitor.c:519 -#: src/exec_monitor.c:526 src/exec_nopty.c:212 src/exec_nopty.c:221 -#: src/exec_nopty.c:228 src/exec_nopty.c:235 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_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/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/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 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: 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 -#: 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 -#: src/exec_monitor.c:498 src/exec_monitor.c:505 src/exec_monitor.c:512 -#: src/exec_monitor.c:519 src/exec_monitor.c:526 src/exec_nopty.c:212 -#: src/exec_nopty.c:221 src/exec_nopty.c:228 src/exec_nopty.c:235 -#: 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/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/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 +#: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 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:369 +#: lib/util/mkdir_parents.c:63 +#, c-format +msgid "unable to stat %.*s" +msgstr "kunde inte ta status på %.*s" + +#: lib/util/mkdir_parents.c:69 +#, c-format +msgid "%.*s exists but is not a directory (0%o)" +msgstr "%.*s existerar men är inte en katalog (0%o)" + +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "kunde inte öppna %s" -#: lib/util/mkdir_parents.c:84 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format -msgid "unable to mkdir %s" -msgstr "kunde inte köra mkdir %s" +msgid "unable to mkdir %.*s" +msgstr "kunde inte köra mkdir %.*s" -#: lib/util/mkdir_parents.c:93 lib/util/sudo_conf.c:591 +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 #, c-format -msgid "unable to stat %s" -msgstr "kunde inte ta status på %s" +msgid "unable to open %.*s" +msgstr "kunde inte öppna %.*s" -#: lib/util/mkdir_parents.c:98 -#, c-format -msgid "%s exists but is not a directory (0%o)" -msgstr "%s existerar men är inte en katalog (0%o)" +#: lib/util/regex.c:103 +msgid "regular expression too large" +msgstr "reguljärt uttryck för stort" #: lib/util/strsignal.c:50 msgid "Unknown signal" msgstr "Okänd signal" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "ogiltigt värde" @@ -137,110 +155,232 @@ msgstr "värde för stort" msgid "value too small" msgstr "värde för litet" -#: lib/util/sudo_conf.c:205 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "ogiltigt Path-värde ”%s” i %s, rad %u" -#: lib/util/sudo_conf.c:371 lib/util/sudo_conf.c:387 lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "ogiltigt värde för %s ”%s” i %s, rad %u" -#: lib/util/sudo_conf.c:408 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "gruppkälla ”%s” stöds ej i %s, rad %u" -#: lib/util/sudo_conf.c:424 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "ogiltigt största antal grupper ”%s” i %s, rad %u" -#: lib/util/sudo_conf.c:594 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s är inte en vanlig fil" -#: lib/util/sudo_conf.c:597 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s ägs av uid %u, ska vara %u" -#: lib/util/sudo_conf.c:601 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "%s är skrivbar för alla" -#: lib/util/sudo_conf.c:604 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "%s är skrivbar för gruppen" -#: src/copy_file.c:91 +#: src/apparmor.c:85 +msgid "failed to determine AppArmor confinement" +msgstr "kunde inte fastställa AppArmor- läge." + +#: src/apparmor.c:93 +#, c-format +msgid "unable to change AppArmor profile to %s" +msgstr "kan inte ändra AppArmor-profil till %s" + +#: src/copy_file.c:94 #, 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 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "skriver inte över %s" -#: src/copy_file.c:117 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "kunde inte läsa från %s" -#: src/copy_file.c:134 src/sudo_edit.c:695 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "kunde inte skriva till %s" -#: src/exec.c:128 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "kunde inte ta status på %s" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 +#, c-format +msgid "%s: not a regular file" +msgstr "%s: inte en vanlig fil" + +#: src/copy_file.c:159 +#, c-format +msgid "%s: bad file mode: 0%o" +msgstr "%s: felaktigt filläge: 0%o" + +#: src/edit_open.c:331 +msgid "unable to restore current working directory" +msgstr "kunde inte återställa aktuell arbetskatalog" + +#: src/exec.c:111 +msgid "unable to set privileges" +msgstr "kan inte sätta privilegier" + +#: src/exec.c:117 src/exec.c:122 +msgid "unable to set limit privileges" +msgstr "kan inte sätta begränsning av privilegier" + +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "okänd inloggningsklass %s" -#: src/exec.c:140 +#: src/exec.c:157 msgid "unable to set user context" msgstr "kunde inte ställa in användarens kontext" -#: src/exec.c:156 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "kunde inte ställa in processprioritet" -#: src/exec.c:170 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "kunde inte ändra rot till %s" -#: src/exec.c:183 src/exec.c:189 src/exec.c:196 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "kunde inte ändra till runas uid (%u, %u)" -#: src/exec.c:214 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "kunde inte ändra katalog till %s" -#: src/exec.c:218 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "börjar från %s" -#: 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.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "kunde inte ställa in hanterare för signal %d" -#: src/exec_common.c:165 +#: src/exec.c:422 +msgid "intercept mode is not supported with SELinux RBAC on this system" +msgstr "infångningsläge stöds in med SELinux RBAC på detta system" + +#: src/exec.c:427 +msgid "unable to log sub-commands with SELinux RBAC on this system" +msgstr "kan inte logga underkommandon med SELinux RBAC på detta system" + +#: src/exec_common.c:56 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "kan inte ta bort PRIV_PROC_EXEC från PRIV_LIMIT" +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 +msgid "unable to add event to queue" +msgstr "kunde inte lägga till händelse till kö" + +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "kommando inte satt enligt säkerhetspolicyn" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 +msgid "command rejected by policy" +msgstr "kommando avböjt enligt policy" + +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "fel i godkänningsinsticksmodul" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 +msgid "policy plugin error" +msgstr "fel i policyinsticksmodul" + +#: src/exec_intercept.c:543 +msgid "invalid PolicyCheckRequest" +msgstr "ogiltig PolicyCheckRequest" + +#: src/exec_intercept.c:678 +#, c-format +msgid "client request too large: %zu" +msgstr "klientbegäran för stor: %zu" + +#: src/exec_intercept.c:720 +#, c-format +msgid "unable to unpack %s size %zu" +msgstr "kunde inte packa upp %s storlek %zu" + +#: src/exec_intercept.c:768 +#, c-format +msgid "unexpected type_case value %d in %s from %s" +msgstr "oväntat type_case-värde %d i %s från %s" + +#: src/exec_intercept.c:794 +#, c-format +msgid "server message too large: %zu" +msgstr "servermeddelande för stort: %zu" + +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "fel i I/O-insticksmodul" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "kommando avböjt av I/O-insticksmodul" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "felloggning avstängd" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "fel vid ändring av fönsterstorlek" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "fel vid läsning från uttagspar" @@ -250,203 +390,213 @@ msgstr "fel vid läsning från uttagspar" msgid "unexpected reply type on backchannel: %d" msgstr "oväntad svarstyp i bakkanal: %d" -#: src/exec_monitor.c:463 src/exec_monitor.c:471 src/exec_monitor.c:479 -#: src/exec_monitor.c:486 src/exec_monitor.c:493 src/exec_monitor.c:500 -#: src/exec_monitor.c:507 src/exec_monitor.c:514 src/exec_monitor.c:521 -#: src/exec_monitor.c:528 src/exec_nopty.c:214 src/exec_nopty.c:223 -#: 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 -msgid "unable to add event to queue" -msgstr "kunde inte lägga till händelse till kö" - -#: src/exec_monitor.c:582 +#: src/exec_monitor.c:585 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:306 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "kunde inte skapa rör" -#: src/exec_monitor.c:598 +#: src/exec_monitor.c:603 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:735 src/tgetpass.c:310 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 +#: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "kunde inte grena process" -#: src/exec_monitor.c:616 src/exec_monitor.c:715 src/exec_nopty.c:441 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "kan inte återställa tty-etikett" -#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "kunde inte köra %s" -#: src/exec_nopty.c:352 src/exec_pty.c:1395 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "policyinsticksmodul misslyckades att initiera session" -#: src/exec_nopty.c:429 src/exec_pty.c:1632 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 +msgid "unable to create sockets" +msgstr "kunde inte skapa uttag" + +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "fel i händelseslinga" -#: src/exec_nopty.c:539 src/exec_pty.c:606 src/signal.c:101 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to restore handler for signal %d" -msgstr "kunde inte återställa hanterare för signal %d" +msgid "internal error, %s overflow" +msgstr "internt fel, %s spill" -#: src/exec_pty.c:152 -msgid "unable to allocate pty" -msgstr "kunde inte allokera pty" +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 +#, c-format +msgid "unable to set registers for process %d" +msgstr "kunde inte sätta register för process %d" -#: 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 -msgid "I/O plugin error" -msgstr "fel i I/O-insticksmodul" +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "process %d avslutades oväntat" -#: 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 -msgid "command rejected by I/O plugin" -msgstr "kommando avböjt av I/O-insticksmodul" +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "kan inte sätta seccomp-filter" -#: src/exec_pty.c:444 -msgid "error logging suspend" -msgstr "felloggning avstängd" +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "tolkargument , förväntade \"%s\", fick \"%s\"" -#: src/exec_pty.c:477 -msgid "error changing window size" -msgstr "fel vid ändring av fönsterstorlek" +#: src/exec_ptrace.c:1503 +#, c-format +msgid "pathname mismatch, expected \"%s\", got \"%s\"" +msgstr "felmatchning i söknamn, förväntade \"%s\", fick \"%s\"" -#: src/exec_pty.c:1375 -msgid "unable to create sockets" -msgstr "kunde inte skapa uttag" +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 +#, c-format +msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" +msgstr "%s[%d] felmatchade, förväntade \"%s\", fick \"%s\"" + +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "process %d oväntad status 0x%x" + +#: src/exec_ptrace.c:1711 +#, c-format +msgid "unable to get event message for process %d" +msgstr "kan inte hämta händelsemeddelande för process %d" -#: src/exec_pty.c:1587 +#: src/exec_ptrace.c:1718 +#, c-format +msgid "unable to get registers for process %d" +msgstr "kan inte hämta register för process %d" + +#: src/exec_pty.c:103 +msgid "unable to allocate pty" +msgstr "kunde inte allokera pty" + +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "kunde inte återställa hanterare för signal %d" + +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" 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:354 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "fel i %s, rad %d under inläsning av insticksmodul ”%s”" -#: src/load_plugins.c:87 -#, c-format -msgid "%s%s: %s" -msgstr "%s%s: %s" - -#: src/load_plugins.c:131 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s måste ägas av uid %d" -#: src/load_plugins.c:137 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s får endast vara skrivbar av ägaren" -#: src/load_plugins.c:247 src/load_plugins.c:322 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "ignorerar dubblerad insticksmodul ”%s” i %s, rad %d" -#: src/load_plugins.c:289 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "kunde inte läsa in %s: %s" -#: src/load_plugins.c:299 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "kunde inte hitta symbol ”%s” i %s" -#: src/load_plugins.c:309 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "inkompatibel huvudversion %d för insticksmodul (%d förväntades) hittad i %s" -#: src/load_plugins.c:327 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignorerar policyinsticksmodul ”%s” i %s, rad %d" -#: src/load_plugins.c:330 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "bara en policyinsticksmodul kan anges" -#: src/load_plugins.c:356 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "okänd insticksmodulstyp %d hittad i %s" -#: src/load_plugins.c:552 +#: src/load_plugins.c:531 #, 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:479 -#, c-format -msgid "internal error, %s overflow" -msgstr "internt fel, %s spill" - -#: src/parse_args.c:223 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "ogiltigt namn på miljövariabel: %s" -#: src/parse_args.c:325 +#: src/parse_args.c:317 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:552 +#: src/parse_args.c:554 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:557 +#: src/parse_args.c:559 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:567 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "flaggan -E är inte giltig i redigeringsläget" -#: src/parse_args.c:570 +#: src/parse_args.c:572 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:580 +#: src/parse_args.c:582 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:584 +#: src/parse_args.c:586 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:677 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "sudoedit stöds inte på denna plattform" -#: src/parse_args.c:759 +#: src/parse_args.c:767 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:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "Endast en av flaggorna -K, -k eller -N får anges" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -455,7 +605,7 @@ msgstr "" "%s - redigera filer som en annan användare\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -464,7 +614,7 @@ msgstr "" "%s - kör ett kommando som en annan användare\n" "\n" -#: src/parse_args.c:780 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -472,248 +622,268 @@ msgstr "" "\n" "Flaggor:\n" -#: src/parse_args.c:782 +#: src/parse_args.c:806 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:785 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "använd angiven BSD-autentiseringstyp" -#: src/parse_args.c:788 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "kör kommando i bakgrunden" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "ring i klockan vid fråga" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "stäng alla fildeskriptorer >= num" -#: src/parse_args.c:795 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "kör kommando med den angivna BSD-inloggningsklassen" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "ändra arbetskatalog innan kommando körs" -#: src/parse_args.c:800 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "bevara användarens miljö när kommandot körs" -#: src/parse_args.c:802 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "bevara specifika miljövariabler" -#: src/parse_args.c:804 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "redigera filer istället för att köra ett kommando" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "kör kommando som angivet gruppnamn eller ID" -#: src/parse_args.c:808 +#: src/parse_args.c:837 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:810 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "visa hjälpmeddelande och avsluta" -#: src/parse_args.c:812 +#: src/parse_args.c:842 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:814 +#: src/parse_args.c:845 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:816 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "ta bort tidsstämpelfil helt" -#: src/parse_args.c:818 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "ogiltigförklara tidsstämpelfil" -#: src/parse_args.c:820 +#: src/parse_args.c:853 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:822 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "icke-interaktivt läge, inga frågor ställs" -#: src/parse_args.c:824 +#: src/parse_args.c:859 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:826 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "använd angiven lösenordsprompt" -#: src/parse_args.c:828 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "ändra rotkatalog innan kommando körs" -#: src/parse_args.c:831 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "skapa SELinux-säkerhetskontext med angiven roll" -#: src/parse_args.c:834 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "läs lösenord från standard in" -#: src/parse_args.c:836 +#: src/parse_args.c:873 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:839 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "skapa SELinux-säkerhetskontext med angiven typ" -#: src/parse_args.c:842 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "avsluta kommando efter den angivna tidsgränsen" -#: src/parse_args.c:844 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "i listläge, visa rättigheter för användaren" -#: src/parse_args.c:846 +#: src/parse_args.c:886 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:848 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "visa versionsinformation och avsluta" -#: src/parse_args.c:850 +#: src/parse_args.c:891 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:852 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "sluta behandla kommandoradsargument" -#: src/selinux.c:84 +#: src/selinux.c:83 msgid "unable to open audit system" msgstr "kan inte öppna granskningssystem" -#: src/selinux.c:94 +#: src/selinux.c:93 msgid "unable to send audit message" msgstr "kan inte skicka granskningsmeddelande" -#: src/selinux.c:128 +#: src/selinux.c:129 #, c-format msgid "unable to fgetfilecon %s" msgstr "kan inte köra fgetfilecon på %s" -#: src/selinux.c:133 +#: src/selinux.c:134 #, c-format msgid "%s changed labels" msgstr "%s ändrade etiketter" -#: src/selinux.c:141 +#: src/selinux.c:142 #, c-format msgid "unable to restore context for %s" msgstr "kan inte återställa kontext för %s" -#: src/selinux.c:189 +#: src/selinux.c:190 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "kan inte öppna %s, ometiketterar inte tty" -#: src/selinux.c:193 src/selinux.c:238 src/selinux.c:268 +#: src/selinux.c:194 src/selinux.c:239 src/selinux.c:269 #, c-format msgid "%s is not a character device, not relabeling tty" msgstr "%s är inte en teckenenhet, ometiketterar inte tty" -#: src/selinux.c:202 +#: src/selinux.c:203 msgid "unable to get current tty context, not relabeling tty" msgstr "kan inte hämta aktuell tty-kontext, ometiketterar inte tty" -#: src/selinux.c:209 +#: src/selinux.c:210 msgid "unknown security class \"chr_file\", not relabeling tty" msgstr "okänd säkerhetsklass ”chr_file”, ometiketterar inte tty" -#: src/selinux.c:214 +#: src/selinux.c:215 msgid "unable to get new tty context, not relabeling tty" msgstr "kan inte hämta ny tty-kontext, ometiketterar inte tty" -#: src/selinux.c:223 +#: src/selinux.c:224 msgid "unable to set new tty context" msgstr "kan inte ställa in ny tty-kontext" -#: src/selinux.c:321 +#: src/selinux.c:323 #, c-format msgid "you must specify a role for type %s" msgstr "du måste ange en roll för typen %s" -#: src/selinux.c:327 +#: src/selinux.c:329 #, c-format msgid "unable to get default type for role %s" msgstr "kunde inte få tag på standardtyp för rollen %s" -#: src/selinux.c:339 +#: src/selinux.c:341 msgid "failed to get new context" msgstr "misslyckades med att få tag på ny kontext" -#: src/selinux.c:348 +#: src/selinux.c:350 #, c-format msgid "failed to set new role %s" msgstr "misslyckades med att ställa in nya rollen %s" -#: src/selinux.c:352 +#: src/selinux.c:354 #, c-format msgid "failed to set new type %s" msgstr "misslyckades med att ställa in nya typen %s" -#: src/selinux.c:364 +#: src/selinux.c:366 #, c-format msgid "%s is not a valid context" msgstr "%s är inte en giltig kontext" -#: src/selinux.c:396 +#: src/selinux.c:394 msgid "failed to get old context" msgstr "misslyckades med att få tag på gammal kontext" -#: src/selinux.c:402 +#: src/selinux.c:400 msgid "unable to determine enforcing mode." msgstr "kan inte fastställa påtvingande läge." -#: src/selinux.c:419 -#, c-format -msgid "unable to set tty context to %s" -msgstr "kunde inte ställa in tty-kontext till %s" - -#: src/selinux.c:440 +#: src/selinux.c:425 #, c-format msgid "unable to set exec context to %s" msgstr "kunde inte ställa in körkontext till %s" -#: src/selinux.c:447 +#: src/selinux.c:432 #, c-format msgid "unable to set key creation context to %s" msgstr "kan inte ställa in kontext för nyckelskapande till %s" -#: src/sesh.c:77 -msgid "requires at least one argument" -msgstr "kräver minst ett argument" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "Endast en av flaggorna -c eller -i får anges" -#: src/sesh.c:106 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "ogiltigt fildeskriptornummer: %s" -#: src/sesh.c:120 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 +#, c-format +msgid "The -%c option may not be used in edit mode." +msgstr "Flaggan -%c kan inte användas i redigeringsläge." + +#: src/sesh.c:184 src/sesh.c:189 #, c-format -msgid "unable to run %s as a login shell" -msgstr "kunde inte köra %s som ett inloggningsskal" +msgid "The -%c option may only be used in edit mode." +msgstr "Flaggan -%c får bara användas i redigeringsläge." + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: att redigera symboliska länkar är inte tillåtet" + +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: att redigera filer i en skrivbar katalog är inte tillåtet" + +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 +#: src/sudo_edit.c:331 +#, c-format +msgid "contents of edit session left in %s" +msgstr "innehåll av redigeringssession finns kvar i %s" + +#: src/sesh.c:476 src/sudo_edit.c:94 +msgid "unable to get group list" +msgstr "kan inte hämta grupplista" #: src/signal.c:79 #, c-format @@ -763,203 +933,210 @@ msgstr "setproject misslyckades för projekt ”%s”" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "varning, tilldelning av resurskontroll misslyckades för projekt ”%s”" -#: src/sudo.c:220 +#: src/sudo.c:216 #, c-format msgid "Sudo version %s\n" msgstr "Sudo version %s\n" -#: src/sudo.c:222 +#: src/sudo.c:218 #, c-format msgid "Configure options: %s\n" msgstr "Konfigurationsflaggor: %s\n" -#: src/sudo.c:231 +#: src/sudo.c:226 msgid "fatal error, unable to load plugins" msgstr "ödesdigert fel, kunde inte läsa in insticksmoduler" -#: src/sudo.c:277 +#: src/sudo.c:272 msgid "plugin did not return a command to execute" msgstr "insticksmodul returnerade ett kommando att exekvera" -#: src/sudo.c:312 +#: src/sudo.c:305 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "oväntat sudo-läge 0x%x" -#: src/sudo.c:546 +#: src/sudo.c:553 #, c-format msgid "you do not exist in the %s database" msgstr "du existerar inte i %s-databasen" -#: src/sudo.c:603 +#: src/sudo.c:610 msgid "unable to determine tty" msgstr "kan inte detektera tty" -#: src/sudo.c:913 +#: src/sudo.c:918 +msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." +msgstr "Flaggan \"inga nya privilegier\" är satt, vilket förhindrar sudo från att köra som root." + +#: src/sudo.c:920 +msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." +msgstr "Om sudo kör i en behållare, kan du behöva justera behållarkonfigurationen för att inaktivera flaggan." + +#: src/sudo.c:954 #, 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:916 +#: src/sudo.c:957 #, 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:922 +#: src/sudo.c:963 #, 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:938 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "kan inte ställa in kompletterande grupp-ID:n" -#: src/sudo.c:945 +#: src/sudo.c:986 #, 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:951 +#: src/sudo.c:992 #, 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:994 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "argv inte satt enligt säkerhetspolicyn" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "envp inte satt enligt säkerhetspolicyn" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "oväntat barnavslutsvillkor: %d" -#: src/sudo.c:1103 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "kan inte initiera policy-instick" -#: src/sudo.c:1166 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "policyinsticksmodul %s saknar metoden ”check_policy”" -#: 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:1186 src/sudo.c:1239 src/sudo.c:1283 -msgid "policy plugin error" -msgstr "fel i policyinsticksmodul" - -#: src/sudo.c:1220 +#: src/sudo.c:1269 #, 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:1264 +#: src/sudo.c:1313 #, 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:1302 +#: src/sudo.c:1351 #, 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:1431 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "fel vid initiering av I/O-insticksmodul %s" -#: src/sudo.c:1585 +#: src/sudo.c:1483 +msgid "error initializing I/O plugin" +msgstr "fel vid initiering av I/O-insticksmodul" + +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "fel vid initiering av granskningsinsticksmodul %s" -#: src/sudo.c:1763 +#: src/sudo.c:1711 +#, c-format +msgid "%s: unable to log error event%s%s" +msgstr "%s: kunde inte logga felhändelse%s%s" + +#: src/sudo.c:1747 +#, c-format +msgid "%s: unable to log accept event%s%s" +msgstr "%s: kunde inte logga acceptanshändelse%s%s" + +#: src/sudo.c:1752 src/sudo.c:1790 +msgid "audit plugin error" +msgstr "fel i audit-insticksmodul" + +#: src/sudo.c:1785 +#, c-format +msgid "%s: unable to log reject event%s%s" +msgstr "%s: kunde inte logga avböjningshändelse%s%s" + +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "fel vid initiering av godkänningsinsticksmodul %s" -#: src/sudo.c:1839 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "kommando avböjt av godkännare" -#: src/sudo.c:1848 -msgid "approval plugin error" -msgstr "fel i godkänningsinsticksmodul" - -#: src/sudo_edit.c:226 +#: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "ingen skrivbar temporärkatalog hittad" -#: src/sudo_edit.c:351 -msgid "unable to restore current working directory" -msgstr "kunde inte återställa aktuell arbetskatalog" - -#: src/sudo_edit.c:566 src/sudo_edit.c:666 -#, c-format -msgid "%s: not a regular file" -msgstr "%s: inte en vanlig fil" - -#: src/sudo_edit.c:573 -#, c-format -msgid "%s: editing symbolic links is not permitted" -msgstr "%s: att redigera symboliska länkar är inte tillåtet" - -#: src/sudo_edit.c:576 -#, c-format -msgid "%s: editing files in a writable directory is not permitted" -msgstr "%s: att redigera filer i en skrivbar katalog är inte tillåtet" - -#: src/sudo_edit.c:667 +#: src/sudo_edit.c:291 #, c-format msgid "%s left unmodified" msgstr "%s lämnad oförändrad" -#: src/sudo_edit.c:680 src/sudo_edit.c:871 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s oförändrad" -#: 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:814 +#: src/sudo_edit.c:481 msgid "sesh: internal error: odd number of paths" msgstr "sesh: internt fel: udda antal sökvägar" -#: src/sudo_edit.c:816 +#: src/sudo_edit.c:483 msgid "sesh: unable to create temporary files" msgstr "sesh: kunde inte skapa temporärfiler" -#: src/sudo_edit.c:818 src/sudo_edit.c:902 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: dödad av en signal" -#: src/sudo_edit.c:820 src/sudo_edit.c:905 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: okänt fel %d" -#: src/sudo_edit.c:895 +#: src/sudo_edit.c:597 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:899 +#: src/sudo_edit.c:601 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:943 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "kunde inte ändra uid till root (%u)" -#: src/sudo_edit.c:960 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "insticksfel: fillista för sudoedit saknas" -#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "kunde inte läsa klockan" +#: src/sudo_intercept_common.c:365 +msgid "intercept port not set" +msgstr "infångningsport inte satt" + #: src/tgetpass.c:95 msgid "timed out reading password" msgstr "tidsgräns löpte ut vid lösenordsinläsning" @@ -980,33 +1157,45 @@ msgstr "en terminal krävs för att läsa lösenordet; använd antingen flaggan msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "inget askpass-program angivet, prova att ställ in SUDO_ASKPASS" -#: src/tgetpass.c:327 +#: src/tgetpass.c:326 #, c-format msgid "unable to set gid to %u" msgstr "kunde inte ställa in gid till %u" -#: src/tgetpass.c:331 +#: src/tgetpass.c:336 #, c-format msgid "unable to set uid to %u" msgstr "kunde inte ställa in uid till %u" -#: src/tgetpass.c:336 +#: src/tgetpass.c:341 #, c-format msgid "unable to run %s" msgstr "kunde inte köra %s" -#: src/utmp.c:287 +#: src/utmp.c:288 msgid "unable to save stdin" msgstr "kunde inte spara standard in" -#: src/utmp.c:289 +#: src/utmp.c:290 msgid "unable to dup2 stdin" msgstr "kan inte köra dup2 på standard in" -#: src/utmp.c:292 +#: src/utmp.c:293 msgid "unable to restore stdin" msgstr "kan inte återställa standard in" +#~ msgid "%s%s: %s" +#~ msgstr "%s%s: %s" + +#~ msgid "unable to set tty context to %s" +#~ msgstr "kunde inte ställa in tty-kontext till %s" + +#~ msgid "requires at least one argument" +#~ msgstr "kräver minst ett argument" + +#~ msgid "unable to run %s as a login shell" +#~ msgstr "kunde inte köra %s som ett inloggningsskal" + #~ msgid "%s: short write" #~ msgstr "%s: kort skrivning" @@ -1019,9 +1208,6 @@ msgstr "kan inte återställa standard in" #~ msgid "no tty present and no askpass program specified" #~ msgstr "ingen tty finns tillgänglig och inget askpass-program angivet" -#~ msgid "unable to get group vector" -#~ msgstr "kan inte hämta gruppvektor" - #~ msgid "unknown uid %u: who are you?" #~ msgstr "okänt uid %u: vem är du?" diff --git a/po/uk.mo b/po/uk.mo index 6cbecffe26233822be71eefb328b0c524fa739bc..fce6dc18f81303e4b28faa81d2c652fdd94b06f5 100644 GIT binary patch delta 6120 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 delta 5509 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, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022. msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.11b1\n" +"Project-Id-Version: sudo 1.9.12b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2022-05-27 08:39-0600\n" -"PO-Revision-Date: 2022-05-29 12:09+0300\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-11 12:15+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -32,76 +32,75 @@ 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:183 lib/util/sudo_conf.c:218 -#: lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 lib/util/sudo_conf.c:665 -#: src/conversation.c:80 src/exec_monitor.c:205 src/exec_monitor.c:458 +#: lib/util/json.c:54 lib/util/json.c:183 lib/util/sudo_conf.c:219 +#: lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 lib/util/sudo_conf.c:666 +#: src/conversation.c:80 src/exec_iolog.c:124 src/exec_iolog.c:135 +#: src/exec_iolog.c:212 src/exec_monitor.c:205 src/exec_monitor.c:458 #: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 #: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 #: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 -#: src/exec_monitor.c:529 src/exec_nopty.c:224 src/exec_nopty.c:233 -#: src/exec_nopty.c:240 src/exec_nopty.c:247 src/exec_nopty.c:254 -#: src/exec_nopty.c:261 src/exec_nopty.c:268 src/exec_nopty.c:275 -#: src/exec_nopty.c:282 src/exec_nopty.c:289 src/exec_nopty.c:296 -#: src/exec_nopty.c:303 src/exec_nopty.c:311 src/exec_nopty.c:549 -#: src/exec_preload.c:143 src/exec_preload.c:204 src/exec_ptrace.c:632 -#: src/exec_ptrace.c:730 src/exec_ptrace.c:895 src/exec_pty.c:845 -#: src/exec_pty.c:854 src/exec_pty.c:911 src/exec_pty.c:1075 -#: src/exec_pty.c:1265 src/exec_pty.c:1274 src/exec_pty.c:1281 -#: src/exec_pty.c:1288 src/exec_pty.c:1295 src/exec_pty.c:1302 -#: src/exec_pty.c:1309 src/exec_pty.c:1316 src/exec_pty.c:1323 -#: src/exec_pty.c:1330 src/exec_pty.c:1337 src/exec_pty.c:1345 -#: src/exec_pty.c:1811 src/load_plugins.c:156 src/load_plugins.c:181 -#: src/load_plugins.c:217 src/load_plugins.c:449 src/load_plugins.c:455 -#: src/parse_args.c:169 src/parse_args.c:190 src/parse_args.c:264 -#: src/parse_args.c:613 src/parse_args.c:635 src/parse_args.c:660 -#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:89 -#: src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 src/sesh.c:113 -#: src/sesh.c:146 src/sesh.c:152 src/sesh.c:159 src/sesh.c:165 src/sesh.c:410 -#: src/sudo.c:639 src/sudo.c:712 src/sudo.c:722 src/sudo.c:748 src/sudo.c:771 -#: src/sudo.c:780 src/sudo.c:789 src/sudo.c:806 src/sudo.c:848 src/sudo.c:858 -#: src/sudo.c:891 src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 -#: src/sudo.c:1583 src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 -#: src/sudo_edit.c:149 src/sudo_edit.c:429 src/sudo_edit.c:438 -#: src/sudo_edit.c:539 src/sudo_edit.c:546 src/sudo_edit.c:677 -#: src/sudo_edit.c:697 src/sudo_intercept_common.c:113 -#: src/sudo_intercept_common.c:317 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_nopty.c:732 src/exec_preload.c:341 src/exec_ptrace.c:474 +#: src/exec_ptrace.c:767 src/exec_ptrace.c:982 src/exec_ptrace.c:1094 +#: src/exec_ptrace.c:1269 src/exec_ptrace.c:1611 src/exec_ptrace.c:1638 +#: src/exec_pty.c:506 src/exec_pty.c:687 src/exec_pty.c:873 src/exec_pty.c:882 +#: src/exec_pty.c:889 src/exec_pty.c:896 src/exec_pty.c:903 src/exec_pty.c:910 +#: src/exec_pty.c:917 src/exec_pty.c:924 src/exec_pty.c:931 src/exec_pty.c:938 +#: src/exec_pty.c:945 src/exec_pty.c:953 src/load_plugins.c:157 +#: src/load_plugins.c:182 src/load_plugins.c:218 src/load_plugins.c:451 +#: src/load_plugins.c:457 src/parse_args.c:172 src/parse_args.c:193 +#: src/parse_args.c:267 src/parse_args.c:623 src/parse_args.c:645 +#: src/parse_args.c:670 src/preserve_fds.c:46 src/preserve_fds.c:131 +#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 src/selinux.c:489 +#: src/selinux.c:496 src/sesh.c:206 src/sesh.c:240 src/sesh.c:246 +#: src/sesh.c:253 src/sesh.c:259 src/sesh.c:470 src/sudo.c:639 src/sudo.c:704 +#: src/sudo.c:714 src/sudo.c:741 src/sudo.c:764 src/sudo.c:773 src/sudo.c:782 +#: src/sudo.c:799 src/sudo.c:841 src/sudo.c:851 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 #, c-format msgid "%s: %s" msgstr "%s: %s" #: lib/util/aix.c:272 lib/util/gidlist.c:66 lib/util/json.c:55 #: lib/util/json.c:184 lib/util/regex.c:113 lib/util/regex.c:121 -#: lib/util/sudo_conf.c:219 lib/util/sudo_conf.c:304 lib/util/sudo_conf.c:381 -#: lib/util/sudo_conf.c:665 src/conversation.c:81 src/exec_intercept.c:68 -#: src/exec_intercept.c:336 src/exec_intercept.c:359 src/exec_intercept.c:367 -#: src/exec_intercept.c:392 src/exec_intercept.c:398 src/exec_intercept.c:407 -#: src/exec_intercept.c:413 src/exec_intercept.c:478 src/exec_intercept.c:588 -#: src/exec_intercept.c:707 src/exec_monitor.c:458 src/exec_monitor.c:464 -#: src/exec_monitor.c:472 src/exec_monitor.c:480 src/exec_monitor.c:487 -#: src/exec_monitor.c:494 src/exec_monitor.c:501 src/exec_monitor.c:508 -#: src/exec_monitor.c:515 src/exec_monitor.c:522 src/exec_monitor.c:529 -#: src/exec_nopty.c:224 src/exec_nopty.c:233 src/exec_nopty.c:240 -#: src/exec_nopty.c:247 src/exec_nopty.c:254 src/exec_nopty.c:261 -#: src/exec_nopty.c:268 src/exec_nopty.c:275 src/exec_nopty.c:282 -#: src/exec_nopty.c:289 src/exec_nopty.c:296 src/exec_nopty.c:303 -#: src/exec_nopty.c:311 src/exec_preload.c:143 src/exec_preload.c:204 -#: src/exec_ptrace.c:632 src/exec_pty.c:845 src/exec_pty.c:854 -#: src/exec_pty.c:911 src/exec_pty.c:1265 src/exec_pty.c:1274 -#: src/exec_pty.c:1281 src/exec_pty.c:1288 src/exec_pty.c:1295 -#: src/exec_pty.c:1302 src/exec_pty.c:1309 src/exec_pty.c:1316 -#: src/exec_pty.c:1323 src/exec_pty.c:1330 src/exec_pty.c:1337 -#: src/exec_pty.c:1345 src/exec_pty.c:1811 src/load_plugins.c:156 -#: src/load_plugins.c:181 src/load_plugins.c:217 src/load_plugins.c:449 -#: src/load_plugins.c:455 src/parse_args.c:169 src/parse_args.c:191 -#: src/parse_args.c:264 src/parse_args.c:613 src/parse_args.c:635 -#: src/parse_args.c:660 src/preserve_fds.c:46 src/preserve_fds.c:131 -#: src/selinux.c:89 src/selinux.c:362 src/selinux.c:474 src/selinux.c:485 -#: src/sesh.c:113 src/sesh.c:411 src/sudo.c:230 src/sudo.c:639 src/sudo.c:891 -#: src/sudo.c:1100 src/sudo.c:1121 src/sudo.c:1414 src/sudo.c:1583 -#: src/sudo.c:1810 src/sudo.c:2144 src/sudo_edit.c:89 src/sudo_edit.c:149 -#: src/sudo_edit.c:429 src/sudo_edit.c:438 src/sudo_edit.c:539 -#: src/sudo_edit.c:546 src/sudo_edit.c:677 src/sudo_edit.c:697 -#: src/sudo_intercept_common.c:113 src/sudo_intercept_common.c:317 +#: lib/util/sudo_conf.c:220 lib/util/sudo_conf.c:305 lib/util/sudo_conf.c:382 +#: lib/util/sudo_conf.c:666 src/conversation.c:81 src/exec_intercept.c:111 +#: src/exec_intercept.c:344 src/exec_intercept.c:504 src/exec_intercept.c:566 +#: src/exec_intercept.c:682 src/exec_intercept.c:806 src/exec_iolog.c:124 +#: src/exec_iolog.c:135 src/exec_iolog.c:212 src/exec_monitor.c:458 +#: src/exec_monitor.c:464 src/exec_monitor.c:472 src/exec_monitor.c:480 +#: src/exec_monitor.c:487 src/exec_monitor.c:494 src/exec_monitor.c:501 +#: src/exec_monitor.c:508 src/exec_monitor.c:515 src/exec_monitor.c:522 +#: src/exec_monitor.c:529 src/exec_nopty.c:227 src/exec_nopty.c:236 +#: src/exec_nopty.c:243 src/exec_nopty.c:250 src/exec_nopty.c:257 +#: src/exec_nopty.c:264 src/exec_nopty.c:271 src/exec_nopty.c:278 +#: src/exec_nopty.c:285 src/exec_nopty.c:292 src/exec_nopty.c:299 +#: src/exec_nopty.c:306 src/exec_nopty.c:314 src/exec_nopty.c:322 +#: src/exec_preload.c:341 src/exec_ptrace.c:474 src/exec_ptrace.c:767 +#: src/exec_ptrace.c:982 src/exec_ptrace.c:1638 src/exec_pty.c:506 +#: src/exec_pty.c:873 src/exec_pty.c:882 src/exec_pty.c:889 src/exec_pty.c:896 +#: src/exec_pty.c:903 src/exec_pty.c:910 src/exec_pty.c:917 src/exec_pty.c:924 +#: src/exec_pty.c:931 src/exec_pty.c:938 src/exec_pty.c:945 src/exec_pty.c:953 +#: src/load_plugins.c:157 src/load_plugins.c:182 src/load_plugins.c:218 +#: src/load_plugins.c:451 src/load_plugins.c:457 src/parse_args.c:172 +#: src/parse_args.c:194 src/parse_args.c:267 src/parse_args.c:623 +#: src/parse_args.c:645 src/parse_args.c:670 src/preserve_fds.c:46 +#: src/preserve_fds.c:131 src/selinux.c:89 src/selinux.c:362 src/selinux.c:472 +#: src/selinux.c:489 src/selinux.c:496 src/sesh.c:206 src/sesh.c:471 +#: src/sudo.c:230 src/sudo.c:639 src/sudo.c:884 src/sudo.c:1112 +#: src/sudo.c:1133 src/sudo.c:1426 src/sudo.c:1595 src/sudo.c:1822 +#: src/sudo.c:2156 src/sudo_edit.c:89 src/sudo_edit.c:149 src/sudo_edit.c:429 +#: src/sudo_edit.c:438 src/sudo_edit.c:538 src/sudo_edit.c:545 +#: src/sudo_edit.c:673 src/sudo_edit.c:693 src/sudo_intercept_common.c:115 +#: src/sudo_intercept_common.c:340 msgid "unable to allocate memory" msgstr "не вдалося отримати потрібний об’єм пам’яті" @@ -115,23 +114,23 @@ msgstr "не вдалося виконати stat для %.*s" msgid "%.*s exists but is not a directory (0%o)" msgstr "%.*s існує, але не є каталогом (0%o)" -#: lib/util/mkdir_parents.c:102 lib/util/sudo_conf.c:704 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:559 +#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:677 +#: lib/util/sudo_conf.c:689 lib/util/sudo_conf.c:715 src/selinux.c:235 +#: src/selinux.c:265 src/sudo.c:371 src/sudo_edit.c:494 src/sudo_edit.c:557 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: lib/util/mkdir_parents.c:119 lib/util/mkdir_parents.c:127 -#: lib/util/mkdir_parents.c:136 -#, c-format -msgid "unable to open %.*s" -msgstr "не вдалося відкрити %.*s" - -#: lib/util/mkdir_parents.c:157 +#: lib/util/mkdir_parents.c:120 lib/util/mkdir_parents.c:160 #, c-format msgid "unable to mkdir %.*s" msgstr "не вдалося створити каталог %.*s" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "не вдалося відкрити %.*s" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "задовгий формальний вираз" @@ -140,8 +139,8 @@ msgstr "задовгий формальний вираз" msgid "Unknown signal" msgstr "Невідомий сигнал" -#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 -#: lib/util/strtonum.c:187 src/sesh.c:146 src/sesh.c:159 +#: lib/util/strtoid.c:84 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 src/sesh.c:240 src/sesh.c:253 msgid "invalid value" msgstr "некоректне значення" @@ -153,86 +152,86 @@ msgstr "надто велике значення" msgid "value too small" msgstr "надто мале значення" -#: lib/util/sudo_conf.c:237 +#: lib/util/sudo_conf.c:238 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "некоректне значення Path, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:403 lib/util/sudo_conf.c:419 lib/util/sudo_conf.c:472 +#: lib/util/sudo_conf.c:404 lib/util/sudo_conf.c:420 lib/util/sudo_conf.c:473 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "некоректне значення %s, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:440 +#: lib/util/sudo_conf.c:441 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "непідтримуване джерело групи, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:456 +#: lib/util/sudo_conf.c:457 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "некоректна максимальна кількість груп, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:681 src/copy_file.c:150 -#, c-format -msgid "unable to stat %s" -msgstr "не вдалося виконати stat для %s" - -#: lib/util/sudo_conf.c:684 +#: lib/util/sudo_conf.c:692 #, c-format msgid "%s is not a regular file" msgstr "%s не є звичайним файлом" -#: lib/util/sudo_conf.c:687 src/copy_file.c:163 +#: lib/util/sudo_conf.c:695 src/copy_file.c:164 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s належить uid %u, має належати %u" -#: lib/util/sudo_conf.c:691 +#: lib/util/sudo_conf.c:699 #, c-format msgid "%s is world writable" msgstr "Запис до «%s» можливий для довільного користувача" -#: lib/util/sudo_conf.c:694 +#: lib/util/sudo_conf.c:702 #, c-format msgid "%s is group writable" msgstr "Запис до «%s» може здійснювати будь-який користувач з групи" -#: src/apparmor.c:79 +#: src/apparmor.c:85 msgid "failed to determine AppArmor confinement" msgstr "не вдалося визначити контейнер AppArmor" -#: src/apparmor.c:87 +#: src/apparmor.c:93 #, c-format msgid "unable to change AppArmor profile to %s" msgstr "не вдалося змінити профіль AppArmor на %s" -#: src/copy_file.c:93 +#: src/copy_file.c:94 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " msgstr "%s: обрізати %s до нуля байтів? (y/n) [n] " -#: src/copy_file.c:97 +#: src/copy_file.c:98 #, c-format msgid "not overwriting %s" msgstr "не перезаписуємо %s" -#: src/copy_file.c:119 +#: src/copy_file.c:120 #, c-format msgid "unable to read from %s" msgstr "не вдалося виконати читання з %s" -#: src/copy_file.c:136 src/sudo_edit.c:320 +#: src/copy_file.c:137 src/sudo_edit.c:320 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" -#: src/copy_file.c:154 src/sesh.c:218 src/sudo_edit.c:197 +#: src/copy_file.c:151 +#, c-format +msgid "unable to stat %s" +msgstr "не вдалося виконати stat для %s" + +#: src/copy_file.c:155 src/sesh.c:312 src/sudo_edit.c:197 #, c-format msgid "%s: not a regular file" msgstr "%s: не є звичайним файлом" -#: src/copy_file.c:158 +#: src/copy_file.c:159 #, c-format msgid "%s: bad file mode: 0%o" msgstr "%s: помилковий режим доступу до файла: 0%o" @@ -241,60 +240,59 @@ msgstr "%s: помилковий режим доступу до файла: 0%o" msgid "unable to restore current working directory" msgstr "не вдалося відновити поточний робочий каталог" -#: src/exec.c:103 +#: src/exec.c:111 msgid "unable to set privileges" msgstr "не вдалося встановити привілеї" -#: src/exec.c:109 src/exec.c:114 +#: src/exec.c:117 src/exec.c:122 msgid "unable to set limit privileges" msgstr "не вдалося встановити привілеї щодо обмеження" -#: src/exec.c:137 +#: src/exec.c:145 #, c-format msgid "unknown login class %s" msgstr "невідомий клас входу %s" -#: src/exec.c:149 +#: src/exec.c:157 msgid "unable to set user context" msgstr "не вдалося встановити контекст користувача" -#: src/exec.c:165 +#: src/exec.c:173 msgid "unable to set process priority" msgstr "не вдалося встановити пріоритет процесу" -#: src/exec.c:182 +#: src/exec.c:190 #, c-format msgid "unable to change root to %s" msgstr "не вдалося змінити root на %s" -#: src/exec.c:195 src/exec.c:201 src/exec.c:208 +#: src/exec.c:203 src/exec.c:209 src/exec.c:216 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не вдалося змінити uid користувача, від імені якого відбувається виконання (%u, %u)" -#: src/exec.c:226 +#: src/exec.c:238 src/sesh.c:199 #, c-format msgid "unable to change directory to %s" msgstr "не вдалося змінити каталог на %s" -#: src/exec.c:230 +#: src/exec.c:243 #, c-format msgid "starting from %s" msgstr "починаючи з %s" -#: src/exec.c:312 src/exec_monitor.c:575 src/exec_monitor.c:577 -#: src/exec_monitor.c:648 src/exec_nopty.c:439 src/exec_pty.c:586 -#: src/exec_pty.c:1447 src/exec_pty.c:1449 src/signal.c:144 src/signal.c:151 -#: src/signal.c:165 src/suspend_nopty.c:89 +#: src/exec.c:278 src/exec.c:351 src/exec_monitor.c:567 src/exec_monitor.c:569 +#: src/exec_pty.c:225 src/exec_pty.c:1017 src/exec_pty.c:1019 src/signal.c:144 +#: src/signal.c:151 src/signal.c:165 src/suspend_nopty.c:93 #, c-format msgid "unable to set handler for signal %d" msgstr "не вдалося встановити обробник для сигналу %d" -#: src/exec.c:391 +#: src/exec.c:422 msgid "intercept mode is not supported with SELinux RBAC on this system" msgstr "у цій системі з RBAC SELinux не передбачено підтримки режиму перехоплення" -#: src/exec.c:396 +#: src/exec.c:427 msgid "unable to log sub-commands with SELinux RBAC on this system" msgstr "у цій системі неможливо записувати до журналу підкоманди з RBAC SELinux" @@ -302,58 +300,84 @@ msgstr "у цій системі неможливо записувати до ж msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "не вдалося вилучити PRIV_PROC_EXEC з PRIV_LIMIT" -#: src/exec_intercept.c:95 src/exec_intercept.c:674 src/exec_intercept.c:864 -#: src/exec_intercept.c:876 src/exec_monitor.c:466 src/exec_monitor.c:474 -#: src/exec_monitor.c:482 src/exec_monitor.c:489 src/exec_monitor.c:496 -#: src/exec_monitor.c:503 src/exec_monitor.c:510 src/exec_monitor.c:517 -#: src/exec_monitor.c:524 src/exec_monitor.c:531 src/exec_nopty.c:226 -#: src/exec_nopty.c:235 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:298 src/exec_nopty.c:305 src/exec_nopty.c:313 -#: src/exec_pty.c:711 src/exec_pty.c:716 src/exec_pty.c:813 src/exec_pty.c:820 -#: src/exec_pty.c:917 src/exec_pty.c:1267 src/exec_pty.c:1276 -#: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1297 -#: src/exec_pty.c:1304 src/exec_pty.c:1311 src/exec_pty.c:1318 -#: src/exec_pty.c:1325 src/exec_pty.c:1332 src/exec_pty.c:1339 -#: src/exec_pty.c:1764 src/exec_pty.c:1774 src/exec_pty.c:1819 -#: src/exec_pty.c:1826 src/exec_pty.c:1853 +#: src/exec_intercept.c:70 src/exec_iolog.c:165 src/exec_iolog.c:175 +#: src/exec_iolog.c:220 src/exec_iolog.c:227 src/exec_iolog.c:254 +#: src/exec_monitor.c:466 src/exec_monitor.c:474 src/exec_monitor.c:482 +#: src/exec_monitor.c:489 src/exec_monitor.c:496 src/exec_monitor.c:503 +#: src/exec_monitor.c:510 src/exec_monitor.c:517 src/exec_monitor.c:524 +#: src/exec_monitor.c:531 src/exec_nopty.c:229 src/exec_nopty.c:238 +#: src/exec_nopty.c:245 src/exec_nopty.c:252 src/exec_nopty.c:259 +#: src/exec_nopty.c:266 src/exec_nopty.c:273 src/exec_nopty.c:280 +#: src/exec_nopty.c:287 src/exec_nopty.c:294 src/exec_nopty.c:301 +#: src/exec_nopty.c:308 src/exec_nopty.c:316 src/exec_nopty.c:324 +#: src/exec_nopty.c:383 src/exec_nopty.c:449 src/exec_pty.c:355 +#: src/exec_pty.c:457 src/exec_pty.c:512 src/exec_pty.c:875 src/exec_pty.c:884 +#: src/exec_pty.c:891 src/exec_pty.c:898 src/exec_pty.c:905 src/exec_pty.c:912 +#: src/exec_pty.c:919 src/exec_pty.c:926 src/exec_pty.c:933 src/exec_pty.c:940 +#: src/exec_pty.c:947 msgid "unable to add event to queue" msgstr "не вдалося додати подію до черги обробки" -#: src/exec_intercept.c:344 src/sudo.c:1226 src/sudo.c:1271 src/sudo.c:1315 +#: src/exec_intercept.c:317 src/sudo.c:1018 +msgid "command not set by the security policy" +msgstr "команду не встановлено правилами захисту" + +#: src/exec_intercept.c:393 src/exec_intercept.c:421 src/sudo.c:1238 +#: src/sudo.c:1283 src/sudo.c:1327 msgid "command rejected by policy" msgstr "у виконанні команди відмовлено згідно правил" -#: src/exec_intercept.c:437 src/sudo.c:1231 src/sudo.c:1276 src/sudo.c:1320 -#: src/sudo.c:1394 +#: src/exec_intercept.c:491 src/sudo.c:1925 +msgid "approval plugin error" +msgstr "помилка у додатку підтвердження" + +#: src/exec_intercept.c:508 src/sudo.c:1243 src/sudo.c:1288 src/sudo.c:1332 +#: src/sudo.c:1406 msgid "policy plugin error" msgstr "помилка у додатку правил" -#: src/exec_intercept.c:462 +#: src/exec_intercept.c:543 msgid "invalid PolicyCheckRequest" msgstr "некоректне значення PolicyCheckRequest" -#: src/exec_intercept.c:584 +#: src/exec_intercept.c:678 #, c-format msgid "client request too large: %zu" msgstr "надто великий запит клієнта: %zu" -#: src/exec_intercept.c:622 +#: src/exec_intercept.c:720 #, c-format msgid "unable to unpack %s size %zu" msgstr "не вдалося розпакувати %s, розмір %zu" -#: src/exec_intercept.c:665 +#: src/exec_intercept.c:768 #, c-format msgid "unexpected type_case value %d in %s from %s" msgstr "неочікуване значення type_case %d у %s від %s" -#: src/exec_intercept.c:695 +#: src/exec_intercept.c:794 #, c-format msgid "server message too large: %zu" msgstr "надто велике повідомлення сервера: %zu" +#: src/exec_iolog.c:323 src/exec_iolog.c:363 src/exec_iolog.c:403 +#: src/exec_iolog.c:454 src/exec_iolog.c:505 +msgid "I/O plugin error" +msgstr "Помилка у додатку введення-виведення" + +#: src/exec_iolog.c:327 src/exec_iolog.c:367 src/exec_iolog.c:407 +#: src/exec_iolog.c:458 src/exec_iolog.c:509 +msgid "command rejected by I/O plugin" +msgstr "відмова у виконання команди від додатка введення-виведення" + +#: src/exec_iolog.c:556 +msgid "error logging suspend" +msgstr "помилка під час призупинення ведення журналу" + +#: src/exec_iolog.c:591 +msgid "error changing window size" +msgstr "помилка під час зміни розмірів вікна" + #: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "помилка під час спроби читання з пари сокетів" @@ -363,224 +387,213 @@ msgstr "помилка під час спроби читання з пари с msgid "unexpected reply type on backchannel: %d" msgstr "неочікуваний тип відповіді на зворотному каналі: %d" -#: src/exec_monitor.c:593 +#: src/exec_monitor.c:585 msgid "unable to set controlling tty" msgstr "не вдалося встановити tty для керування" -#: src/exec_monitor.c:601 src/exec_nopty.c:382 src/exec_pty.c:1526 -#: src/exec_pty.c:1547 src/exec_pty.c:1567 src/tgetpass.c:305 +#: src/exec_monitor.c:593 src/exec_nopty.c:494 src/exec_nopty.c:504 +#: src/exec_nopty.c:514 src/exec_nopty.c:548 src/exec_pty.c:1088 +#: src/exec_pty.c:1109 src/exec_pty.c:1129 src/tgetpass.c:305 msgid "unable to create pipe" msgstr "не вдалося створити канал" -#: src/exec_monitor.c:611 +#: src/exec_monitor.c:603 msgid "unable to receive message from parent" msgstr "не вдалося отримати повідомлення від батьківського процесу" -#: src/exec_monitor.c:627 src/exec_nopty.c:422 src/exec_pty.c:1605 +#: src/exec_monitor.c:619 src/exec_nopty.c:591 src/exec_pty.c:1167 #: src/sudo_edit.c:361 src/tgetpass.c:309 msgid "unable to fork" msgstr "не вдалося створити відгалуження" -#: src/exec_monitor.c:631 src/exec_monitor.c:749 src/exec_nopty.c:518 +#: src/exec_monitor.c:623 src/exec_monitor.c:721 src/exec_nopty.c:696 msgid "unable to restore tty label" msgstr "не вдалося відновити позначку tty" -#: src/exec_monitor.c:664 src/sesh.c:123 src/sudo.c:1177 +#: src/exec_monitor.c:636 src/sesh.c:217 src/sudo.c:1189 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" -#: src/exec_nopty.c:376 src/exec_pty.c:1456 +#: src/exec_nopty.c:542 src/exec_pty.c:1026 msgid "policy plugin failed session initialization" msgstr "не вдалося виконати ініціалізацію сеансу через додаток правил" -#: src/exec_nopty.c:391 src/exec_pty.c:1425 src/exec_pty.c:1434 +#: src/exec_nopty.c:557 src/exec_pty.c:995 src/exec_pty.c:1004 msgid "unable to create sockets" msgstr "не вдалося створити сокети" -#: src/exec_nopty.c:506 src/exec_pty.c:1703 +#: src/exec_nopty.c:684 src/exec_pty.c:1265 msgid "error in event loop" msgstr "помилка у циклі обробки подій" -#: src/exec_ptrace.c:647 -msgid "insufficient space for execve arguments" -msgstr "недостатньо місця для аргументів execve" - -#: src/exec_ptrace.c:658 src/exec_ptrace.c:668 src/exec_ptrace.c:678 +#: src/exec_preload.c:165 src/net_ifs.c:206 src/net_ifs.c:372 +#: src/net_ifs.c:433 src/net_ifs.c:620 src/net_ifs.c:851 src/sudo.c:486 +#: src/sudo_edit.c:398 src/sudo_edit.c:406 #, c-format -msgid "unable to read execve %s for process %d" -msgstr "не вдалося прочитати %s execve для процесу %d" +msgid "internal error, %s overflow" +msgstr "внутрішня помилка, переповнення %s" -#: src/exec_ptrace.c:714 src/exec_ptrace.c:739 src/exec_ptrace.c:1194 +#: src/exec_ptrace.c:1078 src/exec_ptrace.c:1103 src/exec_ptrace.c:1909 #, c-format msgid "unable to set registers for process %d" msgstr "не вдалося встановити регістри для процесу %d" -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 +#: src/exec_ptrace.c:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 #, c-format msgid "process %d exited unexpectedly" msgstr "процес %d неочікувано завершив роботу" -#: src/exec_ptrace.c:843 +#: src/exec_ptrace.c:1207 msgid "unable to set seccomp filter" msgstr "не вдалося встановити фільтр seccomp" -#: src/exec_ptrace.c:934 +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "аргумент інтерпретатора , мало бути «%s», маємо «%s»" + +#: src/exec_ptrace.c:1503 #, c-format msgid "pathname mismatch, expected \"%s\", got \"%s\"" msgstr "невідповідність шляхів: мало бути «%s», маємо «%s»" -#: src/exec_ptrace.c:942 src/exec_ptrace.c:948 src/exec_ptrace.c:954 -#: src/exec_ptrace.c:962 src/exec_ptrace.c:968 src/exec_ptrace.c:974 +#: src/exec_ptrace.c:1512 src/exec_ptrace.c:1519 src/exec_ptrace.c:1532 +#: src/exec_ptrace.c:1540 src/exec_ptrace.c:1546 src/exec_ptrace.c:1552 #, c-format msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" msgstr "невідповідність %s[%d]: мало бути «%s», маємо «%s»" -#: src/exec_ptrace.c:1013 +#: src/exec_ptrace.c:1619 +#, c-format +msgid "process %d unexpected status 0x%x" +msgstr "неочікуваний стан процесу %d: 0x%x" + +#: src/exec_ptrace.c:1711 #, c-format msgid "unable to get event message for process %d" msgstr "не вдалося отримати повідомлення події для процесу %d" -#: src/exec_ptrace.c:1019 +#: src/exec_ptrace.c:1718 #, c-format msgid "unable to get registers for process %d" msgstr "не вдалося отримати регістри для процесу %d" -#: src/exec_pty.c:163 +#: src/exec_pty.c:103 msgid "unable to allocate pty" msgstr "не вдалося розмістити pty" -#: src/exec_pty.c:227 src/exec_pty.c:267 src/exec_pty.c:307 src/exec_pty.c:358 -#: src/exec_pty.c:409 -msgid "I/O plugin error" -msgstr "Помилка у додатку введення-виведення" - -#: src/exec_pty.c:231 src/exec_pty.c:271 src/exec_pty.c:311 src/exec_pty.c:362 -#: src/exec_pty.c:413 -msgid "command rejected by I/O plugin" -msgstr "відмова у виконання команди від додатка введення-виведення" - -#: src/exec_pty.c:460 -msgid "error logging suspend" -msgstr "помилка під час призупинення ведення журналу" - -#: src/exec_pty.c:494 -msgid "error changing window size" -msgstr "помилка під час зміни розмірів вікна" - -#: src/exec_pty.c:624 src/signal.c:101 src/suspend_nopty.c:95 +#: src/exec_pty.c:263 src/signal.c:101 src/suspend_nopty.c:99 #, c-format msgid "unable to restore handler for signal %d" msgstr "не вдалося відновити обробник для сигналу %d" -#: src/exec_pty.c:1651 +#: src/exec_pty.c:1213 msgid "unable to send message to monitor process" msgstr "не вдалося надіслати повідомлення до процесу аудиту" -#: src/load_plugins.c:108 src/load_plugins.c:122 src/load_plugins.c:128 -#: src/load_plugins.c:277 src/load_plugins.c:287 src/load_plugins.c:297 -#: src/load_plugins.c:344 +#: src/load_plugins.c:109 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:279 src/load_plugins.c:289 src/load_plugins.c:299 +#: src/load_plugins.c:346 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "помилка у %s, рядок %d під час спроби завантаження додатка «%s»" -#: src/load_plugins.c:124 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s має належати користувачеві з uid %d" -#: src/load_plugins.c:130 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s має бути доступним до запису лише для власника" -#: src/load_plugins.c:241 src/load_plugins.c:312 +#: src/load_plugins.c:243 src/load_plugins.c:314 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "ігноруємо повторний запис додатка, «%s», у %s, рядок %d" -#: src/load_plugins.c:279 +#: src/load_plugins.c:281 #, c-format msgid "unable to load %s: %s" msgstr "не вдалося завантажити %s: %s" -#: src/load_plugins.c:289 +#: src/load_plugins.c:291 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "не вдалося знайти символ «%s» у %s" -#: src/load_plugins.c:299 +#: src/load_plugins.c:301 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "несумісна основна версія додатка, %d, (мало бути %d) у %s" -#: src/load_plugins.c:317 +#: src/load_plugins.c:319 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ігноруємо додаток правил, «%s», у %s, рядок %d" -#: src/load_plugins.c:320 +#: src/load_plugins.c:322 msgid "only a single policy plugin may be specified" msgstr "можна визначати лише один додаток обробки правил" -#: src/load_plugins.c:346 +#: src/load_plugins.c:348 #, c-format msgid "unknown plugin type %d found in %s" msgstr "у %2$s виявлено невідомий тип додатка, %1$d" -#: src/load_plugins.c:529 +#: src/load_plugins.c:531 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "до додатка правил %s не включено метод check_policy" -#: src/net_ifs.c:210 src/net_ifs.c:376 src/net_ifs.c:437 src/net_ifs.c:624 -#: src/net_ifs.c:855 src/sudo.c:486 src/sudo_edit.c:398 src/sudo_edit.c:406 -#, c-format -msgid "internal error, %s overflow" -msgstr "внутрішня помилка, переповнення %s" - -#: src/parse_args.c:211 +#: src/parse_args.c:214 #, c-format msgid "invalid environment variable name: %s" msgstr "некоректна назва змінної середовища: %s" -#: src/parse_args.c:314 +#: src/parse_args.c:317 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргументом параметра -C mмає бути число не менше за 3" -#: src/parse_args.c:545 +#: src/parse_args.c:554 msgid "you may not specify both the -i and -s options" msgstr "не можна одночасно вказувати параметри -i і -s" -#: src/parse_args.c:550 +#: src/parse_args.c:559 msgid "you may not specify both the -i and -E options" msgstr "не можна одночасно вказувати параметри -i і -E" -#: src/parse_args.c:560 +#: src/parse_args.c:569 msgid "the -E option is not valid in edit mode" msgstr "не можна використовувати -E у режимі редагування" -#: src/parse_args.c:563 +#: src/parse_args.c:572 msgid "you may not specify environment variables in edit mode" msgstr "не можна вказувати змінні середовища у режимі редагування" -#: src/parse_args.c:573 +#: src/parse_args.c:582 msgid "the -U option may only be used with the -l option" msgstr "параметр -U можна використовувати лише разом з параметром -l" -#: src/parse_args.c:577 +#: src/parse_args.c:586 msgid "the -A and -S options may not be used together" msgstr "параметри -A і -S не можна використовувати одночасно" -#: src/parse_args.c:674 +#: src/parse_args.c:684 msgid "sudoedit is not supported on this platform" msgstr "підтримки sudoedit для цієї платформи не передбачено" -#: src/parse_args.c:757 +#: src/parse_args.c:767 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:773 +#: src/parse_args.c:780 +msgid "Only one of the -K, -k or -N options may be specified" +msgstr "Може бути вказано лише один параметр з набору -K, -k і -N" + +#: src/parse_args.c:796 #, c-format msgid "" "%s - edit files as another user\n" @@ -589,7 +602,7 @@ msgstr "" "%s — редагувати файли від імені іншого користувача\n" "\n" -#: src/parse_args.c:775 +#: src/parse_args.c:798 #, c-format msgid "" "%s - execute a command as another user\n" @@ -598,7 +611,7 @@ msgstr "" "%s — виконати команду від імені іншого користувача\n" "\n" -#: src/parse_args.c:781 +#: src/parse_args.c:804 msgid "" "\n" "Options:\n" @@ -606,131 +619,131 @@ msgstr "" "\n" "Параметри:\n" -#: src/parse_args.c:783 +#: src/parse_args.c:806 msgid "use a helper program for password prompting" msgstr "використовувати допоміжну програму для запитів щодо пароля" -#: src/parse_args.c:786 +#: src/parse_args.c:809 msgid "use specified BSD authentication type" msgstr "використовувати вказаний тип розпізнавання BSD" -#: src/parse_args.c:790 +#: src/parse_args.c:813 msgid "run command in the background" msgstr "виконати команду у фоновому режимі" -#: src/parse_args.c:793 +#: src/parse_args.c:816 msgid "ring bell when prompting" msgstr "звук дзвінка під час запиту" -#: src/parse_args.c:795 +#: src/parse_args.c:818 msgid "close all file descriptors >= num" msgstr "закрити всі дескриптори файлів >= num" -#: src/parse_args.c:798 +#: src/parse_args.c:821 msgid "run command with the specified BSD login class" msgstr "виконати команду з вказаним класом доступу BSD" -#: src/parse_args.c:801 +#: src/parse_args.c:824 msgid "change the working directory before running command" msgstr "змінити робочий каталог перед виконанням команди" -#: src/parse_args.c:804 +#: src/parse_args.c:827 msgid "preserve user environment when running command" msgstr "зберегти середовище користувача на час виконання команди" -#: src/parse_args.c:806 +#: src/parse_args.c:829 msgid "preserve specific environment variables" msgstr "зберегти вказані змінні середовища" -#: src/parse_args.c:808 +#: src/parse_args.c:831 msgid "edit files instead of running a command" msgstr "редагувати файли замість виконання команди" -#: src/parse_args.c:811 +#: src/parse_args.c:834 msgid "run command as the specified group name or ID" msgstr "виконати команду від імені групи користувачів, вказаної за назвою або ідентифікатором" -#: src/parse_args.c:814 +#: src/parse_args.c:837 msgid "set HOME variable to target user's home dir" msgstr "встановити для змінної HOME значення домашнього каталогу вказаного користувача." -#: src/parse_args.c:817 +#: src/parse_args.c:840 msgid "display help message and exit" msgstr "показати довідкове повідомлення і завершити роботу" -#: src/parse_args.c:819 +#: src/parse_args.c:842 msgid "run command on host (if supported by plugin)" msgstr "виконати команду на комп’ютері (якщо підтримується додатком)" -#: src/parse_args.c:822 +#: src/parse_args.c:845 msgid "run login shell as the target user; a command may also be specified" msgstr "запустити оболонку для входу до системи від імені вказаного користувача; слід вказати команду запуску" -#: src/parse_args.c:824 +#: src/parse_args.c:847 msgid "remove timestamp file completely" msgstr "повністю вилучити файл часової позначки" -#: src/parse_args.c:827 +#: src/parse_args.c:850 msgid "invalidate timestamp file" msgstr "позбавити чинності файл часової позначки" -#: src/parse_args.c:830 +#: src/parse_args.c:853 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "показати список прав доступу користувача або перевірити певну команду; подвоєння параметра призводить до виведення додаткових даних" -#: src/parse_args.c:833 +#: src/parse_args.c:856 msgid "non-interactive mode, no prompts are used" msgstr "неінтерактивний режим, не просити користувача відповідати на питання" -#: src/parse_args.c:836 +#: src/parse_args.c:859 msgid "preserve group vector instead of setting to target's" msgstr "зберегти вектор групи, не встановлювати вектор вказаного користувача" -#: src/parse_args.c:839 +#: src/parse_args.c:862 msgid "use the specified password prompt" msgstr "використовувати вказаний інструмент отримання паролів" -#: src/parse_args.c:841 +#: src/parse_args.c:864 msgid "change the root directory before running command" msgstr "змінити кореневий каталог перед виконанням команди" -#: src/parse_args.c:844 +#: src/parse_args.c:867 msgid "create SELinux security context with specified role" msgstr "створити контекст захисту SELinux з вказаною роллю" -#: src/parse_args.c:847 +#: src/parse_args.c:870 msgid "read password from standard input" msgstr "прочитати пароль зі стандартного джерела вхідних даних" -#: src/parse_args.c:850 +#: src/parse_args.c:873 msgid "run shell as the target user; a command may also be specified" msgstr "виконати командну оболонку від імені вказаного користувача; слід також вказати команду" -#: src/parse_args.c:854 +#: src/parse_args.c:877 msgid "create SELinux security context with specified type" msgstr "створити контекст захисту SELinux вказаного типу" -#: src/parse_args.c:857 +#: src/parse_args.c:880 msgid "terminate command after the specified time limit" msgstr "перервати виконання команди щойно буде перевищено вказане обмеження за часом" -#: src/parse_args.c:860 +#: src/parse_args.c:883 msgid "in list mode, display privileges for user" msgstr "у режимі списку, показати права доступу користувача" -#: src/parse_args.c:863 +#: src/parse_args.c:886 msgid "run command (or edit file) as specified user name or ID" msgstr "виконати команду (або редагувати файл) від імені користувача, вказаного за іменем або ідентифікатором" -#: src/parse_args.c:865 +#: src/parse_args.c:888 msgid "display version information and exit" msgstr "показати дані щодо версії і завершити роботу" -#: src/parse_args.c:868 +#: src/parse_args.c:891 msgid "update user's timestamp without running a command" msgstr "оновити штамп часу користувача без виконання команди" -#: src/parse_args.c:871 +#: src/parse_args.c:894 msgid "stop processing command line arguments" msgstr "зупинити обробку аргументів командного рядка" @@ -830,37 +843,42 @@ msgstr "не вдалося встановити контекст виконан msgid "unable to set key creation context to %s" msgstr "не вдалося встановити контекст ключа створення у значення %s" -#: src/sesh.c:72 -msgid "requires at least one argument" -msgstr "потребує принаймні одного аргументу" +#: src/sesh.c:114 src/sesh.c:134 +msgid "Only one of the -c or -i options may be specified" +msgstr "Може бути вказано лише один параметр, -c або -i" -#: src/sesh.c:104 +#: src/sesh.c:129 #, c-format msgid "invalid file descriptor number: %s" msgstr "некоректний номер дескриптора файла: %s" -#: src/sesh.c:118 +#: src/sesh.c:167 src/sesh.c:171 src/sesh.c:175 #, c-format -msgid "unable to run %s as a login shell" -msgstr "%s не можна працювати як оболонка для входу" +msgid "The -%c option may not be used in edit mode." +msgstr "Параметром -%c не можна користуватися у режимі редагування." -#: src/sesh.c:200 src/sesh.c:300 src/sudo_edit.c:204 +#: src/sesh.c:184 src/sesh.c:189 +#, c-format +msgid "The -%c option may only be used in edit mode." +msgstr "Параметром -%c можна скористатися лише у режимі редагування." + +#: src/sesh.c:294 src/sesh.c:394 src/sudo_edit.c:204 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: не можна редагувати символічні посилання" -#: src/sesh.c:203 src/sesh.c:303 src/sudo_edit.c:207 +#: src/sesh.c:297 src/sesh.c:397 src/sudo_edit.c:207 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: не можна редагувати файли у непридатному до запису каталозі" -#: src/sesh.c:287 src/sesh.c:308 src/sesh.c:317 src/sesh.c:325 +#: src/sesh.c:381 src/sesh.c:402 src/sesh.c:411 src/sesh.c:419 #: src/sudo_edit.c:331 #, c-format msgid "contents of edit session left in %s" msgstr "дані сеансу редагування залишилися у %s" -#: src/sesh.c:416 src/sudo_edit.c:94 +#: src/sesh.c:476 src/sudo_edit.c:94 msgid "unable to get group list" msgstr "не вдалося отримати список груп" @@ -944,118 +962,122 @@ msgstr "вас немає у базі даних %s" msgid "unable to determine tty" msgstr "не вдалося визначити tty" -#: src/sudo.c:925 +#: src/sudo.c:918 msgid "The \"no new privileges\" flag is set, which prevents sudo from running as root." msgstr "Встановлено прапорець «без нових привілеїв», який забороняє запуск sudo від імені користувача root." -#: src/sudo.c:927 +#: src/sudo.c:920 msgid "If sudo is running in a container, you may need to adjust the container configuration to disable the flag." msgstr "Якщо sudo запущено у контейнері, вам, можливо, слід скоригувати налаштування контейнера, щоб вимкнути цей прапорець." -#: src/sudo.c:961 +#: src/sudo.c:954 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s має належати користувачеві з uid %d, крім того, має бути встановлено біт setuid" -#: src/sudo.c:964 +#: src/sudo.c:957 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "поточним uid не є %d. Можливо %s зберігається у файловій системі зі встановленим параметром «nosuid» або у файловій системі NFS без прав доступу root?" -#: src/sudo.c:970 +#: src/sudo.c:963 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "поточним uid не є %d, sudo встановлено з ідентифікатором користувача root?" -#: src/sudo.c:986 src/tgetpass.c:331 +#: src/sudo.c:979 src/tgetpass.c:331 msgid "unable to set supplementary group IDs" msgstr "не вдалося встановити ідентифікатори додаткових груп" -#: src/sudo.c:993 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не вдалося встановити ефективний ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:999 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не вдалося встановити ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:1042 +#: src/sudo.c:1022 +msgid "argv not set by the security policy" +msgstr "argv не встановлено правилами захисту" + +#: src/sudo.c:1026 +msgid "envp not set by the security policy" +msgstr "envp не встановлено правилами захисту" + +#: src/sudo.c:1048 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочікувана умова переривання дочірнього процесу: %d" -#: src/sudo.c:1149 +#: src/sudo.c:1161 msgid "unable to initialize policy plugin" msgstr "не вдалося ініціалізувати додаток правил" -#: src/sudo.c:1211 +#: src/sudo.c:1223 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "до додатка правил %s не включено метод check_policy" -#: src/sudo.c:1257 +#: src/sudo.c:1269 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "у додатку правил %s не передбачено підтримки побудови списку прав доступу" -#: src/sudo.c:1301 +#: src/sudo.c:1313 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "у додатку правил %s не передбачено підтримки параметра -v" -#: src/sudo.c:1339 +#: src/sudo.c:1351 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "у додатку правил %s не передбачено підтримки параметрів -k/-K" -#: src/sudo.c:1468 +#: src/sudo.c:1480 #, c-format msgid "error initializing I/O plugin %s" msgstr "помилка під час спроби ініціалізації додатка введення/виведення даних %s" -#: src/sudo.c:1471 +#: src/sudo.c:1483 msgid "error initializing I/O plugin" msgstr "помилка під час спроби ініціалізації додатка введення/виведення даних" -#: src/sudo.c:1620 +#: src/sudo.c:1632 #, c-format msgid "error initializing audit plugin %s" msgstr "помилка під час спроби ініціалізації додатка аудиту %s" -#: src/sudo.c:1699 +#: src/sudo.c:1711 #, c-format msgid "%s: unable to log error event%s%s" msgstr "%s: не вдалося записати до журналу подію помилки%s%s" -#: src/sudo.c:1735 +#: src/sudo.c:1747 #, c-format msgid "%s: unable to log accept event%s%s" msgstr "%s: не вдалося записати до журналу подію прийняття%s%s" -#: src/sudo.c:1740 src/sudo.c:1778 +#: src/sudo.c:1752 src/sudo.c:1790 msgid "audit plugin error" msgstr "помилка у додатку аудиту" -#: src/sudo.c:1773 +#: src/sudo.c:1785 #, c-format msgid "%s: unable to log reject event%s%s" msgstr "%s: не вдалося записати до журналу подію відмови%s%s" -#: src/sudo.c:1833 +#: src/sudo.c:1845 #, c-format msgid "error initializing approval plugin %s" msgstr "помилка під час спроби ініціалізації додатка підтвердження %s" -#: src/sudo.c:1903 +#: src/sudo.c:1915 msgid "command rejected by approver" msgstr "у виконанні команди відмовлено засобом підтвердження" -#: src/sudo.c:1913 -msgid "approval plugin error" -msgstr "помилка у додатку підтвердження" - #: src/sudo_edit.c:113 msgid "no writable temporary directory found" msgstr "не знайдено придатного до запису тимчасового каталогу" @@ -1065,7 +1087,7 @@ msgstr "не знайдено придатного до запису тимча msgid "%s left unmodified" msgstr "%s залишено без змін" -#: src/sudo_edit.c:304 src/sudo_edit.c:571 +#: src/sudo_edit.c:304 src/sudo_edit.c:569 #, c-format msgid "%s unchanged" msgstr "%s не змінено" @@ -1078,37 +1100,37 @@ msgstr "sesh: внутрішня помилка: непарна кількіст msgid "sesh: unable to create temporary files" msgstr "sesh: не вдалося створити тимчасові файли" -#: src/sudo_edit.c:485 src/sudo_edit.c:609 +#: src/sudo_edit.c:485 src/sudo_edit.c:604 msgid "sesh: killed by a signal" msgstr "sesh: завершено надсиланням сигналу" -#: src/sudo_edit.c:487 src/sudo_edit.c:612 +#: src/sudo_edit.c:487 src/sudo_edit.c:607 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: невідома помилка %d" -#: src/sudo_edit.c:602 +#: src/sudo_edit.c:597 msgid "unable to copy temporary files back to their original location" msgstr "не вдалося скопіювати тимчасові файли назад до початкового місця зберігання" -#: src/sudo_edit.c:606 +#: src/sudo_edit.c:601 msgid "unable to copy some of the temporary files back to their original location" msgstr "не вдалося скопіювати деякі з тимчасових файлів назад до початкового місця зберігання" -#: src/sudo_edit.c:649 +#: src/sudo_edit.c:645 #, c-format msgid "unable to change uid to root (%u)" msgstr "не вдалося змінити значення uid на значення root (%u)" -#: src/sudo_edit.c:670 +#: src/sudo_edit.c:666 msgid "plugin error: missing file list for sudoedit" msgstr "помилка додатка: не вистачає списку файлів для sudoedit" -#: src/sudo_edit.c:713 src/sudo_edit.c:727 +#: src/sudo_edit.c:709 src/sudo_edit.c:723 msgid "unable to read the clock" msgstr "не вдалося прочитати час на годиннику" -#: src/sudo_intercept_common.c:341 +#: src/sudo_intercept_common.c:365 msgid "intercept port not set" msgstr "порт перехоплення не встановлено" @@ -1159,6 +1181,18 @@ msgstr "не вдалося виконати dup2 для stdin" msgid "unable to restore stdin" msgstr "не вдалося відновити stdin" +#~ msgid "insufficient space for execve arguments" +#~ msgstr "недостатньо місця для аргументів execve" + +#~ msgid "unable to read execve %s for process %d" +#~ msgstr "не вдалося прочитати %s execve для процесу %d" + +#~ msgid "requires at least one argument" +#~ msgstr "потребує принаймні одного аргументу" + +#~ msgid "unable to run %s as a login shell" +#~ msgstr "%s не можна працювати як оболонка для входу" + #~ msgid "unable to dup intercept fd" #~ msgstr "не вдалося здублювати перехоплений дескриптор файла" From 5c5ff3fdaa3086fb0cc1dbf491b52d49ed7cdd43 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 14 Oct 2022 12:38:29 -0600 Subject: [PATCH 174/186] zlib 1.2.13 update --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index daf3671d82..e8a06e110b 100644 --- a/NEWS +++ b/NEWS @@ -111,6 +111,8 @@ What's new in Sudo 1.9.12 * The sesh helper program now uses getopt_long(3) to parse the command line options. + * The embedded copy of zlib has been updated to version 1.2.13. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts From d251dfd55452d9c42d563b7f5d9d50e6102ed842 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 17 Oct 2022 15:51:38 -0600 Subject: [PATCH 175/186] Fix numbering in "Simple sudo installation" --- INSTALL.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index b7f74fd99c..9946bd08b9 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -30,13 +30,13 @@ for a list of packages required to build sudo. ## Simple sudo installation -0. If you are upgrading from a previous version of sudo, read +1. If you are upgrading from a previous version of sudo, read [docs/UPGRADE.md](docs/UPGRADE.md) before proceeding. -1. Read the "OS dependent notes" section for any particular +2. Read the "OS dependent notes" section for any particular "gotchas" relating to your operating system. -2. `cd` to the source or build directory and type `./configure` +3. `cd` to the source or build directory and type `./configure` to generate a Makefile and config.h file suitable for building sudo. Before you actually run configure you should read the "Available configure options" section to see if there are From e7db62f645e88506bf8f8ef4e1b5e022598e2ac3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 19 Oct 2022 17:05:36 -0600 Subject: [PATCH 176/186] Don't NULL out the plugin close function when logging to a log server. If sudo calls execve(2) directly the accept info will not be sent. We also need the sudo front-end to wait until the command finishes to send the exit status. --- plugins/sudoers/policy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index b80c26a0f7..2a6a76e0a5 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -1181,8 +1181,8 @@ sudoers_policy_check(int argc, char * const argv[], char *env_add[], #ifndef NO_LEAKS if (ret == true && sudo_version >= SUDO_API_MKVERSION(1, 3)) { /* Unset close function if we don't need it to avoid extra process. */ - if (!iolog_enabled && !def_log_exit_status && !def_use_pty && - !sudo_auth_needs_end_session()) + if (!iolog_enabled && !def_use_pty && !def_log_exit_status && + SLIST_EMPTY(&def_log_servers) && !sudo_auth_needs_end_session()) sudoers_policy.close = NULL; } #endif From 82db62ec6b60241866a49c9269fe764103f66549 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 19 Oct 2022 19:03:00 -0600 Subject: [PATCH 177/186] Mention log_servers eventlog fix. --- NEWS | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NEWS b/NEWS index e8a06e110b..7276093f11 100644 --- a/NEWS +++ b/NEWS @@ -113,6 +113,11 @@ What's new in Sudo 1.9.12 * The embedded copy of zlib has been updated to version 1.2.13. + * Fixed a bug that prevented event log data from being sent to the + log server when I/O logging was not enabled. This only affected + systems without PAM or configurations where the pam_session and + pam_setcred options were disabled in the sudoers file. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts From 3ca21f9506bfc4504e139cb071ab68d8cf82a483 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 20 Oct 2022 06:57:37 -0600 Subject: [PATCH 178/186] Fix a typo, muti-arch -> multi-arch GitHub issue #185 --- lib/util/multiarch.c | 2 +- lib/util/sudo_dso.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/util/multiarch.c b/lib/util/multiarch.c index 54fd3b555b..dfdc296ba0 100644 --- a/lib/util/multiarch.c +++ b/lib/util/multiarch.c @@ -36,7 +36,7 @@ # if defined(__linux__) /* - * On Linux systems that use muti-arch, the actual DSO may be in a + * On Linux systems that use multi-arch, the actual DSO may be in a * machine-specific subdirectory. If the specified path contains * /lib/ or /libexec/, insert a multi-arch directory after it. * If sb is non-NULL, stat(2) will be called on the new path, filling in sb. diff --git a/lib/util/sudo_dso.c b/lib/util/sudo_dso.c index 96b6129ea0..8c680e034c 100644 --- a/lib/util/sudo_dso.c +++ b/lib/util/sudo_dso.c @@ -176,7 +176,7 @@ sudo_dso_strerror_v1(void) # if defined(__linux__) /* - * On Linux systems that use muti-arch, the actual DSO may be + * On Linux systems that use multi-arch, the actual DSO may be * in a machine-specific subdirectory. If the specified path * contains /lib/ or /libexec/, insert a multi-arch directory * after it. @@ -260,7 +260,7 @@ sudo_dso_load_v1(const char *path, int mode) } } # endif /* RTLD_MEMBER */ - /* On failure, try again with a muti-arch path where possible. */ + /* On failure, try again with a multi-arch path where possible. */ if (ret == NULL) ret = dlopen_multi_arch(path, flags); From d744271a63d4fb1f8333b45b030d396bda47029b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 20 Oct 2022 08:08:48 -0600 Subject: [PATCH 179/186] Make it clear that runas_default sets the default user for Runas_Spec. Also use mention runas_default in other parts of the manual, use @runas_default@ instead of root and add markup around user names. GitHub issue #186. --- docs/sudoers.man.in | 216 ++++++++++++++++++++++++++++++------------- docs/sudoers.mdoc.in | 216 ++++++++++++++++++++++++++++++------------- 2 files changed, 302 insertions(+), 130 deletions(-) diff --git a/docs/sudoers.man.in b/docs/sudoers.man.in index 6f5818cb13..dec073b31e 100644 --- a/docs/sudoers.man.in +++ b/docs/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "September 27, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "October 20, 2022" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -179,16 +179,19 @@ security policy requires that most users authenticate themselves before they can use \fBsudo\fR. A password is not required -if the invoking user is root, if the target user is the same as the -invoking user, or if the policy has disabled authentication for the -user or command. +if the invoking user is +\fBroot\fR, +if the target user is the same as the invoking user, or if the +policy has disabled authentication for the user or command. Unlike su(1), when \fBsudoers\fR requires authentication, it validates the invoking user's credentials, not -the target user's (or root's) credentials. +the target user's (or +\fB@runas_default@\fR's) +credentials. This can be changed via the \fIrootpw\fR, @@ -230,7 +233,9 @@ are logged, regardless of whether or not mail is sent. .PP If \fBsudo\fR -is run by root and the +is run by +\fBroot\fR +and the \fRSUDO_USER\fR environment variable is set, the @@ -238,7 +243,9 @@ is set, the policy will use this value to determine who the actual user is. This can be used by a user to log commands -through sudo even when a root shell has been invoked. +through sudo even when a +\fBroot\fR +shell has been invoked. It also allows the \fB\-e\fR @@ -246,7 +253,9 @@ option to remain useful even when invoked via a sudo-run script or program. Note, however, that the \fIsudoers\fR -file lookup is still done for root, not the user specified by +file lookup is still done for +\fBroot\fR, +not the user specified by \fRSUDO_USER\fR. .PP \fBsudoers\fR @@ -456,7 +465,9 @@ as modified by global Defaults parameters in \fIsudoers\fR, is displayed when \fBsudo\fR -is run by root with the +is run by +\fBroot\fR +with the \fB\-V\fR option. The list of environment variables to remove @@ -926,8 +937,11 @@ it can contain User names and groups are matched as strings. In other words, two users (groups) with the same user (group) ID are considered to be distinct. -If you wish to match all user names with the same user-ID (e.g., root and -toor), you can use a user-ID instead of a name (#0 in the example given). +If you wish to match all user names with the same user-ID (e.g., +\fBroot\fR +and +\fBtoor\fR), +you can use a user-ID instead of a name (#0 in the example given). The user-ID or group-ID specified in a \fIRunas_Member\fR need not be listed in the password or group database. @@ -1308,10 +1322,12 @@ A \fBuser specification\fR determines which commands a user may run (and as what user) on specified hosts. -By default, commands are -run as -\fBroot\fR, -but this can be changed on a per-command basis. +By default, commands are run as +\fB@runas_default@\fR +(unless +\fIrunas_default\fR +has been set to a different value) +but this can also be changed on a per-command basis. .PP The basic structure of a user specification is \(lqwho where = (as_whom) what\(rq. @@ -1355,11 +1371,14 @@ are empty, the command may only be run as the invoking user and the group, if specified, must be one that the invoking user is a member of. If no \fIRunas_Spec\fR -is specified, the command may only be run as -\fBroot\fR -and the group, if specified, must be one that -\fBroot\fR -is a member of. +is specified, the command may only be run as the +\fIrunas_default\fR +user +(\fB@runas_default@\fR +by default) and the group, +if specified, must be one that the +\fIrunas_default\fR +user is a member of. .PP A \fIRunas_Spec\fR @@ -1487,7 +1506,10 @@ alan ALL = (root, bin : operator, system) ALL .PP user \fBalan\fR -may run any command as either user root or bin, +may run any command as either user +\fBroot\fR +or +\fBbin\fR, optionally setting the group to operator or system. .SS "Option_Spec" A @@ -1554,7 +1576,9 @@ alice ALL = (root) APPARMOR_PROFILE=my-profile ALL .PP the user \fBalice\fR -may run any command as root under confinement by the profile +may run any command as +\fBroot\fR +under confinement by the profile \(oqmy-profile\(cq. You can also stack profiles, or allow a user to run commands unconfined by any profile. @@ -1573,7 +1597,9 @@ entries allow user \fBbob\fR to run \fI/usr/bin/vi\fR -as root under the stacked profiles +as +\fBroot\fR +under the stacked profiles \(oqfoo\(cq and \(oqbar\(cq, @@ -1927,7 +1953,7 @@ to run and \fI/usr/bin/lprm\fR as -\fBroot\fR +\fB@runas_default@\fR on the machine \(lqrushmore\(rq without authenticating himself. @@ -2200,7 +2226,11 @@ In the following example, user \fBjohn\fR can run the passwd(1) -command as root on any host but is not allowed to change root's password. +command as +\fB@runas_default@\fR +on any host but is not allowed to change +\fBroot\fR's +password. This kind of rule is impossible to express safely using wildcards. .nf .sp @@ -2237,7 +2267,8 @@ to run the \fI/usr/sbin/usermod\fR, and \fI/usr/sbin/userdel\fR -commands as root. +commands as +\fB@runas_default@\fR. .nf .sp .RS 4n @@ -2485,7 +2516,9 @@ This allows one to exclude certain values. For the \(oq\&!\(cq operator to be effective, there must be something for it to exclude. -For example, to match all users except for root one would use: +For example, to match all users except for +\fBroot\fR +one would use: .nf .sp .RS 4n @@ -2503,7 +2536,9 @@ is omitted, as in: .RE .fi .PP -it would explicitly deny root but not match any other users. +it would explicitly deny +\fBroot\fR +but not match any other users. This is different from a true \(lqnegation\(rq operator. @@ -2570,7 +2605,9 @@ If enabled, will set the \fRHOME\fR environment variable to the home directory of the target user -(which is the root user unless the +(which is the +\fIrunas_default\fR +user unless the \fB\-u\fR option is used). This flag is largely obsolete and has no effect unless the @@ -2709,9 +2746,13 @@ or \fREDITOR\fR environment variables before falling back on the default editor list. \fBvisudo\fR -is typically run as root so this flag may allow a user with +is typically run as +\fBroot\fR +so this flag may allow a user with \fBvisudo\fR -privileges to run arbitrary commands as root without logging. +privileges to run arbitrary commands as +\fBroot\fR +without logging. An alternative is to place a colon-separated list of \(lqsafe\(rq editors int the @@ -2777,7 +2818,9 @@ lists, as modified by global Defaults parameters in \fIsudoers\fR, are displayed when \fBsudo\fR -is run by root with the +is run by +\fBroot\fR +with the \fB\-V\fR option. If the @@ -3736,17 +3779,23 @@ This flag is by default. .TP 18n root_sudo -If set, root is allowed to run +If set, +\fBroot\fR +is allowed to run \fBsudo\fR too. Disabling this prevents users from \(lqchaining\(rq \fBsudo\fR -commands to get a root shell by doing something like +commands to get a +\fBroot\fR +shell by doing something like \(oqsudo sudo /bin/sh\(cq. Note, however, that turning off \fIroot_sudo\fR -will also prevent root from running +will also prevent +\fBroot\fR +from running \fBsudoedit\fR. Disabling \fIroot_sudo\fR @@ -3758,7 +3807,9 @@ by default. rootpw If set, \fBsudo\fR -will prompt for the root password instead of the password of the invoking user +will prompt for the +\fBroot\fR +password instead of the password of the invoking user when running a command or editing a file. This flag is \fIoff\fR @@ -3808,7 +3859,8 @@ If set, \fBsudo\fR will prompt for the password of the user defined by the \fIrunas_default\fR -option (defaults to @runas_default@) +option (defaults to +\fB@runas_default@\fR) instead of the password of the invoking user when running a command or editing a file. This flag is @@ -3833,7 +3885,9 @@ is invoked with the option, the \fRHOME\fR environment variable will be set to the home directory of the target -user (which is the root user unless the +user (which is the +\fIrunas_default\fR +user unless the \fB\-u\fR option is used). This flag is largely obsolete and has no effect unless the @@ -3854,7 +3908,9 @@ will set the \fRLOGNAME\fR and \fRUSER\fR -environment variables to the name of the target user (usually root unless the +environment variables to the name of the target user (the user specified by +\fIrunas_default\fR +unless the \fB\-u\fR option is given). However, since some programs (including the RCS revision control system) use @@ -3924,7 +3980,9 @@ If set and is invoked with no arguments it acts as if the \fB\-s\fR option had been given. -That is, it runs a shell as root (the shell is determined by the +That is, it runs a shell as +\fBroot\fR +(the shell is determined by the \fRSHELL\fR environment variable if it is set, falling back on the shell listed in the invoking user's /etc/passwd entry if not). @@ -3936,7 +3994,9 @@ stay_setuid Normally, when \fBsudo\fR executes a command the real and effective user-IDs are set to the target -user (root by default). +user +(\fB@runas_default@\fR +by default). This option changes that behavior such that the real user-ID is left as the invoking user's user-ID. In other words, this makes @@ -3964,7 +4024,8 @@ Symbolic links will not be followed in writable directories and will refuse to edit a file located in a writable directory. These restrictions are not enforced when \fBsudoedit\fR -is run by root. +is run by +\fBroot\fR. On some systems, if all directory components of the path to be edited are not readable by the target user, \fBsudoedit\fR @@ -4014,7 +4075,8 @@ If set, will prompt for the password of the user specified by the \fB\-u\fR -option (defaults to root) +option (defaults to the value of +\fIrunas_default\fR) instead of the password of the invoking user when running a command or editing a file. This flag precludes the use of a user-ID not listed in the passwd @@ -4475,11 +4537,13 @@ expanded to the name of the invoking user's real group-ID .TP 6n %{runas_user} expanded to the login name of the user the command will -be run as (e.g., root) +be run as (e.g., +\fBroot\fR) .TP 6n %{runas_group} expanded to the group name of the user the command will -be run as (e.g., wheel) +be run as (e.g., +\fBwheel\fR) .TP 6n %{hostname} expanded to the local host name without the domain name @@ -4766,7 +4830,8 @@ flags in .TP 6n \&%U expanded to the login name of the user the command will -be run as (defaults to root) +be run as (defaults to +\fB@runas_default@\fR) .TP 6n %u expanded to the invoking user's login name @@ -4830,7 +4895,8 @@ runas_default The default user to run commands as if the \fB\-u\fR option is not specified on the command line. -This defaults to @runas_default@. +This defaults to +\fB@runas_default@\fR. .TP 18n sudoers_locale Locale to use when parsing the sudoers file, logging commands, and @@ -4908,7 +4974,8 @@ The default is timestampowner The owner of the lecture status directory, time stamp directory and all files stored therein. -The default is root. +The default is +\fBroot\fR. .if \n(SL \{\ .TP 18n type @@ -5557,8 +5624,9 @@ option is enabled or disabled, variables specified by will be preserved in the environment if they pass the aforementioned check. The global list of environment variables to check is displayed when \fBsudo\fR -is run by root with -the +is run by +\fBroot\fR +with the \fB\-V\fR option. .RE @@ -5578,7 +5646,9 @@ and operators respectively. The global list of environment variables to remove is displayed when \fBsudo\fR -is run by root with the +is run by +\fBroot\fR +with the \fB\-V\fR option. Many operating systems will remove potentially dangerous variables @@ -5604,7 +5674,9 @@ operators respectively. The global list of variables to keep is displayed when \fBsudo\fR -is run by root with the +is run by +\fBroot\fR +with the \fB\-V\fR option. .sp @@ -6017,7 +6089,9 @@ unable to open @rundir@/ts/username was unable to read or create the user's time stamp file. This can happen when \fItimestampowner\fR -is set to a user other than root and the mode on +is set to a user other than +\fBroot\fR +and the mode on \fI@rundir@\fR is not searchable by group or other. The default mode for @@ -6641,7 +6715,8 @@ need not provide a password and we don't want to reset the \fRLOGNAME\fR or \fRUSER\fR -environment variables when running commands as root. +environment variables when running commands as +\fBroot\fR. Additionally, on the machines in the \fRSERVERS\fR \fIHost_Alias\fR, @@ -6807,7 +6882,8 @@ groups). The user \fBpete\fR is allowed to change anyone's password except for -root on the +\fBroot\fR +on the \fRHPPA\fR machines. Because command line arguments are matched as a single, @@ -6908,8 +6984,9 @@ On the \fRALPHA\fR machines, user \fBjohn\fR -may su to anyone except root but he is not allowed to specify any options -to the +may su to anyone except +\fBroot\fR +but he is not allowed to specify any options to the su(1) command. .nf @@ -7034,7 +7111,9 @@ advisory at best (and reinforced by policy). In general, if a user has sudo \fBALL\fR there is nothing to prevent them from creating their own program that gives -them a root shell (or making their own copy of a shell) regardless of any +them a +\fBroot\fR +shell (or making their own copy of a shell) regardless of any \(oq!\&\(cq elements in the user specification. .SS "Security implications of \fIfast_glob\fR" @@ -7418,9 +7497,11 @@ is enabled. .RE .PP Restricting shell escapes is not a panacea. -Programs running as root are still capable of many potentially hazardous -operations (such as changing or overwriting files) that could lead -to unintended privilege escalation. +Programs running as +\fBroot\fR +are still capable of many potentially hazardous operations (such +as changing or overwriting files) that could lead to unintended +privilege escalation. In the specific case of an editor, a safer approach is to give the user permission to run \fBsudoedit\fR @@ -7473,7 +7554,9 @@ $ sudoedit /etc/motd .RE .fi .PP -The editor will run as the operator user, not root, on a temporary copy of +The editor will run as the operator user, not +\fB@runas_default@\fR, +on a temporary copy of \fI/etc/motd\fR. After the file has been edited, \fI/etc/motd\fR @@ -7494,7 +7577,8 @@ not be followed in writable directories and will refuse to edit a file located in a writable directory unless the \fIsudoedit_checkdir\fR -option has been disabled or the invoking user is root. +option has been disabled or the invoking user is +\fBroot\fR. Additionally, in version 1.8.15 and higher, \fBsudoedit\fR will refuse to open a symbolic link unless either the @@ -7511,8 +7595,10 @@ file. will check the ownership of its time stamp directory (\fI@rundir@/ts\fR by default) -and ignore the directory's contents if it is not owned by root or -if it is writable by a user other than root. +and ignore the directory's contents if it is not owned by +\fBroot\fR +or if it is writable by a user other than +\fBroot\fR. Older versions of \fBsudo\fR stored time stamp files in diff --git a/docs/sudoers.mdoc.in b/docs/sudoers.mdoc.in index 911b69afce..d09f06a993 100644 --- a/docs/sudoers.mdoc.in +++ b/docs/sudoers.mdoc.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd September 27, 2022 +.Dd October 20, 2022 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -168,16 +168,19 @@ security policy requires that most users authenticate themselves before they can use .Nm sudo . A password is not required -if the invoking user is root, if the target user is the same as the -invoking user, or if the policy has disabled authentication for the -user or command. +if the invoking user is +.Sy root , +if the target user is the same as the invoking user, or if the +policy has disabled authentication for the user or command. Unlike .Xr su 1 , when .Nm requires authentication, it validates the invoking user's credentials, not -the target user's (or root's) credentials. +the target user's (or +.Sy @runas_default@ Ns No 's) +credentials. This can be changed via the .Em rootpw , @@ -219,7 +222,9 @@ are logged, regardless of whether or not mail is sent. .Pp If .Nm sudo -is run by root and the +is run by +.Sy root +and the .Ev SUDO_USER environment variable is set, the @@ -227,7 +232,9 @@ is set, the policy will use this value to determine who the actual user is. This can be used by a user to log commands -through sudo even when a root shell has been invoked. +through sudo even when a +.Sy root +shell has been invoked. It also allows the .Fl e @@ -235,7 +242,9 @@ option to remain useful even when invoked via a sudo-run script or program. Note, however, that the .Em sudoers -file lookup is still done for root, not the user specified by +file lookup is still done for +.Sy root , +not the user specified by .Ev SUDO_USER . .Pp .Nm @@ -442,7 +451,9 @@ as modified by global Defaults parameters in .Em sudoers , is displayed when .Nm sudo -is run by root with the +is run by +.Sy root +with the .Fl V option. The list of environment variables to remove @@ -888,8 +899,11 @@ it can contain User names and groups are matched as strings. In other words, two users (groups) with the same user (group) ID are considered to be distinct. -If you wish to match all user names with the same user-ID (e.g., root and -toor), you can use a user-ID instead of a name (#0 in the example given). +If you wish to match all user names with the same user-ID (e.g., +.Sy root +and +.Sy toor ) , +you can use a user-ID instead of a name (#0 in the example given). The user-ID or group-ID specified in a .Em Runas_Member need not be listed in the password or group database. @@ -1261,10 +1275,12 @@ A .Sy user specification determines which commands a user may run (and as what user) on specified hosts. -By default, commands are -run as -.Sy root , -but this can be changed on a per-command basis. +By default, commands are run as +.Sy @runas_default@ +(unless +.Em runas_default +has been set to a different value) +but this can also be changed on a per-command basis. .Pp The basic structure of a user specification is .Dq who where = (as_whom) what . @@ -1308,11 +1324,14 @@ are empty, the command may only be run as the invoking user and the group, if specified, must be one that the invoking user is a member of. If no .Em Runas_Spec -is specified, the command may only be run as -.Sy root -and the group, if specified, must be one that -.Sy root -is a member of. +is specified, the command may only be run as the +.Em runas_default +user +.Sy ( @runas_default@ +by default) and the group, +if specified, must be one that the +.Em runas_default +user is a member of. .Pp A .Em Runas_Spec @@ -1416,7 +1435,10 @@ alan ALL = (root, bin : operator, system) ALL .Pp user .Sy alan -may run any command as either user root or bin, +may run any command as either user +.Sy root +or +.Sy bin , optionally setting the group to operator or system. .Ss Option_Spec A @@ -1483,7 +1505,9 @@ alice ALL = (root) APPARMOR_PROFILE=my-profile ALL .Pp the user .Sy alice -may run any command as root under confinement by the profile +may run any command as +.Sy root +under confinement by the profile .Ql my-profile . You can also stack profiles, or allow a user to run commands unconfined by any profile. @@ -1499,7 +1523,9 @@ entries allow user .Sy bob to run .Pa /usr/bin/vi -as root under the stacked profiles +as +.Sy root +under the stacked profiles .Ql foo and .Ql bar , @@ -1832,7 +1858,7 @@ to run and .Pa /usr/bin/lprm as -.Sy root +.Sy @runas_default@ on the machine .Dq rushmore without authenticating himself. @@ -2090,7 +2116,11 @@ In the following example, user .Sy john can run the .Xr passwd 1 -command as root on any host but is not allowed to change root's password. +command as +.Sy @runas_default@ +on any host but is not allowed to change +.Sy root Ns No 's +password. This kind of rule is impossible to express safely using wildcards. .Bd -literal -offset 4n john ALL = /usr/bin/passwd ^[a-zA-Z0-9_]+$,\e @@ -2121,7 +2151,8 @@ to run the .Pa /usr/sbin/usermod , and .Pa /usr/sbin/userdel -commands as root. +commands as +.Sy @runas_default@ . .Bd -literal -offset 4n sid ALL = ^/usr/sbin/(group|user)(add|mod|del)$ .Ed @@ -2350,7 +2381,9 @@ This allows one to exclude certain values. For the .Ql \&! operator to be effective, there must be something for it to exclude. -For example, to match all users except for root one would use: +For example, to match all users except for +.Sy root +one would use: .Bd -literal -offset 4n ALL, !root .Ed @@ -2362,7 +2395,9 @@ is omitted, as in: !root .Ed .Pp -it would explicitly deny root but not match any other users. +it would explicitly deny +.Sy root +but not match any other users. This is different from a true .Dq negation operator. @@ -2430,7 +2465,9 @@ If enabled, will set the .Ev HOME environment variable to the home directory of the target user -(which is the root user unless the +(which is the +.Em runas_default +user unless the .Fl u option is used). This flag is largely obsolete and has no effect unless the @@ -2562,9 +2599,13 @@ or .Ev EDITOR environment variables before falling back on the default editor list. .Nm visudo -is typically run as root so this flag may allow a user with +is typically run as +.Sy root +so this flag may allow a user with .Nm visudo -privileges to run arbitrary commands as root without logging. +privileges to run arbitrary commands as +.Sy root +without logging. An alternative is to place a colon-separated list of .Dq safe editors int the @@ -2629,7 +2670,9 @@ lists, as modified by global Defaults parameters in .Em sudoers , are displayed when .Nm sudo -is run by root with the +is run by +.Sy root +with the .Fl V option. If the @@ -3532,17 +3575,23 @@ This flag is .Em off by default. .It root_sudo -If set, root is allowed to run +If set, +.Sy root +is allowed to run .Nm sudo too. Disabling this prevents users from .Dq chaining .Nm sudo -commands to get a root shell by doing something like +commands to get a +.Sy root +shell by doing something like .Ql sudo sudo /bin/sh . Note, however, that turning off .Em root_sudo -will also prevent root from running +will also prevent +.Sy root +from running .Nm sudoedit . Disabling .Em root_sudo @@ -3553,7 +3602,9 @@ by default. .It rootpw If set, .Nm sudo -will prompt for the root password instead of the password of the invoking user +will prompt for the +.Sy root +password instead of the password of the invoking user when running a command or editing a file. This flag is .Em off @@ -3599,7 +3650,8 @@ If set, .Nm sudo will prompt for the password of the user defined by the .Em runas_default -option (defaults to @runas_default@) +option (defaults to +.Sy @runas_default@ ) instead of the password of the invoking user when running a command or editing a file. This flag is @@ -3622,7 +3674,9 @@ is invoked with the option, the .Ev HOME environment variable will be set to the home directory of the target -user (which is the root user unless the +user (which is the +.Em runas_default +user unless the .Fl u option is used). This flag is largely obsolete and has no effect unless the @@ -3642,7 +3696,9 @@ will set the .Ev LOGNAME and .Ev USER -environment variables to the name of the target user (usually root unless the +environment variables to the name of the target user (the user specified by +.Em runas_default +unless the .Fl u option is given). However, since some programs (including the RCS revision control system) use @@ -3709,7 +3765,9 @@ If set and is invoked with no arguments it acts as if the .Fl s option had been given. -That is, it runs a shell as root (the shell is determined by the +That is, it runs a shell as +.Sy root +(the shell is determined by the .Ev SHELL environment variable if it is set, falling back on the shell listed in the invoking user's /etc/passwd entry if not). @@ -3720,7 +3778,9 @@ by default. Normally, when .Nm sudo executes a command the real and effective user-IDs are set to the target -user (root by default). +user +.Sy ( @runas_default@ +by default). This option changes that behavior such that the real user-ID is left as the invoking user's user-ID. In other words, this makes @@ -3746,7 +3806,8 @@ Symbolic links will not be followed in writable directories and will refuse to edit a file located in a writable directory. These restrictions are not enforced when .Nm sudoedit -is run by root. +is run by +.Sy root . On some systems, if all directory components of the path to be edited are not readable by the target user, .Nm sudoedit @@ -3793,7 +3854,8 @@ If set, will prompt for the password of the user specified by the .Fl u -option (defaults to root) +option (defaults to the value of +.Em runas_default ) instead of the password of the invoking user when running a command or editing a file. This flag precludes the use of a user-ID not listed in the passwd @@ -4225,10 +4287,12 @@ expanded to the invoking user's login name expanded to the name of the invoking user's real group-ID .It %{runas_user} expanded to the login name of the user the command will -be run as (e.g., root) +be run as (e.g., +.Sy root ) .It %{runas_group} expanded to the group name of the user the command will -be run as (e.g., wheel) +be run as (e.g., +.Sy wheel ) .It %{hostname} expanded to the local host name without the domain name .It %{command} @@ -4489,7 +4553,8 @@ flags in .Em sudoers ) .It \&%U expanded to the login name of the user the command will -be run as (defaults to root) +be run as (defaults to +.Sy @runas_default@ ) .It %u expanded to the invoking user's login name .It %% @@ -4548,7 +4613,8 @@ is built with SELinux support. The default user to run commands as if the .Fl u option is not specified on the command line. -This defaults to @runas_default@. +This defaults to +.Sy @runas_default@ . .It sudoers_locale Locale to use when parsing the sudoers file, logging commands, and sending email. @@ -4615,7 +4681,8 @@ The default is .It timestampowner The owner of the lecture status directory, time stamp directory and all files stored therein. -The default is root. +The default is +.Sy root . .if \n(SL \{\ .It type The default SELinux type to use when constructing a new security @@ -5194,8 +5261,9 @@ option is enabled or disabled, variables specified by will be preserved in the environment if they pass the aforementioned check. The global list of environment variables to check is displayed when .Nm sudo -is run by root with -the +is run by +.Sy root +with the .Fl V option. .It env_delete @@ -5213,7 +5281,9 @@ and operators respectively. The global list of environment variables to remove is displayed when .Nm sudo -is run by root with the +is run by +.Sy root +with the .Fl V option. Many operating systems will remove potentially dangerous variables @@ -5238,7 +5308,9 @@ operators respectively. The global list of variables to keep is displayed when .Nm sudo -is run by root with the +is run by +.Sy root +with the .Fl V option. .Pp @@ -5619,7 +5691,9 @@ file. was unable to read or create the user's time stamp file. This can happen when .Em timestampowner -is set to a user other than root and the mode on +is set to a user other than +.Sy root +and the mode on .Pa @rundir@ is not searchable by group or other. The default mode for @@ -6165,7 +6239,8 @@ need not provide a password and we don't want to reset the .Ev LOGNAME or .Ev USER -environment variables when running commands as root. +environment variables when running commands as +.Sy root . Additionally, on the machines in the .Dv SERVERS .Em Host_Alias , @@ -6307,7 +6382,8 @@ groups). The user .Sy pete is allowed to change anyone's password except for -root on the +.Sy root +on the .Dv HPPA machines. Because command line arguments are matched as a single, @@ -6394,8 +6470,9 @@ On the .Dv ALPHA machines, user .Sy john -may su to anyone except root but he is not allowed to specify any options -to the +may su to anyone except +.Sy root +but he is not allowed to specify any options to the .Xr su 1 command. .Bd -literal @@ -6499,7 +6576,9 @@ advisory at best (and reinforced by policy). In general, if a user has sudo .Sy ALL there is nothing to prevent them from creating their own program that gives -them a root shell (or making their own copy of a shell) regardless of any +them a +.Sy root +shell (or making their own copy of a shell) regardless of any .Ql !\& elements in the user specification. .Ss Security implications of Em fast_glob @@ -6855,9 +6934,11 @@ is enabled. .El .Pp Restricting shell escapes is not a panacea. -Programs running as root are still capable of many potentially hazardous -operations (such as changing or overwriting files) that could lead -to unintended privilege escalation. +Programs running as +.Sy root +are still capable of many potentially hazardous operations (such +as changing or overwriting files) that could lead to unintended +privilege escalation. In the specific case of an editor, a safer approach is to give the user permission to run .Nm sudoedit @@ -6904,7 +6985,9 @@ as follows: $ sudoedit /etc/motd .Ed .Pp -The editor will run as the operator user, not root, on a temporary copy of +The editor will run as the operator user, not +.Sy @runas_default@ , +on a temporary copy of .Pa /etc/motd . After the file has been edited, .Pa /etc/motd @@ -6925,7 +7008,8 @@ not be followed in writable directories and will refuse to edit a file located in a writable directory unless the .Em sudoedit_checkdir -option has been disabled or the invoking user is root. +option has been disabled or the invoking user is +.Sy root . Additionally, in version 1.8.15 and higher, .Nm sudoedit will refuse to open a symbolic link unless either the @@ -6944,8 +7028,10 @@ will check the ownership of its time stamp directory .Pa @rundir@/ts by default .Pc -and ignore the directory's contents if it is not owned by root or -if it is writable by a user other than root. +and ignore the directory's contents if it is not owned by +.Sy root +or if it is writable by a user other than +.Sy root . Older versions of .Nm sudo stored time stamp files in From 803998d2bdc7f80413cd00a79bde241f32c19ab3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 20 Oct 2022 08:55:26 -0600 Subject: [PATCH 180/186] Only add trailing carriage return to messages if output is a raw tty. If output is being written to a terminal in "raw" mode, we need to add a carriage return after the newline to avoid "stair-step" output. However, we should not write the carriage return if the terminal is in "cooked" mode, output to a pipe, or output redirected to a file. Bug #1042. --- include/sudo_util.h | 2 ++ lib/util/fatal.c | 2 +- lib/util/term.c | 24 ++++++++++++++++++++++++ lib/util/util.exp.in | 1 + src/conversation.c | 23 +++++++++++++++-------- 5 files changed, 43 insertions(+), 9 deletions(-) diff --git a/include/sudo_util.h b/include/sudo_util.h index 3fe7fc4ce6..8dc2744fed 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -349,6 +349,8 @@ sudo_dso_public bool sudo_term_raw_v1(int fd, int isig); #define sudo_term_raw(_a, _b) sudo_term_raw_v1((_a), (_b)) sudo_dso_public bool sudo_term_restore_v1(int fd, bool flush); #define sudo_term_restore(_a, _b) sudo_term_restore_v1((_a), (_b)) +sudo_dso_public bool sudo_term_is_raw_v1(int fd); +#define sudo_term_is_raw(_a) sudo_term_is_raw_v1((_a)) /* ttyname_dev.c */ sudo_dso_public char *sudo_ttyname_dev_v1(dev_t tdev, char *name, size_t namelen); diff --git a/lib/util/fatal.c b/lib/util/fatal.c index 455168c5c2..cf2303ffc2 100644 --- a/lib/util/fatal.c +++ b/lib/util/fatal.c @@ -239,7 +239,7 @@ warning(const char *errstr, const char *fmt, va_list ap) fputs(": ", stderr); fputs(errstr, stderr); } - if (isatty(fileno(stderr))) + if (sudo_term_is_raw(fileno(stderr))) putc('\r', stderr); putc('\n', stderr); } diff --git a/lib/util/term.c b/lib/util/term.c index f90cfb30ce..05f32478ef 100644 --- a/lib/util/term.c +++ b/lib/util/term.c @@ -288,3 +288,27 @@ sudo_term_copy_v1(int src, int dst) debug_return_bool(true); } + +/* + * Returns true if fd refers to a tty in raw mode, else false. + */ +bool +sudo_term_is_raw_v1(int fd) +{ + struct termios term; + debug_decl(sudo_term_is_raw, SUDO_DEBUG_UTIL); + + if (tcgetattr(fd, &term) != 0) + debug_return_bool(false); + + if (term.c_cc[VMIN] != 1 || term.c_cc[VTIME] != 0) + debug_return_bool(false); + + if (ISSET(term.c_oflag, OPOST)) + debug_return_bool(false); + + if (ISSET(term.c_oflag, ECHO|ECHONL|ICANON)) + debug_return_bool(false); + + debug_return_bool(true); +} diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index c7eb146427..99ea923c49 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -145,6 +145,7 @@ sudo_term_cbreak_v1 sudo_term_copy_v1 sudo_term_eof sudo_term_erase +sudo_term_is_raw_v1 sudo_term_kill sudo_term_noecho_v1 sudo_term_raw_v1 diff --git a/src/conversation.c b/src/conversation.c index 53943b14af..620bb5caf0 100644 --- a/src/conversation.c +++ b/src/conversation.c @@ -91,11 +91,16 @@ sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], const char *crnl = NULL; bool written = false; int ttyfd = -1; + bool raw_tty = false; if (ISSET(msg->msg_type, SUDO_CONV_PREFER_TTY) && - !ISSET(tgetpass_flags, TGP_STDIN)) + !ISSET(tgetpass_flags, TGP_STDIN)) { ttyfd = open(_PATH_TTY, O_WRONLY); - if (len != 0 && (ttyfd != -1 || isatty(fileno(fp)))) { + raw_tty = sudo_term_is_raw(ttyfd); + } else { + raw_tty = sudo_term_is_raw(fileno(fp)); + } + if (len != 0 && raw_tty) { /* Convert nl -> cr nl in case tty is in raw mode. */ if (msg->msg[len - 1] == '\n') { if (len == 1 || msg->msg[len - 2] != '\r') { @@ -177,12 +182,14 @@ sudo_conversation_printf(int msg_type, const char *fmt, ...) case SUDO_CONV_INFO_MSG: /* Convert nl -> cr nl in case tty is in raw mode. */ len = strlen(fmt); - if (len < ssizeof(fmt2) && len > 0 && fmt[len - 1] == '\n') { - if (len == 1 || fmt[len - 2] != '\r') { - memcpy(fmt2, fmt, len - 1); - fmt2[len - 1] = '\0'; - fmt = fmt2; - crnl = "\r\n"; + if (sudo_term_is_raw(fileno(ttyfp ? ttyfp : fp))) { + if (len < ssizeof(fmt2) && len > 0 && fmt[len - 1] == '\n') { + if (len == 1 || fmt[len - 2] != '\r') { + memcpy(fmt2, fmt, len - 1); + fmt2[len - 1] = '\0'; + fmt = fmt2; + crnl = "\r\n"; + } } } va_start(ap, fmt); From 3a6083f0432c3faf5997b7b93bbec023c0301aab Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 20 Oct 2022 09:30:33 -0600 Subject: [PATCH 181/186] Bug #1042. --- NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS b/NEWS index 7276093f11..65502ecf7e 100644 --- a/NEWS +++ b/NEWS @@ -118,6 +118,10 @@ What's new in Sudo 1.9.12 systems without PAM or configurations where the pam_session and pam_setcred options were disabled in the sudoers file. + * Fixed a bug where "sudo -l" output included a carriage return + after the newline. This is only needed when displaying to a + terminal in raw mode. Bug #1042. + What's new in Sudo 1.9.11p3 * Fixed "connection reset" errors on AIX when running shell scripts From 9b9404b6fa90ebdabe17f6cc6385967ce90fee14 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 20 Oct 2022 13:45:36 -0600 Subject: [PATCH 182/186] Disable admin_flag by setting to NULL, not false. Found by cppcheck. --- 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 faa5be4f24..00114acf99 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -188,7 +188,7 @@ sudoers_reinit_defaults(void) /* No need to check the admin flag file multiple times. */ if (ISSET(sudo_mode, MODE_POLICY_INTERCEPTED)) - def_admin_flag = false; + def_admin_flag = NULL; debug_return_bool(true); } From 45ea24833559b16255f82d4c97e49471da7f2e15 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 21 Oct 2022 07:51:00 -0600 Subject: [PATCH 183/186] Adapt to current plugin API and fix warnings. --- plugins/sample/sample_plugin.c | 49 +++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/plugins/sample/sample_plugin.c b/plugins/sample/sample_plugin.c index 1b57e9c1d0..e09a8da83e 100644 --- a/plugins/sample/sample_plugin.c +++ b/plugins/sample/sample_plugin.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2010-2016 Todd C. Miller + * Copyright (c) 2010-2016, 2022 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 @@ -39,6 +39,7 @@ # include #endif /* HAVE_STRINGS_H */ #include +#include #include #include #include @@ -72,8 +73,9 @@ static int use_sudoedit = false; */ static int policy_open(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], - char * const user_info[], char * const user_env[], char * const args[]) + sudo_printf_t sudo_plugin_printf, char * const settings[], + char * const user_info[], char * const user_env[], char * const args[], + const char **errstr) { char * const *ui; struct passwd *pw; @@ -142,20 +144,20 @@ static char * find_in_path(char *command, char **envp) { struct stat sb; - char *path, *path0, **ep, *cp; + char *path = NULL; + char *path0, **ep, *cp; char pathbuf[PATH_MAX], *qualified = NULL; if (strchr(command, '/') != NULL) return command; - path = _PATH_DEFPATH; for (ep = plugin_state.envp; *ep != NULL; ep++) { if (strncmp(*ep, "PATH=", 5) == 0) { path = *ep + 5; break; } } - path = path0 = strdup(path); + path = path0 = strdup(path ? path : _PATH_DEFPATH); do { if ((cp = strchr(path, ':'))) *cp = '\0'; @@ -231,18 +233,18 @@ build_command_info(const char *command) static char * find_editor(int nfiles, char * const files[], char **argv_out[]) { - char *cp, *last, **ep, **nargv, *editor, *editor_path; + char *cp, *last, **ep, **nargv, *editor_path; + char *editor = NULL; int ac, i, nargc, wasblank; /* Lookup EDITOR in user's environment. */ - editor = _PATH_VI; for (ep = plugin_state.envp; *ep != NULL; ep++) { if (strncmp(*ep, "EDITOR=", 7) == 0) { editor = *ep + 7; break; } } - editor = strdup(editor); + editor = strdup(editor ? editor : _PATH_VI); if (editor == NULL) { sudo_log(SUDO_CONV_ERROR_MSG, "unable to allocate memory\n"); return NULL; @@ -281,7 +283,7 @@ find_editor(int nfiles, char * const files[], char **argv_out[]) nargv[ac] = cp; cp = strtok_r(NULL, " \t", &last); } - nargv[ac++] = "--"; + nargv[ac++] = (char *)"--"; for (i = 0; i < nfiles; ) nargv[ac++] = files[i++]; nargv[ac] = NULL; @@ -297,7 +299,7 @@ find_editor(int nfiles, char * const files[], char **argv_out[]) static int policy_check(int argc, char * const argv[], char *env_add[], char **command_info_out[], - char **argv_out[], char **user_env_out[]) + char **argv_out[], char **user_env_out[], const char **errstr) { char *command; @@ -348,7 +350,8 @@ policy_check(int argc, char * const argv[], } static int -policy_list(int argc, char * const argv[], int verbose, const char *list_user) +policy_list(int argc, char * const argv[], int verbose, const char *list_user, + const char **errstr) { /* * List user's capabilities. @@ -360,7 +363,8 @@ policy_list(int argc, char * const argv[], int verbose, const char *list_user) static int policy_version(int verbose) { - sudo_log(SUDO_CONV_INFO_MSG, "Sample policy plugin version %s\n", PACKAGE_VERSION); + sudo_log(SUDO_CONV_INFO_MSG, "Sample policy plugin version %s\n", + PACKAGE_VERSION); return true; } @@ -386,9 +390,10 @@ policy_close(int exit_status, int error) static int io_open(unsigned int version, sudo_conv_t conversation, - sudo_printf_t sudo_printf, char * const settings[], + sudo_printf_t sudo_plugin_printf, char * const settings[], char * const user_info[], char * const command_info[], - int argc, char * const argv[], char * const user_env[], char * const args[]) + int argc, char * const argv[], char * const user_env[], char * const args[], + const char **errstr) { int fd; char path[PATH_MAX]; @@ -432,14 +437,14 @@ io_version(int verbose) } static int -io_log_input(const char *buf, unsigned int len) +io_log_input(const char *buf, unsigned int len, const char **errstr) { ignore_result(fwrite(buf, len, 1, input)); return true; } static int -io_log_output(const char *buf, unsigned int len) +io_log_output(const char *buf, unsigned int len, const char **errstr) { const char *cp, *ep; bool ret = true; @@ -471,7 +476,8 @@ sudo_dso_public struct policy_plugin sample_policy = { NULL, /* invalidate */ NULL, /* init_session */ NULL, /* register_hooks */ - NULL /* deregister_hooks */ + NULL, /* deregister_hooks */ + NULL /* event_alloc() filled in by sudo */ }; /* @@ -488,5 +494,10 @@ sudo_dso_public struct io_plugin sample_io = { io_log_output, /* tty output */ io_log_input, /* command stdin if not tty */ io_log_output, /* command stdout if not tty */ - io_log_output /* command stderr if not tty */ + io_log_output, /* command stderr if not tty */ + NULL, /* register_hooks */ + NULL, /* deregister_hooks */ + NULL, /* change_winsize */ + NULL, /* log_suspend */ + NULL /* event_alloc() filled in by sudo */ }; From 8087604e5ae2f58538c99b2f344c4fd743790a73 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 21 Oct 2022 09:12:11 -0600 Subject: [PATCH 184/186] Build the sample plugin but do not install it by default. We no longer install the sample approval plugin. --- Makefile.in | 16 ++++++++-------- plugins/sample/Makefile.in | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile.in b/Makefile.in index bf884ae6e7..c4055c3be1 100644 --- a/Makefile.in +++ b/Makefile.in @@ -58,10 +58,10 @@ python_version = @PYTHON_VERSION@ SUBDIRS = lib/util @ZLIB_SRC@ lib/eventlog lib/fuzzstub lib/iolog \ lib/protobuf-c @LOGSRV_SRC@ @LOGSRVD_SRC@ plugins/audit_json \ - plugins/group_file plugins/sample_approval plugins/sudoers \ - plugins/system_group @PYTHON_PLUGIN_SRC@ src include docs examples + plugins/group_file plugins/sudoers plugins/system_group \ + @PYTHON_PLUGIN_SRC@ src include docs examples -SAMPLES = plugins/sample +SAMPLES = plugins/sample plugins/sample_approval VERSION = @PACKAGE_VERSION@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ @@ -107,13 +107,13 @@ PVS_IGNORE = 'V707,V011,V002,V536,V568' PVS_LOG_OPTS = -a 'GA:1,2' -e -t errorfile -d $(PVS_IGNORE) all: config.status - for d in $(SUBDIRS); do \ + for d in $(SUBDIRS) $(SAMPLES); do \ (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done check check-verbose check-fuzzer fuzz pre-install: config.status - for d in $(SUBDIRS); do \ + for d in $(SUBDIRS) $(SAMPLES); do \ (cd $$d && exec $(MAKE) $@) && continue; \ exit $$?; \ done @@ -132,7 +132,7 @@ spell: cppcheck: config.status rval=0; \ - for d in $(SUBDIRS); do \ + for d in $(SUBDIRS) $(SAMPLES); do \ echo checking $$d; \ (cd $$d && exec $(MAKE) CPPCHECK_OPTS="$(CPPCHECK_OPTS)" $@) || rval=`expr $$rval + $$?`; \ done; \ @@ -140,7 +140,7 @@ cppcheck: config.status splint: config.status rval=0; \ - for d in $(SUBDIRS); do \ + for d in $(SUBDIRS) $(SAMPLES); do \ echo splinting $$d; \ (cd $$d && exec $(MAKE) SPLINT_OPTS="$(SPLINT_OPTS)" $@) || rval=`expr $$rval + $$?`; \ done; \ @@ -163,7 +163,7 @@ cov-analyze: cov-upload pvs-studio: config.status files=; \ rval=0; \ - for d in $(SUBDIRS); do \ + for d in $(SUBDIRS) $(SAMPLES); do \ (cd $$d && exec $(MAKE) PVS_IGNORE="$(PVS_IGNORE)" pvs-log-files) || rval=`expr $$rval + $$?`; \ for f in $$d/*.plog; do \ if test "$$f" != "$$d/*.plog"; then \ diff --git a/plugins/sample/Makefile.in b/plugins/sample/Makefile.in index 412dac3a6e..e0a814c3e6 100644 --- a/plugins/sample/Makefile.in +++ b/plugins/sample/Makefile.in @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: ISC # -# Copyright (c) 2011-2018 Todd C. Miller +# Copyright (c) 2011-2022 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 From ebd285850de08c2e0312aa8e3386b5b597c4e2bf Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 21 Oct 2022 11:24:38 -0600 Subject: [PATCH 185/186] Sync clean target with other Makefile.in files. --- plugins/audit_json/Makefile.in | 4 ++-- plugins/sample_approval/Makefile.in | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/audit_json/Makefile.in b/plugins/audit_json/Makefile.in index 2ec476bcc5..199a60d978 100644 --- a/plugins/audit_json/Makefile.in +++ b/plugins/audit_json/Makefile.in @@ -191,8 +191,8 @@ check: check-fuzzer check-verbose: check clean: - -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a *.i *.plog \ - stamp-* core *.core core.* + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a + -rm -f *.i *.plog stamp-* core *.core core.* mostlyclean: clean diff --git a/plugins/sample_approval/Makefile.in b/plugins/sample_approval/Makefile.in index 212fe8d8e9..fb3b435cd9 100644 --- a/plugins/sample_approval/Makefile.in +++ b/plugins/sample_approval/Makefile.in @@ -191,8 +191,8 @@ check: check-fuzzer check-verbose: check clean: - -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a *.i *.plog \ - stamp-* core *.core core.* + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a + -rm -f *.i *.plog stamp-* core *.core core.* mostlyclean: clean From 802e500cca3af263dc14e71119b9bbc6b61422ea Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 21 Oct 2022 11:30:04 -0600 Subject: [PATCH 186/186] Regenerate dependencies for src/sesh.c. --- src/Makefile.in | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index aee91ca2e9..bfa9415651 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -884,16 +884,16 @@ selinux.i: $(srcdir)/selinux.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< 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_event.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ +sesh.o: $(srcdir)/sesh.c $(incdir)/compat/getopt.h $(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 $(srcdir)/sudo_exec.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(HARDENING_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_event.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ +sesh.i: $(srcdir)/sesh.c $(incdir)/compat/getopt.h $(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 $(srcdir)/sudo_exec.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h