diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e91529392..eb975a4a8 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 diff --git a/INSTALL.md b/INSTALL.md index e6a123138..9946bd08b 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 @@ -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/LICENSE.md b/LICENSE.md index 89cab969f..07c91799d 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 @@ -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/MANIFEST b/MANIFEST index 6292985b8..ed456e6f2 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 @@ -251,6 +252,8 @@ lib/util/mkdirat.c 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 @@ -278,6 +281,8 @@ 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 lib/util/regress/strsig/strsig_test.c @@ -1018,6 +1023,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 @@ -1196,6 +1203,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/Makefile.in b/Makefile.in index 6de746f75..c4055c3be 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@ @@ -70,6 +70,8 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ SHELL = @SHELL@ +EGREP = @EGREP@ +GREP = @GREP@ SED = @SED@ INSTALL = $(SHELL) $(scriptdir)/install-sh -c @@ -105,19 +107,19 @@ 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 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 | $(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,11 +128,11 @@ 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 `$(EGREP) -v -f etc/codespell.skip MANIFEST` ) 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; \ @@ -138,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; \ @@ -161,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 \ @@ -234,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; \ @@ -440,4 +442,4 @@ sandwich: fi .PHONY: clean mostlyclean distclean cleandir clobber realclean ChangeLog \ - me a sandwhich check-format reformat + me a sandwich check-format reformat diff --git a/NEWS b/NEWS index 10744d326..65502ecf7 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,127 @@ +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 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 + 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. + + * 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. + + * 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. + + * 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. + + * 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. + + * 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. + + * 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 diff --git a/config.h.in b/config.h.in index c9c024a15..ba4d00056 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 @@ -599,11 +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 `mkstemps' function. */ -#undef HAVE_MKSTEMPS +/* 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 `mkostempsat_np' function. */ +#undef HAVE_MKOSTEMPSAT_NP /* Define to 1 if you have the header file. */ #undef HAVE_MPS_LDAP_SSL_H @@ -686,6 +695,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 @@ -1448,7 +1460,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 b/configure index 2363bb148..efdf3f1f2 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 @@ -17851,9 +17851,23 @@ 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'} + + # 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 @@ -22733,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 @@ -23297,8 +23337,12 @@ fi fi done +sudo_mktemp=no +case "$host_os" in + darwin*) + # macOS has these but uses a _np (non-portable) suffix - for ac_func in 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" @@ -23309,11 +23353,32 @@ 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 + ;; + *) + + 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 for ac_func in arc4random random lrand48 do : @@ -23343,9 +23408,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 @@ -32298,7 +32362,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 -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} @@ -32384,7 +32448,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 @@ -33050,7 +33114,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 +33182,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 9f845eddd..103bc4fad 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]) @@ -2080,9 +2080,17 @@ 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'} + + # 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 @@ -2865,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) @@ -2949,15 +2961,24 @@ 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 +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]) 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 @@ -4995,7 +5016,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 -Wwrite-strings" AX_CHECK_COMPILE_FLAG([-Wshadow], [CFLAGS="$CFLAGS -Wshadow"]) dnl dnl The fallthrough attribute is supported by gcc 7.0 and clang 10. @@ -5032,7 +5053,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 @@ -5525,7 +5546,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/docs/UPGRADE.md b/docs/UPGRADE.md index d61eea551..5b2271cec 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 diff --git a/docs/cvtsudoers.man.in b/docs/cvtsudoers.man.in index 5e65be3bf..2b5ac6b78 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" "September 29, 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 @@ -143,12 +142,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 +156,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 +263,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 +\fICmnd_Alias\fR, +\fIHost_alias\fR, +or +\fIUser_Alias\fR +may be specified as the \(lqcmnd\(rq, \(lqhost\(rq, or @@ -436,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. @@ -522,6 +526,754 @@ 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. +.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 +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, +\fInetgroup\fR, +\fInetworkaddr\fR, +\fInonunixgid\fR, +\fInonunixgroup\fR, +\fIusergid\fR, +\fIusergroup\fR, +\fIuserid\fR, +\fIusername\fR, +or alias entries match. +.sp +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 +"Defaults": [ + { + "Binding": [ + { "hostname": "somehost" } + ], + "Options": [ + { "set_home": true }, + { + "operation": "list_add", + "env_keep": [ + "DISPLAY" + ] + } + ] + } +] +.RE +.fi +.RE +.TP 6n +User_Aliases +A JSON object containing one or more +\fIsudoers\fR +\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 +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, 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 +"User_Aliases": { + "SYSADMIN": [ + { "username": "will" }, + { "usergroup": "wheel" }, + { "netgroup": "admin" } + ] +} +.RE +.fi +.RE +.TP 6n +Runas_Aliases +A JSON object containing one or more +\fIsudoers\fR +\fIRunas_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 +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, 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 +"Runas_Aliases": { + "DB": [ + { "username": "oracle" }, + { "username": "sybase" } + ], + "OP": [ + { "username": "root" }, + { "username": "operator" } + ] +} +.RE +.fi +.RE +.TP 6n +Host_Aliases +A JSON object containing one or more +\fIsudoers\fR +\fIHost_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 +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, 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 +"Host_Aliases": { + "DORMNET": [ + { "networkaddr": "128.138.243.0" }, + { "networkaddr": "128.138.204.0/24" } + ], + "SERVERS": [ + { "hostname": "boulder" }, + { "hostname": "refuge" } + ] +} +.RE +.fi +.RE +.TP 6n +Cmnd_Aliases +A JSON object containing one or more +\fIsudoers\fR +\fICmnd_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 +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, 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 +"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 +.RE +.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 +.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 +\fIdefaults\fR, +\fIdefaults_command\fR, +\fIdefaults_host\fR, +\fIdefaults_runas\fR, +or +\fIdefaults_user\fR. +.TP 10n +binding +For +\fIdefaults_command\fR, +\fIdefaults_host\fR, +\fIdefaults_runas\fR, +and +\fIdefaults_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 +\(oq=\(cq +(assignment), +\(oq+=\(cq +(append), +or +\(oq-=\(cq +(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 +\fICmnd_Alias\fR +\fIHost_Alias\fR, +\fIRunas_Alias\fR, +or +\fIUser_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 +\fICmnd_Alias\fR, +\fIHost_Alias\fR, +\fIRunas_Alias\fR, +or +\fIUser_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 +\fIUser_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 +\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 +\fIRunas_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 +\fIRunas_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 7aa06868f..6d73a0987 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 September 29, 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 @@ -125,12 +124,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 +136,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 +216,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 +.Em Cmnd_Alias , +.Em Host_alias , +or +.Em User_Alias +may be specified as the .Dq cmnd , .Dq host , or @@ -360,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 @@ -379,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. @@ -454,6 +458,656 @@ 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. +.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 +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 netgroup , +.Em networkaddr , +.Em nonunixgid , +.Em nonunixgroup , +.Em usergid , +.Em usergroup , +.Em userid , +.Em username , +or alias entries match. +.Pp +For example, the following +.Em sudoers +entry: +.Bd -literal +Defaults@somehost set_home, env_keep += DISPLAY +.Ed +.Pp +converts to: +.Bd -literal +"Defaults": [ + { + "Binding": [ + { "hostname": "somehost" } + ], + "Options": [ + { "set_home": true }, + { + "operation": "list_add", + "env_keep": [ + "DISPLAY" + ] + } + ] + } +] +.Ed +.It User_Aliases +A JSON object containing one or more +.Em sudoers +.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 +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, the following +.Em sudoers +entry: +.Bd -literal +User_Alias SYSADMIN = will, %wheel, +admin +.Ed +.Pp +converts to: +.Bd -literal +"User_Aliases": { + "SYSADMIN": [ + { "username": "will" }, + { "usergroup": "wheel" }, + { "netgroup": "admin" } + ] +} +.Ed +.It Runas_Aliases +A JSON object containing one or more +.Em sudoers +.Em 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, the following +.Em sudoers +entry: +.Bd -literal +Runas_Alias DB = oracle, sybase : OP = root, operator +.Ed +.Pp +converts to: +.Bd -literal +"Runas_Aliases": { + "DB": [ + { "username": "oracle" }, + { "username": "sybase" } + ], + "OP": [ + { "username": "root" }, + { "username": "operator" } + ] +} +.Ed +.It Host_Aliases +A JSON object containing one or more +.Em sudoers +.Em 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, 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": [ + { "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 +.Em 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, 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": [ + { "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 +.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 +.Em defaults , +.Em defaults_command , +.Em defaults_host , +.Em defaults_runas , +or +.Em defaults_user . +.It binding +For +.Em defaults_command , +.Em defaults_host , +.Em defaults_runas , +and +.Em 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 +.Ql = +(assignment), +.Ql += +(append), +or +.Ql -= +(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 +.Em Cmnd_Alias +.Em Host_Alias , +.Em Runas_Alias , +or +.Em 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 +.Em Cmnd_Alias , +.Em Host_Alias , +.Em Runas_Alias , +or +.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. +.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 +.Em 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 +.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 +.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. +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 +.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. +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 +.El .Sh FILES .Bl -tag -width 24n .It Pa @sysconfdir@/cvtsudoers.conf diff --git a/docs/schema.OpenLDAP b/docs/schema.OpenLDAP index e1d525f84..451c5250a 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 e51286436..56ad02bc0 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 8748dfc2a..8948ca4ae 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' diff --git a/docs/sudo.conf.man.in b/docs/sudo.conf.man.in index e5433a1b0..485c1fd02 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 add83a667..20c898edb 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 15a07c0ac..8b95deefe 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@" "September 13, 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] @@ -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 @@ -532,6 +528,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, @@ -558,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 @@ -566,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, @@ -579,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 @@ -691,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 @@ -724,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 @@ -762,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@) @@ -970,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. @@ -981,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 @@ -1070,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. @@ -1160,7 +1170,7 @@ or when is enabled in \fIsudoers\fR and -\fIHOME\fR +\fRHOME\fR is not present in the \fIenv_keep\fR list. @@ -1210,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 @@ -1299,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 @@ -1484,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 3b1914aa2..82985f2da 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 September 13, 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 .\} @@ -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 # @@ -505,6 +501,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, @@ -526,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 , @@ -543,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 @@ -645,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 # @@ -676,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 @@ -712,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@ @@ -911,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. @@ -922,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 @@ -1011,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. @@ -1096,7 +1101,7 @@ or when is enabled in .Em sudoers and -.Em HOME +.Ev HOME is not present in the .Em env_keep list. @@ -1138,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 @@ -1206,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" @@ -1374,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 5e0e1a91e..fadb8b6ec 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 af9239c29..daa4a551b 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 84b5b03e8..ccdcca481 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 ba017e1a5..d3a388d99 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 c0bccf412..bffa4ecb6 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 8c6a1e59a..d2d809d7b 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 4fa699e21..d4e003628 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" "October 7, 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. @@ -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, @@ -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,11 +113,11 @@ 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, - 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 @@ -130,21 +132,21 @@ 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. .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 +\fIsudo_plugin_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 @@ -235,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. @@ -264,7 +265,7 @@ will only pass if sudo.conf(@mansectform@) contains a plugin-specific -\fRDebug\fR +\fIDebug\fR entry. .TP 6n ignore_ticket=bool @@ -304,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 @@ -321,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 @@ -463,7 +466,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 @@ -473,12 +476,19 @@ 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. .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. @@ -667,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 @@ -685,7 +695,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 +714,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 +741,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 +772,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -792,30 +802,30 @@ 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. 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 -\fRerror\fR +\fIerror\fR is zero. .PP If no @@ -823,17 +833,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,24 +855,25 @@ 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 \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 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 +894,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 @@ -911,12 +921,11 @@ 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 -will -be removed by +\(oq--\(cq +will be removed by \fBsudo\fR before the editor is executed. The plugin should also set @@ -939,21 +948,21 @@ 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. .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 +971,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 +989,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 @@ -1003,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, @@ -1028,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. @@ -1065,7 +1076,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 @@ -1109,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 @@ -1122,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 @@ -1188,7 +1210,7 @@ BSD systems. .TP 6n log_subcmds=bool -If specified, +If set, \fBsudo\fR will call the audit plugin's \fBaccept\fR() @@ -1204,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. @@ -1220,7 +1243,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), @@ -1237,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). @@ -1253,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). @@ -1269,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). @@ -1285,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). @@ -1301,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, @@ -1318,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), @@ -1335,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. @@ -1351,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. @@ -1367,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). @@ -1383,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). @@ -1399,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. @@ -1495,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 @@ -1530,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) @@ -1538,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 @@ -1561,7 +1585,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 +1593,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,11 +1630,11 @@ 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, - const char *list_user, const char **errstr); + const char *user, const char **errstr); .RE .fi .RS 6n @@ -1620,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 @@ -1629,20 +1653,20 @@ 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 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 +1677,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 +\fIuser\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 +1718,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); @@ -1725,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 @@ -1733,7 +1757,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,10 +1788,10 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -invalidate +\fIinvalidate\fR .nf .RS 6n -void (*invalidate)(int remove); +void (*invalidate)(int rmcred); .RE .fi .RS 6n @@ -1787,8 +1811,8 @@ that cache authentication credentials, this function will invalidate the credentials. If the -\fIremove\fR -flag is set, the plugin may remove +\fIrmcred\fR +flag is non-zero, the plugin may remove the credentials instead of simply invalidating them. .sp The @@ -1798,10 +1822,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 +1839,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,25 +1847,31 @@ The \fBclose\fR() function can be used to tear down the session that was opened by -\fRinit_session\fR. +\fBinit_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 +\fBsudo_plugin_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 \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 +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. -.sp -The +.TP 6n \fIuser_env_out\fR -argument points to the environment the command will -run in, in the form of a +The \fRNULL\fR-terminated -vector of -\(lqname=value\(rq -strings. -This is the same string passed back to the front-end via -the Policy Plugin's +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 parameter. If the @@ -1863,162 +1894,8 @@ version specified by the front-end before using \fIuser_env_out\fR. Failure to do so may result in a crash. -.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. -.RE .TP 6n -register_hooks -.nf -.RS 6n -void (*register_hooks)(int version, - int (*register_hook)(struct sudo_hook *hook)); -.RE -.fi -.RS 6n -.sp -The -\fBregister_hooks\fR() -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 -should be set to the -\fRNULL\fR -pointer. -.sp -The -\fIversion\fR -argument describes the version of the hooks API -supported by the -\fBsudo\fR -front-end. -.sp -The -\fBregister_hook\fR() -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 -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. -.sp -The -\fBregister_hooks\fR() -function is only available starting -with API version 1.2. -If the -\fBsudo\fR -front-end doesn't support API -version 1.2 or higher, -\fRregister_hooks\fR -will not be called. -.RE -.TP 6n -deregister_hooks -.nf -.RS 6n -void (*deregister_hooks)(int version, - int (*deregister_hook)(struct sudo_hook *hook)); -.RE -.fi -.RS 6n -.sp -The -\fBderegister_hooks\fR() -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 -should be set to the -\fRNULL\fR -pointer. -.sp -The -\fIversion\fR -argument describes the version of the hooks API -supported by the -\fBsudo\fR -front-end. -.sp -The -\fBderegister_hook\fR() -function should be used to deregister any -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 -will return an error. -.sp -See the -\fIHook function API\fR -section below for more information -about hooks. -.sp -The -\fBderegister_hooks\fR() -function is only available starting -with API version 1.2. -If the -\fBsudo\fR -front-end doesn't support API -version 1.2 or higher, -\fRderegister_hooks\fR -will not be called. -.RE -.TP 6n -event_alloc -.nf -.RS 6n -struct sudo_plugin_event * (*event_alloc)(void); -.RE -.fi -.RS 6n -.sp -The -\fBevent_alloc\fR() -function is used to allocate a -\fRstruct sudo_plugin_event\fR -which provides access to the main -\fBsudo\fR -event loop. -Unlike the other fields, the -\fBevent_alloc\fR() -pointer is filled in by the -\fBsudo\fR -front-end, not by the plugin. -.sp -See the -\fIEvent API\fR -section below for more information -about events. -.sp -The -\fBevent_alloc\fR() -function is only available starting -with API version 1.15. -If the -\fBsudo\fR -front-end doesn't support API -version 1.15 or higher, -\fBevent_alloc\fR() -will not be set. -.RE -.TP 6n -errstr +\fIerrstr\fR If the \fBinit_session\fR() function returns a value other than 1, the plugin may @@ -2044,6 +1921,151 @@ check the API version specified by the front-end before using \fIerrstr\fR. Failure to do so may result in a crash. +.PD 0 +.PP +.RE +.PD +.TP 6n +\fIregister_hooks\fR +.nf +.RS 6n +void (*register_hooks)(int version, + int (*register_hook)(struct sudo_hook *hook)); +.RE +.fi +.RS 6n +.sp +The +\fBregister_hooks\fR() +function is called by the sudo front-end to +register any hooks the plugin needs. +If the plugin does not support hooks, +\fIregister_hooks\fR +should be set to the +\fRNULL\fR +pointer. +.sp +The +\fIversion\fR +argument describes the version of the hooks API +supported by the +\fBsudo\fR +front-end. +.sp +The +\fBregister_hook\fR() +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 +\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. +.sp +The +\fBregister_hooks\fR() +function is only available starting +with API version 1.2. +If the +\fBsudo\fR +front-end doesn't support API +version 1.2 or higher, +\fBregister_hooks\fR() +will not be called. +.RE +.TP 6n +\fIderegister_hooks\fR +.nf +.RS 6n +void (*deregister_hooks)(int version, + int (*deregister_hook)(struct sudo_hook *hook)); +.RE +.fi +.RS 6n +.sp +The +\fBderegister_hooks\fR() +function is called by the sudo front-end +to deregister any hooks the plugin has registered. +If the plugin does not support hooks, +\fIderegister_hooks\fR +should be set to the +\fRNULL\fR +pointer. +.sp +The +\fIversion\fR +argument describes the version of the hooks API +supported by the +\fBsudo\fR +front-end. +.sp +The +\fBderegister_hook\fR() +function should be used to deregister any +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, +\fBderegister_hook\fR() +will return an error. +.sp +See the +\fIHook function API\fR +section below for more information about hooks. +.sp +The +\fBderegister_hooks\fR() +function is only available starting +with API version 1.2. +If the +\fBsudo\fR +front-end doesn't support API +version 1.2 or higher, +\fBderegister_hooks\fR() +will not be called. +.RE +.TP 6n +\fIevent_alloc\fR +.nf +.RS 6n +struct sudo_plugin_event * (*event_alloc)(void); +.RE +.fi +.RS 6n +.sp +The +\fBevent_alloc\fR() +function is used to allocate a +\fIstruct sudo_plugin_event\fR +which provides access to the main +\fBsudo\fR +event loop. +Unlike the other fields, the +\fIevent_alloc\fR +pointer is filled in by the +\fBsudo\fR +front-end, not by the plugin. +.sp +See the +\fIEvent API\fR +section below for more information +about events. +.sp +The +\fBevent_alloc\fR() +function is only available starting +with API version 1.15. +If the +\fBsudo\fR +front-end doesn't support API +version 1.15 or higher, +\fIevent_alloc\fR +will not be set. +.RE .PP \fIPolicy Plugin Version Macros\fR .nf @@ -2075,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); @@ -2111,13 +2133,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 +2172,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,11 +2193,11 @@ 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, - 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[]); @@ -2203,25 +2230,25 @@ 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. .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 +2259,7 @@ The \fBconversation\fR() function returns 0 on success and \-1 on failure. .TP 6n -plugin_printf +\fIsudo_plugin_printf\fR A pointer to a \fBprintf\fR()-style function that may be used by the @@ -2240,13 +2267,13 @@ 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 -settings +\fIsettings\fR A vector of user-supplied \fBsudo\fR settings in the form of @@ -2277,7 +2304,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 +2329,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 +2354,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 +2374,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 +2394,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 +2420,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 +2451,7 @@ Failure to do so may result in a crash. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -2440,32 +2468,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,23 +2505,25 @@ 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 \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 +\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 +2544,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 +2583,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 +2603,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 +2642,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 +2665,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 +2704,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 +2727,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 +2766,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 +2789,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 +2828,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 +2853,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 +2861,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 +2899,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 +2918,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 +2951,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 +2962,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. @@ -2978,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); @@ -3010,17 +3040,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,11 +3061,11 @@ 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, - 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); @@ -3062,14 +3094,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 +3116,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 +3130,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 +3161,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 +3186,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 +3197,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 +3208,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 +3228,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 +3241,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 +3260,7 @@ function is called. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -3245,7 +3277,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 +3286,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 +3306,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 +3322,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 +3357,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 +3383,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 +3391,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 +3411,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 +3430,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 +3445,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 +3463,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 +3472,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 +3498,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 +3517,7 @@ function is called. .RE .PD .TP 6n -error +\fIerror\fR .br .nf .RS 6n @@ -3503,21 +3535,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 +3557,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 +3583,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 +3602,7 @@ function is called. .RE .PD .TP 6n -show_version +\fIshow_version\fR .nf .RS 6n int (*show_version)(int verbose); @@ -3582,8 +3614,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 +3630,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 +3653,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. @@ -3656,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); @@ -3681,17 +3712,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,11 +3733,11 @@ 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, - 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); @@ -3738,14 +3771,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 +3786,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 +3794,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 +3825,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 +3850,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 +3861,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 +3872,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 +3892,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 +3905,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 +3924,7 @@ function is called. .RE .PD .TP 6n -close +\fIclose\fR .br .nf .RS 6n @@ -3919,7 +3952,7 @@ may be set to the pointer. .RE .TP 6n -check +\fIcheck\fR .br .nf .RS 6n @@ -3951,7 +3984,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 +4009,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 +4017,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 +4037,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 +4056,7 @@ function is called. .RE .PD .TP 6n -show_version +\fIshow_version\fR .nf .RS 6n int (*show_version)(int verbose); @@ -4035,8 +4068,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 +4170,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 +4194,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 +4217,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 +4234,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 +4256,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 +4276,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 +4317,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 +4343,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 +4401,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 +4418,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 +4436,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 +4464,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 +4501,7 @@ function. .RE .PD .TP 6n -closure +\fIclosure\fR A generic pointer that will be passed to the callback function. .PP The @@ -4473,8 +4509,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 +4544,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 +4568,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 +4589,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 +4610,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 +4643,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 +4658,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 +4718,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 +4790,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 +4821,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 +4834,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 +4842,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 +4873,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 +4884,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 +4905,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 +5004,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 @@ -4981,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, @@ -4990,13 +5022,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,10 +5036,10 @@ 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, +int (*init)(int version, sudo_printf_t sudo_plugin_printf, char *const argv[]); .RE .fi @@ -5029,20 +5061,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 +5090,7 @@ will be .RE .PD .TP 6n -cleanup +\fIcleanup\fR .nf .RS 6n void (*cleanup)(); @@ -5075,7 +5107,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 +5126,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 +5172,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 +5186,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 +5196,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 +5204,7 @@ The and \fIplugin_dir\fR entries were added to the -\fRsettings\fR +\fIsettings\fR list. .sp The @@ -5203,14 +5235,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 +5268,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 +5283,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 +5304,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 +5319,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 +5383,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 +5391,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,12 +5420,26 @@ The and \fIintercept_setid\fR entries were added to the -\fRsettings\fR +\fIsettings\fR list. The -\fIuser_ptrace\fR +\fIapparmor_profile\fR +and +\fIuse_ptrace\fR +entries were added to the +\fIcommand_info\fR +list. +.TP 6n +Version 1.20 (sudo 1.9.12) +The +\fIupdate_ticket\fR entry was added to the -\fRcommand_info\fR +\fIsettings\fR +list. +The +\fIintercept_verify\fR +entry was added to the +\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 24f2f5976..bca8fcbae 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 October 7, 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. @@ -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, @@ -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,10 +107,10 @@ 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[], + 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 @@ -121,34 +123,34 @@ 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. .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 sudo_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 @@ -215,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. @@ -244,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 @@ -281,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. @@ -297,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, @@ -405,7 +408,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 +416,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 @@ -429,11 +432,17 @@ 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 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 +451,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 @@ -594,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 . @@ -605,14 +614,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 +632,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 +641,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 +656,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 +685,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,28 +711,28 @@ 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. 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 -.Li error +.Fa error is zero. .El .Pp @@ -732,15 +741,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,22 +758,23 @@ 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 .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 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 +791,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 +809,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 -- +.Ql -- element. The -.Dq Li -- -will -be removed by +.Ql -- +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 @@ -838,20 +846,20 @@ 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. .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 +867,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 +878,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 @@ -896,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 @@ -916,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. @@ -952,7 +961,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 @@ -994,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 @@ -1007,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. @@ -1060,7 +1079,7 @@ on .Bx systems. .It log_subcmds=bool -If specified, +If set, .Nm sudo will call the audit plugin's .Fn accept @@ -1076,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 @@ -1089,7 +1109,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. @@ -1105,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. @@ -1120,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. @@ -1135,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. @@ -1150,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. @@ -1165,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. @@ -1181,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. @@ -1197,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. @@ -1212,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. @@ -1227,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. @@ -1242,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. @@ -1257,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 @@ -1341,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 @@ -1371,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 @@ -1379,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. @@ -1399,19 +1420,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,10 +1459,10 @@ 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); + const char *user, const char **errstr); .Ed .Pp List available privileges for the invoking user. @@ -1449,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 @@ -1458,19 +1479,19 @@ 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 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 +1501,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 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 +1536,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 @@ -1543,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 @@ -1551,7 +1572,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,9 +1599,9 @@ 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); +void (*invalidate)(int rmcred); .Ed .Pp The @@ -1598,8 +1619,8 @@ that cache authentication credentials, this function will invalidate the credentials. If the -.Em remove -flag is set, the plugin may remove +.Fa rmcred +flag is non-zero, the plugin may remove the credentials instead of simply invalidating them. .Pp The @@ -1607,9 +1628,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,45 +1642,50 @@ 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 -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 +Returns 1 on success, 0 on failure, and \-1 on error. +On error, the plugin may optionally call the +.Fn conversation +or +.Fn sudo_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 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 . -.Pp +.It Fa 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. -This is the same string passed back to the front-end via -the Policy Plugin's -.Em user_env_out +environment vector to use when executing the command. +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 @@ -1667,147 +1694,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. -.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. -.It register_hooks -.Bd -literal -compact -void (*register_hooks)(int version, - int (*register_hook)(struct sudo_hook *hook)); -.Ed -.Pp -The -.Fn register_hooks -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 -should be set to the -.Dv NULL -pointer. -.Pp -The -.Em version -argument describes the version of the hooks API -supported by the -.Nm sudo -front-end. -.Pp -The -.Fn register_hook -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 -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. -.Pp -The -.Fn register_hooks -function is only available starting -with API version 1.2. -If the -.Nm sudo -front-end doesn't support API -version 1.2 or higher, -.Li register_hooks -will not be called. -.It deregister_hooks -.Bd -literal -compact -void (*deregister_hooks)(int version, - int (*deregister_hook)(struct sudo_hook *hook)); -.Ed -.Pp -The -.Fn deregister_hooks -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 -should be set to the -.Dv NULL -pointer. -.Pp -The -.Em version -argument describes the version of the hooks API -supported by the -.Nm sudo -front-end. -.Pp -The -.Fn deregister_hook -function should be used to deregister any -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 -will return an error. -.Pp -See the -.Sx Hook function API -section below for more information -about hooks. -.Pp -The -.Fn deregister_hooks -function is only available starting -with API version 1.2. -If the -.Nm sudo -front-end doesn't support API -version 1.2 or higher, -.Li deregister_hooks -will not be called. -.It event_alloc -.Bd -literal -compact -struct sudo_plugin_event * (*event_alloc)(void); -.Ed -.Pp -The -.Fn event_alloc -function is used to allocate a -.Li struct sudo_plugin_event -which provides access to the main -.Nm sudo -event loop. -Unlike the other fields, the -.Fn event_alloc -pointer is filled in by the -.Nm sudo -front-end, not by the plugin. -.Pp -See the -.Sx Event API -section below for more information -about events. -.Pp -The -.Fn event_alloc -function is only available starting -with API version 1.15. -If the -.Nm sudo -front-end doesn't support API -version 1.15 or higher, -.Fn event_alloc -will not be set. -.It errstr +.It Fa errstr If the .Fn init_session function returns a value other than 1, the plugin may @@ -1834,6 +1723,133 @@ front-end before using .Fa errstr . Failure to do so may result in a crash. .El +.It Fa register_hooks +.Bd -literal -compact +void (*register_hooks)(int version, + int (*register_hook)(struct sudo_hook *hook)); +.Ed +.Pp +The +.Fn register_hooks +function is called by the sudo front-end to +register any hooks the plugin needs. +If the plugin does not support hooks, +.Fa register_hooks +should be set to the +.Dv NULL +pointer. +.Pp +The +.Fa version +argument describes the version of the hooks API +supported by the +.Nm sudo +front-end. +.Pp +The +.Fn register_hook +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 +.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. +.Pp +The +.Fn register_hooks +function is only available starting +with API version 1.2. +If the +.Nm sudo +front-end doesn't support API +version 1.2 or higher, +.Fn register_hooks +will not be called. +.It Fa deregister_hooks +.Bd -literal -compact +void (*deregister_hooks)(int version, + int (*deregister_hook)(struct sudo_hook *hook)); +.Ed +.Pp +The +.Fn deregister_hooks +function is called by the sudo front-end +to deregister any hooks the plugin has registered. +If the plugin does not support hooks, +.Fa deregister_hooks +should be set to the +.Dv NULL +pointer. +.Pp +The +.Fa version +argument describes the version of the hooks API +supported by the +.Nm sudo +front-end. +.Pp +The +.Fn deregister_hook +function should be used to deregister any +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, +.Fn deregister_hook +will return an error. +.Pp +See the +.Sx Hook function API +section below for more information about hooks. +.Pp +The +.Fn deregister_hooks +function is only available starting +with API version 1.2. +If the +.Nm sudo +front-end doesn't support API +version 1.2 or higher, +.Fn deregister_hooks +will not be called. +.It Fa event_alloc +.Bd -literal -compact +struct sudo_plugin_event * (*event_alloc)(void); +.Ed +.Pp +The +.Fn event_alloc +function is used to allocate a +.Vt struct sudo_plugin_event +which provides access to the main +.Nm sudo +event loop. +Unlike the other fields, the +.Fa event_alloc +pointer is filled in by the +.Nm sudo +front-end, not by the plugin. +.Pp +See the +.Sx Event API +section below for more information +about events. +.Pp +The +.Fn event_alloc +function is only available starting +with API version 1.15. +If the +.Nm sudo +front-end doesn't support API +version 1.15 or higher, +.Fa event_alloc +will not be set. +.El .Pp .Em Policy Plugin Version Macros .Bd -literal @@ -1861,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); @@ -1896,13 +1912,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 , @@ -1932,16 +1951,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 @@ -1949,10 +1970,10 @@ 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[], + 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[]); @@ -1983,24 +2004,24 @@ 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. .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). @@ -2010,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 plugin_printf +.It Fa sudo_plugin_printf A pointer to a .Fn printf Ns -style function that may be used by the @@ -2018,12 +2039,12 @@ 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 settings +.It Fa settings A vector of user-supplied .Nm sudo settings in the form of @@ -2038,7 +2059,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 @@ -2053,7 +2074,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. @@ -2062,7 +2083,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 @@ -2077,7 +2098,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. @@ -2086,7 +2107,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 @@ -2101,24 +2122,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 @@ -2126,7 +2148,7 @@ vector of strings. .Pp When parsing -.Em user_env , +.Fa user_env , the plugin should split on the .Sy first equal sign @@ -2137,7 +2159,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 @@ -2145,13 +2167,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 @@ -2160,9 +2182,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 @@ -2189,7 +2211,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 @@ -2202,26 +2224,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 @@ -2230,21 +2252,23 @@ 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 .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 +.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); @@ -2262,13 +2286,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 @@ -2295,7 +2319,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); @@ -2312,13 +2336,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 @@ -2345,7 +2369,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); @@ -2365,13 +2389,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 @@ -2398,7 +2422,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); @@ -2418,13 +2442,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 @@ -2451,7 +2475,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); @@ -2471,13 +2495,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 @@ -2504,17 +2528,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); @@ -2524,7 +2548,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 @@ -2532,11 +2556,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 @@ -2563,7 +2587,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 @@ -2579,11 +2603,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 @@ -2609,7 +2633,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 @@ -2617,7 +2641,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. @@ -2662,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); @@ -2693,16 +2717,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 @@ -2710,10 +2736,10 @@ 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[], + 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); @@ -2740,13 +2766,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 @@ -2760,7 +2786,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 @@ -2773,7 +2799,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 @@ -2788,7 +2814,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 @@ -2803,7 +2829,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. @@ -2812,7 +2838,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 @@ -2827,7 +2853,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. @@ -2838,16 +2864,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 @@ -2855,7 +2881,7 @@ vector of strings. .Pp When parsing -.Em submit_envp , +.Fa submit_envp , the plugin should split on the .Sy first equal sign @@ -2866,7 +2892,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 @@ -2874,11 +2900,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 @@ -2893,7 +2919,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 @@ -2906,7 +2932,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 , @@ -2914,23 +2940,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[], @@ -2943,13 +2969,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 , @@ -2976,7 +3002,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 @@ -2986,7 +3012,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 @@ -3001,14 +3027,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 @@ -3016,7 +3042,7 @@ vector of strings. .Pp When parsing -.Em run_envp , +.Fa run_envp , the plugin should split on the .Sy first equal sign @@ -3027,7 +3053,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 @@ -3042,7 +3068,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[], @@ -3054,9 +3080,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 , @@ -3070,7 +3096,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, @@ -3078,7 +3104,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 @@ -3088,7 +3114,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 @@ -3103,7 +3129,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 @@ -3118,7 +3144,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[], @@ -3132,26 +3158,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 @@ -3161,7 +3187,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 @@ -3176,7 +3202,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 @@ -3191,7 +3217,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 @@ -3200,8 +3226,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 @@ -3215,17 +3240,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 @@ -3233,12 +3258,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. @@ -3266,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); @@ -3290,16 +3315,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 @@ -3307,10 +3334,10 @@ 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[], + 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); @@ -3342,27 +3369,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 @@ -3377,7 +3404,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 @@ -3392,7 +3419,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. @@ -3401,7 +3428,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 @@ -3416,7 +3443,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. @@ -3427,16 +3454,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 @@ -3444,7 +3471,7 @@ vector of strings. .Pp When parsing -.Em submit_envp , +.Fa submit_envp , the plugin should split on the .Sy first equal sign @@ -3455,7 +3482,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 @@ -3463,11 +3490,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 @@ -3482,7 +3509,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 @@ -3504,7 +3531,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); @@ -3532,7 +3559,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. @@ -3541,7 +3568,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 @@ -3556,14 +3583,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 @@ -3571,7 +3598,7 @@ vector of strings. .Pp When parsing -.Em run_envp , +.Fa run_envp , the plugin should split on the .Sy first equal sign @@ -3582,7 +3609,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 @@ -3597,7 +3624,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 @@ -3606,8 +3633,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 @@ -3662,7 +3688,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 @@ -3698,18 +3724,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 @@ -3718,7 +3744,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 @@ -3734,7 +3760,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 @@ -3747,7 +3773,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 @@ -3763,7 +3789,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 @@ -3774,21 +3800,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 @@ -3808,10 +3836,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 @@ -3830,7 +3858,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; @@ -3883,9 +3911,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); @@ -3895,8 +3925,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. @@ -3906,29 +3938,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); @@ -3945,9 +3977,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. @@ -3956,14 +3988,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 @@ -3993,7 +4025,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 @@ -4012,7 +4044,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); @@ -4030,11 +4062,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 @@ -4044,7 +4076,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 @@ -4072,7 +4104,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 @@ -4082,7 +4114,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 @@ -4139,9 +4171,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 @@ -4205,25 +4237,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 @@ -4238,7 +4268,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. @@ -4248,37 +4278,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 @@ -4287,7 +4317,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 @@ -4297,7 +4327,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 @@ -4314,12 +4344,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 @@ -4338,7 +4368,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 @@ -4409,14 +4439,14 @@ 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 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, @@ -4424,22 +4454,22 @@ 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, +int (*init)(int version, sudo_printf_t sudo_plugin_printf, char *const argv[]); .Ed .Pp @@ -4459,18 +4489,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 @@ -4478,11 +4508,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 @@ -4494,7 +4524,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); @@ -4503,25 +4533,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 @@ -4546,7 +4576,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' @@ -4559,7 +4589,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 @@ -4568,7 +4598,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 @@ -4576,7 +4606,7 @@ The and .Em plugin_dir entries were added to the -.Li settings +.Fa settings list. .Pp The @@ -4606,13 +4636,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 @@ -4636,7 +4666,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 @@ -4650,19 +4680,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. @@ -4670,13 +4700,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 , @@ -4684,38 +4714,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 @@ -4737,7 +4772,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 @@ -4745,22 +4780,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 @@ -4768,12 +4806,25 @@ The and .Em intercept_setid entries were added to the -.Li settings +.Fa settings list. The -.Em user_ptrace +.Em apparmor_profile +and +.Em use_ptrace +entries were added to the +.Fa command_info +list. +.It Version 1.20 (sudo 1.9.12) +The +.Em update_ticket entry was added to the -.Li command_info +.Fa settings +list. +The +.Em intercept_verify +entry was added to the +.Fa command_info list. .El .Sh SEE ALSO diff --git a/docs/sudo_plugin_python.man.in b/docs/sudo_plugin_python.man.in index 98c0abbfc..e67f55982 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 111bed672..e17e1d272 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 diff --git a/docs/sudo_sendlog.man.in b/docs/sudo_sendlog.man.in index 72e118725..eea3cca14 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 42edb553e..e8c17ae4e 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 259e29e93..3fd34f3b0 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@" "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,53 +796,51 @@ 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 .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 \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 @@ -1610,9 +1606,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 +1638,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 +1662,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 e967f06c3..39230c243 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 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,49 +747,47 @@ 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' - 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 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 @@ -1474,9 +1470,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 +1502,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 +1526,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.man.in b/docs/sudoers.man.in index 5f73f7ca2..dec073b31 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@" "October 20, 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. @@ -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, @@ -206,7 +209,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 @@ -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 @@ -258,12 +267,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 @@ -294,27 +301,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 @@ -400,7 +397,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 +417,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 +455,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. @@ -468,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 @@ -613,7 +612,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 +690,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 +709,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 +728,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 +782,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 +800,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 +835,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 +850,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 +862,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 +879,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 +926,24 @@ 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). +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 -\fRRunas_Member\fR +\fIRunas_Member\fR need not be listed in the password or group database. .nf .sp @@ -955,7 +961,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 +983,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 +1033,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 +1050,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 +1061,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 +1088,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 +1097,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 +1106,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 +1117,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 +1167,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 +1180,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 +1247,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. @@ -1316,28 +1322,30 @@ 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. 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,32 +1353,35 @@ 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 -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. +\fIRunas_Spec\fR +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 -\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 +1402,7 @@ on the host boulder\(embut only as \fBoperator\fR. -E.g., +For example: .nf .sp .RS 0n @@ -1400,7 +1411,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 +1437,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 +1450,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 +1481,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 +1490,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 @@ -1495,11 +1506,14 @@ 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 -\fRCmnd\fR +\fICmnd\fR may have zero or more options associated with it. Options may consist of .if \n(SL \{\ @@ -1511,11 +1525,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. @@ -1562,10 +1576,13 @@ 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. E.g., +any profile. +For example: .nf .sp .RS 0n @@ -1580,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, @@ -1642,10 +1661,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 +1698,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 +1707,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 +1745,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 +1778,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 +1805,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 +1819,7 @@ and overrides \fREXEC\fR). .TP 2n -\fIEXEC\fR and \fINOEXEC\fR +\fREXEC\fR and \fRNOEXEC\fR .sp If \fBsudo\fR @@ -1833,16 +1852,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,29 +1871,23 @@ 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 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 -\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 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 -\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 +1902,7 @@ or \fB\-v\fR options. A -\fINOMAIL\fR +\fRNOMAIL\fR tag will also override the \fImail_always\fR and @@ -1903,7 +1917,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 +1927,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. @@ -1939,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. @@ -1966,10 +1980,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 +1995,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 +2022,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 @@ -2023,6 +2037,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. .sp In the following example, user \fBchuck\fR @@ -2058,21 +2077,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 @@ -2144,9 +2163,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 @@ -2207,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 @@ -2244,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 @@ -2274,14 +2298,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 @@ -2342,7 +2366,7 @@ contains the line: .nf .sp .RS 4n -\fR@include sudoers.local\fR +@include sudoers.local .RE .fi .PP @@ -2350,7 +2374,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, @@ -2368,7 +2392,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 @@ -2391,6 +2415,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 @@ -2405,14 +2430,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 @@ -2438,11 +2463,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 @@ -2455,7 +2480,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 \{\ @@ -2486,16 +2511,18 @@ 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 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 -ALL,!root +ALL, !root .RE .fi .PP @@ -2509,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. @@ -2550,7 +2579,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 @@ -2559,9 +2588,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 @@ -2573,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 @@ -2678,10 +2712,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 @@ -2712,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 @@ -2765,22 +2803,24 @@ 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 \fBsudo\fR -is run by root with the +is run by +\fBroot\fR +with the \fB\-V\fR option. If the @@ -2833,7 +2873,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 @@ -2856,8 +2896,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 @@ -2869,16 +2909,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. @@ -2928,11 +2968,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 @@ -2958,7 +2995,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 @@ -2997,7 +3034,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. @@ -3008,7 +3045,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 @@ -3078,19 +3115,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 @@ -3099,12 +3131,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 @@ -3140,20 +3175,59 @@ by default. .sp This setting is only supported by version 1.9.0 or higher. .TP 18n +log_stderr +If set, +\fBsudo\fR +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 +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 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 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 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, @@ -3175,6 +3249,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 @@ -3289,7 +3395,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 @@ -3341,7 +3447,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. @@ -3368,7 +3474,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 @@ -3391,7 +3497,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 @@ -3399,15 +3505,58 @@ 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, 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. +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. +This flag has no effect unless the +\fIintercept\fR +flag is enabled or the +\fRINTERCEPT\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). 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. @@ -3421,7 +3570,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. @@ -3630,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 -\(lq\fRsudo sudo /bin/sh\fR\(rq. +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 @@ -3652,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 @@ -3662,7 +3819,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. @@ -3682,7 +3839,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 @@ -3703,7 +3860,7 @@ If set, will prompt for the password of the user defined by the \fIrunas_default\fR option (defaults to -\fR@runas_default@\fR) +\fB@runas_default@\fR) instead of the password of the invoking user when running a command or editing a file. This flag is @@ -3728,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 @@ -3749,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 @@ -3782,6 +3943,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. @@ -3814,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). @@ -3826,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 @@ -3854,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 @@ -3878,9 +4049,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 @@ -3904,8 +4075,8 @@ If set, will prompt for the password of the user specified by the \fB\-u\fR -option (defaults to -\fRroot\fR) +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 @@ -4010,7 +4181,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 @@ -4040,7 +4211,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 @@ -4060,14 +4231,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. @@ -4076,7 +4246,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 @@ -4084,12 +4254,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. @@ -4113,8 +4283,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, @@ -4146,22 +4315,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 @@ -4169,20 +4331,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 @@ -4195,10 +4352,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 @@ -4226,7 +4381,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. @@ -4237,18 +4392,18 @@ 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 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. @@ -4300,15 +4455,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 @@ -4368,30 +4523,32 @@ 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) +be run as (e.g., +\fBroot\fR) .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) +be run as (e.g., +\fBwheel\fR) .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 @@ -4420,7 +4577,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 @@ -4430,9 +4587,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. @@ -4446,7 +4603,7 @@ overwritten unless \fIiolog_file\fR ends in six or more -\fRX\fRs. +\fIX\fRs. .TP 18n iolog_flush If set, @@ -4571,7 +4728,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. @@ -4581,10 +4738,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 @@ -4600,9 +4757,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. @@ -4619,7 +4776,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. @@ -4635,7 +4792,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 @@ -4652,17 +4809,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 @@ -4671,18 +4828,19 @@ 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) +be run as (defaults to +\fB@runas_default@\fR) .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, @@ -4699,7 +4857,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 @@ -4738,14 +4896,14 @@ 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. +\fB@runas_default@\fR. .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 @@ -4772,10 +4930,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, @@ -4788,10 +4943,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 @@ -4823,7 +4975,7 @@ timestampowner The owner of the lecture status directory, time stamp directory and all files stored therein. The default is -\fRroot\fR. +\fBroot\fR. .if \n(SL \{\ .TP 18n type @@ -4854,7 +5006,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 @@ -4862,9 +5014,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. @@ -4879,7 +5031,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 @@ -4932,7 +5084,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 @@ -4948,6 +5100,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 @@ -5055,7 +5235,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 @@ -5097,7 +5277,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. @@ -5111,10 +5291,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), @@ -5193,9 +5372,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. @@ -5240,7 +5419,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 @@ -5285,8 +5464,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 @@ -5309,8 +5487,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, @@ -5330,8 +5507,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 @@ -5435,21 +5611,22 @@ 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 -is run by root with -the +is run by +\fBroot\fR +with the \fB\-V\fR option. .RE @@ -5461,15 +5638,17 @@ 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 -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 @@ -5486,16 +5665,18 @@ 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 \fBsudo\fR -is run by root with the +is run by +\fBroot\fR +with the \fB\-V\fR option. .sp @@ -5588,7 +5769,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 @@ -5627,9 +5808,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: @@ -5642,7 +5823,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 @@ -5743,7 +5924,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 @@ -5833,12 +6014,12 @@ 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. .TP 3n -unable to stat @sysconfdir@/sudoers +unable to open @sysconfdir@/sudoers The \fI@sysconfdir@/sudoers\fR file is missing. @@ -5862,7 +6043,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. @@ -5879,7 +6060,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. @@ -5898,7 +6079,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. @@ -5908,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 @@ -5945,7 +6128,7 @@ The and \fIprogname\fR fields are added by the system's -\fBsyslog\fR() +syslog(3) function, not \fBsudoers\fR itself. @@ -5998,11 +6181,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 @@ -6012,7 +6244,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. @@ -6022,7 +6254,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 @@ -6079,12 +6425,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 @@ -6168,6 +6514,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. @@ -6177,19 +6530,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 @@ -6217,6 +6593,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 @@ -6336,14 +6715,15 @@ 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 -\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 @@ -6421,17 +6801,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 @@ -6443,9 +6818,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 @@ -6497,8 +6871,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 @@ -6508,8 +6882,9 @@ groups). The user \fBpete\fR is allowed to change anyone's password except for -root on the -\fIHPPA\fR +\fBroot\fR +on the +\fRHPPA\fR machines. Because command line arguments are matched as a single, concatenated string, the @@ -6544,12 +6919,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.) @@ -6592,8 +6967,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) @@ -6606,11 +6981,12 @@ 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 -to the +may su to anyone except +\fBroot\fR +but he is not allowed to specify any options to the su(1) command. .nf @@ -6623,8 +6999,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 @@ -6634,21 +7010,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 @@ -6683,8 +7059,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) @@ -6698,7 +7074,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. @@ -6724,9 +7100,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 @@ -6735,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" @@ -6763,13 +7141,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 @@ -6878,12 +7256,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 @@ -6891,62 +7264,80 @@ 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 +execve(2), +execl(3), +execle(3), +execlp(3), +execv(3), +execvp(3), +execvpe(3), +and +system(3) +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 -\fIintercept\fR -functionality 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. -.sp -Linux systems that support -seccomp(2) -filtering can use a different method involving -ptrace(2) -instead of pre-loading a shared library. -This method supports both static and dynamic executables as well as -\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. +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 -mode. -The Linux -seccomp(2)\-based -implementation does not share these restrictions. +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, which +\fBsudo\fR +relies on. +.sp +The second mechanism, +\fItrace\fR, +is available on Linux systems that support +seccomp(2) +filtering. +It uses +ptrace(2) +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. +Functions utilizing the +execveat(2) +system call, such as +fexecve(3), +are not currently intercepted. .sp The \fIintercept\fR @@ -6954,11 +7345,7 @@ 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 @@ -6987,6 +7374,28 @@ 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 +\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 +\fIdso\fR +method. +See the description of the +\fIintercept_verify\fR +setting for more information. .RE .TP 10n log @@ -7027,26 +7436,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, @@ -7088,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 @@ -7143,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 @@ -7164,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 @@ -7181,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 @@ -7289,11 +7705,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 @@ -7423,7 +7839,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 29aeacfdd..d09f06a99 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 October 20, 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. @@ -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 , @@ -195,7 +198,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 @@ -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 @@ -247,13 +256,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 @@ -284,27 +290,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 -.Li LOG_INPUT -and -.Li 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 @@ -390,7 +386,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 +406,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 +441,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. @@ -455,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 @@ -600,7 +598,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 +672,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 +688,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 +706,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 +754,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 +801,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 +816,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 +828,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 +845,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 +888,24 @@ 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). +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 -.Li Runas_Member +.Em Runas_Member need not be listed in the password or group database. .Bd -literal Host_List ::= Host | @@ -918,7 +920,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 +942,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 +989,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 +1006,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 +1017,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 +1044,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 +1053,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 +1062,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 +1073,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 +1117,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 +1130,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 +1194,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. @@ -1273,28 +1275,30 @@ 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 . 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,32 +1306,35 @@ 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 -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. +.Em Runas_Spec +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 -.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 +1352,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 +1381,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 +1391,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 +1416,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 @@ -1428,11 +1435,14 @@ 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 -.Li Cmnd +.Em Cmnd may have zero or more options associated with it. Options may consist of .if \n(SL \{\ @@ -1446,11 +1456,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 . @@ -1495,10 +1505,13 @@ 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. 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 @@ -1510,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 , @@ -1563,15 +1578,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 +1617,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 +1626,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 +1664,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 +1673,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 +1697,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 +1706,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 +1763,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,27 +1783,21 @@ 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 flag on a per-command basis. -For more information, see the description of -.Em log_input -in the -.Sx SUDOERS OPTIONS -section below. -.It Em LOG_OUTPUT No and Em NOLOG_OUTPUT +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. -.It Em MAIL No and Em NOMAIL +For more information, see +.Sx "I/O LOGGING" . +.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 +1812,7 @@ or .Fl v options. A -.Em NOMAIL +.Dv NOMAIL tag will also override the .Em mail_always and @@ -1816,24 +1826,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 @@ -1848,7 +1858,7 @@ to run and .Pa /usr/bin/lprm as -.Sy root +.Sy @runas_default@ on the machine .Dq rushmore without authenticating himself. @@ -1863,35 +1873,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 +1917,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 @@ -1926,6 +1936,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 @@ -1939,7 +1954,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 @@ -1957,17 +1972,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 @@ -2038,9 +2053,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 @@ -2101,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 @@ -2132,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 @@ -2159,14 +2179,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 @@ -2222,14 +2242,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 , @@ -2244,7 +2264,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 @@ -2264,6 +2284,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 @@ -2278,14 +2299,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 @@ -2311,11 +2332,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 @@ -2328,22 +2349,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. @@ -2355,14 +2376,16 @@ 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: +For example, to match all users except for +.Sy root +one would use: .Bd -literal -offset 4n -ALL,!root +ALL, !root .Ed .Pp If the @@ -2372,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. @@ -2415,7 +2440,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 @@ -2424,9 +2449,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 @@ -2437,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 @@ -2454,9 +2484,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 @@ -2536,10 +2566,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 @@ -2569,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 @@ -2621,22 +2655,24 @@ 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 .Nm sudo -is run by root with the +is run by +.Sy root +with the .Fl V option. If the @@ -2687,7 +2723,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 @@ -2710,8 +2746,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 @@ -2722,16 +2758,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. @@ -2778,13 +2814,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@ @@ -2807,7 +2838,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 @@ -2843,7 +2874,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 . @@ -2854,7 +2885,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 @@ -2917,19 +2948,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 @@ -2937,12 +2963,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 @@ -2974,20 +3003,56 @@ 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 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 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 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 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 , @@ -3008,6 +3073,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 @@ -3114,7 +3209,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 @@ -3160,12 +3255,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. @@ -3191,7 +3286,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 @@ -3213,22 +3308,64 @@ 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 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, 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. +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. +This flag has no effect unless the +.Em intercept +flag is enabled or the +.Dv 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). 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. @@ -3236,12 +3373,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. @@ -3438,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 -.Dq Li sudo sudo /bin/sh . +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 @@ -3459,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 @@ -3468,7 +3613,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. @@ -3486,7 +3631,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 @@ -3506,7 +3651,7 @@ If set, will prompt for the password of the user defined by the .Em runas_default option (defaults to -.Li @runas_default@ ) +.Sy @runas_default@ ) instead of the password of the invoking user when running a command or editing a file. This flag is @@ -3529,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 @@ -3549,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 @@ -3581,6 +3730,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. @@ -3611,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). @@ -3622,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 @@ -3648,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 @@ -3671,9 +3830,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 @@ -3695,8 +3854,8 @@ If set, will prompt for the password of the user specified by the .Fl u -option (defaults to -.Li 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 @@ -3795,7 +3954,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 @@ -3823,7 +3982,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 @@ -3844,13 +4003,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. @@ -3858,19 +4016,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. @@ -3893,8 +4051,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 @@ -3926,40 +4083,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. @@ -3971,10 +4116,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 @@ -4004,7 +4147,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. @@ -4015,16 +4158,16 @@ 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 .Pq Ql :\& -separated list of editors path names used by +separated list of editor path names used by .Nm sudoedit and .Nm visudo . @@ -4072,15 +4215,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 @@ -4122,9 +4265,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 @@ -4134,23 +4277,25 @@ 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} +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) -.It Li %{hostname} +be run as (e.g., +.Sy wheel ) +.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 @@ -4171,14 +4316,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 @@ -4188,9 +4333,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. @@ -4204,7 +4349,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 @@ -4320,7 +4465,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. @@ -4329,10 +4474,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 @@ -4346,9 +4491,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. @@ -4363,7 +4508,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. @@ -4378,7 +4523,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 @@ -4391,14 +4536,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 @@ -4406,16 +4551,17 @@ 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 +be run as (defaults to +.Sy @runas_default@ ) +.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 @@ -4433,7 +4579,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 @@ -4468,13 +4614,13 @@ 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@ . +.Sy @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. @@ -4495,11 +4641,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, @@ -4511,11 +4653,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. @@ -4544,7 +4682,7 @@ The default is The owner of the lecture status directory, time stamp directory and all files stored therein. The default is -.Li root . +.Sy root . .if \n(SL \{\ .It type The default SELinux type to use when constructing a new security @@ -4576,16 +4714,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. @@ -4599,7 +4737,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 @@ -4646,7 +4784,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 @@ -4660,6 +4798,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 @@ -4705,7 +4871,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 @@ -4716,7 +4882,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 @@ -4745,7 +4911,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 @@ -4783,7 +4949,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 . @@ -4796,10 +4962,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. @@ -4865,9 +5030,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. @@ -4911,7 +5076,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 @@ -4953,8 +5118,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 @@ -4975,8 +5139,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 , @@ -4995,8 +5158,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 @@ -5016,7 +5178,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 @@ -5026,7 +5188,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 @@ -5051,7 +5213,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 % @@ -5061,7 +5223,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 @@ -5079,28 +5241,29 @@ 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 -is run by root with -the +is run by +.Sy root +with the .Fl V option. .It env_delete @@ -5110,15 +5273,17 @@ 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 -is run by root with the +is run by +.Sy root +with the .Fl V option. Many operating systems will remove potentially dangerous variables @@ -5134,16 +5299,18 @@ 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 .Nm sudo -is run by root with the +is run by +.Sy root +with the .Fl V option. .Pp @@ -5235,7 +5402,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 @@ -5270,9 +5437,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: @@ -5283,7 +5450,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 @@ -5372,7 +5539,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 @@ -5455,11 +5622,11 @@ 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. -.It unable to stat @sysconfdir@/sudoers +.It unable to open @sysconfdir@/sudoers The .Pa @sysconfdir@/sudoers file is missing. @@ -5481,7 +5648,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. @@ -5497,7 +5664,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. @@ -5515,7 +5682,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. @@ -5524,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 @@ -5559,7 +5728,7 @@ The and .Em progname fields are added by the system's -.Fn syslog +.Xr syslog 3 function, not .Nm itself. @@ -5611,11 +5780,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 @@ -5627,7 +5838,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. @@ -5637,7 +5848,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 @@ -5684,11 +5987,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. @@ -5747,6 +6050,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. @@ -5755,16 +6065,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 @@ -5791,8 +6124,11 @@ 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. +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 @@ -5903,14 +6239,15 @@ 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 -.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 @@ -5967,7 +6304,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 @@ -5976,17 +6313,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 @@ -5995,9 +6327,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/ @@ -6011,7 +6342,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 @@ -6040,8 +6371,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 @@ -6051,8 +6382,9 @@ groups). The user .Sy pete is allowed to change anyone's password except for -root on the -.Em HPPA +.Sy root +on the +.Dv HPPA machines. Because command line arguments are matched as a single, concatenated string, the @@ -6081,12 +6413,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 @@ -6122,8 +6454,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 @@ -6135,11 +6467,12 @@ 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 -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 @@ -6149,29 +6482,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 @@ -6197,8 +6530,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 @@ -6209,7 +6542,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. @@ -6232,9 +6565,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 @@ -6243,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 @@ -6268,13 +6603,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 @@ -6369,12 +6704,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 @@ -6382,62 +6712,80 @@ 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 +.Xr execve 2 , +.Xr execl 3 , +.Xr execle 3 , +.Xr execlp 3 , +.Xr execv 3 , +.Xr execvp 3 , +.Xr execvpe 3 , +and +.Xr system 3 +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 -.Em intercept -functionality 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. -.Pp -Linux systems that support -.Xr seccomp 2 -filtering can use a different method involving -.Xr ptrace 2 -instead of pre-loading a shared library. -This method supports both static and dynamic executables as well as -.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 . +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 -mode. -The Linux -.Xr seccomp 2 Ns \- Ns based -implementation does not share these restrictions. +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, which +.Nm sudo +relies on. +.Pp +The second mechanism, +.Em trace , +is available on Linux systems that support +.Xr seccomp 2 +filtering. +It uses +.Xr ptrace 2 +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. +Functions utilizing the +.Xr execveat 2 +system call, such as +.Xr fexecve 3 , +are not currently intercepted. .Pp The .Em intercept @@ -6445,16 +6793,12 @@ 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 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 @@ -6474,6 +6818,28 @@ 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 +.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 +.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 @@ -6511,26 +6877,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, @@ -6542,7 +6908,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 @@ -6568,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 @@ -6617,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 @@ -6638,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 @@ -6646,7 +7017,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. @@ -6657,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 @@ -6697,7 +7070,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. @@ -6765,11 +7138,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 @@ -6879,7 +7252,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 ca5c30916..e824029a2 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 1dbfeac62..633cc7555 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 9b1b4c5a0..34d4f3013 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 b9e8086fe..518e34551 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 b64ec2532..d239808af 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@" "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 @@ -289,7 +307,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 +468,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 725e71cfc..33ebfaa53 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 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 @@ -281,7 +298,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 +447,7 @@ file. The .Em sudoers file contains a -.Li Defaults +.Em Defaults setting not recognized by .Nm . .El diff --git a/etc/codespell.exclude b/etc/codespell.exclude index b74f1560e..ec46ef6ae 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 1fd87a90b..d242e622e 100644 --- a/etc/codespell.ignore +++ b/etc/codespell.ignore @@ -1,4 +1,3 @@ -Ois SOM VAS alloced @@ -8,8 +7,10 @@ ist numer pleas sav +statics thur toke vas wit -statics +siz +clen diff --git a/include/intercept.pb-c.h b/include/intercept.pb-c.h index 9d6390b8b..2ea168329 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/protobuf-c/protobuf-c.h b/include/protobuf-c/protobuf-c.h index 71c928fdb..442abf61d 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/include/sudo_compat.h b/include/sudo_compat.h index ee3c22962..63dd9916c 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -37,45 +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 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 @@ -484,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 */ @@ -523,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 @@ -533,14 +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_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)) +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 */ +# 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/include/sudo_debug.h b/include/sudo_debug.h index 399602b8f..5ee5cc18d 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_event.h b/include/sudo_event.h index 12bb89478..67dfb20bd 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/include/sudo_eventlog.h b/include/sudo_eventlog.h index 457f519dc..b4552f2e6 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_fatal.h b/include/sudo_fatal.h index 37ac9defc..35881257a 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_iolog.h b/include/sudo_iolog.h index 027285ecf..599424184 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); @@ -143,10 +143,10 @@ 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 *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_json.h b/include/sudo_json.h index ff942d276..d40118c18 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_lbuf.h b/include/sudo_lbuf.h index c0a20c5f7..c12be48bb 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_plugin.h b/include/sudo_plugin.h index 032a5fd48..261763833 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) @@ -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/include/sudo_util.h b/include/sudo_util.h index ece8c2ed5..8dc2744fe 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,24 @@ 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; +#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_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) +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) + +/* 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); @@ -259,7 +277,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) sudo_malloclike; sudo_dso_public char *sudo_rcstr_addref(const char *s); sudo_dso_public void sudo_rcstr_delref(const char *s); @@ -279,10 +297,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, 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); @@ -299,6 +321,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); @@ -325,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/eventlog/Makefile.in b/lib/eventlog/Makefile.in index 68fdcfc9e..45b9ad2e9 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@ @@ -93,11 +94,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,13 +143,16 @@ cppcheck: pvs-log-files: $(POBJS) +pvs-studio: $(POBJS) + plog-converter $(PVS_LOG_OPTS) $(POBJS) + fuzz: 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/eventlog/eventlog.c b/lib/eventlog/eventlog.c index 223ab8a69..4621487d6 100644 --- a/lib/eventlog/eventlog.c +++ b/lib/eventlog/eventlog.c @@ -349,14 +349,14 @@ 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(); 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 @@ -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 @@ oom: * 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 @@ oom: } 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,23 +988,23 @@ 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); } /* - * 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/lib/eventlog/logwrap.c b/lib/eventlog/logwrap.c index 615598230..2e6994804 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/eventlog/regress/logwrap/check_wrap.c b/lib/eventlog/regress/logwrap/check_wrap.c index 19f6b890f..d14448825 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/fuzzstub/Makefile.in b/lib/fuzzstub/Makefile.in index 76baf2eb5..8c472b5cd 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 780a9c220..2dde029d0 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 @@ -140,11 +141,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 @@ -204,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; \ @@ -231,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; \ @@ -258,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; \ @@ -305,11 +301,14 @@ 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) @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; \ @@ -328,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; \ @@ -498,13 +497,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/iolog/host_port.c b/lib/iolog/host_port.c index b16c65867..0622f4c44 100644 --- a/lib/iolog/host_port.c +++ b/lib/iolog/host_port.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 # include @@ -30,6 +35,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 @@ -38,7 +44,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; @@ -87,7 +93,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/hostcheck.c b/lib/iolog/hostcheck.c index fc664cf71..d23514e8b 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) @@ -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); diff --git a/lib/iolog/iolog_loginfo.c b/lib/iolog/iolog_loginfo.c index 68b922454..26902593d 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/iolog_mkdirs.c b/lib/iolog/iolog_mkdirs.c index baa9eba00..c9ab980c4 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 e7904e312..ea83f555a 100644 --- a/lib/iolog/iolog_mkdtemp.c +++ b/lib/iolog/iolog_mkdtemp.c @@ -52,36 +52,40 @@ 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 { 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); } umask(omask); diff --git a/lib/iolog/regress/fuzz/fuzz_iolog_json.c b/lib/iolog/regress/fuzz/fuzz_iolog_json.c index 1ea3536a7..ec1e428b0 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 d2ced37bd..a52bf56af 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 785f3839f..cf894973a 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/host_port/host_port_test.c b/lib/iolog/regress/host_port/host_port_test.c index 065e216e7..9b504e1fe 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_json/check_iolog_json.c b/lib/iolog/regress/iolog_json/check_iolog_json.c index df6841135..b50caca1a 100644 --- a/lib/iolog/regress/iolog_json/check_iolog_json.c +++ b/lib/iolog/regress/iolog_json/check_iolog_json.c @@ -34,8 +34,8 @@ sudo_dso_public int main(int argc, char *argv[]); -bool -json_print_object(struct json_container *json, struct json_object *object) +static bool +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 @@ done: } 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/iolog/regress/iolog_mkpath/check_iolog_mkpath.c b/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c index 5d05f8239..f0ece1a09 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/iolog/regress/iolog_timing/check_iolog_timing.c b/lib/iolog/regress/iolog_timing/check_iolog_timing.c index e0db4167e..915b60473 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/logsrv/Makefile.in b/lib/logsrv/Makefile.in index 119ebf05a..f81698fa9 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: @@ -185,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 89846b4e4..49b1e9d9d 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: @@ -173,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/lib/protobuf-c/protobuf-c.c b/lib/protobuf-c/protobuf-c.c index 3cc22c5f0..56f8dc8f1 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) @@ -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); diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 856ee1e27..ad97748f8 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@ @@ -110,10 +111,10 @@ 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 \ +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 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 = @@ -143,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 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) @@ -171,6 +172,10 @@ 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 STRTOMODE_TEST_OBJS = strtomode_test.lo strtomode.lo @@ -197,11 +202,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 @@ -287,6 +287,12 @@ 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) + 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) @@ -336,7 +342,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; \ @@ -395,11 +401,14 @@ cppcheck: pvs-log-files: $(POBJS) +pvs-studio: $(POBJS) + plog-converter $(PVS_LOG_OPTS) $(POBJS) + 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; \ @@ -415,7 +424,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; \ @@ -440,9 +449,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; \ @@ -456,6 +465,8 @@ 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 + $$?`; \ ./strtomode_test || rval=`expr $$rval + $$?`; \ @@ -704,6 +715,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 @@ -1088,6 +1107,38 @@ 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 $@ +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 @@ -1098,6 +1149,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 @@ -1276,10 +1341,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 @@ -1488,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/aix.c b/lib/util/aix.c index 495637315..8a1c7505a 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/arc4random.c b/lib/util/arc4random.c index fa892fb60..4002645d1 100644 --- a/lib/util/arc4random.c +++ b/lib/util/arc4random.c @@ -143,14 +143,14 @@ _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; } 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; diff --git a/lib/util/digest_gcrypt.c b/lib/util/digest_gcrypt.c index 3ec715228..075e27227 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; diff --git a/lib/util/fatal.c b/lib/util/fatal.c index 455168c5c..cf2303ffc 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/fchownat.c b/lib/util/fchownat.c new file mode 100644 index 000000000..545a21e66 --- /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 */ diff --git a/lib/util/getentropy.c b/lib/util/getentropy.c index 056c12217..dc5c91c02 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/getgrouplist.c b/lib/util/getgrouplist.c index 125d49460..b6170c6ce 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 3a48f0ebb..15b04eef9 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/json.c b/lib/util/json.c index 6fac63f4e..266129dca 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/lib/util/lbuf.c b/lib/util/lbuf.c index f17ae0ca5..735598cc3 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 97a80d965..5a97ac3b1 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 34d060295..a6503bd76 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/mkdir_parents.c b/lib/util/mkdir_parents.c index 0b93aa5f1..ba46b3968 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,25 +101,27 @@ 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. */ 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)) { - 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)(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)(ep - path), path); - goto done; + sudo_warn(U_("unable to mkdir %.*s"), (int)(ep - path), path); + goto bad; } + memcpy(name, cp, len); + name[len] = '\0'; reopen: dfd = openat(parentfd, name, O_RDONLY|O_NONBLOCK, 0); if (dfd == -1) { @@ -127,7 +130,7 @@ reopen: 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); @@ -136,12 +139,12 @@ reopen: 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) { @@ -157,22 +160,40 @@ reopen: 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). + * Not currently used. + */ +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/mktemp.c b/lib/util/mktemp.c index c4ac2b3e0..1540e511e 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,8 @@ #include -#if !defined(HAVE_MKSTEMPS) || !defined(HAVE_MKDTEMP) +#if (!defined(HAVE_MKDTEMPAT) && !defined(HAVE_MKDTEMPAT_NP)) || \ + (!defined(HAVE_MKOSTEMPSAT) && !defined(HAVE_MKOSTEMPSAT_NP)) #include @@ -32,9 +33,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 +54,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 +72,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 +120,53 @@ mktemp_internal(char *path, int slen, int mode) return -1; } -int -sudo_mkstemps(char *path, int slen) -{ - return mktemp_internal(path, slen, MKTEMP_FILE); -} - char * sudo_mkdtemp(char *path) { - if (mktemp_internal(path, 0, MKTEMP_DIR) == -1) + if (mktemp_internal(AT_FDCWD, path, 0, MKTEMP_DIR, 0) == -1) return NULL; return path; } -#endif /* !HAVE_MKSTEMPS || !HAVE_MKDTEMP */ + +char * +sudo_mkdtempat(int dfd, char *path) +{ + if (mktemp_internal(dfd, path, 0, MKTEMP_DIR, 0) == -1) + return NULL; + return path; +} + +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_MKDTEMPAT || !HAVE_MKOSTEMPSAT */ diff --git a/lib/util/mmap_alloc.c b/lib/util/mmap_alloc.c new file mode 100644 index 000000000..df3d4cbcc --- /dev/null +++ b/lib/util/mmap_alloc.c @@ -0,0 +1,158 @@ +/* + * 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 +#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; +} + +/* + * 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]. + */ +void +sudo_mmap_free_v1(void *ptr) +{ + if (ptr != NULL) { + unsigned long *ulp = (unsigned long *)ptr - 1; + const unsigned long size = ulp[0]; + int saved_errno = errno; + + (void)munmap((void *)ulp, size); + errno = saved_errno; + } +} diff --git a/lib/util/multiarch.c b/lib/util/multiarch.c new file mode 100644 index 000000000..dfdc296ba --- /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 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. + * 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/closefrom/closefrom_test.c b/lib/util/regress/closefrom/closefrom_test.c index 5b1bc34d7..375bb5102 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 a9f6b1afb..126683b8d 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/fuzz/fuzz_sudo_conf.c b/lib/util/regress/fuzz/fuzz_sudo_conf.c index 127f7459d..bfa62f8e2 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/getgrouplist/getgrouplist_test.c b/lib/util/regress/getgrouplist/getgrouplist_test.c index c5903bc1a..8429528b7 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 ec8cef579..866535a1b 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" @@ -183,7 +184,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 002f7b050..134f89e1c 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/regress/multiarch/multiarch_test.c b/lib/util/regress/multiarch/multiarch_test.c new file mode 100644 index 000000000..dfceeb852 --- /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/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 000000000..95f1a09ed --- /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; +} diff --git a/lib/util/regress/parse_gids/parse_gids_test.c b/lib/util/regress/parse_gids/parse_gids_test.c index 9fb8c3b73..241e81b49 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 1c7cb13d9..0a88fafeb 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" @@ -35,7 +36,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/regress/strsig/strsig_test.c b/lib/util/regress/strsig/strsig_test.c index 35b03a9d5..30aaa2d51 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 39549127f..7f0e071cb 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 d616f7c60..5b5a6cf84 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 facaeebc8..eec9d044c 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 480da5a1f..5e4d862ea 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 cf715d2e3..8aca97da8 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 25e893515..3235019a2 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 8f3892b7a..8cd72947a 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 489911ca7..2a1b2bb09 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 8baa0e7d2..37ef4171e 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/lib/util/roundup.c b/lib/util/roundup.c index 38f15711a..0e7e8fdcd 100644 --- a/lib/util/roundup.c +++ b/lib/util/roundup.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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" #include "sudo_debug.h" diff --git a/lib/util/secure_path.c b/lib/util/secure_path.c index 9f84de8e9..89d21deee 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,47 +36,110 @@ * 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) { - struct stat stat_buf; - int ret = SUDO_PATH_MISSING; - debug_decl(sudo_secure_path, SUDO_DEBUG_UTIL); + int ret = SUDO_PATH_SECURE; + debug_decl(sudo_check_secure, 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 ((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) +{ + 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) + ret = sudo_check_secure(sb, type, uid, gid); + + debug_return_int(ret); +} + /* * 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 *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, st); + 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, + struct stat *sb, int *error) +{ + 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) + 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, + struct stat *sb, int *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, + struct stat *sb, int *error) +{ + return sudo_secure_open(path, S_IFDIR, uid, gid, sb, error); } diff --git a/lib/util/sha2.c b/lib/util/sha2.c index b7a28cca8..f769f77f2 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(). */ diff --git a/lib/util/snprintf.c b/lib/util/snprintf.c index 76278630c..6e3f1fcf9 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; } @@ -848,7 +805,7 @@ fp_common: convbuf = NULL; } if ((wcp = GETARG(wchar_t *)) == NULL) { - cp = "(null)"; + cp = (char *)"(null)"; } else { convbuf = __wcsconv(wcp, prec); if (convbuf == NULL) @@ -858,7 +815,7 @@ fp_common: } 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 +902,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; } @@ -1076,7 +1033,7 @@ finish: __freedtoa(dtoaresult); #endif if (argtable != NULL && argtable != statargtable) { - mmap_free(argtable, argtablesiz); + sudo_mmap_free(argtable); argtable = NULL; } return ret; @@ -1124,8 +1081,7 @@ finish: * 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 @@ done: * 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 @@ overflow: 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)); diff --git a/lib/util/strsignal.c b/lib/util/strsignal.c index ac952295e..76c93785d 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 */ diff --git a/lib/util/strtoid.c b/lib/util/strtoid.c index 8da857b6b..fe5b44d0a 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/lib/util/sudo_conf.c b/lib/util/sudo_conf.c index 29518d4d9..5f046ffa1 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 @@ -68,7 +69,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 +222,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", @@ -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,49 @@ 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; + fd = sudo_secure_open_file(conf_file, ROOT_UID, -1, &sb, &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 stat %s"), conf_file); - goto done; + 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); - goto done; + 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); - goto done; + break; case SUDO_PATH_WORLD_WRITABLE: sudo_warnx(U_("%s is world writable"), conf_file); - goto done; + break; case SUDO_PATH_GROUP_WRITABLE: sudo_warnx(U_("%s is group writable"), conf_file); - goto done; + break; default: - /* NOTREACHED */ - goto done; + sudo_warnx("%s: internal error, unexpected error %d", + __func__, error); + break; + } + 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; } @@ -769,7 +781,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 3fe9675a3..c06ba8cde 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++; @@ -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. */ @@ -861,19 +861,19 @@ 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. */ 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 (log_envp && envp[0] != NULL) { 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 (log_envp && envp[0] != NULL) { *cp++ = ' '; *cp++ = '['; for (av = envp; *av; av++) { diff --git a/lib/util/sudo_dso.c b/lib/util/sudo_dso.c index 0c8a08ef2..8c680e034 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 @@ -35,6 +39,7 @@ #include "sudo_compat.h" #include "sudo_dso.h" +#include "sudo_util.h" /* * Pointer for statically compiled symbols. @@ -169,15 +174,47 @@ sudo_dso_strerror_v1(void) # endif # endif +# if defined(__linux__) +/* + * 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. + */ +static void * +dlopen_multi_arch(const char *path, int flags) +{ + void *ret = NULL; + struct stat sb; + char *newpath; + + /* Only try multi-arch if the original path does not exist. */ + if (stat(path, &sb) == -1 && errno == ENOENT) { + newpath = sudo_stat_multiarch(path, &sb); + if (newpath != NULL) { + ret = dlopen(newpath, flags); + free(newpath); + } + } + return ret; +} +# 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) { 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) { @@ -197,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) { @@ -205,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); -#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. @@ -217,8 +254,15 @@ 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 */ +# endif /* RTLD_MEMBER */ + /* On failure, try again with a multi-arch path where possible. */ + if (ret == NULL) + ret = dlopen_multi_arch(path, flags); return ret; } diff --git a/lib/util/term.c b/lib/util/term.c index f90cfb30c..05f32478e 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/timegm.c b/lib/util/timegm.c index d87c4eaad..968d829f4 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); diff --git a/lib/util/util.exp.in b/lib/util/util.exp.in index 48dcfb4af..99ea923c4 100644 --- a/lib/util/util.exp.in +++ b/lib/util/util.exp.in @@ -110,7 +110,13 @@ 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_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 @@ -122,7 +128,10 @@ 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_stat_multiarch_v1 sudo_str2logfac_v1 sudo_str2logpri_v1 sudo_strsplit_v1 @@ -136,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/lib/zlib/compress.c b/lib/zlib/compress.c index e2db404ab..2ad5326c1 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 a1bdce5c2..f8357b083 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 691d810d4..aadd3571a 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, - * 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. + * 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. * - * 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. + * 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. + * + * 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; - /* conservative upper bound for compressed data */ - complen = sourceLen + - ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; + /* 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; - /* if can't get parameters, return conservative bound plus zlib wrapper */ + /* 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 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 17c226113..1a06cd5f2 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 dddaf2687..55da46a45 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 884c9bfe4..dd7738159 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 a8ffc8f53..eb8a0e589 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 fe8577488..8a14e52d2 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 fcf5e10ab..49934c9df 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 09462a740..57d2793be 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 baa53a0b1..f53665311 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 f73fd99c3..5f305c472 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 f03a1a865..f9532f46c 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 0b6bd5360..d23d7931d 100644 --- a/lib/zlib/zconf.h.in +++ b/lib/zlib/zconf.h.in @@ -67,6 +67,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 @@ -378,6 +381,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. */ @@ -496,11 +502,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 4a98e38bf..953cb5012 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 dcab28a0d..9543ae825 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 d9a20ae1b..0bc7f4ecd 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 */ diff --git a/logsrvd/Makefile.in b/logsrvd/Makefile.in index fba163ace..c9ba8658c 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/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 945cf54df..400a68fad 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -49,22 +54,28 @@ #include "logsrvd.h" -static inline bool -has_numval(InfoMessage *info) +static bool +type_matches(InfoMessage *info, const char *source, + InfoMessage__ValueCase value_case) { - return info->value_case == INFO_MESSAGE__VALUE_NUMVAL; -} + const void *val = info->u.strval; /* same for strlistval */ + debug_decl(type_matches, SUDO_DEBUG_UTIL); -static inline bool -has_strval(InfoMessage *info) -{ - return info->value_case == INFO_MESSAGE__VALUE_STRVAL; -} - -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); } /* @@ -154,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 > UINT_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 > UINT_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/logsrv_util.c b/logsrvd/logsrv_util.c index 49c02bed6..f70604d52 100644 --- a/logsrvd/logsrv_util.c +++ b/logsrvd/logsrv_util.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -64,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 4bf739ff5..a09b7b697 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -263,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); } } @@ -311,7 +316,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; @@ -512,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__); @@ -559,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); @@ -637,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__); @@ -667,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__); @@ -697,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__); @@ -725,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); } @@ -1543,12 +1579,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); @@ -1732,7 +1768,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")); @@ -1754,8 +1790,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); @@ -1766,10 +1801,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) @@ -1781,6 +1817,7 @@ write_pidfile(void) sudo_warn("%s", pid_file); fclose(fp); } + close(dfd); } umask(oldmask); @@ -1948,7 +1985,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.h b/logsrvd/logsrvd.h index 2565e999a..4d371f31f 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 322cdf34d..39bfa873b 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -88,13 +93,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; }; @@ -349,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); @@ -362,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); @@ -503,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); } @@ -526,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; } @@ -548,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); @@ -618,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); } } @@ -641,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) { @@ -669,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); @@ -683,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); @@ -697,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); @@ -711,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); @@ -725,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); @@ -739,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); @@ -820,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); } @@ -1023,12 +1029,11 @@ 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); } if ((copy = strdup(str)) == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_bool(false); } @@ -1045,7 +1050,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); } @@ -1587,7 +1592,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); } @@ -1613,7 +1618,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; } @@ -1625,20 +1630,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; @@ -1734,7 +1739,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); } } @@ -1754,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; @@ -1774,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_journal.c b/logsrvd/logsrvd_journal.c index 664f1ae9a..831610cfa 100644 --- a/logsrvd/logsrvd_journal.c +++ b/logsrvd/logsrvd_journal.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -84,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. */ @@ -104,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); } diff --git a/logsrvd/logsrvd_local.c b/logsrvd/logsrvd_local.c index 5119d2ef9..4d1f9d7dd 100644 --- a/logsrvd/logsrvd_local.c +++ b/logsrvd/logsrvd_local.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -82,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; @@ -96,35 +101,71 @@ 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: + 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)) + if (!sudo_json_add_value(jsonc, info->key, &json_value)) goto bad; break; case INFO_MESSAGE__VALUE_STRLISTVAL: { InfoMessage__StringList *strlist = info->u.strlistval; size_t n; - if (!sudo_json_open_array(json, info->key)) + if (strlist == NULL) { + sudo_warnx(U_("%s: protocol error: NULL value found in %s"), + "local", info->key); + break; + } + if (!sudo_json_open_array(jsonc, 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)) + 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; + } + 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(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(jsonc, NULL, &json_value)) + goto bad; + } + if (!sudo_json_close_array(jsonc)) goto bad; 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); @@ -263,7 +304,7 @@ done: 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; @@ -271,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); @@ -286,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" */ @@ -329,11 +370,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[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) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, @@ -350,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/logsrvd/logsrvd_queue.c b/logsrvd/logsrvd_queue.c index ba013d5a2..f164e8256 100644 --- a/logsrvd/logsrvd_queue.c +++ b/logsrvd/logsrvd_queue.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -127,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/logsrvd_relay.c b/logsrvd/logsrvd_relay.c index 6937ed82c..dc192888c 100644 --- a/logsrvd/logsrvd_relay.c +++ b/logsrvd/logsrvd_relay.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -234,7 +239,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; @@ -295,7 +300,7 @@ bad: * 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 d90fa53c1..1964d443b 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/regress/logsrvd_conf/logsrvd_conf_test.c b/logsrvd/regress/logsrvd_conf/logsrvd_conf_test.c index 773536679..84e66edb6 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/logsrvd/sendlog.c b/logsrvd/sendlog.c index 50d7f59c1..98d5ecc10 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -232,7 +237,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; @@ -283,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); } @@ -355,7 +360,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 +554,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++; + fill_num("runuid", evlog->runuid); } - - 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_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; @@ -1823,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/sendlog.h b/logsrvd/sendlog.h index 49d6f6273..74014efd9 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 9be07fd2a..dde6a6009 100644 --- a/logsrvd/tls_client.c +++ b/logsrvd/tls_client.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 #ifdef HAVE_STDBOOL_H @@ -230,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/logsrvd/tls_common.h b/logsrvd/tls_common.h index 2524037b9..505801c3e 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 6a24fcc83..65cc8daa2 100644 --- a/logsrvd/tls_init.c +++ b/logsrvd/tls_init.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 # include diff --git a/plugins/audit_json/Makefile.in b/plugins/audit_json/Makefile.in index 2ec476bcc..199a60d97 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/audit_json/audit_json.c b/plugins/audit_json/audit_json.c index c6c1f73f8..b419ca386 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", @@ -189,7 +189,7 @@ done: } 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,35 +256,35 @@ 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); } 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; @@ -299,8 +299,8 @@ 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) +add_key_value_object(struct json_container *jsonc, const char *name, + char * const * array, const char * const * filter) { char * const *cur; const char *cp; @@ -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 @@ bad: } 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 @@ done: 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/group_file/getgrent.c b/plugins/group_file/getgrent.c index 142fd39e1..efb74b25b 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/python/Makefile.in b/plugins/python/Makefile.in index a4b71e57a..1510d22e7 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; \ @@ -276,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/plugins/python/pyhelpers.c b/plugins/python/pyhelpers.c index 2670752d8..882b31a6b 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 @@ cleanup: 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/pyhelpers.h b/plugins/python/pyhelpers.h index 524b14e3b..5448e1d48 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/python_convmessage.c b/plugins/python/python_convmessage.c index 14283dcd7..7b2aa6d0e 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_importblocker.c b/plugins/python/python_importblocker.c index 2bce36c0b..109a816a4 100644 --- a/plugins/python/python_importblocker.c +++ b/plugins/python/python_importblocker.c @@ -78,17 +78,18 @@ cleanup: } 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} }; diff --git a/plugins/python/python_plugin_approval.c b/plugins/python/python_plugin_approval.c index 31c479f19..b9c746ed4 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 941c14d32..d5b15ffe6 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 ac4093482..e2036ed6e 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 @@ cleanup: 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 @@ cleanup: 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 @@ cleanup: 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 3dc8c1768..015b4d145 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 c337dd730..a583a5e58 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); @@ -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; @@ -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 d0ea3c113..b1514c7e5 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 b12480846..46289c361 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 2ccdb5e68..d5d58d2d2 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 ded793aa5..776c9e0a4 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 10eefac6c..122797a5e 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" @@ -49,7 +50,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 +66,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 +74,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,24 +94,24 @@ 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 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; @@ -134,7 +135,7 @@ init(void) return true; } -int +static int cleanup(int success) { if (!success) { @@ -160,7 +161,7 @@ cleanup(int success) return true; } -int +static int check_example_io_plugin_version_display(int is_verbose) { const char *errstr = NULL; @@ -188,7 +189,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 +234,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 +331,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 +359,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 +378,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 +446,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 +464,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 +494,7 @@ cleanup: 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 +517,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 +529,7 @@ check_plugin_unload(void) return true; } -int +static int check_example_debugging(const char *debug_spec) { const char *errstr = NULL; @@ -559,7 +560,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 +577,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 +585,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 +606,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 +614,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 +629,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 +639,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 +668,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 +693,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 +722,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 +774,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 +812,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 +847,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 +905,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 +936,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 +962,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 +1025,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 +1052,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 +1079,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 +1118,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 +1148,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 +1180,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 +1248,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 +1276,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 +1301,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/regress/iohelpers.h b/plugins/python/regress/iohelpers.h index b2383af76..ed21d56ca 100644 --- a/plugins/python/regress/iohelpers.h +++ b/plugins/python/regress/iohelpers.h @@ -19,17 +19,21 @@ #ifndef PYTHON_IO_HELPERS #define PYTHON_IO_HELPERS -#include "config.h" -#include "sudo_compat.h" +#include #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) 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 d0c1566cf..9884aa0df 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/plugins/python/sudo_python_module.c b/plugins/python/sudo_python_module.c index 897d471fc..ee94101c9 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) @@ -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); @@ -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; @@ -467,7 +467,7 @@ cleanup: } 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/sample/Makefile.in b/plugins/sample/Makefile.in index 412dac3a6..e0a814c3e 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 diff --git a/plugins/sample/sample_plugin.c b/plugins/sample/sample_plugin.c index 1b57e9c1d..e09a8da83 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 */ }; diff --git a/plugins/sample_approval/Makefile.in b/plugins/sample_approval/Makefile.in index 212fe8d8e..fb3b435cd 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 diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 5cf8ef243..29110dcfd 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; \ @@ -1687,10 +1688,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 +1700,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 +2321,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 +2813,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 +3079,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 +3191,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/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index 0dfb99f72..5a03bfeec 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) { @@ -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); } @@ -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); } @@ -432,7 +440,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/auth/bsdauth.c b/plugins/sudoers/auth/bsdauth.c index 356efd713..c34785a3b 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 eef26bb8a..4f6e89c85 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 d8780c496..de41e6fdc 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/check.c b/plugins/sudoers/check.c index 6f5d9cc0a..d7bfd9ad1 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. @@ -215,8 +225,8 @@ done: * 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); } } @@ -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; diff --git a/plugins/sudoers/check_aliases.c b/plugins/sudoers/check_aliases.c index 959a220cc..1b3d03009 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 847c5c750..a6f17e9c8 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. */ @@ -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); } @@ -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; @@ -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); @@ -1485,21 +1485,26 @@ done: } 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 cf48d1a9a..6aaaeb2fd 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/cvtsudoers_csv.c b/plugins/sudoers/cvtsudoers_csv.c index 63512c5dc..aa96c5d63 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); @@ -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 a89ef82b3..ab686e1d7 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" } */ @@ -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 91acfcd86..9be75e504 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); @@ -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 dde5b9b37..bd62cc068 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/cvtsudoers_pwutil.c b/plugins/sudoers/cvtsudoers_pwutil.c index a7b163e91..6b30d03ac 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/def_data.c b/plugins/sudoers/def_data.c index 41de8fc0b..b8c1212d2 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"), @@ -667,6 +687,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_("Attempt 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 38de4386b..5c244a45c 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -150,165 +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_APPARMOR_PROFILE 154 +#define I_INTERCEPT_VERIFY 159 +#define def_intercept_verify (sudo_defs_table[I_INTERCEPT_VERIFY].sd_un.flag) +#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 6372048c9..4d627e64b 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" @@ -479,6 +494,9 @@ intercept_type T_TUPLE "The mechanism used by the intercept and log_subcmds options: %s" dso trace +intercept_verify + T_FLAG + "Attempt to verify the command and arguments after execution" 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/defaults.c b/plugins/sudoers/defaults.c index ec6b64fe9..e90be1f64 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. @@ -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++) { @@ -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/defaults.h b/plugins/sudoers/defaults.h index 7e9d44fb6..f0bf88ebf 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; @@ -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/editor.c b/plugins/sudoers/editor.c index db55fc719..5ca4eb0af 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'; @@ -126,7 +124,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 +175,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 +209,11 @@ oom: * 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 82dc61832..887d6468f 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 }; @@ -314,9 +315,22 @@ int sudo_putenv_nodebug(char *str, bool dupcheck, bool overwrite) { char **ep; - size_t len; + 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 || equal == str) { + 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 +372,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) @@ -818,13 +832,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 00ab0ac5c..b6e8a602b 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/fmtsudoers.c b/plugins/sudoers/fmtsudoers.c index c4152efbf..8f0ab0539 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) { diff --git a/plugins/sudoers/getdate.c b/plugins/sudoers/getdate.c index 405ea888b..0f06b466c 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 @@ -58,7 +117,7 @@ ** An entry in the lexical lookup table. */ typedef struct _TABLE { - char *name; + const char *name; int type; time_t value; } TABLE; @@ -109,238 +168,1685 @@ static int yylex(void); int yyparse(void); void yyerror(const char *s); + +#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" -#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, + +#line 252 "getdate.c" + }; -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 +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 #endif -#define YYMAXTOKEN 269 + + +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 -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", +/* 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 -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 10000 -#define YYMAXDEPTH 10000 + +/** 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 -#endif -#define YYINITSTACKSIZE 200 -/* LINTUSED */ + +#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; -int yynerrs; -int yyerrflag; +#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; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; + +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; -short *yyss; -short *yysslim; -YYSTYPE *yyvs; -unsigned int yystacksize; -int yyparse(void); -#line 316 "getdate.y" +/* 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 + + return yyresult; +} + +#line 315 "getdate.y" + /* Month and day table. */ static TABLE const MonthDayTable[] = { @@ -597,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++) @@ -854,6 +2360,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) { @@ -947,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 0ce8b7a0f..1e3893c99 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 @@ -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; @@ -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++) @@ -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 2157d072c..1dffb5723 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 @@ -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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: } 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: } (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) { @@ -2138,8 +2139,8 @@ yyreduce: 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; @@ -2164,11 +2165,11 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: } (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 @@ yyreduce: } (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 @@ yyreduce: } 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 @@ yyreduce: (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 @@ yyreduce: (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 @@ yyreduce: /* $$->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 @@ yyreduce: } 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: (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,23 +2655,23 @@ yyreduce: (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); - 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 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 @@ yyreduce: (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 @@ yyreduce: (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 @@ yyreduce: } 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: } 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: 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 @@ yyreduce: } 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 @@ yyreduce: 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 @@ yyreturnlab: 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); @@ -3434,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 @@ -4092,10 +4100,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); @@ -4177,8 +4185,8 @@ parser_leak_free(void) } debug_return; -#endif /* NO_LEAKS */ } +#endif /* NO_LEAKS */ void parser_leak_init(void) diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index 5ed1beaa0..0319ce164 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 edb931322..2ac370918 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 @@ -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; } @@ -144,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 */ @@ -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 %% @@ -537,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; @@ -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 { @@ -862,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 { @@ -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); @@ -1256,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 @@ -1914,10 +1922,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 +2007,8 @@ parser_leak_free(void) } debug_return; -#endif /* NO_LEAKS */ } +#endif /* NO_LEAKS */ void parser_leak_init(void) diff --git a/plugins/sudoers/group_plugin.c b/plugins/sudoers/group_plugin.c index e11cfb1f1..72a35b6ef 100644 --- a/plugins/sudoers/group_plugin.c +++ b/plugins/sudoers/group_plugin.c @@ -40,18 +40,103 @@ 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 * 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]; 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(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; - } + + 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; } - /* 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; - } + /* 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); @@ -193,7 +288,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); diff --git a/plugins/sudoers/insults.h b/plugins/sudoers/insults.h index d7d8074de..752d7e6e4 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 aae5713ff..fc1bc7d11 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(); @@ -288,7 +288,7 @@ bad: * 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/ldap.c b/plugins/sudoers/ldap.c index 4f0192265..6f81883d6 100644 --- a/plugins/sudoers/ldap.c +++ b/plugins/sudoers/ldap.c @@ -297,7 +297,7 @@ done: * 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 38d54a3a3..7e4a2e3ad 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 f1f1c016f..a53ffe427 100644 --- a/plugins/sudoers/log_client.c +++ b/plugins/sudoers/log_client.c @@ -16,7 +16,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include "config.h" +/* + * 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 @@ -755,7 +760,7 @@ done: * 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; @@ -766,7 +771,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 +845,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 +873,45 @@ 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++; + fill_str("submitcwd", evlog->cwd); } - - 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++; - } - - 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); +// if (evlog->ttyname != NULL) { + fill_str("ttyname", evlog->ttyname); + // } /* Free unused structs. */ while (info_msgs_size > n) @@ -1569,7 +1534,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/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 286c6aee8..e240ca692 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) { @@ -849,18 +852,21 @@ 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); - 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 { - if (vasprintf(&errstr, _(fmt), args) == -1) + if (vasprintf(&tofree, _(fmt), args) == -1) debug_return_bool(false); - tofree = errstr; + errstr = tofree; } if (line > 0) { @@ -916,8 +922,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 +935,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; @@ -986,11 +992,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/logging.h b/plugins/sudoers/logging.h index 887b91aaa..43e5a40c4 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; @@ -71,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); @@ -80,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, 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); +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/match_command.c b/plugins/sudoers/match_command.c index deca7d1cf..37d376d32 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. @@ -391,15 +393,22 @@ command_matches_all(const char *runchroot, debug_decl(command_matches_all, SUDOERS_DEBUG_MATCH); if (user_cmnd[0] == '/') { - /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(user_cmnd, runchroot, digests, &fd)) - goto bad; #ifndef SUDOERS_NAME_MATCH + /* Open the file for fdexec or for digest matching. */ + bool open_error = !open_cmnd(user_cmnd, runchroot, digests, &fd); + /* 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; } +#else + /* Open the file for fdexec or for digest matching. */ + (void)open_cmnd(user_cmnd, runchroot, digests, &fd); #endif } diff --git a/plugins/sudoers/match_digest.c b/plugins/sudoers/match_digest.c index 1763e8e30..f1655951e 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); diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index a56f86c81..3745efbe2 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 @@ -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"); } @@ -468,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) @@ -476,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) { @@ -505,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"); @@ -719,7 +725,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 +768,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/parse.h b/plugins/sudoers/parse.h index e276faad0..cac32b611 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/po/de.mo b/plugins/sudoers/po/de.mo index ae40a6aee..4d6260403 100644 Binary files a/plugins/sudoers/po/de.mo and b/plugins/sudoers/po/de.mo differ diff --git a/plugins/sudoers/po/de.po b/plugins/sudoers/po/de.po index 3f813136b..8cbf7a008 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 b135c7e1d..1c345360a 100644 Binary files a/plugins/sudoers/po/fr.mo and b/plugins/sudoers/po/fr.mo differ diff --git a/plugins/sudoers/po/fr.po b/plugins/sudoers/po/fr.po index 798bf040d..d6e29d090 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 9ec66413d..8d864ec04 100644 Binary files a/plugins/sudoers/po/ja.mo and b/plugins/sudoers/po/ja.mo differ diff --git a/plugins/sudoers/po/ja.po b/plugins/sudoers/po/ja.po index dd2059e73..a90a09d43 100644 --- a/plugins/sudoers/po/ja.po +++ b/plugins/sudoers/po/ja.po @@ -4,10 +4,10 @@ # Takeshi Hamasaki , 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 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format -msgid "Error: %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:93 +#: plugins/sudoers/check_aliases.c:133 #, c-format -msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" -msgstr "č­Ļ告: %s:%d:%d: %s \"%s\" でエイãƒĒã‚ĸã‚šåŽšįžŠãŒåžĒį’°ã—ãĻいぞす" +msgid "cycle in %s \"%s\"" +msgstr "åžĒį’°ã‚’į™ēčĻ‹ %s \"%s\"" -#: plugins/sudoers/check_aliases.c:97 +#: plugins/sudoers/check_aliases.c:136 #, c-format -msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "エナãƒŧ: %s:%d:%d: %s \"%s\" ã¯å‚į…§ã•ã‚ŒãĻいるぎãĢåŽšįžŠã•ã‚ŒãĻいぞせん" - -#: plugins/sudoers/check_aliases.c:98 -#, 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 +#: plugins/sudoers/def_data.c:688 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: æœĒįŸĨぎデフりãƒĢãƒˆé …į›Ž \"%s\" です" +msgid "The mechanism used by the intercept and log_subcmds options: %s" +msgstr "ã‚¤ãƒŗã‚ŋãƒŧã‚ģプトと log_subcmds ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗã§äŊŋã‚ã‚Œã‚‹ãƒĄã‚Ģニã‚ēム: %s" -#: plugins/sudoers/defaults.c:242 +#: 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 "%s:%d:%d: no value specified for \"%s\"" -msgstr "%s:%d:%d: \"%s\" ãĢ値が指厚されãĻいぞせん" +msgid "AppArmor profile to use in the new security context: %s" +msgstr "新しいã‚ģキãƒĨãƒĒãƒ†ã‚Ŗã‚ŗãƒŗãƒ†ã‚­ã‚šãƒˆå†…ã§äŊŋį”¨ã™ã‚‹ AppArmor ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢ: %s" -#: plugins/sudoers/defaults.c:245 +#: plugins/sudoers/defaults.c:191 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: \"%s\" ãĢ値が指厚されãĻいぞせん" +msgid "unknown defaults entry \"%s\"" +msgstr "不明ãĒデフりãƒĢãƒˆé …į›Ž \"%s\" です" -#: plugins/sudoers/defaults.c:258 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s:%d:%d: invalid operator \"%c=\" for \"%s\"" -msgstr "%s:%d:%d: \"%c=\" は \"%s\" ãĢã¯į„ĄåŠšãĒæŧ”įŽ—å­ã§ã™" +msgid "no value specified for \"%s\"" +msgstr "\"%s\" ãĢ値が指厚されãĻいぞせん" -#: plugins/sudoers/defaults.c:261 +#: plugins/sudoers/defaults.c:243 #, c-format -msgid "%s: invalid operator \"%c=\" for \"%s\"" -msgstr "%s: \"%c=\" は \"%s\" ãĢã¯į„ĄåŠšãĒæŧ”įŽ—å­ã§ã™" +msgid "invalid operator \"%c=\" for \"%s\"" +msgstr "\"%c=\" は \"%s\" ãĢã¯į„ĄåŠšãĒæŧ”įŽ—å­ã§ã™" -#: plugins/sudoers/defaults.c:297 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s:%d:%d: option \"%s\" does not take a value" -msgstr "%s:%d:%d: ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" は値をとりぞせん" +msgid "option \"%s\" does not take a value" +msgstr "ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" は値をとりぞせん" -#: plugins/sudoers/defaults.c:300 +#: plugins/sudoers/defaults.c:299 #, c-format -msgid "%s: option \"%s\" does not take a value" -msgstr "%s: ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" は値をとりぞせん" +msgid "invalid Defaults type 0x%x for option \"%s\"" +msgstr "0x%x はã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" ぎデフりãƒĢトã‚ŋイプとしãĻį„ĄåŠšã§ã™" -#: plugins/sudoers/defaults.c:328 +#: plugins/sudoers/defaults.c:306 #, c-format -msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d:%d: 0x%x はã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" ぎデフりãƒĢトã‚ŋイプとしãĻį„ĄåŠšã§ã™" +msgid "value \"%s\" is invalid for option \"%s\"" +msgstr "\"%s\" はã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" ぎ値としãĻã¯į„ĄåŠšã§ã™" -#: plugins/sudoers/defaults.c:331 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, c-format -msgid "%s: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s: 0x%x はã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" ぎデフりãƒĢトã‚ŋイプとしãĻį„ĄåŠšã§ã™" +msgid "path name for \"%s\" too long" +msgstr "\"%s\" ãŽãƒ‘ã‚šåãŒé•ˇã™ãŽãžã™" -#: plugins/sudoers/defaults.c:341 +#: plugins/sudoers/defaults.c:1134 #, c-format -msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d:%d: \"%s\" はã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" ぎ値としãĻã¯į„ĄåŠšã§ã™" +msgid "values for \"%s\" must start with a '/', '~', or '*'" +msgstr "\"%s\" ぎ値は '/', '~', ぞたは '*' で開始しãĒければいけぞせん" -#: plugins/sudoers/defaults.c:344 +#: plugins/sudoers/defaults.c:1141 #, c-format -msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: \"%s\" はã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ \"%s\" ぎ値としãĻã¯į„ĄåŠšã§ã™" +msgid "values for \"%s\" must start with a '/'" +msgstr "\"%s\" ぎ値は '/' で開始しãĒければいけぞせん" -#: plugins/sudoers/defaults.c:1161 -#, c-format -msgid "%s:%d:%d: path name for \"%s\" too long" -msgstr "%s:%d:%d: \"%s\" ãŽãƒ‘ã‚šåãŒé•ˇã™ãŽãžã™" - -#: plugins/sudoers/defaults.c:1164 -#, c-format -msgid "%s: path name for \"%s\" too long" -msgstr "%s: \"%s\" ãŽãƒ‘ã‚šåãŒé•ˇã™ãŽãžã™" - -#: plugins/sudoers/defaults.c:1175 -#, 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\" ぎ値は '/', '~', ぞたは '*' で開始しãĒければいけぞせん" - -#: plugins/sudoers/defaults.c:1190 -#, c-format -msgid "%s:%d:%d: values for \"%s\" must start with a '/'" -msgstr "%s:%d:%d: \"%s\" ぎ値は '/' で開始しãĒければいけぞせん" - -#: plugins/sudoers/defaults.c:1194 -#, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: \"%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) 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 åŊĸåŧã§ã¯ã‚りぞせん" +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: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 8f2c00fef..a02c73f26 100644 Binary files a/plugins/sudoers/po/ko.mo and b/plugins/sudoers/po/ko.mo differ diff --git a/plugins/sudoers/po/ko.po b/plugins/sudoers/po/ko.po index e371b1f64..5d2b063ff 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 b79746926..c4310c5a7 100644 Binary files a/plugins/sudoers/po/pl.mo and b/plugins/sudoers/po/pl.mo differ diff --git a/plugins/sudoers/po/pl.po b/plugins/sudoers/po/pl.po index 8a7dd56ea..a3756dc16 100644 --- a/plugins/sudoers/po/pl.po +++ b/plugins/sudoers/po/pl.po @@ -4,10 +4,10 @@ # 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:56+0200\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-11 21:45+0200\n" "Last-Translator: Jakub Bogusz \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 0f59bc499..5ee5fc10a 100644 Binary files a/plugins/sudoers/po/ro.mo and b/plugins/sudoers/po/ro.mo differ diff --git a/plugins/sudoers/po/ro.po b/plugins/sudoers/po/ro.po index ded6a7538..b9effbaed 100644 --- a/plugins/sudoers/po/ro.po +++ b/plugins/sudoers/po/ro.po @@ -11,13 +11,14 @@ # Actualizare a algoritmului formelor de plural (de la „trei-vechi” la „patru”, experimental). # Actualizare a traducerii pentru versiunea 1.9.10b1, făcută de R-GC. # Actualizare a traducerii pentru versiunea 1.9.11b1, făcută de R-GC. +# Actualizare a traducerii pentru versiunea 1.9.12b2, făcută de R-GC. # 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:04+0200\n" +"POT-Creation-Date: 2022-10-10 09:13-0600\n" +"PO-Revision-Date: 2022-10-12 11:15+0200\n" "Last-Translator: Remus-Gabriel Chelu \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 28bc87297..65570cd5d 100644 Binary files a/plugins/sudoers/po/sr.mo and b/plugins/sudoers/po/sr.mo differ diff --git a/plugins/sudoers/po/sr.po b/plugins/sudoers/po/sr.po index c0776774b..4ea3ec329 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 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1278 #, c-format -msgid "Error: %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:93 +#: plugins/sudoers/check_aliases.c:133 #, c-format -msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" -msgstr "ĐŖĐŋĐžĐˇĐžŅ€ĐĩҚĐĩ: %s:%d:%d: Ņ†Đ¸ĐēĐģ҃ҁ ҃ „%s“ „%s“" +msgid "cycle in %s \"%s\"" +msgstr "Ņ†Đ¸ĐēĐģ҃ҁ ҃ „%s“ „%s“" -#: plugins/sudoers/check_aliases.c:97 +#: plugins/sudoers/check_aliases.c:136 #, c-format -msgid "Error: %s:%d:%d: %s \"%s\" referenced but not defined" -msgstr "Đ“Ņ€Đĩ҈Đēа: %s:%d:%d: ҃ĐŋŅƒŅ‚Đ° Са „%s“ „%s“ ĐŋĐžŅŅ‚ĐžŅ˜Đ¸ аĐģи ĐŊĐ¸Ņ˜Đĩ ĐžĐ´Ņ€ĐĩŅ’ĐĩĐŊа" - -#: plugins/sudoers/check_aliases.c:98 -#, 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 +#: plugins/sudoers/def_data.c:668 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: ĐŊĐĩĐŋОСĐŊĐ°Ņ‚ ҃ĐŊĐžŅ ĐžŅĐŊОвĐŊĐžŅŅ‚Đ¸ „%s“" +msgid "The mechanism used by the intercept and log_subcmds options: %s" +msgstr "МĐĩŅ…Đ°ĐŊиСаĐŧ ĐēĐžŅ˜Đ¸ ĐēĐžŅ€Đ¸ŅŅ‚Đĩ ĐžĐŋŅ†Đ¸Ņ˜Đĩ „intercept“ и „log_subcmds“: %s" -#: plugins/sudoers/defaults.c:242 +#: plugins/sudoers/def_data.c:672 #, c-format -msgid "%s:%d:%d: no value specified for \"%s\"" -msgstr "%s:%d:%d: ĐŊĐ¸Ņ˜Đĩ ĐŊавĐĩĐ´ĐĩĐŊа Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ Са „%s“" +msgid "AppArmor profile to use in the new security context: %s" +msgstr "АĐŋĐŅ€ĐŧĐžŅ€ ĐŋŅ€ĐžŅ„Đ¸Đģ Са ĐēĐžŅ€Đ¸ŅˆŅ›ĐĩҚĐĩ ҃ ĐŊОвОĐŧ ĐēĐžĐŊŅ‚ĐĩĐēŅŅ‚Ņƒ ĐąĐĩСйĐĩĐ´ĐŊĐžŅŅ‚Đ¸: %s" -#: plugins/sudoers/defaults.c:245 +#: plugins/sudoers/defaults.c:191 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: ĐŊĐ¸Ņ˜Đĩ ĐŊавĐĩĐ´ĐĩĐŊа Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ Са „%s“" +msgid "unknown defaults entry \"%s\"" +msgstr "ĐŊĐĩĐŋОСĐŊĐ°Ņ‚ ҃ĐŊĐžŅ ĐžŅĐŊОвĐŊĐžŅŅ‚Đ¸ „%s“" -#: plugins/sudoers/defaults.c:258 +#: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s:%d:%d: invalid operator \"%c=\" for \"%s\"" -msgstr "%s:%d:%d: ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛Đ°ĐŊ ĐžĐŋĐĩŅ€Đ°Ņ‚ĐžŅ€ „%c=“ Са „%s“" +msgid "no value specified for \"%s\"" +msgstr "ĐŊĐ¸Ņ˜Đĩ ĐŊавĐĩĐ´ĐĩĐŊа Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ Са „%s“" -#: plugins/sudoers/defaults.c:261 +#: plugins/sudoers/defaults.c:243 #, c-format -msgid "%s: invalid operator \"%c=\" for \"%s\"" -msgstr "%s: ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛Đ°ĐŊ ĐžĐŋĐĩŅ€Đ°Ņ‚ĐžŅ€ „%c=“ Са „%s“" +msgid "invalid operator \"%c=\" for \"%s\"" +msgstr "ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛Đ°ĐŊ ĐžĐŋĐĩŅ€Đ°Ņ‚ĐžŅ€ „%c=“ Са „%s“" -#: plugins/sudoers/defaults.c:297 +#: plugins/sudoers/defaults.c:275 #, c-format -msgid "%s:%d:%d: option \"%s\" does not take a value" -msgstr "%s:%d:%d: ĐžĐŋŅ†Đ¸Ņ˜Đ° „%s“ ĐŊĐĩ ŅƒĐˇĐ¸Đŧа Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚" +msgid "option \"%s\" does not take a value" +msgstr "ĐžĐŋŅ†Đ¸Ņ˜Đ° „%s“ ĐŊĐĩ ŅƒĐˇĐ¸Đŧа Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚" -#: plugins/sudoers/defaults.c:300 +#: plugins/sudoers/defaults.c:299 #, c-format -msgid "%s: option \"%s\" does not take a value" -msgstr "%s: ĐžĐŋŅ†Đ¸Ņ˜Đ° „%s“ ĐŊĐĩ ŅƒĐˇĐ¸Đŧа Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚" +msgid "invalid Defaults type 0x%x for option \"%s\"" +msgstr "ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛ĐŊа Đ˛Ņ€ŅŅ‚Đ° ĐžŅĐŊОвĐŊĐžŅŅ‚Đ¸ 0x%x Са ĐžĐŋŅ†Đ¸Ņ˜Ņƒ „%s“" -#: plugins/sudoers/defaults.c:328 +#: plugins/sudoers/defaults.c:306 #, c-format -msgid "%s:%d:%d: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d:%d: ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛ĐŊа Đ˛Ņ€ŅŅ‚Đ° ĐžŅĐŊОвĐŊĐžŅŅ‚Đ¸ 0x%x Са ĐžĐŋŅ†Đ¸Ņ˜Ņƒ „%s“" +msgid "value \"%s\" is invalid for option \"%s\"" +msgstr "Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ „%s“ ҘĐĩ ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛ĐŊа Са ĐžĐŋŅ†Đ¸Ņ˜Ņƒ „%s“" -#: plugins/sudoers/defaults.c:331 +#: plugins/sudoers/defaults.c:1127 plugins/sudoers/policy.c:207 +#: plugins/sudoers/policy.c:216 #, c-format -msgid "%s: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s: ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛ĐŊа Đ˛Ņ€ŅŅ‚Đ° ĐžŅĐŊОвĐŊĐžŅŅ‚Đ¸ 0x%x Са ĐžĐŋŅ†Đ¸Ņ˜Ņƒ „%s“" +msgid "path name for \"%s\" too long" +msgstr "ĐŊаСив ĐŋŅƒŅ‚Đ°ŅšĐĩ Са „%s“ ҘĐĩ ĐŋŅ€ĐĩĐ´ŅƒĐŗ" -#: plugins/sudoers/defaults.c:341 +#: plugins/sudoers/defaults.c:1133 #, c-format -msgid "%s:%d:%d: value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d:%d: Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ „%s“ ҘĐĩ ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛ĐŊа Са ĐžĐŋŅ†Đ¸Ņ˜Ņƒ „%s“" +msgid "values for \"%s\" must start with a '/', '~', or '*'" +msgstr "Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ Са „%s“ ĐŧĐžŅ€Đ° да ĐŋĐžŅ‡Đ¸ŅšĐĩ ŅĐ° /, ~ иĐģи *" -#: plugins/sudoers/defaults.c:344 +#: plugins/sudoers/defaults.c:1140 #, c-format -msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ „%s“ ҘĐĩ ĐŊĐĩĐ¸ŅĐŋŅ€Đ°Đ˛ĐŊа Са ĐžĐŋŅ†Đ¸Ņ˜Ņƒ „%s“" - -#: plugins/sudoers/defaults.c:1161 -#, c-format -msgid "%s:%d:%d: path name for \"%s\" too long" -msgstr "%s:%d:%d: ĐŊаСив ĐŋŅƒŅ‚Đ°ŅšĐĩ Са „%s“ ҘĐĩ ĐŋŅ€ĐĩĐ´ŅƒĐŗ" - -#: plugins/sudoers/defaults.c:1164 -#, c-format -msgid "%s: path name for \"%s\" too long" -msgstr "%s: ĐŊаСив ĐŋŅƒŅ‚Đ°ŅšĐĩ Са „%s“ ҘĐĩ ĐŋŅ€ĐĩĐ´ŅƒĐŗ" - -#: plugins/sudoers/defaults.c:1175 -#, 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“ ĐŧĐžŅ€Đ° да ĐŋĐžŅ‡Đ¸ŅšĐĩ ŅĐ° /, ~ иĐģи *" - -#: plugins/sudoers/defaults.c:1190 -#, c-format -msgid "%s:%d:%d: values for \"%s\" must start with a '/'" -msgstr "%s:%d:%d: Đ˛Ņ€ĐĩĐ´ĐŊĐžŅŅ‚ Са „%s“ ĐŧĐžŅ€Đ° да ĐŋĐžŅ‡Đ¸ŅšĐĩ ŅĐ° /" - -#: plugins/sudoers/defaults.c:1194 -#, 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/sudoers.pot b/plugins/sudoers/po/sudoers.pot index ad07ede53..964702913 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 -#, c-format -msgid "Plugin for non-Unix group support: %s" +msgid "Log the command's standard output if not connected to a terminal" msgstr "" #: plugins/sudoers/def_data.c:372 -#, c-format -msgid "Directory in which to store input/output logs: %s" +msgid "Log the command's standard error if not connected to a terminal" msgstr "" #: plugins/sudoers/def_data.c:376 -#, c-format -msgid "File in which to store the input/output log: %s" +msgid "Log the terminal output of the command being run" msgstr "" #: plugins/sudoers/def_data.c:380 -msgid "Add an entry to the utmp/utmpx file when allocating a pty" +msgid "Compress I/O logs using zlib" msgstr "" #: plugins/sudoers/def_data.c:384 -msgid "Set the user in utmp to the runas user, not the invoking user" +msgid "Always run commands in a pseudo-tty" msgstr "" #: plugins/sudoers/def_data.c:388 #, c-format -msgid "Set of permitted privileges: %s" +msgid "Plugin for non-Unix group support: %s" msgstr "" #: plugins/sudoers/def_data.c:392 #, c-format -msgid "Set of limit privileges: %s" +msgid "Directory in which to store input/output logs: %s" msgstr "" #: plugins/sudoers/def_data.c:396 -msgid "Run commands on a pty in the background" +#, c-format +msgid "File in which to store the input/output log: %s" msgstr "" #: plugins/sudoers/def_data.c:400 -#, c-format -msgid "PAM service name to use: %s" +msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "" #: plugins/sudoers/def_data.c:404 -#, c-format -msgid "PAM service name to use for login shells: %s" +msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "" #: plugins/sudoers/def_data.c:408 #, c-format -msgid "PAM service name to use when sudo is run with the -A option: %s" +msgid "Set of permitted privileges: %s" msgstr "" #: plugins/sudoers/def_data.c:412 -msgid "Attempt to establish PAM credentials for the target user" +#, c-format +msgid "Set of limit privileges: %s" msgstr "" #: plugins/sudoers/def_data.c:416 -msgid "Create a new PAM session for the command to run in" +msgid "Run commands on a pty in the background" msgstr "" #: plugins/sudoers/def_data.c:420 -msgid "Perform PAM account validation management" +#, c-format +msgid "PAM service name to use: %s" msgstr "" #: plugins/sudoers/def_data.c:424 #, c-format -msgid "Maximum I/O log sequence number: %s" +msgid "PAM service name to use for login shells: %s" msgstr "" #: plugins/sudoers/def_data.c:428 -msgid "Enable sudoers netgroup support" +#, c-format +msgid "PAM service name to use when sudo is run with the -A option: %s" msgstr "" #: plugins/sudoers/def_data.c:432 +msgid "Attempt to establish PAM credentials for the target user" +msgstr "" + +#: plugins/sudoers/def_data.c:436 +msgid "Create a new PAM session for the command to run in" +msgstr "" + +#: plugins/sudoers/def_data.c:440 +msgid "Perform PAM account validation management" +msgstr "" + +#: plugins/sudoers/def_data.c:444 +#, c-format +msgid "Maximum I/O log sequence number: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:448 +msgid "Enable sudoers netgroup support" +msgstr "" + +#: 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/plugins/sudoers/po/sv.mo b/plugins/sudoers/po/sv.mo index 7269ad75a..c9591dc86 100644 Binary files a/plugins/sudoers/po/sv.mo and b/plugins/sudoers/po/sv.mo differ diff --git a/plugins/sudoers/po/sv.po b/plugins/sudoers/po/sv.po index 4bf4f16c8..cbdc47a10 100644 --- a/plugins/sudoers/po/sv.po +++ b/plugins/sudoers/po/sv.po @@ -1,27 +1,27 @@ # Swedish translation for sudoers. -# Copyright Š 2012, 2016, 2017, 2018, 2019, 2020, 2021 Free Software Foundation, Inc. +# Copyright Š 2012, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc. # This file is put in the public domain. # Daniel Nylander , 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 "unable to find resume point [%lld, %ld] in %s/%s" -msgstr "kan inte hitta omstartspunkt [%lld, %ld] i %s/%s" +msgid "server message too large: %zu" +msgstr "servermeddelande fÃļr lÃĨngt: %zu" -#: 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 -msgid "state machine error" -msgstr "fel i tillstÃĨndsmaskin" - -#: logsrvd/logsrvd.c:443 -msgid "invalid AcceptMessage" -msgstr "ogiltigt AcceptMessage" - -#: logsrvd/logsrvd.c:482 -msgid "invalid RejectMessage" -msgstr "ogiltigt RejectMessage" - -#: logsrvd/logsrvd.c:593 -msgid "invalid AlertMessage" -msgstr "ogiltigt AlertMessage" - -#: logsrvd/logsrvd.c:638 logsrvd/logsrvd.c:670 logsrvd/logsrvd.c:702 -msgid "protocol error" -msgstr "protokollfel" - -#: logsrvd/logsrvd.c:797 -msgid "unrecognized ClientMessage type" -msgstr "okänd ClientMessage-typ" - -#: logsrvd/logsrvd.c:1082 logsrvd/logsrvd_journal.c:238 -msgid "client message too large" -msgstr "klientmeddelande fÃļr stort" - -#: logsrvd/logsrvd.c:1102 -msgid "invalid ClientMessage" -msgstr "ogiltigt ClientMessage" - -#: logsrvd/logsrvd.c:1408 -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 -#, 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 +#: 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:1163 +#: 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:1620 logsrvd/logsrvd.c:1953 -msgid "unable to setup listen socket" -msgstr "det gÃĨr inte att ställa in lyssningsuttag" - -#: logsrvd/logsrvd.c:1855 -msgid "sudo log server" -msgstr "sudo-loggserver" - -#: logsrvd/logsrvd.c:1857 logsrvd/sendlog.c:122 -msgid "Options:" -msgstr "Alternativ:" - -#: logsrvd/logsrvd.c:1859 -msgid "path to configuration file" -msgstr "sÃļkväg till konfigurationsfil" - -#: logsrvd/logsrvd.c:1861 logsrvd/sendlog.c:124 -msgid "display help message and exit" -msgstr "visa hjälpmeddelande och avsluta" - -#: logsrvd/logsrvd.c:1863 -msgid "do not fork, run in the foreground" -msgstr "grena inte, kÃļr i fÃļrgrunden" - -#: logsrvd/logsrvd.c:1865 -msgid "percent chance connections will drop" -msgstr "procents chans att anslutningar slängs" - -#: logsrvd/logsrvd.c:1867 logsrvd/sendlog.c:152 -msgid "display version information and exit" -msgstr "visa versionsinformation och avsluta" - -#: logsrvd/logsrvd.c:1917 logsrvd/sendlog.c:1518 -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: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 "invalid random drop value: %s" -msgstr "ogiltigt slumpmässigt avbrottsvärde: %s" +msgid "unexpected state %d for %s" +msgstr "oväntat tillstÃĨnd %d fÃļr %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: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:453 logsrvd/logsrvd.c:454 +msgid "invalid AcceptMessage" +msgstr "ogiltigt AcceptMessage" + +#: logsrvd/logsrvd.c:490 logsrvd/logsrvd.c:491 +msgid "invalid RejectMessage" +msgstr "ogiltigt RejectMessage" + +#: 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:653 logsrvd/logsrvd.c:689 logsrvd/logsrvd.c:725 #, c-format -msgid "%s version %s\n" -msgstr "%s version %s\n" +msgid "%s: unexpected IoBuffer" +msgstr "%s: oväntad IoBuffer" -#: logsrvd/logsrvd_conf.c:446 -msgid "TLS not supported" -msgstr "TLS stÃļds inte" +#: logsrvd/logsrvd.c:654 logsrvd/logsrvd.c:690 logsrvd/logsrvd.c:726 +msgid "protocol error" +msgstr "protokollfel" -#: logsrvd/logsrvd_conf.c:468 +#: 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 "%s:%s" -msgstr "%s:%s" +msgid "unable to unpack %s size %zu" +msgstr "kan inte packa upp %s storlek %zu" -#: logsrvd/logsrvd_conf.c:541 logsrvd/logsrvd_conf.c:876 +#: logsrvd/logsrvd.c:827 logsrvd/logsrvd_journal.c:367 +#: logsrvd/logsrvd_relay.c:676 #, c-format -msgid "%s: not a fully qualified path" -msgstr "%s: inte fullständigt kvalificerad sÃļkväg" +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_conf.c:1035 +#: logsrvd/logsrvd.c:829 +msgid "unrecognized ClientMessage type" +msgstr "okänd ClientMessage-typ" + +#: logsrvd/logsrvd.c:919 #, c-format -msgid "%s:%d unmatched '[': %s" -msgstr "%s:%d omatchad ”[”: %s" +msgid "timed out writing to client %s" +msgstr "tidsgräns passerad vid skrivning till klient %s" -#: logsrvd/logsrvd_conf.c:1046 +#: logsrvd/logsrvd.c:924 logsrvd/logsrvd_relay.c:914 logsrvd/sendlog.c:1395 #, c-format -msgid "%s:%d invalid config section: %s" -msgstr "%s:%d ogiltigt konfigurationsavsnitt: %s" +msgid "missing write buffer for client %s" +msgstr "saknar skrivbuffert fÃļr klient %s" -#: logsrvd/logsrvd_conf.c:1054 +#: logsrvd/logsrvd.c:1020 #, c-format -msgid "%s:%d invalid configuration line: %s" -msgstr "%s:%d ogiltig konfigurationsrad: %s" +msgid "timed out reading from client %s" +msgstr "tidsgräns passerad vid läsning frÃĨn klient %s" -#: logsrvd/logsrvd_conf.c:1060 +#: logsrvd/logsrvd.c:1061 logsrvd/logsrvd_relay.c:777 #, c-format -msgid "%s:%d expected section name: %s" -msgstr "%s:%d avsnittsnamn fÃļrväntades: %s" +msgid "EOF from %s without proper TLS shutdown" +msgstr "EOF frÃĨn %s utan korrekt TLS-nedstängning" -#: logsrvd/logsrvd_conf.c:1074 -#, c-format -msgid "invalid value for %s: %s" -msgstr "ogiltigt värde fÃļr %s: %s" - -#: logsrvd/logsrvd_conf.c:1082 -#, c-format -msgid "%s:%d unknown key: %s" -msgstr "%s:%d okänd nyckel: %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 -msgid "unable to initialize server TLS context" -msgstr "kan inte initiera TLS-serverkontext" - -#: logsrvd/logsrvd_conf.c:1394 -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 -msgid "unable to create journal file" -msgstr "kan inte skapa journalfil" - -#: logsrvd/logsrvd_journal.c:134 -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 -msgid "unable to write journal file" -msgstr "kan inte skriva journalfil" - -#: logsrvd/logsrvd_journal.c:171 logsrvd/logsrvd_journal.c:178 -msgid "unable to rename journal file" -msgstr "kan inte byta namn pÃĨ journalfil" - -#: logsrvd/logsrvd_journal.c:228 logsrvd/logsrvd_journal.c:258 -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 -msgid "error reading journal file" -msgstr "fel vid inläsning av journalfil" - -#: logsrvd/logsrvd_journal.c:270 logsrvd/logsrvd_journal.c:325 -msgid "invalid journal file, unable to restart" -msgstr "ogiltig journalfil, kunde inte starta om" - -#: logsrvd/logsrvd_local.c:149 -msgid "error parsing AcceptMessage" -msgstr "fel vid tolkning av AcceptMessage" - -#: logsrvd/logsrvd_local.c:156 -msgid "error creating I/O log" -msgstr "fel vid skapande av I/O-logg" - -#: logsrvd/logsrvd_local.c:164 -msgid "error logging accept event" -msgstr "fel vid loggning av acceptanshändelse" - -#: logsrvd/logsrvd_local.c:196 -msgid "error parsing RejectMessage" -msgstr "fel vid tolkning av RejectMessage" - -#: logsrvd/logsrvd_local.c:202 -msgid "error logging reject event" -msgstr "fel vid loggning av avbÃļjningshändelse" - -#: logsrvd/logsrvd_local.c:276 -msgid "log is already complete, cannot be restarted" -msgstr "logg är redan komplett, kan inte startas om" - -#: logsrvd/logsrvd_local.c:307 -msgid "unable to restart log" -msgstr "kan inte starta om logg" - -#: logsrvd/logsrvd_local.c:322 -msgid "error parsing AlertMessage" -msgstr "fel vid tolkning av AlertMessage" - -#: logsrvd/logsrvd_local.c:330 -msgid "error logging alert event" -msgstr "fel vid loggning av alarmhändelse" - -#: logsrvd/logsrvd_local.c:397 -msgid "error writing IoBuffer" -msgstr "fel vid skrivning av IoBuffer" - -#: logsrvd/logsrvd_local.c:434 -msgid "error writing ChangeWindowSize" -msgstr "fel vid skrivning av ChangeWindowSize" - -#: logsrvd/logsrvd_local.c:474 -msgid "error writing CommandSuspend" -msgstr "fel vid skrivning av CommandSuspend" - -#: logsrvd/logsrvd_relay.c:434 -msgid "TLS handshake with relay host failed" -msgstr "TLS-handskakning med relävärd misslyckades" - -#: logsrvd/logsrvd_relay.c:462 -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 -msgid "invalid ServerHello" -msgstr "ogiltigt ServerHello" - -#: logsrvd/logsrvd_relay.c:677 -msgid "unrecognized ServerMessage type" -msgstr "okänd ServerMessage-typ" - -#: logsrvd/logsrvd_relay.c:709 -msgid "timeout reading from relay" -msgstr "tidsgräns passerad vid läsning frÃĨn relä" - -#: logsrvd/logsrvd_relay.c:761 -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 -msgid "error reading from relay" -msgstr "fel vid läsning frÃĨn relä" - -#: logsrvd/logsrvd_relay.c:817 -msgid "unable to read from relay" -msgstr "kan inte läsa frÃĨn relä" - -#: logsrvd/logsrvd_relay.c:831 logsrvd/logsrvd_relay.c:951 -msgid "relay server closed connection" -msgstr "reläserver stängde anslutningen" - -#: logsrvd/logsrvd_relay.c:850 -msgid "server message too large" -msgstr "servermeddelandet fÃļr stort" - -#: logsrvd/logsrvd_relay.c:915 -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 -msgid "error writing to relay" -msgstr "fel vid skrivning till relä" - -#: logsrvd/sendlog.c:120 -msgid "send sudo I/O log to remote server" -msgstr "skicka sudo I/O-logg till fjärrserver" - -#: logsrvd/sendlog.c:126 -msgid "only send an accept event (no I/O)" -msgstr "skicka endast en accepteringshändelse (ingen I/O)" - -#: logsrvd/sendlog.c:129 -msgid "certificate bundle file to verify server's cert against" -msgstr "certifikatbuntfil fÃļr att verifiera serverns certifikat mot" - -#: logsrvd/sendlog.c:131 -msgid "certificate file for TLS handshake" -msgstr "certifikatfil fÃļr TLS-handskakning" - -#: logsrvd/sendlog.c:134 -msgid "host to send logs to" -msgstr "värd att skicka loggar till" - -#: logsrvd/sendlog.c:136 -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 -msgid "private key file" -msgstr "privat nyckelfil" - -#: logsrvd/sendlog.c:141 -msgid "do not verify server certificate" -msgstr "verifiera inte servercertifikat" - -#: logsrvd/sendlog.c:144 -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 -msgid "restart previous I/O log transfer" -msgstr "starta om tidigare I/O-loggÃļverfÃļring" - -#: logsrvd/sendlog.c:148 -msgid "reject the command with the given reason" -msgstr "avvisa kommandot med angiven anledning" - -#: logsrvd/sendlog.c:150 -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 -#, c-format -msgid "unable to look up %s:%s: %s" -msgstr "kan inte slÃĨ upp %s:%s: %s" - -#: logsrvd/sendlog.c:213 -msgid "unable to get server IP addr" -msgstr "kan inte hämta server-IP-adress" - -#: logsrvd/sendlog.c:267 plugins/sudoers/sudoreplay.c:851 -#, c-format -msgid "unable to read %s/%s: %s" -msgstr "kan inte läsa %s/%s: %s" - -#: logsrvd/sendlog.c:288 plugins/sudoers/log_client.c:692 +#: 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/sendlog.c:830 -#, c-format -msgid "%s: write buffer already in use" -msgstr "%s: skrivbuffert används redan" +#: 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/sendlog.c:882 plugins/sudoers/iolog.c:893 -#: plugins/sudoers/iolog.c:962 +#: logsrvd/logsrvd.c:1124 logsrvd/logsrvd.c:1125 +msgid "invalid ClientMessage" +msgstr "ogiltigt ClientMessage" + +#: logsrvd/logsrvd.c:1425 +msgid "unable to get remote IP addr" +msgstr "kan inte hämta fjärr-IP-adress" + +#: 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:1639 logsrvd/logsrvd.c:1992 +msgid "unable to setup listen socket" +msgstr "det gÃĨr inte att ställa in lyssningsuttag" + +#: 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:1896 logsrvd/sendlog.c:121 +msgid "Options:" +msgstr "Alternativ:" + +#: logsrvd/logsrvd.c:1898 +msgid "path to configuration file" +msgstr "sÃļkväg till konfigurationsfil" + +#: logsrvd/logsrvd.c:1900 logsrvd/sendlog.c:123 +msgid "display help message and exit" +msgstr "visa hjälpmeddelande och avsluta" + +#: logsrvd/logsrvd.c:1902 +msgid "do not fork, run in the foreground" +msgstr "grena inte, kÃļr i fÃļrgrunden" + +#: logsrvd/logsrvd.c:1904 +msgid "percent chance connections will drop" +msgstr "procents chans att anslutningar slängs" + +#: logsrvd/logsrvd.c:1906 logsrvd/sendlog.c:153 +msgid "display version information and exit" +msgstr "visa versionsinformation och avsluta" + +#: 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:1972 +#, c-format +msgid "invalid random drop value: %s" +msgstr "ogiltigt slumpmässigt avbrottsvärde: %s" + +#: 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: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:549 +#, c-format +msgid "%s:%s" +msgstr "%s:%s" + +#: 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: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: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:1223 +#, c-format +msgid "%s:%d invalid configuration line: %s" +msgstr "%s:%d ogiltig konfigurationsrad: %s" + +#: 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:1251 +#, c-format +msgid "%s:%d [%s] illegal key: %s" +msgstr "%s:%d [%s] ogiltig nyckel: %s" + +#: 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 "kan inte Ãļppna loggfil %s" + +#: logsrvd/logsrvd_conf.c:1763 +msgid "unable to initialize server TLS context" +msgstr "kan inte initiera TLS-serverkontext" + +#: logsrvd/logsrvd_conf.c:1783 +msgid "unable to initialize relay TLS context" +msgstr "kan inte initiera TLS-reläkontext" + +#: 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: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: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:190 logsrvd/logsrvd_journal.c:197 +msgid "unable to rename journal file" +msgstr "kan inte byta namn pÃĨ journalfil" + +#: 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: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:295 logsrvd/logsrvd_journal.c:381 +msgid "invalid journal file, unable to restart" +msgstr "ogiltig journalfil, kunde inte starta om" + +#: 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:205 +msgid "error creating I/O log" +msgstr "fel vid skapande av I/O-logg" + +#: logsrvd/logsrvd_local.c:228 +msgid "error logging accept event" +msgstr "fel vid loggning av acceptanshändelse" + +#: logsrvd/logsrvd_local.c:267 +msgid "error parsing RejectMessage" +msgstr "fel vid tolkning av RejectMessage" + +#: logsrvd/logsrvd_local.c:291 +msgid "error logging reject event" +msgstr "fel vid loggning av avbÃļjningshändelse" + +#: 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:523 +msgid "unable to restart log" +msgstr "kan inte starta om logg" + +#: logsrvd/logsrvd_local.c:539 +msgid "error parsing AlertMessage" +msgstr "fel vid tolkning av AlertMessage" + +#: logsrvd/logsrvd_local.c:549 +msgid "error logging alert event" +msgstr "fel vid loggning av alarmhändelse" + +#: 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:665 +msgid "error writing ChangeWindowSize" +msgstr "fel vid skrivning av ChangeWindowSize" + +#: logsrvd/logsrvd_local.c:700 +msgid "error writing CommandSuspend" +msgstr "fel vid skrivning av CommandSuspend" + +#: logsrvd/logsrvd_relay.c:435 +msgid "TLS handshake with relay host failed" +msgstr "TLS-handskakning med relävärd misslyckades" + +#: logsrvd/logsrvd_relay.c:463 +msgid "unable to connect to relay host" +msgstr "kan inte ansluta till relävärd" + +#: 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:679 +msgid "unrecognized ServerMessage type" +msgstr "okänd ServerMessage-typ" + +#: 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:762 +msgid "relay host name does not match certificate" +msgstr "relävärdnamnet matchar inte certifikatet" + +#: 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:810 +msgid "unable to read from relay" +msgstr "kan inte läsa frÃĨn relä" + +#: 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:843 +msgid "server message too large" +msgstr "servermeddelandet fÃļr stort" + +#: 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: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:119 +msgid "send sudo I/O log to remote server" +msgstr "skicka sudo I/O-logg till fjärrserver" + +#: 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:128 +msgid "certificate bundle file to verify server's cert against" +msgstr "certifikatbuntfil fÃļr att verifiera serverns certifikat mot" + +#: logsrvd/sendlog.c:130 +msgid "certificate file for TLS handshake" +msgstr "certifikatfil fÃļr TLS-handskakning" + +#: logsrvd/sendlog.c:133 +msgid "host to send logs to" +msgstr "värd att skicka loggar till" + +#: 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:138 +msgid "private key file" +msgstr "privat nyckelfil" + +#: logsrvd/sendlog.c:140 +msgid "do not verify server certificate" +msgstr "verifiera inte servercertifikat" + +#: 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:145 +msgid "restart previous I/O log transfer" +msgstr "starta om tidigare I/O-loggÃļverfÃļring" + +#: logsrvd/sendlog.c:147 +msgid "reject the command with the given reason" +msgstr "avvisa kommandot med angiven anledning" + +#: 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: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:214 +msgid "unable to get server IP addr" +msgstr "kan inte hämta server-IP-adress" + +#: 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: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 +#: 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 "okänt uid: %u" +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 +#: plugins/sudoers/check_aliases.c:99 plugins/sudoers/defaults.c:1279 #, c-format -msgid "unknown user: %s" -msgstr "okänd användare: %s" +msgid "%s: %s\n" +msgstr "%s: %s\n" -#: plugins/sudoers/check_aliases.c:56 +#: plugins/sudoers/check_aliases.c:133 #, c-format -msgid "Error: %s:%d:%d: cycle in %s \"%s\"" -msgstr "Fel: %s:%d:%d: cykel i %s ”%s”" +msgid "cycle in %s \"%s\"" +msgstr "cykel i %s ”%s”" -#: plugins/sudoers/check_aliases.c:57 +#: plugins/sudoers/check_aliases.c:136 #, c-format -msgid "Warning: %s:%d:%d: cycle in %s \"%s\"" -msgstr "Varning: %s:%d:%d: cykel i %s ”%s”" +msgid "%s \"%s\" referenced but not defined" +msgstr "%s ”%s” refererad till men inte definierad" -#: plugins/sudoers/check_aliases.c:61 -#, 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" - -#: plugins/sudoers/check_aliases.c:62 -#, 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" - -#: 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 -#, c-format -msgid "too many sudoers entries, maximum %u" -msgstr "fÃļr mÃĨnga sudoers-poster, maximalt %u" - -#: plugins/sudoers/cvtsudoers_ldif.c:683 -msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." -msgstr "miljÃļvariabeln SUDOERS_BASE är inte satt och flaggan -b angavs inte." - -#: plugins/sudoers/def_data.c:50 -#, c-format -msgid "Syslog facility if syslog is being used for logging: %s" -msgstr "Syslog-facilitet om syslog används fÃļr loggning: %s" - -#: plugins/sudoers/def_data.c:54 -#, c-format -msgid "Syslog priority to use when user authenticates successfully: %s" -msgstr "Syslog-prioritet att använda när användaren lyckas med autentisering: %s" - -#: plugins/sudoers/def_data.c:58 -#, c-format -msgid "Syslog priority to use when user authenticates unsuccessfully: %s" -msgstr "Syslog-prioritet att använda när användaren misslyckas med autentisering: %s" - -#: plugins/sudoers/def_data.c:62 -msgid "Put OTP prompt on its own line" -msgstr "Lägg OTP-prompt pÃĨ en egen rad" - -#: plugins/sudoers/def_data.c:66 -msgid "Ignore '.' in $PATH" -msgstr "Ignorera ”.” i $PATH" - -#: plugins/sudoers/def_data.c:70 -msgid "Always send mail when sudo is run" -msgstr "Skicka alltid e-post när sudo kÃļrs" - -#: plugins/sudoers/def_data.c:74 -msgid "Send mail if user authentication fails" -msgstr "Skicka e-post om användarens autentisering misslyckas" - -#: plugins/sudoers/def_data.c:78 -msgid "Send mail if the user is not in sudoers" -msgstr "Skicka e-post om användaren inte finns med i sudoers" - -#: plugins/sudoers/def_data.c:82 -msgid "Send mail if the user is not in sudoers for this host" -msgstr "Skicka e-post om användaren inte finns med i sudoers fÃļr denna värddator" - -#: plugins/sudoers/def_data.c:86 -msgid "Send mail if the user is not allowed to run a command" -msgstr "Skicka e-post om användaren inte tillÃĨts att kÃļra ett kommando" - -#: plugins/sudoers/def_data.c:90 -msgid "Send mail if the user tries to run a command" -msgstr "Skicka e-post om användaren fÃļrsÃļker kÃļra ett kommando" - -#: plugins/sudoers/def_data.c:94 -msgid "Use a separate timestamp for each user/tty combo" -msgstr "Använd en separat tidsstämpel fÃļr varje användar-/tty-kombination" - -#: plugins/sudoers/def_data.c:98 -msgid "Lecture user the first time they run sudo" -msgstr "Lär upp användaren fÃļrsta gÃĨngen de kÃļr sudo" - -#: plugins/sudoers/def_data.c:102 -#, c-format -msgid "File containing the sudo lecture: %s" -msgstr "Fil som innehÃĨller sudo-lektion: %s" - -#: plugins/sudoers/def_data.c:106 -msgid "Require users to authenticate by default" -msgstr "Kräv att användare autentiseras som standard" - -#: plugins/sudoers/def_data.c:110 -msgid "Root may run sudo" -msgstr "Root fÃĨr kÃļra sudo" - -#: plugins/sudoers/def_data.c:114 -msgid "Log the hostname in the (non-syslog) log file" -msgstr "Logga värdnamnet i (den icke syslog-baserade) loggfilen" - -#: plugins/sudoers/def_data.c:118 -msgid "Log the year in the (non-syslog) log file" -msgstr "Logga ÃĨret i (den icke syslog-baserade) loggfilen" - -#: plugins/sudoers/def_data.c:122 -msgid "If sudo is invoked with no arguments, start a shell" -msgstr "Om sudo startas utan argument, starta ett skal" - -#: plugins/sudoers/def_data.c:126 -msgid "Set $HOME to the target user when starting a shell with -s" -msgstr "Ställ in $HOME till mÃĨlanvändaren när ett skal startas med -s" - -#: plugins/sudoers/def_data.c:130 -msgid "Always set $HOME to the target user's home directory" -msgstr "Ställ alltid in $HOME till mÃĨlanvändarens hemkatalog" - -#: plugins/sudoers/def_data.c:134 -msgid "Allow some information gathering to give useful error messages" -msgstr "TillÃĨt viss informationsinsamling fÃļr att ge meningsfulla felmeddelanden" - -#: plugins/sudoers/def_data.c:138 -msgid "Require fully-qualified hostnames in the sudoers file" -msgstr "Kräv fullständiga värdnamn i sudoers-filen" - -#: plugins/sudoers/def_data.c:142 -msgid "Insult the user when they enter an incorrect password" -msgstr "FÃļrolämpa användaren när de anger ett felaktigt lÃļsenord" - -#: plugins/sudoers/def_data.c:146 -msgid "Only allow the user to run sudo if they have a tty" -msgstr "TillÃĨt bara användare att kÃļra sudo om de har en tty" - -#: plugins/sudoers/def_data.c:150 -msgid "Visudo will honor the EDITOR environment variable" -msgstr "Visudo kommer att respektera miljÃļvariabeln EDITOR" - -#: plugins/sudoers/def_data.c:154 -msgid "Prompt for root's password, not the users's" -msgstr "FrÃĨga efter root-lÃļsenordet, inte användarens" - -#: plugins/sudoers/def_data.c:158 -msgid "Prompt for the runas_default user's password, not the users's" -msgstr "FrÃĨga efter runas_default-användarens lÃļsenord, inte användarens" - -#: plugins/sudoers/def_data.c:162 -msgid "Prompt for the target user's password, not the users's" -msgstr "FrÃĨga efter mÃĨlanvändarens lÃļsenord, inte användarens" - -#: plugins/sudoers/def_data.c:166 -msgid "Apply defaults in the target user's login class if there is one" -msgstr "Tillämpa standardvärden i mÃĨlanvändarens inloggningsklass om det finns en" - -#: plugins/sudoers/def_data.c:170 -msgid "Set the LOGNAME and USER environment variables" -msgstr "Ställ in miljÃļvariablerna LOGNAME och USER" - -#: plugins/sudoers/def_data.c:174 -msgid "Only set the effective uid to the target user, not the real uid" -msgstr "Sätt bara det effektiva uid:t till mÃĨlanvändaren, inte till det riktiga uid:t" - -#: plugins/sudoers/def_data.c:178 -msgid "Don't initialize the group vector to that of the target user" -msgstr "Initiera inte gruppvektorn till den frÃĨn mÃĨlanvändaren" - -#: plugins/sudoers/def_data.c:182 -#, c-format -msgid "Length at which to wrap log file lines (0 for no wrap): %u" -msgstr "Längden vid vilken lÃĨnga loggfilsrader radbryts (0 fÃļr att inte radbryta): %u" - -#: plugins/sudoers/def_data.c:186 -#, c-format -msgid "Authentication timestamp timeout: %.1f minutes" -msgstr "Tidsgräns fÃļr autentiseringstidsstämpel: %.1f minuter" - -#: plugins/sudoers/def_data.c:190 -#, c-format -msgid "Password prompt timeout: %.1f minutes" -msgstr "Tidsgräns fÃļr lÃļsenordsprompt: %.1f minuter" - -#: plugins/sudoers/def_data.c:194 -#, c-format -msgid "Number of tries to enter a password: %u" -msgstr "Antal fÃļrsÃļk att ange ett lÃļsenord: %u" - -#: plugins/sudoers/def_data.c:198 -#, c-format -msgid "Umask to use or 0777 to use user's: 0%o" -msgstr "Umask att använda eller 0777 fÃļr att använda användarens: 0%o" - -#: plugins/sudoers/def_data.c:202 -#, c-format -msgid "Path to log file: %s" -msgstr "SÃļkväg till loggfil: %s" - -#: plugins/sudoers/def_data.c:206 -#, c-format -msgid "Path to mail program: %s" -msgstr "SÃļkväg till e-postprogram: %s" - -#: plugins/sudoers/def_data.c:210 -#, c-format -msgid "Flags for mail program: %s" -msgstr "Flaggor fÃļr e-postprogram: %s" - -#: plugins/sudoers/def_data.c:214 -#, c-format -msgid "Address to send mail to: %s" -msgstr "Adress att skicka e-post till: %s" - -#: plugins/sudoers/def_data.c:218 -#, c-format -msgid "Address to send mail from: %s" -msgstr "Adress att skicka e-post frÃĨn: %s" - -#: plugins/sudoers/def_data.c:222 -#, c-format -msgid "Subject line for mail messages: %s" -msgstr "Ämnesrad fÃļr e-postmeddelanden: %s" - -#: plugins/sudoers/def_data.c:226 -#, c-format -msgid "Incorrect password message: %s" -msgstr "Meddelande vid felaktigt lÃļsenord: %s" - -#: plugins/sudoers/def_data.c:230 -#, c-format -msgid "Path to lecture status dir: %s" -msgstr "SÃļkväg till lektionsstatuskatalog: %s" - -#: plugins/sudoers/def_data.c:234 -#, c-format -msgid "Path to authentication timestamp dir: %s" -msgstr "SÃļkväg till katalog fÃļr autentiseringstidsstämplar: %s" - -#: plugins/sudoers/def_data.c:238 -#, c-format -msgid "Owner of the authentication timestamp dir: %s" -msgstr "Ägare av katalogen fÃļr autentiseringstidsstämplar: %s" - -#: plugins/sudoers/def_data.c:242 -#, c-format -msgid "Users in this group are exempt from password and PATH requirements: %s" -msgstr "Användare i denna grupp är undantagna frÃĨn lÃļsenords- och SÖKVÄGs-kraven: %s" - -#: plugins/sudoers/def_data.c:246 -#, c-format -msgid "Default password prompt: %s" -msgstr "Standard lÃļsenordsprompt: %s" - -#: plugins/sudoers/def_data.c:250 -msgid "If set, passprompt will override system prompt in all cases." -msgstr "Om inställt kommer passprompt att ÃĨsidosätta systemprompten i varje fall." - -#: plugins/sudoers/def_data.c:254 -#, c-format -msgid "Default user to run commands as: %s" -msgstr "Standardanvändaren att kÃļra kommandon som: %s" - -#: plugins/sudoers/def_data.c:258 -#, c-format -msgid "Value to override user's $PATH with: %s" -msgstr "Värde att ÃĨsidosätta användarens $PATH med: %s" - -#: plugins/sudoers/def_data.c:262 -#, c-format -msgid "Path to the editor for use by visudo: %s" -msgstr "SÃļkväg till textredigerare fÃļr användning av visudo: %s" - -#: plugins/sudoers/def_data.c:266 -#, c-format -msgid "When to require a password for 'list' pseudocommand: %s" -msgstr "När ett lÃļsenord ska krävas fÃļr pseudokommandot ”list”: %s" - -#: plugins/sudoers/def_data.c:270 -#, c-format -msgid "When to require a password for 'verify' pseudocommand: %s" -msgstr "När lÃļsenord ska krävas fÃļr pseudokommandot ”verify”: %s" - -#: plugins/sudoers/def_data.c:274 -msgid "Preload the sudo_noexec library which replaces the exec functions" -msgstr "FÃļrinläs sudo_noexec-biblioteket vilket ersätter exec-funktionerna" - -#: plugins/sudoers/def_data.c:278 -msgid "If LDAP directory is up, do we ignore local sudoers file" -msgstr "Om LDAP-registret är uppe, ignorerar vi den lokala sudoers-filen" - -#: plugins/sudoers/def_data.c:282 -#, 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 -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 -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 -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 -msgid "Environment variables to check for safety:" -msgstr "MiljÃļvariabler att säkerhetskontrollera:" - -#: plugins/sudoers/def_data.c:302 -msgid "Environment variables to remove:" -msgstr "MiljÃļvariabler att ta bort:" - -#: plugins/sudoers/def_data.c:306 -msgid "Environment variables to preserve:" -msgstr "MiljÃļvariabler att behÃĨlla:" - -#: plugins/sudoers/def_data.c:310 -#, c-format -msgid "SELinux role to use in the new security context: %s" -msgstr "SELinux-roll att använda i den nya säkerhetskontexten: %s" - -#: plugins/sudoers/def_data.c:314 -#, c-format -msgid "SELinux type to use in the new security context: %s" -msgstr "SELinux-typ att använda i den nya säkerhetskontexten: %s" - -#: plugins/sudoers/def_data.c:318 -#, c-format -msgid "Path to the sudo-specific environment file: %s" -msgstr "SÃļkväg till den sudo-specifika miljÃļfilen: %s" - -#: plugins/sudoers/def_data.c:322 -#, c-format -msgid "Path to the restricted sudo-specific environment file: %s" -msgstr "SÃļkväg till den begränsade sudo-specifika miljÃļfilen: %s" - -#: plugins/sudoers/def_data.c:326 -#, c-format -msgid "Locale to use while parsing sudoers: %s" -msgstr "Lokalanpassning att använda vid tolkning av sudoers: %s" - -#: plugins/sudoers/def_data.c:330 -msgid "Allow sudo to prompt for a password even if it would be visible" -msgstr "TillÃĨt sudo att frÃĨga efter ett lÃļsenord även om det skulle vara synligt" - -#: plugins/sudoers/def_data.c:334 -msgid "Provide visual feedback at the password prompt when there is user input" -msgstr "Ge visuell ÃĨterkoppling vid lÃļsenordsprompten när det finns användarinmatad data" - -#: plugins/sudoers/def_data.c:338 -msgid "Use faster globbing that is less accurate but does not access the filesystem" -msgstr "Använd snabbare matchning som är mindre exakt men inte använder filsystemet" - -#: plugins/sudoers/def_data.c:342 -msgid "The umask specified in sudoers will override the user's, even if it is more permissive" -msgstr "Umasken angiven i sudoers kommer att ÃĨsidosätta användarens, även om den är mer tillÃĨtande" - -#: plugins/sudoers/def_data.c:346 -msgid "Log user's input for the command being run" -msgstr "Logga användarens inmatning fÃļr kommandot som kÃļrs" - -#: plugins/sudoers/def_data.c:350 -msgid "Log the output of the command being run" -msgstr "Logga utmatningen fÃļr kommandot som kÃļrs" - -#: plugins/sudoers/def_data.c:354 -msgid "Compress I/O logs using zlib" -msgstr "Komprimera I/O-loggar med hjälp av zlib" - -#: plugins/sudoers/def_data.c:358 -msgid "Always run commands in a pseudo-tty" -msgstr "KÃļr alltid kommandon i en pseudo-tty" - -#: plugins/sudoers/def_data.c:362 -#, c-format -msgid "Plugin for non-Unix group support: %s" -msgstr "Insticksmodul fÃļr stÃļd fÃļr icke-Unix-grupper: %s" - -#: plugins/sudoers/def_data.c:366 -#, c-format -msgid "Directory in which to store input/output logs: %s" -msgstr "Katalog i vilken in-/utmatningsloggar lagras: %s" - -#: plugins/sudoers/def_data.c:370 -#, c-format -msgid "File in which to store the input/output log: %s" -msgstr "Fil i vilken in-/utmatningsloggar lagras: %s" - -#: plugins/sudoers/def_data.c:374 -msgid "Add an entry to the utmp/utmpx file when allocating a pty" -msgstr "Lägg till en post till utmp/utmpx-filen när en pty allokeras" - -#: plugins/sudoers/def_data.c:378 -msgid "Set the user in utmp to the runas user, not the invoking user" -msgstr "Sätt användaren i utmp till runas-användaren, inte användaren som anropar" - -#: plugins/sudoers/def_data.c:382 -#, c-format -msgid "Set of permitted privileges: %s" -msgstr "Uppsättning tillÃĨtna rättigheter: %s" - -#: plugins/sudoers/def_data.c:386 -#, c-format -msgid "Set of limit privileges: %s" -msgstr "Uppsättning av begränsningsrättigheter: %s" - -#: plugins/sudoers/def_data.c:390 -msgid "Run commands on a pty in the background" -msgstr "KÃļr kommandon i en pty i bakgrunden" - -#: plugins/sudoers/def_data.c:394 -#, c-format -msgid "PAM service name to use: %s" -msgstr "PAM-tjänstnamn att använda: %s" - -#: plugins/sudoers/def_data.c:398 -#, c-format -msgid "PAM service name to use for login shells: %s" -msgstr "PAM-tjänstnamn att använda fÃļr inloggningsskal: %s" - -#: plugins/sudoers/def_data.c:402 -msgid "Attempt to establish PAM credentials for the target user" -msgstr "FÃļrsÃļk att etablera PAM-inloggningsuppgifter fÃļr mÃĨlanvändaren" - -#: plugins/sudoers/def_data.c:406 -msgid "Create a new PAM session for the command to run in" -msgstr "Skapa en ny PAM-session fÃļr kommandot att kÃļra i" - -#: plugins/sudoers/def_data.c:410 -msgid "Perform PAM account validation management" -msgstr "UtfÃļr valideringshantering av PAM-konto" - -#: plugins/sudoers/def_data.c:414 -#, c-format -msgid "Maximum I/O log sequence number: %s" -msgstr "StÃļrsta sekvensnummer i I/O-logg: %s" - -#: plugins/sudoers/def_data.c:418 -msgid "Enable sudoers netgroup support" -msgstr "Aktivera sudoers nätgruppsstÃļd" - -#: plugins/sudoers/def_data.c:422 -msgid "Check parent directories for writability when editing files with sudoedit" -msgstr "Kontrollera Ãļverordnade kataloger fÃļr skrivbarhet när filer redigeras med sudoedit" - -#: plugins/sudoers/def_data.c:426 -msgid "Follow symbolic links when editing files with sudoedit" -msgstr "FÃļlj symboliska länkar när filer redigeras med sudoedit" - -#: plugins/sudoers/def_data.c:430 -msgid "Query the group plugin for unknown system groups" -msgstr "FrÃĨga gruppinsticksmodulen efter okända systemgrupper" - -#: plugins/sudoers/def_data.c:434 -msgid "Match netgroups based on the entire tuple: user, host and domain" -msgstr "Matcha nätgrupper baserat pÃĨ hela tupeln: användare, värd och domän" - -#: plugins/sudoers/def_data.c:438 -msgid "Allow commands to be run even if sudo cannot write to the audit log" -msgstr "TillÃĨt kommandon att kÃļras även om sudo inte kan skriva till granskningsloggen" - -#: plugins/sudoers/def_data.c:442 -msgid "Allow commands to be run even if sudo cannot write to the I/O log" -msgstr "TillÃĨt kommandon att kÃļras även om sudo inte kan skriva I/O-loggen" - -#: plugins/sudoers/def_data.c:446 -msgid "Allow commands to be run even if sudo cannot write to the log file" -msgstr "TillÃĨt kommandon att kÃļras även om sudo inte kan skriva till loggfilen" - -#: plugins/sudoers/def_data.c:450 -msgid "Resolve groups in sudoers and match on the group ID, not the name" -msgstr "GÃļr namnupplÃļsning fÃļr grupper i sudoers och matcha efter grupp-ID, inte namnet" - -#: plugins/sudoers/def_data.c:454 -#, c-format -msgid "Log entries larger than this value will be split into multiple syslog messages: %u" -msgstr "Loggposter stÃļrre än detta värde kommer att delas upp i flera syslog-meddelanden: %u" - -#: plugins/sudoers/def_data.c:458 -#, c-format -msgid "User that will own the I/O log files: %s" -msgstr "Användare som kommer att äga I/O-loggfilerna: %s" - -#: plugins/sudoers/def_data.c:462 -#, c-format -msgid "Group that will own the I/O log files: %s" -msgstr "Grupp som kommer att äga I/O-loggfilerna: %s" - -#: plugins/sudoers/def_data.c:466 -#, c-format -msgid "File mode to use for the I/O log files: 0%o" -msgstr "Filrättigheter att använda fÃļr I/O-loggfilerna: 0%o" - -#: plugins/sudoers/def_data.c:470 -#, 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 -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 -#, 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 -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 -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 -msgid "Include the process ID when logging via syslog" -msgstr "Inkludera process-ID:t vid loggning via syslog" - -#: plugins/sudoers/def_data.c:494 -#, c-format -msgid "Type of authentication timestamp record: %s" -msgstr "Typ av post fÃļr autentiseringstidsstämplar: %s" - -#: plugins/sudoers/def_data.c:498 -#, c-format -msgid "Authentication failure message: %s" -msgstr "Autentiseringsfelsmeddelande: %s" - -#: plugins/sudoers/def_data.c:502 -msgid "Ignore case when matching user names" -msgstr "Matcha användarnamn skiftlägesokänsligt" - -#: plugins/sudoers/def_data.c:506 -msgid "Ignore case when matching group names" -msgstr "Matcha gruppnamn skiftlägesokänsligt" - -#: plugins/sudoers/def_data.c:510 -msgid "Log when a command is allowed by sudoers" -msgstr "Logga när ett kommando tillÃĨts av sudoers" - -#: plugins/sudoers/def_data.c:514 -msgid "Log when a command is denied by sudoers" -msgstr "Logga när ett kommando nekas av sudoers" - -#: plugins/sudoers/def_data.c:518 -msgid "Sudo log server(s) to connect to with optional port" -msgstr "Sudo-loggservrar att ansluta till med valfri port" - -#: plugins/sudoers/def_data.c:522 -#, c-format -msgid "Sudo log server timeout in seconds: %u" -msgstr "Tidsgräns fÃļr sudo-loggserver i sekunder: %u" - -#: plugins/sudoers/def_data.c:526 -msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" -msgstr "Aktivera SO_KEEPALIVE-kontaktalternativ pÃĨ kontakten ansluten till loggservern" - -#: plugins/sudoers/def_data.c:530 -#, c-format -msgid "Path to the audit server's CA bundle file: %s" -msgstr "SÃļkväg till granskningsserverns CA-buntfil: %s" - -#: plugins/sudoers/def_data.c:534 -#, c-format -msgid "Path to the sudoers certificate file: %s" -msgstr "SÃļkväg till sudoers certifikatfil: %s" - -#: plugins/sudoers/def_data.c:538 -#, c-format -msgid "Path to the sudoers private key file: %s" -msgstr "SÃļkväg till sudoers privata nyckelfil: %s" - -#: plugins/sudoers/def_data.c:542 -msgid "Verify that the log server's certificate is valid" -msgstr "Verifiera att loggserverns certifikatfil är giltig" - -#: plugins/sudoers/def_data.c:546 -msgid "Allow the use of unknown runas user and/or group ID" -msgstr "TillÃĨt användningen av okänd runas-användare och/eller grupp-ID" - -#: plugins/sudoers/def_data.c:550 -msgid "Only permit running commands as a user with a valid shell" -msgstr "TillÃĨt endast kÃļrning av kommandon som en användare med ett giltigt skal" - -#: plugins/sudoers/def_data.c:554 -msgid "Set the pam remote user to the user running sudo" -msgstr "Ställ in pam-fjärranvändaren fÃļr användaren som kÃļr sudo" - -#: plugins/sudoers/def_data.c:558 -msgid "Set the pam remote host to the local host name" -msgstr "Ställ in pam-fjärrvärden till det lokala värdnamnet" - -#: plugins/sudoers/def_data.c:562 -#, 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 -#, 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 -#, 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 -msgid "Enable SELinux RBAC support" -msgstr "Aktivera SELinux RBAC-stÃļd" - -#: plugins/sudoers/def_data.c:578 -#, 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/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/defaults.c:188 +#: plugins/sudoers/cvtsudoers_ldif.c:661 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: okänd standardpost ”%s”" +msgid "too many sudoers entries, maximum %u" +msgstr "fÃļr mÃĨnga sudoers-poster, maximalt %u" + +#: 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/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: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: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:68 +msgid "Put OTP prompt on its own line" +msgstr "Lägg OTP-prompt pÃĨ en egen rad" + +#: plugins/sudoers/def_data.c:72 +msgid "Ignore '.' in $PATH" +msgstr "Ignorera ”.” i $PATH" + +#: 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:80 +msgid "Send mail if user authentication fails" +msgstr "Skicka e-post om användarens autentisering misslyckas" + +#: 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: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: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: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: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: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:108 +#, c-format +msgid "File containing the sudo lecture: %s" +msgstr "Fil som innehÃĨller sudo-lektion: %s" + +#: 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:116 +msgid "Root may run sudo" +msgstr "Root fÃĨr kÃļra sudo" + +#: 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: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: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: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: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: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: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: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: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:156 +msgid "Visudo will honor the EDITOR environment variable" +msgstr "Visudo kommer att respektera miljÃļvariabeln EDITOR" + +#: 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: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: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: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:176 +msgid "Set the LOGNAME and USER environment variables" +msgstr "Ställ in miljÃļvariablerna LOGNAME och USER" + +#: 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: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: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:192 +#, c-format +msgid "Authentication timestamp timeout: %.1f minutes" +msgstr "Tidsgräns fÃļr autentiseringstidsstämpel: %.1f minuter" + +#: 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: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: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:208 +#, c-format +msgid "Path to log file: %s" +msgstr "SÃļkväg till loggfil: %s" + +#: 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:216 +#, c-format +msgid "Flags for mail program: %s" +msgstr "Flaggor fÃļr e-postprogram: %s" + +#: 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:224 +#, c-format +msgid "Address to send mail from: %s" +msgstr "Adress att skicka e-post frÃĨn: %s" + +#: 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:232 +#, c-format +msgid "Incorrect password message: %s" +msgstr "Meddelande vid felaktigt lÃļsenord: %s" + +#: 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: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: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: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:252 +#, c-format +msgid "Default password prompt: %s" +msgstr "Standard lÃļsenordsprompt: %s" + +#: 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: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: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: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: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: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: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: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: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: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: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: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:304 +msgid "Environment variables to check for safety:" +msgstr "MiljÃļvariabler att säkerhetskontrollera:" + +#: plugins/sudoers/def_data.c:308 +msgid "Environment variables to remove:" +msgstr "MiljÃļvariabler att ta bort:" + +#: plugins/sudoers/def_data.c:312 +msgid "Environment variables to preserve:" +msgstr "MiljÃļvariabler att behÃĨlla:" + +#: 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: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: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: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: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: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: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: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: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: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: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: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:384 +msgid "Always run commands in a pseudo-tty" +msgstr "KÃļr alltid kommandon i en pseudo-tty" + +#: 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: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: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: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: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:408 +#, c-format +msgid "Set of permitted privileges: %s" +msgstr "Uppsättning tillÃĨtna rättigheter: %s" + +#: 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:416 +msgid "Run commands on a pty in the background" +msgstr "KÃļr kommandon i en pty i bakgrunden" + +#: 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: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: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: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:440 +msgid "Perform PAM account validation management" +msgstr "UtfÃļr valideringshantering av PAM-konto" + +#: 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:448 +msgid "Enable sudoers netgroup support" +msgstr "Aktivera sudoers nätgruppsstÃļd" + +#: 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: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:460 +msgid "Query the group plugin for unknown system groups" +msgstr "FrÃĨga gruppinsticksmodulen efter okända systemgrupper" + +#: 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: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: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: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: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: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: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: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: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: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: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: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: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: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:520 +msgid "Include the process ID when logging via syslog" +msgstr "Inkludera process-ID:t vid loggning via syslog" + +#: 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:528 +#, c-format +msgid "Authentication failure message: %s" +msgstr "Autentiseringsfelsmeddelande: %s" + +#: 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:536 +msgid "Ignore case when matching group names" +msgstr "Matcha gruppnamn skiftlägesokänsligt" + +#: 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:544 +msgid "Log when a command is denied by sudoers" +msgstr "Logga när ett kommando nekas av sudoers" + +#: 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: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: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: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:564 +#, c-format +msgid "Path to the sudoers certificate file: %s" +msgstr "SÃļkväg till sudoers certifikatfil: %s" + +#: 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:572 +msgid "Verify that the log server's certificate is valid" +msgstr "Verifiera att loggserverns certifikatfil är giltig" + +#: 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: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: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: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: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: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: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:604 +msgid "Enable SELinux RBAC support" +msgstr "Aktivera SELinux RBAC-stÃļd" + +#: 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/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 "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/def_data.c:636 +#, c-format +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/def_data.c:640 +#, c-format +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/def_data.c:644 +#, c-format +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/def_data.c:648 +#, c-format +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/def_data.c:652 +#, c-format +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/def_data.c:656 +#, c-format +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/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 "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/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 "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/def_data.c:696 +#, c-format +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:191 +#, c-format +msgid "unknown defaults entry \"%s\"" +msgstr "okänd standardpost ”%s”" #: plugins/sudoers/defaults.c:234 #, c-format -msgid "%s:%d:%d: no value specified for \"%s\"" -msgstr "%s:%d:%d: inget värde angivet fÃļr ”%s”" +msgid "no value specified for \"%s\"" +msgstr "inget värde angivet fÃļr ”%s”" -#: plugins/sudoers/defaults.c:237 +#: plugins/sudoers/defaults.c:243 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: inget värde angivet fÃļr ”%s”" +msgid "invalid operator \"%c=\" for \"%s\"" +msgstr "ogiltig operator ”%c=” fÃļr ”%s”" #: plugins/sudoers/defaults.c:275 #, 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 "option \"%s\" does not take a value" +msgstr "flaggan ”%s” tar inte emot nÃĨgot värde" -#: plugins/sudoers/defaults.c:278 +#: plugins/sudoers/defaults.c:299 #, c-format -msgid "%s: option \"%s\" does not take a value" -msgstr "%s: flaggan ”%s” tar inte emot nÃĨgot värde" - -#: plugins/sudoers/defaults.c:303 -#, 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 "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 "%s: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s: ogiltig standardtyp 0x%x fÃļr flagga ”%s”" +msgid "value \"%s\" is invalid for option \"%s\"" +msgstr "värdet ”%s” är ogiltigt fÃļr flaggan ”%s”" -#: plugins/sudoers/defaults.c:316 +#: plugins/sudoers/defaults.c:1128 plugins/sudoers/policy.c:208 +#: plugins/sudoers/policy.c:217 #, 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 "path name for \"%s\" too long" +msgstr "sÃļkvägsnamn fÃļr ”%s” fÃļr lÃĨngt" -#: plugins/sudoers/defaults.c:319 +#: plugins/sudoers/defaults.c:1134 #, c-format -msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: värdet ”%s” är ogiltigt fÃļr flaggan ”%s”" +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:1040 +#: plugins/sudoers/defaults.c:1141 #, 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 "values for \"%s\" must start with a '/'" +msgstr "värden fÃļr ”%s” mÃĨste bÃļrja med ett ”/”" -#: plugins/sudoers/defaults.c:1044 -#, c-format -msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" -msgstr "%s: värden fÃļr ”%s” mÃĨste bÃļrja med ett ”/”, ”~” eller ”*”" - -#: plugins/sudoers/defaults.c:1055 -#, c-format -msgid "%s:%d:%d: values for \"%s\" must start with a '/'" -msgstr "%s:%d:%d: värden fÃļr ”%s” mÃĨste bÃļrja med ett ”/”" - -#: plugins/sudoers/defaults.c:1059 -#, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: värden fÃļr ”%s” mÃĨste bÃļrja med ett ”/”" - -#: plugins/sudoers/env.c:412 +#: 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 -#, c-format -msgid "unable to open log file: %s" -msgstr "kan inte Ãļppna loggfil: %s" +#: plugins/sudoers/logging.c:799 plugins/sudoers/logging.c:811 +msgid "problem parsing sudoers" +msgstr "problem vid tolkning av sudoers" -#: plugins/sudoers/logging.c:772 +#: 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 "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 61db98214..39da58385 100644 Binary files a/plugins/sudoers/po/uk.mo and b/plugins/sudoers/po/uk.mo differ diff --git a/plugins/sudoers/po/uk.po b/plugins/sudoers/po/uk.po index 3612f8803..ae3844bc0 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/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 763894454..2a6a76e0a 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) @@ -331,12 +337,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 @@ -395,9 +401,11 @@ 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; user_uid = (gid_t)-1; user_umask = (mode_t)-1; for (cur = info->user_info; *cur != NULL; cur++) { @@ -493,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); @@ -636,7 +653,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; @@ -649,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 (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_output) { - if ((command_info[info_len++] = strdup("iolog_stdout=true")) == NULL) - goto oom; - if ((command_info[info_len++] = strdup("iolog_stderr=true")) == NULL) - goto oom; + if (def_log_ttyout) { if ((command_info[info_len++] = strdup("iolog_ttyout=true")) == NULL) goto oom; } @@ -812,6 +835,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; @@ -970,7 +997,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 */ @@ -1154,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_use_pty && !def_log_exit_status && + SLIST_EMPTY(&def_log_servers) && !sudo_auth_needs_end_session()) sudoers_policy.close = NULL; } #endif @@ -1171,7 +1198,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 +1240,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 ca5e146b4..88c7a4192 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 97585d66e..eef9d384e 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 @@ -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 */ @@ -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 } }; @@ -99,13 +108,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 093fb640c..93f9b4b65 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 9b0c8ea3e..a03fe67a5 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) { @@ -114,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; @@ -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; @@ -368,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; } @@ -380,8 +386,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); @@ -820,7 +826,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 f2147c578..27b26c095 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 8a7caeaae..2ce2f87eb 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; @@ -134,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) { @@ -161,9 +176,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 }, @@ -182,7 +197,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. */ @@ -236,7 +251,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); @@ -245,7 +260,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); @@ -257,17 +272,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(); @@ -300,7 +315,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); @@ -313,7 +328,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 { @@ -330,7 +345,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/fuzz/fuzz_sudoers_ldif.c b/plugins/sudoers/regress/fuzz/fuzz_sudoers_ldif.c index e1f47399b..75a6d7dd7 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 6f2ca732a..e4cc14166 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; @@ -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 2aed93dcb..a203bc67c 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 7abf4761e..c27e0a190 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/testsudoers/test11.out.ok b/plugins/sudoers/regress/testsudoers/test11.out.ok index 987ab6559..f030dc84d 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/regress/testsudoers/test18.sh b/plugins/sudoers/regress/testsudoers/test18.sh index c349aa26d..645b9a5cd 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 diff --git a/plugins/sudoers/regress/testsudoers/test19.out.ok b/plugins/sudoers/regress/testsudoers/test19.out.ok new file mode 100644 index 000000000..a0de2408e --- /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 000000000..113eb2ad4 --- /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 diff --git a/plugins/sudoers/regress/unescape/check_unesc.c b/plugins/sudoers/regress/unescape/check_unesc.c index 6b97f5588..ebbe30734 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/strlcpy_unesc.c b/plugins/sudoers/strlcpy_unesc.c index ee6276e76..c8c89ac69 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/stubs.c b/plugins/sudoers/stubs.c index fcb0889d8..9aae59d41 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/sudoers.c b/plugins/sudoers/sudoers.c index 71e8ba256..00114acf9 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)) @@ -185,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 = NULL; + debug_return_bool(true); } @@ -397,16 +402,16 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], debug_return_int(-1); } - /* Was previous command was intercepted? */ - if (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; - - /* Re-initialize defaults if we are called multiple times. */ 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; + + /* Re-initialize defaults if we are called multiple times. */ if (!sudoers_reinit_defaults()) debug_return_int(-1); } @@ -433,7 +438,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); } @@ -684,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; } } } @@ -698,15 +708,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. */ @@ -714,11 +725,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 @@ -749,7 +755,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++; } @@ -803,8 +809,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 +820,17 @@ 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; + } + + ret = true; goto done; bad: @@ -1028,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 { @@ -1074,52 +1094,41 @@ 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)) { - 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). - */ - if ((fp = fopen(file, "r")) == NULL) { - log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), file); + fd = sudo_secure_open_file(file, sudoers_uid, sudoers_gid, &sb, &error); + 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 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) { @@ -1127,12 +1136,11 @@ again: 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, @@ -1152,8 +1160,10 @@ again: (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()) { @@ -1188,8 +1198,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. */ @@ -1666,6 +1676,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 @@ -1727,6 +1762,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; } @@ -1764,6 +1801,7 @@ sudoers_cleanup(void) /* Clear globals */ list_pw = NULL; + saved_argv = NULL; NewArgv = NULL; NewArgc = 0; prev_user = NULL; @@ -1776,7 +1814,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); @@ -1820,6 +1859,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 a6718ccac..cd9270744 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; @@ -133,6 +134,7 @@ struct sudo_user { uid_t uid; uid_t gid; pid_t sid; + pid_t tcpgid; char uuid_str[37]; }; @@ -200,7 +202,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) @@ -224,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) @@ -245,6 +249,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) @@ -408,16 +413,18 @@ 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); /* 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); +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 +449,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 +457,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 d0610e0e1..738f93b38 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 5b8ebe501..f7c3743c3 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) { @@ -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; @@ -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 d83bdb0c7..3af5636d9 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); @@ -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++; @@ -442,16 +442,21 @@ 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; + fd = sudo_secure_open_file(file, sudoers_uid, sudoers_gid, &sb, &error); + if (fd != -1) { + if ((fp = fdopen(fd, "r")) == NULL) { + sudo_warn("unable to open %s", base); + close(fd); + } + } else { + switch (error) { case SUDO_PATH_MISSING: - sudo_warn("unable to stat %s", base); + sudo_warn("unable to open %s", base); break; case SUDO_PATH_BAD_TYPE: sudo_warnx("%s is not a regular file", base); @@ -468,8 +473,10 @@ open_sudoers(const char *file, bool doedit, bool *keepopen) base, (unsigned int) sudoers_gid); break; default: - /* NOTREACHED */ + 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 0de792b61..825eec6b7 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -181,87 +181,113 @@ 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) { + int error, fd; struct stat sb; - bool ret = false; - debug_decl(ts_secure_dir, SUDOERS_DEBUG_AUTH); + 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, &sb, &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 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; } - 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 +297,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 +432,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 +442,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 +454,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 +480,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 +500,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); @@ -591,7 +621,7 @@ done: /* * 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; @@ -962,7 +992,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 +1006,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 +1021,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 +1060,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 +1074,17 @@ done: 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 +1094,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 +1118,7 @@ set_lectured(void) ret = true; break; } + close(dfd); done: debug_return_int(ret); diff --git a/plugins/sudoers/timestr.c b/plugins/sudoers/timestr.c index 8eb223afc..d208215fb 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/toke.c b/plugins/sudoers/toke.c index 44365bc60..82c8423dc 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.h b/plugins/sudoers/toke.h index d20cb458f..2b9f111b2 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/toke.l b/plugins/sudoers/toke.l index 3cd4eecb8..c843162d3 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. */ diff --git a/plugins/sudoers/tsdump.c b/plugins/sudoers/tsdump.c index 8abe667fa..db15f7b63 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/tsgetgrpw.c b/plugins/sudoers/tsgetgrpw.c index 27439e97b..481cb3370 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 a893cbac3..826189b39 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(). */ @@ -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 763e1ceac..2b5e24271 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/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 679d39da8..734118bac 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 @@ -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); +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(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__)); -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); @@ -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' }, @@ -151,7 +153,7 @@ main(int argc, char *argv[]) textdomain("sudoers"); if (argc < 1) - usage(1); + usage(); /* Register fatal/fatalx callback. */ sudo_fatal_callback_register(visudo_cleanup); @@ -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; @@ -208,7 +213,7 @@ main(int argc, char *argv[]) export_path = optarg; break; default: - usage(1); + usage(); } } argc -= optind; @@ -226,7 +231,7 @@ main(int argc, char *argv[]) } break; default: - usage(1); + usage(); } if (fflag) { @@ -255,7 +260,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 +366,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 +394,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,12 +418,13 @@ 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", "nvi", "vim", + "nvim", "elvis", "*macs", "mg", @@ -440,7 +446,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 +538,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; @@ -655,7 +661,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); } @@ -885,7 +891,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; @@ -975,7 +981,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); } @@ -1086,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) @@ -1204,34 +1215,35 @@ 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); } +#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" " -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/cs.mo b/po/cs.mo index 426ae8463..bc3aaacf8 100644 Binary files a/po/cs.mo and b/po/cs.mo differ diff --git a/po/cs.po b/po/cs.po index c95334d66..6c8d5d754 100644 --- a/po/cs.po +++ b/po/cs.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-06-03 20:39+02:00\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-11 20:57+02:00\n" "Last-Translator: Petr Pisar \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 -#, c-format -msgid "unable to read execve %s for process %d" -msgstr "nelze přečíst %s volÃĄní execve pro proces %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 "nelze nastavit registry pro proces %d" - -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 -#, c-format -msgid "process %d exited unexpectedly" -msgstr "proces %d nečekaně skončil" - -#: src/exec_ptrace.c:843 -msgid "unable to set seccomp filter" -msgstr "nelze nastavit filtr seccomp" - -#: src/exec_ptrace.c:934 -#, 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 -#, 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 -#, 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 -#, c-format -msgid "unable to get registers for process %d" -msgstr "nelze získat registry procesu %d" - -#: src/exec_pty.c:163 -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 -#, c-format -msgid "unable to restore handler for signal %d" -msgstr "nelze obnovit obsluhu signÃĄlu %d" - -#: src/exec_pty.c:1651 -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 -#, 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 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "%s musí bÃŊt vlastněn UID %d" - -#: src/load_plugins.c:130 -#, 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 -#, 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 -#, c-format -msgid "unable to load %s: %s" -msgstr "%s nelze zavÊst: %s" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "v %s nelze nalÊzt symbol „%s“" - -#: src/load_plugins.c:299 -#, 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 -#, 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 -msgid "only a single policy plugin may be specified" -msgstr "lze zadat pouze jeden modul s politikou" - -#: src/load_plugins.c:346 -#, 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 -#, 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 +#: 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 "internal error, %s overflow" msgstr "vnitřní chyba, přetečení v %s" -#: src/parse_args.c:211 +#: 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: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:1207 +msgid "unable to set seccomp filter" +msgstr "nelze nastavit filtr seccomp" + +#: 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: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: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:1718 +#, c-format +msgid "unable to get registers for process %d" +msgstr "nelze získat registry procesu %d" + +#: src/exec_pty.c:103 +msgid "unable to allocate pty" +msgstr "nelze alokovat 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 "nelze obnovit obsluhu signÃĄlu %d" + +#: 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: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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s musí bÃŊt vlastněn UID %d" + +#: 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: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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "%s nelze zavÊst: %s" + +#: 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: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: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:322 +msgid "only a single policy plugin may be specified" +msgstr "lze zadat pouze jeden modul s politikou" + +#: 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:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "modul s politikou %s neobsahuje metodu check_policy" + +#: 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 1ffb3872a..2fa91ba9c 100644 Binary files a/po/de.mo and b/po/de.mo differ diff --git a/po/de.po b/po/de.po index 0c5d4ee5f..ee2307aa1 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 -#, c-format -msgid "unable to read execve %s for process %d" -msgstr "execve %s konnte fÃŧr Prozess %d nicht gelesen werden" - -#: 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 "Register konnten fÃŧr Prozess %d nicht gesetzt werden" - -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 -#, c-format -msgid "process %d exited unexpectedly" -msgstr "Prozess %d wurde unerwartet beendet" - -#: src/exec_ptrace.c:843 -msgid "unable to set seccomp filter" -msgstr "seccomp-Filter konnte nicht gesetzt werden" - -#: src/exec_ptrace.c:934 -#, 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 -#, 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 -#, 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 -#, 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 -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 -#, 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 -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 -#, 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 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "%s muss Benutzer mit UID %d gehÃļren" - -#: src/load_plugins.c:130 -#, 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 -#, 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 -#, c-format -msgid "unable to load %s: %s" -msgstr "Âģ%sÂĢ konnte nicht geladen werden: %s" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "Symbol Âģ%sÂĢ konnte in %s nicht gefunden werden" - -#: src/load_plugins.c:299 -#, 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 -#, 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 -msgid "only a single policy plugin may be specified" -msgstr "Nur ein einziges Regelwerks-Plugin kann geladen werden" - -#: src/load_plugins.c:346 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "Unbekannter Plugintyp %d wurde in %s gefunden" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "Interner Fehler: %s-Überlauf" -#: src/parse_args.c:211 +#: 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: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:1207 +msgid "unable to set seccomp filter" +msgstr "seccomp-Filter konnte nicht gesetzt werden" + +#: 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: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: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: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:103 +msgid "unable to allocate pty" +msgstr "PTY konnte nicht vergeben werden" + +#: 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:1213 +msgid "unable to send message to monitor process" +msgstr "Die Nachricht konnte nicht an den Ãŧberwachenden Prozess verschickt werden" + +#: 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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s muss Benutzer mit UID %d gehÃļren" + +#: 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: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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "Âģ%sÂĢ konnte nicht geladen werden: %s" + +#: 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: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: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:322 +msgid "only a single policy plugin may be specified" +msgstr "Nur ein einziges Regelwerks-Plugin kann geladen werden" + +#: 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: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/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 e31a94728..1179a391c 100644 Binary files a/po/fr.mo and b/po/fr.mo differ diff --git a/po/fr.po b/po/fr.po index 63170ea1e..ee484c11e 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 -#, c-format -msgid "unable to read execve %s for process %d" -msgstr "impossible de lire execve %s pour le processus %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 "impossible de dÊfinir les registres pour le processus %d" - -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 -#, c-format -msgid "process %d exited unexpectedly" -msgstr "le processus %d s'est terminÊ de manière inattendue" - -#: src/exec_ptrace.c:843 -msgid "unable to set seccomp filter" -msgstr "impossible de dÊfinir le filtre seccomp" - -#: src/exec_ptrace.c:934 -#, 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 -#, 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 -#, 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 -#, 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 -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 -#, 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 -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 -#, 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 -#, 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 -#, 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 -#, 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 -#, c-format -msgid "unable to load %s: %s" -msgstr "impossible de charger %s : %s" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "impossible de trouver le symbole ÂĢ %s Âģ dans %s" - -#: src/load_plugins.c:299 -#, 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 -#, 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 -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 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "type de greffon %d inconnu dans %s" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "erreur interne, dÊbordement %s" -#: src/parse_args.c:211 +#: 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: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:1207 +msgid "unable to set seccomp filter" +msgstr "impossible de dÊfinir le filtre seccomp" + +#: 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: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: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: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:103 +msgid "unable to allocate pty" +msgstr "impossible d'allouer le 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 "impossible de rÊtablir le gestionnaire pour le signal %d" + +#: 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: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: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: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: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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "impossible de charger %s : %s" + +#: 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: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: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: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:348 +#, c-format +msgid "unknown plugin type %d found in %s" +msgstr "type de greffon %d inconnu dans %s" + +#: 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/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 937db2f1a..b33813f29 100644 Binary files a/po/ja.mo and b/po/ja.mo differ diff --git a/po/ja.po b/po/ja.po index 4cb496470..f5f4e86f6 100644 --- a/po/ja.po +++ b/po/ja.po @@ -5,10 +5,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-02-14 23:27+0900\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-15 08:13+0900\n" "Last-Translator: Takeshi Hamasaki \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 -#, c-format -msgid "unable to restore handler for signal %d" -msgstr "ã‚ˇã‚°ãƒŠãƒĢ %d ãŽãƒãƒŗãƒ‰ãƒŠã‚’åžŠå…ƒã§ããžã›ã‚“" - -#: src/exec_pty.c:158 -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 -msgid "I/O plugin error" -msgstr "I/O ãƒ—ãƒŠã‚°ã‚¤ãƒŗã‚¨ãƒŠãƒŧ" - -#: 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_pty.c:455 -msgid "error logging suspend" -msgstr "エナãƒŧãŽč¨˜éŒ˛ãŒä¸€æ™‚ä¸­æ–­ã—ãĻいぞす" - -#: src/exec_pty.c:489 -msgid "error changing window size" -msgstr "ã‚Ļã‚Ŗãƒŗãƒ‰ã‚Ļã‚ĩイã‚ēぎ変更でエナãƒŧ" - -#: src/exec_pty.c:1615 -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 -#, c-format -msgid "error in %s, line %d while loading plugin \"%s\"" -msgstr "%s, %d čĄŒį›Ž ãƒ—ãƒŠã‚°ã‚¤ãƒŗ \"%s\" をロãƒŧド中ãĢエナãƒŧがį™ēį”Ÿã—ãžã—ãŸ" - -#: src/load_plugins.c:124 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "%s ãŽæ‰€æœ‰č€…ã¯ uid %d でãĒければいけぞせん" - -#: src/load_plugins.c:130 -#, c-format -msgid "%s must be only be writable by owner" -msgstr "%s ã¯æ‰€æœ‰č€…ãŽãŋ書きčžŧãŋ可čƒŊã§į„Ąã‘ã‚Œã°ã„ã‘ãžã›ã‚“" - -#: src/load_plugins.c:241 src/load_plugins.c:312 -#, c-format -msgid "ignoring duplicate plugin \"%s\" in %s, line %d" -msgstr "é‡č¤‡ã—ãĻã„ã‚‹ãƒ—ãƒŠã‚°ã‚¤ãƒŗ \"%s\" ã‚’į„ĄčĻ–ã—ãžã™ã€‚%s ぎ %d čĄŒį›Ž" - -#: src/load_plugins.c:279 -#, c-format -msgid "unable to load %s: %s" -msgstr "%s をロãƒŧドできぞせん: %s" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "ã‚ˇãƒŗãƒœãƒĢ \"%s\" が %s ãĢčĻ‹ã¤ã‹ã‚Šãžã›ã‚“" - -#: src/load_plugins.c:299 -#, c-format -msgid "incompatible plugin major version %d (expected %d) found in %s" -msgstr "äē’æ›æ€§ãŽį„Ąã„ポãƒĒã‚ˇãƒŧãƒĄã‚¸ãƒŖãƒŧバãƒŧã‚¸ãƒ§ãƒŗ %d īŧˆä爿œŸã•れるぎは %dīŧ‰ãŒ %s でčĻ‹ã¤ã‹ã‚Šãžã—ãŸ" - -#: src/load_plugins.c:317 -#, c-format -msgid "ignoring policy plugin \"%s\" in %s, line %d" -msgstr "ポãƒĒã‚ˇãƒŧãƒ—ãƒŠã‚°ã‚¤ãƒŗ \"%s\" ã‚’į„ĄčĻ–ã—ãžã™ã€‚%s ぎ %d čĄŒį›Ž" - -#: src/load_plugins.c:320 -msgid "only a single policy plugin may be specified" -msgstr "1つぎポãƒĒã‚ˇãƒŧãƒ—ãƒŠã‚°ã‚¤ãƒŗãŽãŋ指厚できぞす" - -#: src/load_plugins.c:346 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "不明ãĒãƒ—ãƒŠã‚°ã‚¤ãƒŗã‚ŋイプ %d が %s でčĻ‹ã¤ã‹ã‚Šãžã—ãŸ" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "内部エナãƒŧ、 %s がã‚Ēãƒŧバãƒŧフロãƒŧしぞした" -#: src/parse_args.c:234 +#: 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:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "プロã‚ģ゚ %d がä爿œŸã›ãŦįĩ‚äē†ã‚’しぞした" + +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "seccomp ãƒ•ã‚ŖãƒĢã‚ŋãƒŧã‚’č¨­åŽšã§ããžã›ã‚“" + +#: 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: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:1213 +msgid "unable to send message to monitor process" +msgstr "ᛪčĻ–ãƒ—ãƒ­ã‚ģã‚šã¸ãƒĄãƒƒã‚ģãƒŧジを送ることができぞせん" + +#: 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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s ãŽæ‰€æœ‰č€…ã¯ uid %d でãĒければいけぞせん" + +#: src/load_plugins.c:131 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "%s ã¯æ‰€æœ‰č€…ãŽãŋ書きčžŧãŋ可čƒŊã§į„Ąã‘ã‚Œã°ã„ã‘ãžã›ã‚“" + +#: 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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "%s をロãƒŧドできぞせん: %s" + +#: src/load_plugins.c:291 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "ã‚ˇãƒŗãƒœãƒĢ \"%s\" が %s ãĢčĻ‹ã¤ã‹ã‚Šãžã›ã‚“" + +#: 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:319 +#, c-format +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "ポãƒĒã‚ˇãƒŧãƒ—ãƒŠã‚°ã‚¤ãƒŗ \"%s\" ã‚’į„ĄčĻ–ã—ãžã™ã€‚%s ぎ %d čĄŒį›Ž" + +#: src/load_plugins.c:322 +msgid "only a single policy plugin may be specified" +msgstr "1つぎポãƒĒã‚ˇãƒŧãƒ—ãƒŠã‚°ã‚¤ãƒŗãŽãŋ指厚できぞす" + +#: src/load_plugins.c:348 +#, c-format +msgid "unknown plugin type %d found in %s" +msgstr "不明ãĒãƒ—ãƒŠã‚°ã‚¤ãƒŗã‚ŋイプ %d が %s でčĻ‹ã¤ã‹ã‚Šãžã—ãŸ" + +#: src/load_plugins.c:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "ポãƒĒã‚ˇãƒŧãƒ—ãƒŠã‚°ã‚¤ãƒŗ %s ãĢは check_policy ãƒĄã‚ŊッドがåĢぞれãĻいぞせん" + +#: 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 "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 "グãƒĢãƒŧプãƒĒ゚トを取垗できぞせん" @@ -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 8b7ba0fd9..d88c22169 100644 Binary files a/po/ka.mo and b/po/ka.mo differ diff --git a/po/ka.po b/po/ka.po index 2a021deb2..d48f5e949 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 -#, c-format -msgid "unable to restore handler for signal %d" -msgstr "სიგნალისთვის áƒĄáƒáƒŽáƒ”áƒšáƒŖáƒ áƒ˜áƒĄ აáƒĻდგენის შეáƒĒდომა: %d" - -#: src/exec_pty.c:158 -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 -msgid "I/O plugin error" -msgstr "I/O დამაáƒĸების შეáƒĒდომა" - -#: 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_pty.c:455 -msgid "error logging suspend" -msgstr "áƒŸáƒŖáƒ áƒœáƒáƒšáƒ¨áƒ˜ ჊აáƒŦერის შეჩერება áƒ¨áƒ”áƒŖáƒĢლებელია" - -#: src/exec_pty.c:489 -msgid "error changing window size" -msgstr "áƒ¤áƒáƒœáƒ¯áƒ áƒ˜áƒĄ ზომის შეáƒĒვლა áƒ¨áƒ”áƒŖáƒĢლებელია" - -#: src/exec_pty.c:1615 -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 -#, c-format -msgid "error in %s, line %d while loading plugin \"%s\"" -msgstr "%s-იქ შეáƒĒდომა %d ხაზზე \"%s\"დამაáƒĸების ჊აáƒĸვირთვისას" - -#: src/load_plugins.c:124 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "%s-იქ მფლობლის UID %d áƒŖáƒœáƒ“áƒ იყოს" - -#: src/load_plugins.c:130 -#, c-format -msgid "%s must be only be writable by owner" -msgstr "%s ჊აáƒŦერადი მხოლოდ მფლობლის მიერ áƒŖáƒœáƒ“áƒ იყოს" - -#: src/load_plugins.c:241 src/load_plugins.c:312 -#, c-format -msgid "ignoring duplicate plugin \"%s\" in %s, line %d" -msgstr "ორჯერ აáƒĻáƒŦერილი დამაáƒĸება \"%s\", \"%s\"-ში, %d-ე ხაზზე" - -#: src/load_plugins.c:279 -#, c-format -msgid "unable to load %s: %s" -msgstr "%s-იქ ჊აáƒĸვირთვის შეáƒĒდომა: %s" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "სიმბოლო \"%s\"-იქ %s-ში პოვნა áƒ¨áƒ”áƒŖáƒĢლებელია" - -#: src/load_plugins.c:299 -#, c-format -msgid "incompatible plugin major version %d (expected %d) found in %s" -msgstr "დამაáƒĸების áƒ¨áƒ”áƒŖáƒ—áƒáƒ•áƒĄáƒ”áƒ‘áƒ”áƒšáƒ˜ áƒĢირითადი ვერსია: %d (ველოდებოდით %d-ქ), რომელიáƒĒ ნაპოვნია %s-ში" - -#: src/load_plugins.c:317 -#, c-format -msgid "ignoring policy plugin \"%s\" in %s, line %d" -msgstr "áƒŦესებს დამაáƒĸების (\"%s\") იგნორი %s-ში, %d-ე ხაზზე" - -#: src/load_plugins.c:320 -msgid "only a single policy plugin may be specified" -msgstr "áƒ“áƒáƒ¨áƒ•áƒ”áƒ‘áƒŖáƒšáƒ˜áƒ áƒŦესების მხოლოდ ერთი დამაáƒĸების მითითება" - -#: src/load_plugins.c:346 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "დამაáƒĸების áƒĸიპი (%d) áƒŖáƒĒნობია. ნაპოვნია %s-ში" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "შიდა შეáƒĒდომა: %s-იქ გადავსება" -#: src/parse_args.c:234 +#: 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:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "პროáƒĒესი %d áƒ›áƒáƒŖáƒšáƒáƒ“áƒœáƒ”áƒšáƒáƒ“ áƒ“áƒáƒĄáƒ áƒŖáƒšáƒ“áƒ" + +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "seccomp ფილáƒĸრიქ დაყენების შეáƒĒდომა" + +#: 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: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:1213 +msgid "unable to send message to monitor process" +msgstr "áƒ›áƒáƒ§áƒŖáƒ áƒ”áƒ‘áƒ”áƒšáƒ˜ პროáƒĒესისთვის შეáƒĸყობინების გაგზავნა áƒ¨áƒ”áƒŖáƒĢლებელია" + +#: 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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s-იქ მფლობლის UID %d áƒŖáƒœáƒ“áƒ იყოს" + +#: src/load_plugins.c:131 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "%s ჊აáƒŦერადი მხოლოდ მფლობლის მიერ áƒŖáƒœáƒ“áƒ იყოს" + +#: 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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "%s-იქ ჊აáƒĸვირთვის შეáƒĒდომა: %s" + +#: src/load_plugins.c:291 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "სიმბოლო \"%s\"-იქ %s-ში პოვნა áƒ¨áƒ”áƒŖáƒĢლებელია" + +#: 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:319 +#, c-format +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "áƒŦესებს დამაáƒĸების (\"%s\") იგნორი %s-ში, %d-ე ხაზზე" + +#: src/load_plugins.c:322 +msgid "only a single policy plugin may be specified" +msgstr "áƒ“áƒáƒ¨áƒ•áƒ”áƒ‘áƒŖáƒšáƒ˜áƒ áƒŦესების მხოლოდ ერთი დამაáƒĸების მითითება" + +#: src/load_plugins.c:348 +#, c-format +msgid "unknown plugin type %d found in %s" +msgstr "დამაáƒĸების áƒĸიპი (%d) áƒŖáƒĒნობია. ნაპოვნია %s-ში" + +#: src/load_plugins.c:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "áƒŦესების დამაáƒĸება %s არ შეიáƒĒავს check_policy მეთოდს" + +#: 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 "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 "áƒ¯áƒ’áƒŖáƒ¤áƒ”áƒ‘áƒ˜áƒĄ ქიიქ მიáƒĻების შეáƒĒდომა" @@ -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 bf8baf1ab..ea4f51795 100644 Binary files a/po/ko.mo and b/po/ko.mo differ diff --git a/po/ko.po b/po/ko.po index 1ecf3c28d..a77eddd3d 100644 --- a/po/ko.po +++ b/po/ko.po @@ -5,19 +5,19 @@ # 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 20:52+0900\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-12 14:16+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" #: 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 -#, c-format -msgid "unable to read execve %s for process %d" -msgstr "í”„ëĄœė„¸ėŠ¤ %2$dë˛ˆė˜ %1$s execveëĨŧ ėŊė„ 눘 ė—†ėŠĩ니다" - -#: 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_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: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 -#, 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 "감ė‚Ŧ í”„ëĄœė„¸ėŠ¤ė— ëŠ”ė‹œė§€ëĨŧ ëŗ´ë‚ŧ 눘 ė—†ėŠĩ니다" - -#: 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 -#, c-format -msgid "error in %s, line %d while loading plugin \"%s\"" -msgstr "%sė˜ %dë˛ˆė§¸ ė¤„ė—ė„œ \"%s\" 플ëŸŦęˇ¸ė¸ė„ ëļˆëŸŦė˜¤ëŠ” 뤑 똤ëĨ˜" - -#: src/load_plugins.c:124 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "%sė€(는) uid %dė—ė„œ ė†Œėœ í•´ė•ŧ 합니다" - -#: src/load_plugins.c:130 -#, c-format -msgid "%s must be only be writable by owner" -msgstr "%sė€(는) ė†Œėœ ėžë§Œ 기록할 눘 ėžˆė–´ė•ŧ 합니다" - -#: src/load_plugins.c:241 src/load_plugins.c:312 -#, c-format -msgid "ignoring duplicate plugin \"%s\" in %s, line %d" -msgstr "%2$sė˜ %3$dë˛ˆė§¸ ė¤„ė—ė„œ \"%1$s\" 뤑ëŗĩ 플ëŸŦęˇ¸ė¸ ëŦ´ė‹œ" - -#: src/load_plugins.c:279 -#, c-format -msgid "unable to load %s: %s" -msgstr "%sė„(ëĨŧ) ëļˆëŸŦė˜Ŧ 눘 ė—†ėŠĩ니다: %s" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "%2$sė—ė„œ \"%1$s\" ė‹Ŧëŗŧė„ ė°žė„ 눘 ė—†ėŠĩ니다" - -#: src/load_plugins.c:299 -#, 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 -#, c-format -msgid "ignoring policy plugin \"%s\" in %s, line %d" -msgstr "%2$sė˜ %3$dë˛ˆė§¸ ė¤„ė—ė„œ \"%1$s\" ė •ėą… 플ëŸŦęˇ¸ė¸ ëŦ´ė‹œ" - -#: src/load_plugins.c:320 -msgid "only a single policy plugin may be specified" -msgstr "단ėŧ ė •ėą… 플ëŸŦęˇ¸ė¸ė„ ė§€ė •í•˜ė‹­ė‹œė˜¤" - -#: src/load_plugins.c:346 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "%2$s뗐 ė•Œ 눘 ė—†ëŠ” ė •ėą… ėœ í˜• %1$dė´(가) ėžˆėŠĩ니다" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "내ëļ€ ė˜¤ëĨ˜, %s ė˜¤ë˛„í”ŒëĄœėš°" -#: src/parse_args.c:211 +#: 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:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "í”„ëĄœė„¸ėŠ¤ %dë˛ˆė´ ę°‘ėžę¸° 끝ë‚ŦėŠĩ니다" + +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "seccomp 필터ëĨŧ ė„¤ė •í•  눘 ė—†ėŠĩ니다" + +#: 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: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:1213 +msgid "unable to send message to monitor process" +msgstr "감ė‚Ŧ í”„ëĄœė„¸ėŠ¤ė— ëŠ”ė‹œė§€ëĨŧ ëŗ´ë‚ŧ 눘 ė—†ėŠĩ니다" + +#: 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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%sė€(는) uid %dė—ė„œ ė†Œėœ í•´ė•ŧ 합니다" + +#: src/load_plugins.c:131 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "%sė€(는) ė†Œėœ ėžë§Œ 기록할 눘 ėžˆė–´ė•ŧ 합니다" + +#: 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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "%sė„(ëĨŧ) ëļˆëŸŦė˜Ŧ 눘 ė—†ėŠĩ니다: %s" + +#: src/load_plugins.c:291 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "%2$sė—ė„œ \"%1$s\" ė‹Ŧëŗŧė„ ė°žė„ 눘 ė—†ėŠĩ니다" + +#: 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:319 +#, c-format +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "%2$sė˜ %3$dë˛ˆė§¸ ė¤„ė—ė„œ \"%1$s\" ė •ėą… 플ëŸŦęˇ¸ė¸ ëŦ´ė‹œ" + +#: src/load_plugins.c:322 +msgid "only a single policy plugin may be specified" +msgstr "단ėŧ ė •ėą… 플ëŸŦęˇ¸ė¸ė„ ė§€ė •í•˜ė‹­ė‹œė˜¤" + +#: src/load_plugins.c:348 +#, c-format +msgid "unknown plugin type %d found in %s" +msgstr "%2$s뗐 ė•Œ 눘 ė—†ëŠ” ė •ėą… ėœ í˜• %1$dė´(가) ėžˆėŠĩ니다" + +#: src/load_plugins.c:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "%s ė •ėą… 플ëŸŦęˇ¸ė¸ė— check_policy ëŠ”ė„œë“œę°€ ė—†ėŠĩ니다" + +#: 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 9245c40f5..2b6bc0ba5 100644 Binary files a/po/pl.mo and b/po/pl.mo differ diff --git a/po/pl.po b/po/pl.po index f1766782f..5c15dec19 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 -#, c-format -msgid "unable to read execve %s for process %d" -msgstr "nie udało się odczytać execve %s dla procesu %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 "nie udało się ustawić rejestrÃŗw dla procesu %d" - -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 -#, c-format -msgid "process %d exited unexpectedly" -msgstr "proces %d nieoczekiwanie zakończył się" - -#: src/exec_ptrace.c:843 -msgid "unable to set seccomp filter" -msgstr "nie udało się ustawić filtra seccomp" - -#: src/exec_ptrace.c:934 -#, 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 -#, c-format -msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" -msgstr "niezgodność %s[%d], oczekiwano \"%s\", napotkano \"%s\"" - -#: src/exec_ptrace.c:1013 -#, 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 -#, 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 -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 -#, 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 -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 -#, 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 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "właścicielem %s musi być uid %d" - -#: src/load_plugins.c:130 -#, 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 -#, 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 -#, c-format -msgid "unable to load %s: %s" -msgstr "nie udało się załadować %s: %s" - -#: src/load_plugins.c:289 -#, 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 -#, 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 -#, 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 -msgid "only a single policy plugin may be specified" -msgstr "moÅŧe być podana tylko jedna wtyczka polityki" - -#: src/load_plugins.c:346 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "nieznany typ wtyczki %d napotkany w %s" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "błąd wewnętrzny, przepełnienie %s" -#: src/parse_args.c:211 +#: 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: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:1207 +msgid "unable to set seccomp filter" +msgstr "nie udało się ustawić filtra seccomp" + +#: 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: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: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: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:103 +msgid "unable to allocate pty" +msgstr "nie udało się przydzielić 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 "nie udało się przywrÃŗcić procedury obsługi dla sygnału %d" + +#: 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: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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "właścicielem %s musi być uid %d" + +#: 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: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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "nie udało się załadować %s: %s" + +#: 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: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: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:322 +msgid "only a single policy plugin may be specified" +msgstr "moÅŧe być podana tylko jedna wtyczka polityki" + +#: 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:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "wtyczka polityki %s nie zawiera metody check_policy" + +#: 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 "unable to run %s as a login shell" -msgstr "nie udało się uruchomić %s jako powłoki logowania" +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: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 "Opcji -%c moÅŧna uÅŧywać tylko w trybie edycji." + +#: 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 5f0524dbb..a5ebf2f11 100644 Binary files a/po/ro.mo and b/po/ro.mo differ diff --git a/po/ro.po b/po/ro.po index 54e3f5a3d..87544208e 100644 --- a/po/ro.po +++ b/po/ro.po @@ -10,12 +10,13 @@ # Actualizare a algoritmului formelor de plural (de la „trei-vechi” la „trei-nou”). # Actualizare a traducerii pentru versiunea 1.9.10b1, făcută de R-GC. # Actualizare a traducerii pentru versiunea 1.9.11b1, făcută de R-GC. +# Actualizare a traducerii pentru versiunea 1.9.12b2, făcută de R-GC. 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 20:01+0200\n" +"POT-Creation-Date: 2022-10-09 09:48-0600\n" +"PO-Revision-Date: 2022-10-12 11:37+0200\n" "Last-Translator: Remus-Gabriel Chelu \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 f13442f7e..f8305f548 100644 Binary files a/po/sr.mo and b/po/sr.mo differ diff --git a/po/sr.po b/po/sr.po index 5a2ef2423..22198ceff 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 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_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: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 #, c-format msgid "unable to restore handler for signal %d" msgstr "ĐŊĐĩ ĐŧĐžĐŗŅƒ да ĐŋĐžĐ˛Ņ€Đ°Ņ‚Đ¸Đŧ Ņ€ŅƒĐēĐžĐ˛Đ°ĐžŅ†Đ° Са ŅĐ¸ĐŗĐŊаĐģ „%d“" -#: src/exec_pty.c:158 -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 -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 -msgid "command rejected by I/O plugin" -msgstr "ĐŊĐ°Ņ€ĐĩĐ´ĐąŅƒ ҘĐĩ ĐžĐ´ĐąĐ°Ņ†Đ¸Đž ĐŖ/И ĐŋŅ€Đ¸ĐēŅ™ŅƒŅ‡Đ°Đē" - -#: src/exec_pty.c:455 -msgid "error logging suspend" -msgstr "ĐŗŅ€Đĩ҈Đēа ĐžĐąŅƒŅŅ‚Đ°Đ˛Đĩ ĐŋĐ¸ŅĐ°ŅšĐ° Đ´ĐŊĐĩвĐŊиĐēа" - -#: src/exec_pty.c:489 -msgid "error changing window size" -msgstr "ĐŗŅ€Đĩ҈Đēа ĐŋŅ€ĐžĐŧĐĩĐŊĐĩ вĐĩĐģĐ¸Ņ‡Đ¸ĐŊĐĩ ĐŋŅ€ĐžĐˇĐžŅ€Đ°" - -#: src/exec_pty.c:1615 +#: 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/sudo.pot b/po/sudo.pot index 4d00bd8bf..cc7a6307f 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,23 +112,23 @@ 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 -#, c-format -msgid "unable to open %.*s" -msgstr "" - -#: 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 "" +#: lib/util/mkdir_parents.c:130 lib/util/mkdir_parents.c:139 +#, c-format +msgid "unable to open %.*s" +msgstr "" + #: lib/util/regex.c:103 msgid "regular expression too large" msgstr "" @@ -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 -#, c-format -msgid "unable to read execve %s for process %d" -msgstr "" - -#: 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 "" - -#: src/exec_ptrace.c:734 src/exec_ptrace.c:899 -#, c-format -msgid "process %d exited unexpectedly" -msgstr "" - -#: src/exec_ptrace.c:843 -msgid "unable to set seccomp filter" -msgstr "" - -#: src/exec_ptrace.c:934 -#, 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 -#, c-format -msgid "%s[%d] mismatch, expected \"%s\", got \"%s\"" -msgstr "" - -#: src/exec_ptrace.c:1013 -#, c-format -msgid "unable to get event message for process %d" -msgstr "" - -#: src/exec_ptrace.c:1019 -#, c-format -msgid "unable to get registers for process %d" -msgstr "" - -#: src/exec_pty.c:163 -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 -#, c-format -msgid "unable to restore handler for signal %d" -msgstr "" - -#: src/exec_pty.c:1651 -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 -#, c-format -msgid "error in %s, line %d while loading plugin \"%s\"" -msgstr "" - -#: src/load_plugins.c:124 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "" - -#: src/load_plugins.c:130 -#, c-format -msgid "%s must be only be writable by owner" -msgstr "" - -#: src/load_plugins.c:241 src/load_plugins.c:312 -#, c-format -msgid "ignoring duplicate plugin \"%s\" in %s, line %d" -msgstr "" - -#: src/load_plugins.c:279 -#, c-format -msgid "unable to load %s: %s" -msgstr "" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "" - -#: src/load_plugins.c:299 -#, c-format -msgid "incompatible plugin major version %d (expected %d) found in %s" -msgstr "" - -#: src/load_plugins.c:317 -#, c-format -msgid "ignoring policy plugin \"%s\" in %s, line %d" -msgstr "" - -#: src/load_plugins.c:320 -msgid "only a single policy plugin may be specified" -msgstr "" - -#: src/load_plugins.c:346 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "" -#: src/parse_args.c:211 +#: 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:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "" + +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "" + +#: 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: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: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:1718 +#, c-format +msgid "unable to get registers for process %d" +msgstr "" + +#: src/exec_pty.c:103 +msgid "unable to allocate pty" +msgstr "" + +#: 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:1213 +msgid "unable to send message to monitor process" +msgstr "" + +#: 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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "" + +#: src/load_plugins.c:131 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "" + +#: 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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "" + +#: src/load_plugins.c:291 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "" + +#: src/load_plugins.c:301 +#, c-format +msgid "incompatible plugin major version %d (expected %d) found in %s" +msgstr "" + +#: src/load_plugins.c:319 +#, c-format +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "" + +#: src/load_plugins.c:322 +msgid "only a single policy plugin may be specified" +msgstr "" + +#: src/load_plugins.c:348 +#, c-format +msgid "unknown plugin type %d found in %s" +msgstr "" + +#: src/load_plugins.c:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "" + +#: 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 "" diff --git a/po/sv.mo b/po/sv.mo index 115cc142c..beddaad0b 100644 Binary files a/po/sv.mo and b/po/sv.mo differ diff --git a/po/sv.po b/po/sv.po index 396e63a00..bb68e1735 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,24 +1,24 @@ # Swedish translation for sudo. -# Copyright Š 2012, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc. +# Copyright Š 2012, 2016, 2017, 2018, 2019, 2020, 2022 Free Software Foundation, Inc. # This file is put in the public domain. # Daniel Nylander , 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 -msgid "error in event loop" -msgstr "fel i händelseslinga" - -#: src/exec_nopty.c:539 src/exec_pty.c:606 src/signal.c:101 -#, c-format -msgid "unable to restore handler for signal %d" -msgstr "kunde inte ÃĨterställa hanterare fÃļr signal %d" - -#: src/exec_pty.c:152 -msgid "unable to allocate pty" -msgstr "kunde inte allokera pty" - -#: 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_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_pty.c:444 -msgid "error logging suspend" -msgstr "felloggning avstängd" - -#: src/exec_pty.c:477 -msgid "error changing window size" -msgstr "fel vid ändring av fÃļnsterstorlek" - -#: src/exec_pty.c:1375 +#: 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_pty.c:1587 -msgid "unable to send message to monitor process" -msgstr "kan inte skicka meddelande till Ãļvervakningsprocess" +#: src/exec_nopty.c:684 src/exec_pty.c:1265 +msgid "error in event loop" +msgstr "fel i händelseslinga" -#: 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 -#, 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 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "%s mÃĨste ägas av uid %d" - -#: src/load_plugins.c:137 -#, 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 -#, 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 -#, c-format -msgid "unable to load %s: %s" -msgstr "kunde inte läsa in %s: %s" - -#: src/load_plugins.c:299 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "kunde inte hitta symbol ”%s” i %s" - -#: src/load_plugins.c:309 -#, 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 -#, c-format -msgid "ignoring policy plugin \"%s\" in %s, line %d" -msgstr "ignorerar policyinsticksmodul ”%s” i %s, rad %d" - -#: src/load_plugins.c:330 -msgid "only a single policy plugin may be specified" -msgstr "bara en policyinsticksmodul kan anges" - -#: src/load_plugins.c:356 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "okänd insticksmodulstyp %d hittad i %s" - -#: src/load_plugins.c:552 -#, c-format -msgid "policy plugin %s does not include a check_policy method" -msgstr "policyinsticksmodul %s inkluderar inte en check_policy-metod" - -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 +#: 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 "internal error, %s overflow" msgstr "internt fel, %s spill" -#: src/parse_args.c:223 +#: 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_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_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "kan inte sätta seccomp-filter" + +#: src/exec_ptrace.c:1404 +#, c-format +msgid "interpreter argument , expected \"%s\", got \"%s\"" +msgstr "tolkargument , fÃļrväntade \"%s\", fick \"%s\"" + +#: 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_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_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: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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s mÃĨste ägas av uid %d" + +#: 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: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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "kunde inte läsa in %s: %s" + +#: 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: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:319 +#, c-format +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "ignorerar policyinsticksmodul ”%s” i %s, rad %d" + +#: src/load_plugins.c:322 +msgid "only a single policy plugin may be specified" +msgstr "bara en policyinsticksmodul kan anges" + +#: 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:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "policyinsticksmodul %s inkluderar inte en check_policy-metod" + +#: 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 "unable to run %s as a login shell" -msgstr "kunde inte kÃļra %s som ett inloggningsskal" +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 "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 6cbecffe2..fce6dc18f 100644 Binary files a/po/uk.mo and b/po/uk.mo differ diff --git a/po/uk.po b/po/uk.po index a6936569f..efe417b37 100644 --- a/po/uk.po +++ b/po/uk.po @@ -4,10 +4,10 @@ # Yuri Chornoivan , 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 -#, c-format -msgid "unable to read execve %s for process %d" -msgstr "ĐŊĐĩ вдаĐģĐžŅŅ ĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°Ņ‚Đ¸ %s execve Đ´ĐģŅ ĐŋŅ€ĐžŅ†Đĩҁ҃ %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_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: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 -#, 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 "ĐŊĐĩ вдаĐģĐžŅŅ ĐŊĐ°Đ´Ņ–ŅĐģĐ°Ņ‚Đ¸ ĐŋĐžĐ˛Ņ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ Đ´Đž ĐŋŅ€ĐžŅ†Đĩҁ҃ Đ°ŅƒĐ´Đ¸Ņ‚Ņƒ" - -#: 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 -#, c-format -msgid "error in %s, line %d while loading plugin \"%s\"" -msgstr "ĐŋĐžĐŧиĐģĐēа ҃ %s, Ņ€ŅĐ´ĐžĐē %d ĐŋŅ–Đ´ Ņ‡Đ°Ņ ҁĐŋŅ€ĐžĐąĐ¸ СаваĐŊŅ‚Đ°ĐļĐĩĐŊĐŊŅ Đ´ĐžĐ´Đ°Ņ‚Đēа ÂĢ%sÂģ" - -#: src/load_plugins.c:124 -#, c-format -msgid "%s must be owned by uid %d" -msgstr "%s ĐŧĐ°Ņ” ĐŊаĐģĐĩĐļĐ°Ņ‚Đ¸ ĐēĐžŅ€Đ¸ŅŅ‚ŅƒĐ˛Đ°Ņ‡ĐĩĐ˛Ņ– С uid %d" - -#: src/load_plugins.c:130 -#, c-format -msgid "%s must be only be writable by owner" -msgstr "%s ĐŧĐ°Ņ” ĐąŅƒŅ‚Đ¸ Đ´ĐžŅŅ‚ŅƒĐŋĐŊиĐŧ Đ´Đž СаĐŋĐ¸ŅŅƒ ĐģĐ¸ŅˆĐĩ Đ´ĐģŅ вĐģĐ°ŅĐŊиĐēа" - -#: src/load_plugins.c:241 src/load_plugins.c:312 -#, c-format -msgid "ignoring duplicate plugin \"%s\" in %s, line %d" -msgstr "Ņ–ĐŗĐŊĐžŅ€ŅƒŅ”ĐŧĐž ĐŋĐžĐ˛Ņ‚ĐžŅ€ĐŊиК СаĐŋĐ¸Ņ Đ´ĐžĐ´Đ°Ņ‚Đēа, ÂĢ%sÂģ, ҃ %s, Ņ€ŅĐ´ĐžĐē %d" - -#: src/load_plugins.c:279 -#, c-format -msgid "unable to load %s: %s" -msgstr "ĐŊĐĩ вдаĐģĐžŅŅ СаваĐŊŅ‚Đ°ĐļĐ¸Ņ‚Đ¸ %s: %s" - -#: src/load_plugins.c:289 -#, c-format -msgid "unable to find symbol \"%s\" in %s" -msgstr "ĐŊĐĩ вдаĐģĐžŅŅ СĐŊĐ°ĐšŅ‚Đ¸ ŅĐ¸ĐŧвОĐģ ÂĢ%sÂģ ҃ %s" - -#: src/load_plugins.c:299 -#, c-format -msgid "incompatible plugin major version %d (expected %d) found in %s" -msgstr "ĐŊĐĩҁ҃ĐŧҖҁĐŊа ĐžŅĐŊОвĐŊа вĐĩŅ€ŅŅ–Ņ Đ´ĐžĐ´Đ°Ņ‚Đēа, %d, (ĐŧаĐģĐž ĐąŅƒŅ‚Đ¸ %d) ҃ %s" - -#: src/load_plugins.c:317 -#, c-format -msgid "ignoring policy plugin \"%s\" in %s, line %d" -msgstr "Ņ–ĐŗĐŊĐžŅ€ŅƒŅ”ĐŧĐž Đ´ĐžĐ´Đ°Ņ‚ĐžĐē ĐŋŅ€Đ°Đ˛Đ¸Đģ, ÂĢ%sÂģ, ҃ %s, Ņ€ŅĐ´ĐžĐē %d" - -#: src/load_plugins.c:320 -msgid "only a single policy plugin may be specified" -msgstr "ĐŧĐžĐļĐŊа виСĐŊĐ°Ņ‡Đ°Ņ‚Đ¸ ĐģĐ¸ŅˆĐĩ ОдиĐŊ Đ´ĐžĐ´Đ°Ņ‚ĐžĐē ĐžĐąŅ€ĐžĐąĐēи ĐŋŅ€Đ°Đ˛Đ¸Đģ" - -#: src/load_plugins.c:346 -#, c-format -msgid "unknown plugin type %d found in %s" -msgstr "҃ %2$s Đ˛Đ¸ŅĐ˛ĐģĐĩĐŊĐž ĐŊĐĩĐ˛Ņ–Đ´ĐžĐŧиК Ņ‚Đ¸Đŋ Đ´ĐžĐ´Đ°Ņ‚Đēа, %1$d" - -#: src/load_plugins.c:529 -#, 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 +#: 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 "internal error, %s overflow" msgstr "вĐŊŅƒŅ‚Ņ€Ņ–ŅˆĐŊŅ ĐŋĐžĐŧиĐģĐēа, ĐŋĐĩŅ€ĐĩĐŋОвĐŊĐĩĐŊĐŊŅ %s" -#: src/parse_args.c:211 +#: 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:1098 src/exec_ptrace.c:1273 src/exec_ptrace.c:1615 +#, c-format +msgid "process %d exited unexpectedly" +msgstr "ĐŋŅ€ĐžŅ†Đĩҁ %d ĐŊĐĩĐžŅ‡Ņ–ĐēŅƒĐ˛Đ°ĐŊĐž СавĐĩŅ€ŅˆĐ¸Đ˛ Ņ€ĐžĐąĐžŅ‚Ņƒ" + +#: src/exec_ptrace.c:1207 +msgid "unable to set seccomp filter" +msgstr "ĐŊĐĩ вдаĐģĐžŅŅ Đ˛ŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚Đ¸ ҄ҖĐģŅŒŅ‚Ņ€ seccomp" + +#: 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: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:1213 +msgid "unable to send message to monitor process" +msgstr "ĐŊĐĩ вдаĐģĐžŅŅ ĐŊĐ°Đ´Ņ–ŅĐģĐ°Ņ‚Đ¸ ĐŋĐžĐ˛Ņ–Đ´ĐžĐŧĐģĐĩĐŊĐŊŅ Đ´Đž ĐŋŅ€ĐžŅ†Đĩҁ҃ Đ°ŅƒĐ´Đ¸Ņ‚Ņƒ" + +#: 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:125 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s ĐŧĐ°Ņ” ĐŊаĐģĐĩĐļĐ°Ņ‚Đ¸ ĐēĐžŅ€Đ¸ŅŅ‚ŅƒĐ˛Đ°Ņ‡ĐĩĐ˛Ņ– С uid %d" + +#: src/load_plugins.c:131 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "%s ĐŧĐ°Ņ” ĐąŅƒŅ‚Đ¸ Đ´ĐžŅŅ‚ŅƒĐŋĐŊиĐŧ Đ´Đž СаĐŋĐ¸ŅŅƒ ĐģĐ¸ŅˆĐĩ Đ´ĐģŅ вĐģĐ°ŅĐŊиĐēа" + +#: 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:281 +#, c-format +msgid "unable to load %s: %s" +msgstr "ĐŊĐĩ вдаĐģĐžŅŅ СаваĐŊŅ‚Đ°ĐļĐ¸Ņ‚Đ¸ %s: %s" + +#: src/load_plugins.c:291 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "ĐŊĐĩ вдаĐģĐžŅŅ СĐŊĐ°ĐšŅ‚Đ¸ ŅĐ¸ĐŧвОĐģ ÂĢ%sÂģ ҃ %s" + +#: 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:319 +#, c-format +msgid "ignoring policy plugin \"%s\" in %s, line %d" +msgstr "Ņ–ĐŗĐŊĐžŅ€ŅƒŅ”ĐŧĐž Đ´ĐžĐ´Đ°Ņ‚ĐžĐē ĐŋŅ€Đ°Đ˛Đ¸Đģ, ÂĢ%sÂģ, ҃ %s, Ņ€ŅĐ´ĐžĐē %d" + +#: src/load_plugins.c:322 +msgid "only a single policy plugin may be specified" +msgstr "ĐŧĐžĐļĐŊа виСĐŊĐ°Ņ‡Đ°Ņ‚Đ¸ ĐģĐ¸ŅˆĐĩ ОдиĐŊ Đ´ĐžĐ´Đ°Ņ‚ĐžĐē ĐžĐąŅ€ĐžĐąĐēи ĐŋŅ€Đ°Đ˛Đ¸Đģ" + +#: src/load_plugins.c:348 +#, c-format +msgid "unknown plugin type %d found in %s" +msgstr "҃ %2$s Đ˛Đ¸ŅĐ˛ĐģĐĩĐŊĐž ĐŊĐĩĐ˛Ņ–Đ´ĐžĐŧиК Ņ‚Đ¸Đŋ Đ´ĐžĐ´Đ°Ņ‚Đēа, %1$d" + +#: src/load_plugins.c:531 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "Đ´Đž Đ´ĐžĐ´Đ°Ņ‚Đēа ĐŋŅ€Đ°Đ˛Đ¸Đģ %s ĐŊĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž ĐŧĐĩŅ‚ĐžĐ´ check_policy" + +#: 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 "ĐŊĐĩ вдаĐģĐžŅŅ ĐˇĐ´ŅƒĐąĐģŅŽĐ˛Đ°Ņ‚Đ¸ ĐŋĐĩŅ€ĐĩŅ…ĐžĐŋĐģĐĩĐŊиК Đ´ĐĩҁĐēŅ€Đ¸ĐŋŅ‚ĐžŅ€ Ņ„Đ°ĐšĐģа" diff --git a/scripts/log2cl.pl b/scripts/log2cl.pl index 894736a65..a20cd220a 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 $key_date = ""; my $log_size = 0; my @lines; -# Wrap like "hg log --style=changelog" +# Wrap like "hg log --template=changelog" $Text::Wrap::columns = 77; while () { diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index 380439384..a6e10bcc1 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; @@ -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"; + 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"; + $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"; + } } } } diff --git a/src/Makefile.in b/src/Makefile.in index 74eea89b4..bfa941565 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@ @@ -140,13 +141,14 @@ 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 +IOBJS = $(OBJS:.o=.i) sesh.i sudo_intercept.i sudo_intercept_common.i POBJS = $(IOBJS:.i=.plog) @@ -330,7 +332,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; \ @@ -409,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 $@ @@ -459,16 +461,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 $@ @@ -566,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 \ @@ -711,11 +733,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 +776,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 +830,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 $@ @@ -851,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 diff --git a/src/apparmor.c b/src/apparmor.c index 5f36f3064..cbfa2aa88 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 @@ -39,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 @@ -88,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); diff --git a/src/conversation.c b/src/conversation.c index 53943b14a..620bb5caf 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); diff --git a/src/copy_file.c b/src/copy_file.c index e173c43cf..671333828 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/edit_open.c b/src/edit_open.c index cd0418406..091eed838 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/env_hooks.c b/src/env_hooks.c index 5f9a61c75..eaacaa7d9 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; @@ -76,11 +78,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; @@ -129,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)) { @@ -201,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)) { @@ -266,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.c b/src/exec.c index d572b2a1b..f8856b426 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 { @@ -354,9 +360,6 @@ sudo_terminated(struct command_status *cstat) debug_return_bool(false); } -#if SUDO_API_VERSION != SUDO_API_MKVERSION(1, 19) -# error "Update sudo_needs_pty() after changing the plugin API" -#endif static bool sudo_needs_pty(struct command_details *details) { @@ -367,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; @@ -525,3 +523,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_common.c b/src/exec_common.c index c5fc8cb77..c5d704fe8 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/exec_intercept.c b/src/exec_intercept.c index 6560d93cf..423dc0dfb 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); @@ -185,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); @@ -201,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; } @@ -219,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); @@ -238,7 +271,7 @@ bad: */ 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; @@ -248,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; } @@ -257,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': @@ -285,16 +311,38 @@ update_command_info(char * const *old_command_info, const char *cmnd, } n++; } - /* Append actual runcwd. */ - command_info[n] = sudo_new_key_val("runcwd", runcwd); - if (command_info[n] == NULL) { + + /* 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 ? runcwd : "unknown"); + if (command_info[n] == NULL) { + 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++) { @@ -308,7 +356,7 @@ bad: /* * 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 @@ -320,11 +368,36 @@ 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; - int i, rc; + bool ret = true; + 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 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; + } + } + /* 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, @@ -337,11 +410,9 @@ 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); - if (command_info_copy == NULL) { - closure->errstr = N_("unable to allocate memory"); - goto done; - } + runcwd, &closure->command, closure); + if (command_info_copy == NULL) + goto oom; command_info = command_info_copy; closure->state = POLICY_ACCEPT; break; @@ -351,28 +422,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; - } + command, runcwd, NULL, closure); + if (command_info == NULL) + goto oom; closure->state = POLICY_ACCEPT; run_argv = argv; } @@ -394,31 +461,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; @@ -427,24 +486,40 @@ 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 (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++) { free(command_info_copy[i]); @@ -464,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 || req->n_envp == 0) { + if (req->command == NULL) { closure->errstr = N_("invalid PolicyCheckRequest"); goto done; } @@ -478,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"); @@ -546,11 +628,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 +724,7 @@ unpack: 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 +743,11 @@ unpack: 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 +771,8 @@ unpack: } /* 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 +825,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 +893,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,46 +944,33 @@ 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; 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 the listener event. */ + close(fd); + 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. */ + if (!enable_read_event(fd, RECV_HELLO, intercept_cb, closure)) + goto done; + break; + default: + /* Done with this connection. */ + intercept_connection_close(closure); } ret = true; @@ -945,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); @@ -959,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/exec_intercept.h b/src/exec_intercept.h index e9d3a6ac3..baf429bb6 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/exec_iolog.c b/src/exec_iolog.c new file mode 100644 index 000000000..8575ee482 --- /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 95e1a3f7d..bd91e3ae6 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 @@ -38,45 +40,41 @@ #include #include #include +#include /* for struct winsize on HP-UX */ #include "sudo.h" #include "sudo_exec.h" #include "sudo_plugin.h" #include "sudo_plugin_int.h" -#ifndef __WALL -# define __WALL 0 -#endif +static void handle_sigchld_nopty(struct exec_closure *ec); -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; -}; +/* + * 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); -static void handle_sigchld_nopty(struct exec_closure_nopty *ec); + 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) { - 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 +108,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 +120,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); @@ -143,6 +141,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 @@ -203,26 +204,28 @@ 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(); 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; 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); @@ -313,6 +316,13 @@ fill_exec_closure_nopty(struct exec_closure_nopty *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); @@ -320,44 +330,208 @@ fill_exec_closure_nopty(struct exec_closure_nopty *ec, } /* - * Free the dynamically-allocated contents of the exec closure. + * Read an iobuf that is ready. */ static void -free_exec_closure_nopty(struct exec_closure_nopty *ec) +read_callback(int fd, int what, void *v) { - debug_decl(free_exec_closure_nopty, SUDO_DEBUG_EXEC); + 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); - /* 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); + 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 + * ourselves 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) { - struct exec_closure_nopty ec = { 0 }; - int intercept_sv[2] = { -1, -1 }; + int io_pipe[3][2] = { { -1, -1 }, { -1, -1 }, { -1, -1 } }; + int errpipe[2], intercept_sv[2] = { -1, -1 }; + struct exec_closure ec = { 0 }; sigset_t set, oset; - int errpipe[2]; debug_decl(exec_nopty, SUDO_DEBUG_EXEC); /* @@ -384,6 +558,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. @@ -418,6 +595,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) @@ -428,6 +624,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]); @@ -446,7 +649,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; @@ -467,6 +670,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); @@ -491,8 +697,13 @@ exec_nopty(struct command_details *details, struct command_status *cstat) } #endif + /* Flush any remaining output. */ + del_io_events(true); + /* Free things up. */ - free_exec_closure_nopty(&ec); + free_io_bufs(); + free_exec_closure(&ec); + debug_return; } @@ -503,7 +714,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; @@ -543,7 +754,7 @@ handle_sigchld_nopty(struct exec_closure_nopty *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_preload.c b/src/exec_preload.c index 3bc7a15d3..d90fc6322 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,19 +32,153 @@ #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++; + } + + 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); +} + /* * Add a DSO file to LD_PRELOAD or the system equivalent. */ -char ** -sudo_preload_dso(char *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 **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; + char *const empty[1] = { NULL }; bool fd_present = false; bool dso_present = false; # ifdef RTLD_PRELOAD_ENABLE_VAR @@ -54,16 +189,18 @@ sudo_preload_dso(char *envp[], const char *dso_file, int intercept_fd) # ifdef _PATH_ASAN_LIB char *dso_buf = NULL; # endif - debug_decl(sudo_preload_dso, SUDO_DEBUG_UTIL); + size_t env_size; + debug_decl(sudo_preload_dso_alloc, 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 @@ -73,140 +210,156 @@ 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); + /* Treat a NULL envp as empty, thanks Linux. */ + if (envp == NULL) + envp = empty; - /* - * 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; - } + /* 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 */ - /* 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]; - } - } - continue; - } - if (intercept_fd != -1 && strncmp(envp[env_len], "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; - } -# ifdef RTLD_PRELOAD_ENABLE_VAR - if (strncmp(envp[env_len], RTLD_PRELOAD_ENABLE_VAR "=", sizeof(RTLD_PRELOAD_ENABLE_VAR)) == 0) { - dso_enabled = true; - continue; - } -# endif - } + /* Allocate new envp. */ + nenvp = alloc_fn(env_size, sizeof(*nenvp)); + if (nenvp == NULL) + goto oom; /* - * 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] + * Shallow copy envp, with special handling for RTLD_PRELOAD_VAR, + * RTLD_PRELOAD_ENABLE_VAR and SUDO_INTERCEPT_FD. */ - 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 + 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); - 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); + /* 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; + } + + /* Save pointer to LD_PRELOAD variable. */ + preload_ptr = nep; + + goto copy; } - memcpy(nenvp, envp, env_len * sizeof(*envp)); - nenvp[env_len] = NULL; - envp = nenvp; + if (intercept_fd != -1 && strncmp(*ep, "SUDO_INTERCEPT_FD=", + sizeof("SUDO_INTERCEPT_FD=") - 1) == 0) { + 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(*ep, RTLD_PRELOAD_ENABLE_VAR "=", + sizeof(RTLD_PRELOAD_ENABLE_VAR)) == 0) { + dso_enabled = true; + } +# endif +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); - 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; } # endif - envp[env_len++] = preload; - envp[env_len] = NULL; + *nep++ = preload; } else { - const char *old_val = envp[preload_idx] + sizeof(RTLD_PRELOAD_VAR); - len = asprintf(&preload, "%s=%s%c%s", RTLD_PRELOAD_VAR, + const char *old_val = *preload_ptr + sizeof(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; } - 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) { - 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_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); + free_fn(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 - 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/exec_ptrace.c b/src/exec_ptrace.c index dc00dd8af..81cd10bc2 100644 --- a/src/exec_ptrace.c +++ b/src/exec_ptrace.c @@ -26,14 +26,21 @@ #include #include +#include #include +#include #include #include +#if defined(HAVE_STDINT_H) +# include +#elif defined(HAVE_INTTYPES_H) +# include +#endif #include -#include #include #include #include +#include #if defined(HAVE_ENDIAN_H) # include #elif defined(HAVE_SYS_ENDIAN_H) @@ -59,6 +66,10 @@ # endif 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 @@ -269,7 +280,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); @@ -284,6 +295,19 @@ ptrace_getregs(int pid, struct sudo_ptrace_regs *regs, bool compat) if (ptrace(PTRACE_GETREGSET, pid, (void *)NT_PRSTATUS, &iov) == -1) debug_return_bool(false); # endif /* __mips__ */ + if (compat == -1) { +# 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 */ + } /* Machine-dependent parameters to support compat binaries. */ if (compat) { @@ -291,7 +315,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); @@ -321,19 +345,86 @@ 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. + * 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 (;;) { + 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; + 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); +} +#endif /* HAVE_PROCESS_VM_READV */ + +/* + * 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 @@ -342,8 +433,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); } @@ -352,7 +444,8 @@ 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); + errno = ENOSPC; + debug_return_ssize_t(-1); } *buf = cp[i]; if (*buf++ == '\0') @@ -364,25 +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. + * 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 +strtab_to_vec(char *strtab, size_t strtab_len, int *countp, char ***vecp, + char **bufp, size_t *bufsizep, size_t remainder) +{ + char *strend = strtab + strtab_len; + char **vec, **vp; + int count = 0; + debug_decl(strtab_to_vec, SUDO_DEBUG_EXEC); + + /* 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 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); + 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++; + } + *vp++ = NULL; /* we always leave room for NULL */ + + *countp = count; + *vecp = (char **)((char *)vec - *bufp); + + debug_return_size_t((char *)vp - strend); +} + +/* + * 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 size_t ptrace_read_vec(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr, - char **vec, char *buf, size_t bufsize) + 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; - char *buf0 = buf; - int len = 0; - size_t slen; + size_t len, strtab_len; debug_decl(ptrace_read_vec, SUDO_DEBUG_EXEC); - /* Fill in vector. */ - for (;;) { + /* Treat a NULL vector as empty, thanks Linux. */ + if (addr == 0) { + char **vp; + + 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); @@ -408,88 +600,115 @@ 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); + /* NULL terminator */ + break; default: - slen = ptrace_read_string(pid, word, buf, bufsize); - if (slen == (size_t)-1) - debug_return_size_t(-1); - vec[len++] = buf; - buf += slen + 1; - bufsize -= slen + 1; + 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 /* - * Return the length of the string vector at addr or -1 on error. + * 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 int -ptrace_get_vec_len(pid_t pid, struct sudo_ptrace_regs *regs, unsigned long addr) +static size_t +ptrace_writev_string(pid_t pid, unsigned long addr, const char *str0) { -# ifdef SECCOMP_AUDIT_ARCH_COMPAT - unsigned long next_word = -1; -# endif - unsigned long word; - int len = 0; - debug_decl(ptrace_get_vec_len, SUDO_DEBUG_EXEC); + 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 (;;) { -# 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) { + 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_warn("%s: ptrace(PTRACE_PEEKDATA, %d, 0x%lx, NULL)", - __func__, (int)pid, addr); - debug_return_int(-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: - debug_return_int(len); + /* 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: - len++; - addr += regs->wordsize; - continue; + 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. + * 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 @@ -507,7 +726,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. */ @@ -517,6 +736,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. @@ -530,6 +880,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; @@ -583,23 +939,23 @@ 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) +proc_read_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(proc_read_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); + 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); } } @@ -614,66 +970,82 @@ 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 *pathname, **argv, **envp, *argbuf = NULL; unsigned long path_addr, argv_addr, envp_addr; - int argc, envc; - size_t bufsize, len; + size_t bufsize, len, off = 0; + int i, argc, envc = 0; debug_decl(get_execve_info, SUDO_DEBUG_EXEC); - bufsize = sysconf(_SC_ARG_MAX) + PATH_MAX; + bufsize = PATH_MAX + arg_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); argv_addr = get_sc_arg2(regs); envp_addr = get_sc_arg3(regs); - - /* 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; - - /* 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")); - goto bad; - } - 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 bad; - } - 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 bad; - } - strtab += len; - bufsize -= len; + 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); /* Read the pathname. */ - len = ptrace_read_string(pid, path_addr, strtab, bufsize); + 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; + } + + /* Read argv */ + len = ptrace_read_vec(pid, regs, argv_addr, &argc, &argv, &argbuf, + &bufsize, off); 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 argv for process %d", (int)pid); goto bad; } - pathname = strtab; + 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, &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; + } + + /* 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); @@ -847,11 +1219,21 @@ 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); +#ifdef HAVE_PROCESS_VM_READV + page_size = sysconf(_SC_PAGESIZE); + 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) { /* @@ -904,45 +1286,249 @@ done: } /* - * Verify that the execve(2) argument we wrote match the contents of closure. + * 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 +pathname_matches(const char *path1, const char *path2, bool do_stat) +{ + struct stat sb1, sb2; + debug_decl(pathname_matches, SUDO_DEBUG_EXEC); + + 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 (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)); +} + +static size_t +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; + int fd; + ssize_t nread; + debug_decl(proc_read_vec, SUDO_DEBUG_EXEC); + + len = snprintf(path, sizeof(path), "/proc/%d/%s", (int)pid, name); + if (len >= sizeof(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 *)) { + while (!growbuf(bufp, bufsizep, &strtab, &remainder)) { + 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++; + } + + /* 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); +} + +/* + * Check if the execve(2) arguments match the contents of closure. * Returns true if they match, else false. */ static bool -verify_execve_info(pid_t pid, struct sudo_ptrace_regs *regs, +execve_args_match(const char *pathname, int argc, char * const *argv, + int envc, char * const *envp, bool do_stat, struct intercept_closure *closure) { - char *pathname, **argv, **envp, *buf; - int argc, envc, i; bool ret = true; - debug_decl(verify_execve_info, SUDO_DEBUG_EXEC); + int i; + debug_decl(execve_args_match, SUDO_DEBUG_EXEC); - buf = get_execve_info(pid, regs, &pathname, &argc, &argv, - &envc, &envp); - if (buf == NULL) - debug_return_bool(false); - - if (pathname == NULL || strcmp(pathname, closure->command) != 0) { - sudo_warn( + 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]); } @@ -950,24 +1536,144 @@ 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) +{ + char **argv, **envp, *argbuf = NULL; + char pathname[PATH_MAX]; + sigset_t chldmask; + bool ret = false; + int argc, envc, i, 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 (!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); + ret = true; + goto done; + } + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %d: verify %s", __func__, + (int)pid, pathname); + + /* Allocate a single buffer for argv, envp and their strings. */ + bufsize = arg_max; + argbuf = malloc(bufsize); + if (argbuf == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + + 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, + "unable to read execve argv for process %d", (int)pid); + goto done; + } + + 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, + "unable to read execve envp for process %d", (int)pid); + 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, + "%s: %d new execve args don't match closure", __func__, (int)pid); + } + +done: + free(argbuf); + sigprocmask(SIG_UNBLOCK, &chldmask, NULL); debug_return_bool(ret); } @@ -1007,10 +1713,13 @@ 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); } + 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) { @@ -1053,18 +1762,24 @@ 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 (!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); if (buf == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO, "%s: %d: unable to get execve info", __func__, (int)pid); + /* EIO from ptrace is like EFAULT from the kernel. */ + if (errno == EIO) + errno = EFAULT; + ptrace_fail_syscall(pid, ®s, errno); + goto done; + } - /* Unrecoverable error, kill the process if it still exists. */ - if (errno != ESRCH) - kill(pid, SIGKILL); - debug_return_bool(false); + /* Must have a pathname. */ + if (pathname == NULL) { + ptrace_fail_syscall(pid, ®s, EINVAL); + goto done; } /* @@ -1077,10 +1792,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)); @@ -1110,6 +1833,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) { /* @@ -1188,12 +1913,21 @@ 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) { + 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; default: /* If rejected, fake the syscall and set return to EACCES */ @@ -1231,6 +1965,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))) { @@ -1315,13 +2052,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/exec_ptrace.h b/src/exec_ptrace.h index 4340a48ea..680194db3 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 @@ -88,9 +92,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__) diff --git a/src/exec_pty.c b/src/exec_pty.c index e2fd9c60e..d8235fd85 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; @@ -1408,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. @@ -1461,15 +1029,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 +1055,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 +1087,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 +1108,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 +1128,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 +1236,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 +1294,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 +1328,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/intercept.pb-c.c b/src/intercept.pb-c.c index e4e44c9b6..36d11eeb8 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 786ae7bba..53a068a19 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/load_plugins.c b/src/load_plugins.c index dd0ad3ef5..573460299 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: @@ -174,7 +175,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) { @@ -205,11 +206,11 @@ 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); - struct generic_plugin * plugin = NULL; + struct generic_plugin *plugin = NULL; plugin_clone_func *clone_func; char *clone_func_name = NULL; @@ -218,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)(); } @@ -436,7 +438,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 76c272b40..eff6c8e89 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 @@ -109,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 @@ -160,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; @@ -319,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); @@ -333,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; @@ -363,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; @@ -471,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; @@ -544,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; @@ -596,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; @@ -658,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 @@ -772,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; @@ -828,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/parse_args.c b/src/parse_args.c index 7a8da9209..56f207e8f 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -47,8 +47,9 @@ int tgetpass_flags; /* * Local functions. */ -static void help(void) __attribute__((__noreturn__)); -static void usage_excl(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. @@ -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"; @@ -597,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; @@ -638,7 +648,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 +672,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 +712,7 @@ static void display_usage(int (*output)(const char *)) { struct sudo_lbuf lbuf; - char *uvec[6]; + const char *uvec[6]; int i, ulen; /* @@ -758,6 +768,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/preload.c b/src/preload.c index 250ee7efb..5bfd9fd87 100644 --- a/src/preload.c +++ b/src/preload.c @@ -34,15 +34,15 @@ # 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 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 diff --git a/src/regress/intercept/test_ptrace.c b/src/regress/intercept/test_ptrace.c index 36b52eef4..e31e3c047 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; @@ -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/regress/noexec/check_noexec.c b/src/regress/noexec/check_noexec.c index 9e24bc0ec..4e0a402e8 100644 --- a/src/regress/noexec/check_noexec.c +++ b/src/regress/noexec/check_noexec.c @@ -39,12 +39,12 @@ #include "sudo_compat.h" #include "sudo_fatal.h" #include "sudo_util.h" +#include "sudo_queue.h" #include "sudo_exec.h" 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 +179,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", @@ -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 2326326ef..50455f4d0 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,11 +440,11 @@ 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; - int argc, nargc, serrno; + int argc, len, nargc, serrno; debug_decl(selinux_execve, SUDO_DEBUG_SELINUX); sesh = sudo_conf_sesh_path(); @@ -460,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; @@ -469,26 +467,44 @@ 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, 5 + argc + 1, sizeof(char *)); if (nargv == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return; } - if (ISSET(flags, CD_NOEXEC)) { - nargv[0] = *argv[0] == '-' ? "-sesh-noexec" : "sesh-noexec"; - CLR(flags, CD_NOEXEC); - } else { - nargv[0] = *argv[0] == '-' ? "-sesh" : "sesh"; - } + if (*argv[0] == '-') + nargv[0] = (char *)"-sesh"; + else + nargv[0] = (char *)"sesh"; nargc = 1; - if (fd != -1 && asprintf(&nargv[nargc++], "--execfd=%d", fd) == -1) { - sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return; + 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; + } + 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) { + 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 f05762ffb..314ceb98f 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,47 +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; + char *cmnd; + + if (!ISSET(flags, CD_SUDOEDIT_FOLLOW)) { + sudo_warnx(U_("The -%c option may only be used in edit mode."), + 'h'); + usage(); + } + if (edit_user != NULL) { + sudo_warnx(U_("The -%c option may only be used in edit mode."), + 'w'); + usage(); + } /* If the first char of argv[0] is '-', we are running a login shell. */ login_shell = argv[0][0] == '-'; - /* If argv[0] ends in -noexec, pass the flag to sudo_execve() */ - if ((cp = strrchr(argv[0], '-')) != NULL && cp != argv[0]) { - if (strcmp(cp, "-noexec") == 0) - SET(flags, CD_NOEXEC); + /* 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); } - /* If argv[1] is --execfd=%d, extract the fd to exec with. */ - if (strncmp(argv[1], "--execfd=", 9) == 0) { - const char *errstr; - - cp = argv[1] + 9; - fd = sudo_strtonum(cp, 0, INT_MAX, &errstr); - if (errstr != NULL) - sudo_fatalx(U_("invalid file descriptor number: %s"), cp); - argv++; - argc--; - } - - /* 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); @@ -337,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); @@ -422,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.c b/src/sudo.c index 4f0f8fa35..18beb1bd8 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); @@ -734,6 +726,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) @@ -1021,6 +1014,19 @@ run_command(struct command_details *details) cstat.type = CMD_INVALID; cstat.val = 0; + if (details->command == NULL) { + sudo_warnx("%s", U_("command not set by the security policy")); + debug_return_int(status); + } + if (details->argv == NULL) { + sudo_warnx("%s", U_("argv not set by the security policy")); + debug_return_int(status); + } + if (details->envp == NULL) { + sudo_warnx("%s", U_("envp not set by the security policy")); + debug_return_int(status); + } + sudo_execute(details, &cstat); switch (cstat.type) { @@ -1059,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++) @@ -1246,7 +1258,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 +1276,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 +1302,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 +1319,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.h b/src/sudo.h index aa018ccd6..bbf874fc8 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() @@ -149,30 +150,33 @@ 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 +#define CD_RBAC_SET_CWD 0x02000000 +#define CD_CWD_OPTIONAL 0x04000000 struct preserved_fd { TAILQ_ENTRY(preserved_fd) entries; @@ -190,7 +194,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; @@ -274,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[]); @@ -286,7 +289,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); @@ -335,7 +338,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_edit.c b/src/sudo_edit.c index 2720ae7f2..c62644e07 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); @@ -422,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) { @@ -430,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]; @@ -470,10 +470,10 @@ 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); + /* 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); switch (error) { case SESH_SUCCESS: break; @@ -520,7 +520,9 @@ 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; + bool run_helper = false; int i, error, sesh_nargs, ret = 1; int tfd = -1; struct timespec ts; @@ -530,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) { @@ -540,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); @@ -573,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) { @@ -581,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, 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); diff --git a/src/sudo_exec.h b/src/sudo_exec.h index 2f099a332..a75d6f17f 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; + /* - * Indices into io_fds[] when running a command in a pty. + * 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; +}; + +/* + * 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); @@ -144,7 +223,8 @@ 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); +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); @@ -152,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/sudo_intercept.c b/src/sudo_intercept.c index 943739400..7c2a2d3e5 100644 --- a/src/sudo_intercept.c +++ b/src/sudo_intercept.c @@ -62,6 +62,49 @@ 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 = 0; + debug_decl(copy_vector, SUDO_DEBUG_EXEC); + + if (src != NULL) { + while (src[len] != NULL) + len++; + } + 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 +117,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 +127,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); @@ -104,11 +148,13 @@ 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; } - return true; + debug_return_bool(true); } switch (errno) { case EACCES: @@ -119,34 +165,75 @@ 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; 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) { 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 { + struct stat sb; + + /* Absolute or relative path name. */ + if (stat(cmnd, &sb) == -1) { + /* Leave errno unchanged. */ + goto bad; + } else if (!S_ISREG(sb.st_mode)) { + errno = EACCES; + 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) @@ -156,7 +243,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)) { @@ -166,28 +253,34 @@ 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; - shargv = reallocarray(NULL, (argc + 2), sizeof(char *)); + 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 *)); - ((sudo_fn_execve_t)fn)(_PATH_SUDO_BSHELL, shargv, nenvp); - free(shargv); + ((sudo_fn_execve_t)fn)(_PATH_SUDO_BSHELL, (char **)shargv, nenvp); + sudo_mmap_free(shargv); } } else { errno = EACCES; } - if (ncmnd != cmnd) - free(ncmnd); - if (nargv != argv) - free(nargv); - if (nenvp != envp) - free(nenvp); + +bad: + sudo_mmap_free(cmnd_copy); + if (ncmnd != cmnd_copy) + sudo_mmap_free(ncmnd); + free_vector(argv_copy); + if (nargv != argv_copy) + free_vector(nargv); + free_vector(envp_copy); + /* Leaks allocated preload vars. */ + if (nenvp != envp_copy) + sudo_mmap_free(nenvp); debug_return_int(-1); } @@ -201,11 +294,16 @@ 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++; 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); @@ -217,7 +315,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); } @@ -225,7 +323,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 +351,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 */ @@ -408,39 +506,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 +561,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 +573,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 e6431882b..0dc3de53e 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 @@ -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" @@ -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 @@ -97,7 +98,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); @@ -110,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; } @@ -120,14 +121,14 @@ send_client_hello(int sock) ret = send_req(sock, buf, len); done: - free(buf); + sudo_mmap_free(buf); debug_return_bool(ret); } /* * Receive InterceptResponse from sudo over fd. */ -InterceptResponse * +static InterceptResponse * recv_intercept_response(int fd) { InterceptResponse *res = NULL; @@ -168,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; @@ -201,7 +202,7 @@ recv_intercept_response(int fd) } done: - free(buf); + sudo_mmap_free(buf); debug_return_ptr(res); } @@ -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", @@ -295,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; @@ -311,14 +314,12 @@ 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++) + req.argv = argv ? (char **)argv : empty; + for (req.n_argv = 0; req.argv[req.n_argv] != NULL; req.n_argv++) continue; - req.n_argv = len; - req.envp = (char **)envp; - for (len = 0; envp[len] != NULL; len++) + req.envp = envp ? (char **)envp : empty; + for (req.n_envp = 0; req.envp[req.n_envp] != NULL; req.n_envp++) continue; - req.n_envp = len; if (getcwd(cwdbuf, sizeof(cwdbuf)) != NULL) { req.cwd = cwdbuf; } @@ -335,7 +336,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; } @@ -345,7 +346,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); } @@ -357,18 +358,18 @@ intercept_connect(void) { int sock = -1; int on = 1; - struct sockaddr_in sin; - debug_decl(command_allowed, SUDO_DEBUG_EXEC); + struct sockaddr_in sin4; + 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; } - 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) { @@ -379,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; @@ -390,6 +391,9 @@ done: 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) @@ -404,9 +408,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]); + } } } @@ -417,6 +423,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_mmap(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; @@ -431,22 +449,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; - // XXX - bogus cast - nenvp = sudo_preload_dso((char **)envp, sudo_conf_intercept_path(), - sock); + nenvp = sudo_preload_dso_mmap(envp, sudo_conf_intercept_path(), sock); if (nenvp == NULL) goto oom; *ncmndp = ncmnd; @@ -466,15 +482,15 @@ 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; } 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. */ diff --git a/src/sudo_noexec.c b/src/sudo_noexec.c index fd8117226..71a36d6fe 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); diff --git a/src/sudo_plugin_int.h b/src/sudo_plugin_int.h index 63e4a7da3..7a15d7c26 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 */ diff --git a/src/sudo_usage.h.in b/src/sudo_usage.h.in index fce40d30c..9b85a8580 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. diff --git a/src/suspend_nopty.c b/src/suspend_nopty.c index babeae29b..896b7e2fa 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.