From 6ee98cf453772e13a037ee4d8f812fe6f28460e6 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 22 Jul 2020 07:42:40 -0600 Subject: [PATCH 001/113] Prompt user before truncating a file to zero bytes. Bug #922. --- doc/sudo.man.in | 4 +++- doc/sudo.mdoc.in | 4 +++- src/copy_file.c | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/doc/sudo.man.in b/doc/sudo.man.in index fcefabdd44..bcc1a7f701 100644 --- a/doc/sudo.man.in +++ b/doc/sudo.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDO" "@mansectsu@" "May 7, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "@mansectsu@" "July 22, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -354,6 +354,8 @@ If the specified file does not exist, it will be created. Note that unlike most commands run by \fIsudo\fR, the editor is run with the invoking user's environment unmodified. +If the temporary file becomes empty after editing, the user will +be prompted before it is installed. If, for some reason, \fBsudo\fR is unable to update a file with its edited version, the user will diff --git a/doc/sudo.mdoc.in b/doc/sudo.mdoc.in index 57295bb273..0f452420a3 100644 --- a/doc/sudo.mdoc.in +++ b/doc/sudo.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd May 7, 2020 +.Dd July 22, 2020 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -336,6 +336,8 @@ If the specified file does not exist, it will be created. Note that unlike most commands run by .Em sudo , the editor is run with the invoking user's environment unmodified. +If the temporary file becomes empty after editing, the user will +be prompted before it is installed. If, for some reason, .Nm is unable to update a file with its edited version, the user will diff --git a/src/copy_file.c b/src/copy_file.c index 0db52630f7..9aeb1f92af 100644 --- a/src/copy_file.c +++ b/src/copy_file.c @@ -86,6 +86,17 @@ sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, ssize_t nwritten, nread; debug_decl(sudo_copy_file, SUDO_DEBUG_UTIL); + /* Prompt the user before zeroing out an existing file. */ + if (dst_len > 0 && src_len == 0) { + fprintf(stderr, U_("%s: truncate %s to zero bytes? (y/n) [n] "), + getprogname(), dst); + if (fgets(buf, sizeof(buf), stdin) == NULL || + (buf[0] != 'y' && buf[0] != 'Y')) { + sudo_warnx(U_("not overwriting %s"), dst); + debug_return_int(0); + } + } + /* Extend the file to the new size if larger before copying. */ if (dst_len > 0 && src_len > dst_len) { if (sudo_extend_file(dst_fd, dst, src_len) == -1) From feebbd6d24e6b68a2ac064b760b5b7661eee6eeb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 22 Jul 2020 10:32:51 -0600 Subject: [PATCH 002/113] Update translators. --- doc/CONTRIBUTORS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/CONTRIBUTORS b/doc/CONTRIBUTORS index 9827d9c34b..44e0d358cb 100644 --- a/doc/CONTRIBUTORS +++ b/doc/CONTRIBUTORS @@ -215,8 +215,11 @@ https://translationproject.org for more details. Marchal, Frédéric Margevičius, Algimantas Maryanov, Pavel + Florentina Mușat + Nurmi, Lauri Nikolić, Miroslav Nylander, Daniel + Pan, Yi-Jyun Písař, Petr Puente, Enol Putanec, Božidar @@ -234,6 +237,7 @@ https://translationproject.org for more details. Uranga, Mikel Olasagasti Vorotnikov, Artem Wang, Wylmer + Yang, Boyuan The following people designed the artwork used on the sudo website: From 20fd3b63636e52248c5da79e1d538bac845b5547 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 30 Jul 2020 13:12:29 -0600 Subject: [PATCH 003/113] Rewrite mkdefaults in awk. --- plugins/sudoers/Makefile.in | 3 +- plugins/sudoers/def_data.c | 2 + plugins/sudoers/def_data.h | 2 + plugins/sudoers/mkdefaults | 264 +++++++++++++++++++----------------- 4 files changed, 143 insertions(+), 128 deletions(-) diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 4f59118caf..c687e33dd7 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -48,7 +48,6 @@ FLEX = @FLEX@ YACC = @YACC@ SED = @SED@ AWK = @AWK@ -PERL = perl # Our install program supports extra flags... INSTALL = $(SHELL) $(top_srcdir)/install-sh -c @@ -375,7 +374,7 @@ $(devdir)/getdate.c: $(srcdir)/getdate.y prologue $(devdir)/def_data.c $(devdir)/def_data.h: $(srcdir)/def_data.in @if [ -n "$(DEVEL)" ]; then \ - cmd='$(PERL) $(srcdir)/mkdefaults -o $(devdir)/def_data $(srcdir)/def_data.in'; \ + cmd='AWK=$(AWK) $(SHELL) $(srcdir)/mkdefaults -o $(devdir)/def_data $(srcdir)/def_data.in'; \ echo "$$cmd"; eval $$cmd; \ fi diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index 5a01be6a5b..4fec7c6fc0 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -1,3 +1,5 @@ +/* generated file, do not edit */ + static struct def_values def_data_lecture[] = { { "never", never }, { "once", once }, diff --git a/plugins/sudoers/def_data.h b/plugins/sudoers/def_data.h index fb4c27dcf8..f1dcdce5a1 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -1,3 +1,5 @@ +/* generated file, do not edit */ + #define I_SYSLOG 0 #define def_syslog (sudo_defs_table[I_SYSLOG].sd_un.ival) #define I_SYSLOG_GOODPRI 1 diff --git a/plugins/sudoers/mkdefaults b/plugins/sudoers/mkdefaults index 885c1b581e..76b6478d00 100755 --- a/plugins/sudoers/mkdefaults +++ b/plugins/sudoers/mkdefaults @@ -1,4 +1,4 @@ -#!/usr/bin/env perl +#!/bin/sh # # Generate sudo_defs_table and associated defines # @@ -7,158 +7,170 @@ # var_name # TYPE # description (or NULL) -# array of struct def_values if TYPE == T_TUPLE - -use warnings; -use strict; - -my ($header, $cfile, $infile); +# array of struct def_values if TYPE == T_TUPLE [optional] +# *callback [optional] # Deal with optional -o (output) argument -if ($#ARGV > 0 && $ARGV[0] eq "-o") { - shift; - $header = $cfile = shift; - $header .= '.h'; - $cfile .= '.c'; -} -die "usage: $0 [input_file]\n" unless $#ARGV == -1 || $#ARGV == 0; - -$infile = $ARGV[0] || "def_data.in"; -if (!defined($header)) { - $header = $infile; - $header =~ s/(\.in)?$/.h/; -} -if (!defined($cfile)) { - $cfile = $infile; - $cfile =~ s/(\.in)?$/.c/; +if [ "$1" = "-o" ]; then + OUTFILE="$2" + shift 2 +else + OUTFILE=def_data +fi +if [ $# -gt 0 ]; then + INFILE="$1" + shift +else + INFILE=def_data.in +fi +if [ $# -gt 0 ]; then + echo "usage: $0 [-o output] [input_file]" 1>&2 +fi + +${AWK-awk} -f - -v outfile=$OUTFILE $INFILE <<'EOF' +BEGIN { + count = 0 + tuple_values[0] = "never" + tuple_keys["never"] = 0 + tuple_last = 0 + header = outfile ".h" + cfile = outfile ".c" + + type_map["T_INT"] = "ival" + type_map["T_UINT"] = "uival" + type_map["T_STR"] = "str" + type_map["T_FLAG"] = "flag" + type_map["T_MODE"] = "mode" + type_map["T_LIST"] = "list" + type_map["T_LOGFAC"] = "ival" + type_map["T_LOGPRI"] = "ival" + type_map["T_TUPLE"] = "tuple" + type_map["T_TIMESPEC"] = "tspec" + type_map["T_TIMEOUT"] = "ival" } - -open(IN, "<$infile") || die "$0: can't open $infile: $!\n"; -open(HEADER, ">$header") || die "$0: can't open $header: $!\n"; -open(CFILE, ">$cfile") || die "$0: can't open $cfile: $!\n"; - -my $count = 0; -my @tuple_values = ( "never" ); -my @records = (); -my ($var, $type, $desc, $values, $callback, $field); -while () { - chomp; - s/\s*#.*$//; - next if /^\s*$/; - - if (/^\S/) { +{ + sub(/#.*/, "", $0) + if (/^[[:blank:]]*$/) next + if (/^[[:alpha:]]/) { # Store previous record and begin new one - $records[$count++] = [$var, $type, $desc, $values, $callback] if defined($var); - - $var = $_; - $type = ''; - $desc = undef; - $values = undef; - $callback = undef; - $field = 0; + if (var) + records[count++] = sprintf("%s\n%s\n%s\n%s\n%s\n", var, type, desc, values, callback) + var = $1 + type = "" + desc = "" + values = "" + callback = "" + state = 0 } else { - $field++; - s/^\s+//; - s/\s+$//; - if ($field == 1) { + state++ + # Strip leading/trailing whitespace + gsub(/^[ \t]+|[ \t]+$/, "") + if (state == 1) { # type - $type = $_; - } elsif ($field == 2) { + type = $1 + } else if (state == 2) { # description - if ($_ eq "NULL") { - $desc = "NULL"; + if ($0 == "NULL") { + desc = "NULL" } else { # Strip leading and trailing double quote and escape the rest - s/^"//; - s/"$//; - s/"/\\"/g; - $desc = "N_(\"$_\")"; + sub(/^"/, "") + sub(/"$/, "") + gsub(/"/, "\\\"") + desc = sprintf("N_(\"%s\")", $0) } - } elsif ($field == 3 || $field == 4) { - if (s/^\*//) { - $callback = $_; + } else if (state == 3 || state == 4) { + if (/^\*/) { + callback = substr($0, 2) } else { - die "$0: syntax error near line $.\n" if $type !~ /^T_TUPLE/; - $values = [ split ]; - foreach my $v (@$values) { - push(@tuple_values, $v) unless grep(/^$v$/, @tuple_values); + if (type ~ /^T_TUPLE/) { + values = $0 + # Add to tuple_values as necessary + n = split(values, vals) + for (i = 1; i <= n; i++) { + if (tuple_keys[vals[i]] == "") { + tuple_keys[vals[i]] = ++tuple_last + tuple_values[tuple_last] = vals[i] + } + } } } } else { - die "$0: syntax error near line $.\n"; + die("syntax error in input near line " NR) } } } -$records[$count++] = [$var, $type, $desc, $values, $callback] if defined($var); +END { + if (var) + records[count++] = sprintf("%s\n%s\n%s\n%s\n%s\n", var, type, desc, values, callback) + + print "/* generated file, do not edit */\n" > header + print "/* generated file, do not edit */\n" > cfile + + # Print out value arrays + for (i = 0; i < count; i++) { + split(records[i], fields, "\n") + if (fields[4]) { + if (fields[2] !~ /^T_TUPLE/) + die("Values list specified for non-tuple " records[1]) + printf "static struct def_values def_data_%s[] = {\n", fields[1] > cfile + n = split(fields[4], t) + for (j = 1; j <= n; j++) { + printf " { \"%s\", %s },\n", t[j], t[j] > cfile + } + print " { NULL, 0 }," > cfile + print "};\n" > cfile + } + } -# Print out value arrays -for (my $i = 0; $i < $count; $i++) { - if (defined($records[$i]->[3])) { - die "Values list specified for non-tuple\n" unless - $records[$i]->[1] =~ /^T_TUPLE/; - printf CFILE "static struct def_values def_data_%s[] = {\n", - $records[$i]->[0]; - foreach (@{$records[$i]->[3]}) { - print CFILE " { \"$_\", $_ },\n"; + # Print each record + print "struct sudo_defs_types sudo_defs_table[] = {\n {" > cfile + for (i = 0; i < count; i++) { + print_record(records[i], i) + } + print "\tNULL, 0, NULL\n }\n};" > cfile + + # Print out def_tuple + if (tuple_last > 0) { + print "\nenum def_tuple {" > header + for (i = 0; i <= tuple_last; i++) { + printf("\t%s%s\n", tuple_values[i], + i != tuple_last ? "," : "") > header } - print CFILE " { NULL, 0 },\n"; - print CFILE "};\n\n"; + print "};" > header } -} -# Print each record -print CFILE "struct sudo_defs_types sudo_defs_table[] = {\n {\n"; -for (my $i = 0; $i < $count; $i++) { - print_record($records[$i], $i); + close(header) + close(cfile) } -print CFILE "\tNULL, 0, NULL\n }\n};\n"; -# Print out def_tuple -if (@tuple_values) { - print HEADER "\nenum def_tuple {\n"; - for (my $i = 0; $i <= $#tuple_values; $i++) { - printf HEADER "\t%s%s\n", $tuple_values[$i], - $i != $#tuple_values ? "," : ""; - } - print HEADER "};\n"; +function die(msg) { + print msg > "/dev/stderr" + exit 1 } -close(IN); -close(HEADER); -close(CFILE); - -exit(0); - -sub print_record { - my ($rec, $recnum) = @_; - my ($i, $v, $defname); +function print_record(rec, recnum) { + split(rec, fields, "\n") + type = fields[2] + sub(/\|.*/, "", type) + if (!type_map[type]) + die("unknown defaults type: " fields[2]) # each variable gets a macro to access its value - $defname = "I_" . uc($rec->[0]); - printf HEADER "#define %-23s %d\n", $defname, $recnum; - for ($rec->[1]) { - if (/^T_INT/) { $v = "ival"; } - elsif (/^T_UINT/) { $v = "uival"; } - elsif (/^T_STR/) { $v = "str"; } - elsif (/^T_FLAG/) { $v = "flag"; } - elsif (/^T_MODE/) { $v = "mode"; } - elsif (/^T_LIST/) { $v = "list"; } - elsif (/^T_LOGFAC/) { $v = "ival"; } - elsif (/^T_LOGPRI/) { $v = "ival"; } - elsif (/^T_TUPLE/) { $v = "tuple"; } - elsif (/^T_TIMESPEC/) { $v = "tspec"; } - elsif (/^T_TIMEOUT/) { $v = "ival"; } - else { die "$0: unknown defaults type: $_\n"; } - } - printf HEADER "#define %-23s (sudo_defs_table[$defname].sd_un.${v})\n", - "def_$rec->[0]"; - - print CFILE "\t\"$rec->[0]\", $rec->[1],\n\t$rec->[2],\n"; - if (defined($rec->[3])) { - printf CFILE "\tdef_data_$rec->[0],\n"; + defname = "I_" toupper(fields[1]) + printf "#define %-23s %d\n", defname, recnum > header + printf "#define def_%-19s (sudo_defs_table[%s].sd_un.%s)\n", + fields[1], defname, type_map[type] > header + + printf "\t\"%s\", %s,\n\t%s,\n", fields[1], fields[2], fields[3] > cfile + if (fields[4]) { + printf "\tdef_data_%s,\n", fields[1] > cfile } else { - printf CFILE "\tNULL,\n"; + printf "\tNULL,\n" > cfile + } + if (fields[5]) { + printf "\t%s,\n", fields[5] > cfile } - printf CFILE "\t$rec->[4],\n" if defined($rec->[4]); - print CFILE " }, {\n"; + print " }, {" > cfile } +EOF From 03ad96e44580182effdb9b896938b6871bfbd8f1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 1 Aug 2020 13:10:50 -0600 Subject: [PATCH 004/113] Use the fallthrough attribute instead of /* FALLTHROUGH */ comments. --- config.h.in | 7 ++-- configure | 52 +++++++++++++++------------ configure.ac | 58 +++++++++++++++++-------------- include/sudo_compat.h | 6 ++++ lib/util/arc4random_buf.c | 6 ++-- lib/util/glob.c | 2 +- lib/util/snprintf.c | 14 ++++---- lib/util/strtonum.c | 2 +- logsrvd/sendlog.c | 4 +-- plugins/python/pyhelpers.c | 2 +- plugins/sudoers/auth/pam.c | 2 +- plugins/sudoers/check.c | 2 +- plugins/sudoers/cvtsudoers_ldif.c | 4 +-- plugins/sudoers/defaults.c | 2 +- plugins/sudoers/fmtsudoers.c | 4 +-- plugins/sudoers/ldap_util.c | 4 +-- plugins/sudoers/match.c | 10 +++--- plugins/sudoers/parse_ldif.c | 2 +- plugins/sudoers/sssd.c | 4 +-- plugins/sudoers/sudo_printf.c | 2 +- plugins/sudoers/sudoreplay.c | 4 +-- plugins/sudoers/timestamp.c | 4 +-- plugins/sudoers/visudo.c | 2 +- src/conversation.c | 6 ++-- src/exec_monitor.c | 2 +- src/exec_pty.c | 8 ++--- src/parse_args.c | 2 +- src/regress/noexec/check_noexec.c | 2 +- src/tgetpass.c | 2 +- 29 files changed, 121 insertions(+), 100 deletions(-) diff --git a/config.h.in b/config.h.in index 79bf3e9a2f..1168b38db8 100644 --- a/config.h.in +++ b/config.h.in @@ -258,6 +258,9 @@ /* Define to 1 if you have the `faccessat' function. */ #undef HAVE_FACCESSAT +/* Define to 1 if the compiler supports the fallthrough attribute. */ +#undef HAVE_FALLTHROUGH_ATTRIBUTE + /* Define to 1 if you have the `fchmodat' function. */ #undef HAVE_FCHMODAT @@ -1038,8 +1041,8 @@ /* Define to 1 if you want sudo to free up memory before exiting. */ #undef NO_LEAKS -/* Define to 1 if you don't want users to get the lecture the first time they use - sudo. */ +/* Define to 1 if you don't want users to get the lecture the first time they + use sudo. */ #undef NO_LECTURE /* Define to 1 if you don't want to use sudo's PAM session support. */ diff --git a/configure b/configure index 2ef7f19a1a..697d56f6af 100755 --- a/configure +++ b/configure @@ -27860,43 +27860,48 @@ _ACEOF 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" - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler acceptd -Wimplicit-fallthrough" >&5 -$as_echo_n "checking whether C compiler acceptd -Wimplicit-fallthrough... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports the fallthrough attribute" >&5 +$as_echo_n "checking whether $CC supports the fallthrough attribute... " >&6; } +if ${sudo_cv_var_fallthrough_attribute+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - int main(int argc, char *argv[]) - { - int num = argc + 1; - switch (num) { - case 1: - num = 0; - /* FALLTHROUGH */ - case 0: - num++; + int main(int argc, char *argv[]) + { + int num = argc + 1; + switch (num) { + case 1: + num = 0; + __attribute__((__fallthrough__)); + case 0: + num++; + } + return num; } - return num; - } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - CFLAGS="$_CFLAGS -Wimplicit-fallthrough" + sudo_cv_var_fallthrough_attribute=yes else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - CFLAGS="$_CFLAGS" + sudo_cv_var_fallthrough_attribute=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_fallthrough_attribute" >&5 +$as_echo "$sudo_cv_var_fallthrough_attribute" >&6; } + if test X"$sudo_cv_var_fallthrough_attribute" = X"yes"; then + $as_echo "#define HAVE_FALLTHROUGH_ATTRIBUTE 1" >>confdefs.h + + CFLAGS="$CFLAGS -Wimplicit-fallthrough" + fi fi if test X"$enable_werror" = X"yes"; then CFLAGS="${CFLAGS} -Werror" @@ -30315,5 +30320,6 @@ fi + diff --git a/configure.ac b/configure.ac index befc3271fa..098b61b023 100644 --- a/configure.ac +++ b/configure.ac @@ -4591,36 +4591,41 @@ dnl We add -Wall and -Werror after all tests so they don't cause failures dnl if test -n "$GCC"; then if test X"$enable_warnings" = X"yes" -o X"$with_devel" = X"yes"; then + dnl + dnl Default warnings for development use. + dnl CFLAGS="${CFLAGS} -Wall -Wsign-compare -Wpointer-arith" dnl - dnl Check whether -Wimplicit-fallthrough is available and - dnl recognizes /* FALLTHROUGH */ comments. Clang 10 requires - dnl the "fallthrough" attribute which we don't use. + dnl The fallthrough attribute is supported by gcc 7.0 and clang 10. + dnl This test relies on AC_LANG_WERROR. dnl - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Wimplicit-fallthrough -Werror" - AC_MSG_CHECKING([whether C compiler acceptd -Wimplicit-fallthrough]) - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ - int main(int argc, char *argv[]) - { - int num = argc + 1; - switch (num) { - case 1: - num = 0; - /* FALLTHROUGH */ - case 0: - num++; + AC_CACHE_CHECK([whether $CC supports the fallthrough attribute], + [sudo_cv_var_fallthrough_attribute], + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + int main(int argc, char *argv[]) + { + int num = argc + 1; + switch (num) { + case 1: + num = 0; + __attribute__((__fallthrough__)); + case 0: + num++; + } + return num; } - return num; - } - ]])], [ - AC_MSG_RESULT([yes]) - CFLAGS="$_CFLAGS -Wimplicit-fallthrough" - ], [ - AC_MSG_RESULT([no]) - CFLAGS="$_CFLAGS" - ]) - + ]])], + [ + sudo_cv_var_fallthrough_attribute=yes + ], + [ + sudo_cv_var_fallthrough_attribute=no] + )] + ) + if test X"$sudo_cv_var_fallthrough_attribute" = X"yes"; then + AC_DEFINE(HAVE_FALLTHROUGH_ATTRIBUTE) + CFLAGS="$CFLAGS -Wimplicit-fallthrough" + fi fi if test X"$enable_werror" = X"yes"; then CFLAGS="${CFLAGS} -Werror" @@ -4891,6 +4896,7 @@ AH_TEMPLATE(HAVE_OPENSSL, [Define to 1 if you are using OpenSSL's TLS and sha2 f AH_TEMPLATE(HAVE_GCRYPT, [Define to 1 if you are using gcrypt's sha2 functions.]) AH_TEMPLATE(HAVE_SSL_CTX_SET_MIN_PROTO_VERSION, [Define to 1 if you have the `SSL_CTX_set_min_proto_version' function or macro.]) AH_TEMPLATE(SUDOERS_IOLOG_CLIENT, [Define to 1 to compile support for sudo_logsrvd in the sudoers I/O log plugin.]) +AH_TEMPLATE(HAVE_FALLTHROUGH_ATTRIBUTE, [Define to 1 if the compiler supports the fallthrough attribute.]) dnl dnl Bits to copy verbatim into config.h.in diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 80c007b930..879a0f3ff4 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -80,6 +80,12 @@ # endif #endif +#ifdef HAVE_FALLTHROUGH_ATTRIBUTE +# define FALLTHROUGH __attribute__((__fallthrough__)) +#else +# define FALLTHROUGH do { } while (0) +#endif + /* * Given the pointer x to the member m of the struct s, return * a pointer to the containing structure. diff --git a/lib/util/arc4random_buf.c b/lib/util/arc4random_buf.c index ee4c608ef3..76f0fdc027 100644 --- a/lib/util/arc4random_buf.c +++ b/lib/util/arc4random_buf.c @@ -50,13 +50,13 @@ sudo_arc4random_buf(void *buf, size_t n) switch (m) { case 4: *cp++ = (val >> 24) & 0xff; - /* FALLTHROUGH */ + FALLTHROUGH; case 3: *cp++ = (val >> 16) & 0xff; - /* FALLTHROUGH */ + FALLTHROUGH; case 2: *cp++ = (val >> 8) & 0xff; - /* FALLTHROUGH */ + FALLTHROUGH; case 1: *cp++ = val & 0xff; break; diff --git a/lib/util/glob.c b/lib/util/glob.c index 58af3d383d..762e107be1 100644 --- a/lib/util/glob.c +++ b/lib/util/glob.c @@ -304,7 +304,7 @@ globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, i--; break; } - /* FALLTHROUGH */ + FALLTHROUGH; case COMMA: if (i && *pm == COMMA) break; diff --git a/lib/util/snprintf.c b/lib/util/snprintf.c index 3874b15a96..6d027ad72d 100644 --- a/lib/util/snprintf.c +++ b/lib/util/snprintf.c @@ -535,7 +535,7 @@ reswitch: switch (ch) { if (width == INT_MIN) goto overflow; width = -width; - /* FALLTHROUGH */ + FALLTHROUGH; case '-': flags |= LADJUST; goto rflag; @@ -649,7 +649,7 @@ reswitch: switch (ch) { break; case 'D': flags |= LONGINT; - /*FALLTHROUGH*/ + FALLTHROUGH; case 'd': case 'i': _umax = SARG(); @@ -815,7 +815,7 @@ reswitch: switch (ch) { #endif /* NO_PRINTF_PERCENT_N */ case 'O': flags |= LONGINT; - /*FALLTHROUGH*/ + FALLTHROUGH; case 'o': _umax = UARG(); base = OCT; @@ -875,7 +875,7 @@ reswitch: switch (ch) { break; case 'U': flags |= LONGINT; - /*FALLTHROUGH*/ + FALLTHROUGH; case 'u': _umax = UARG(); base = DEC; @@ -1276,7 +1276,7 @@ reswitch: switch (ch) { break; case 'D': flags |= LONGINT; - /*FALLTHROUGH*/ + FALLTHROUGH; case 'd': case 'i': ADDSARG(); @@ -1316,7 +1316,7 @@ reswitch: switch (ch) { #endif /* NO_PRINTF_PERCENT_N */ case 'O': flags |= LONGINT; - /*FALLTHROUGH*/ + FALLTHROUGH; case 'o': ADDUARG(); break; @@ -1333,7 +1333,7 @@ reswitch: switch (ch) { break; case 'U': flags |= LONGINT; - /*FALLTHROUGH*/ + FALLTHROUGH; case 'u': case 'X': case 'x': diff --git a/lib/util/strtonum.c b/lib/util/strtonum.c index a76d28bead..d0ce1adb12 100644 --- a/lib/util/strtonum.c +++ b/lib/util/strtonum.c @@ -69,7 +69,7 @@ sudo_strtonumx(const char *str, long long minval, long long maxval, char **endp, break; case '+': ch = *cp++; - /* FALLTHROUGH */ + FALLTHROUGH; default: sign = '+'; break; diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 80bf55e673..9a0aad8a87 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -866,10 +866,10 @@ client_message_completion(struct client_closure *closure) closure->state = SEND_EXIT; debug_return_bool(fmt_exit_message(closure)); } - /* FALLTHROUGH */ + FALLTHROUGH; case SEND_RESTART: closure->state = SEND_IO; - /* FALLTHROUGH */ + FALLTHROUGH; case SEND_IO: /* fmt_next_iolog() will advance state on EOF. */ if (!fmt_next_iolog(closure)) diff --git a/plugins/python/pyhelpers.c b/plugins/python/pyhelpers.c index d43c7348b4..d20e459cf7 100644 --- a/plugins/python/pyhelpers.c +++ b/plugins/python/pyhelpers.c @@ -43,7 +43,7 @@ _sudo_printf_default(int msg_type, const char *fmt, ...) switch (msg_type & 0xff) { case SUDO_CONV_ERROR_MSG: fp = stderr; - /* FALLTHROUGH */ + FALLTHROUGH; case SUDO_CONV_INFO_MSG: va_start(ap, fmt); len = vfprintf(ttyfp ? ttyfp : fp, fmt, ap); diff --git a/plugins/sudoers/auth/pam.c b/plugins/sudoers/auth/pam.c index dee9ea262f..6b4e249707 100644 --- a/plugins/sudoers/auth/pam.c +++ b/plugins/sudoers/auth/pam.c @@ -681,7 +681,7 @@ converse(int num_msg, PAM_CONST struct pam_message **msg, switch (pm->msg_style) { case PAM_PROMPT_ECHO_ON: type = SUDO_CONV_PROMPT_ECHO_ON; - /* FALLTHROUGH */ + FALLTHROUGH; case PAM_PROMPT_ECHO_OFF: /* Error out if the last password read was interrupted. */ if (getpass_error) diff --git a/plugins/sudoers/check.c b/plugins/sudoers/check.c index 915b0d9f1c..181b5ed439 100644 --- a/plugins/sudoers/check.c +++ b/plugins/sudoers/check.c @@ -121,7 +121,7 @@ check_user_interactive(int validated, int mode, struct getpass_closure *closure) } sudo_debug_printf(SUDO_DEBUG_INFO, "%s: check user flag overrides time stamp", __func__); - /* FALLTHROUGH */ + FALLTHROUGH; default: /* Bail out if we are non-interactive and a password is required */ diff --git a/plugins/sudoers/cvtsudoers_ldif.c b/plugins/sudoers/cvtsudoers_ldif.c index f85d7d0960..f61f5ff7bc 100644 --- a/plugins/sudoers/cvtsudoers_ldif.c +++ b/plugins/sudoers/cvtsudoers_ldif.c @@ -277,7 +277,7 @@ print_member_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, char *name, print_attribute_ldif(fp, attr_name, negated ? "!ALL" : "ALL"); break; } - /* FALLTHROUGH */ + FALLTHROUGH; case COMMAND: attr_val = format_cmnd((struct sudo_command *)name, negated); print_attribute_ldif(fp, attr_name, attr_val); @@ -292,7 +292,7 @@ print_member_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, char *name, alias_put(a); break; } - /* FALLTHROUGH */ + FALLTHROUGH; default: len = asprintf(&attr_val, "%s%s", negated ? "!" : "", name); if (len == -1) { diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 1a4e2b6b33..64f17bb5a2 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -218,7 +218,7 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, case T_TUPLE: if (ISSET(def->type, T_BOOL)) break; - /* FALLTHROUGH */ + FALLTHROUGH; case T_LOGFAC: if (op == true) { /* Use default syslog facility if none specified. */ diff --git a/plugins/sudoers/fmtsudoers.c b/plugins/sudoers/fmtsudoers.c index 0c935093eb..4588dfb036 100644 --- a/plugins/sudoers/fmtsudoers.c +++ b/plugins/sudoers/fmtsudoers.c @@ -58,7 +58,7 @@ sudoers_format_member_int(struct sudo_lbuf *lbuf, sudo_lbuf_append(lbuf, "%sALL", negated ? "!" : ""); break; } - /* FALLTHROUGH */ + FALLTHROUGH; case COMMAND: c = (struct sudo_command *) name; TAILQ_FOREACH(digest, &c->digests, entries) { @@ -100,7 +100,7 @@ sudoers_format_member_int(struct sudo_lbuf *lbuf, break; } } - /* FALLTHROUGH */ + FALLTHROUGH; default: print_word: /* Do not quote UID/GID, all others get quoted. */ diff --git a/plugins/sudoers/ldap_util.c b/plugins/sudoers/ldap_util.c index e0df321c36..476caf73ca 100644 --- a/plugins/sudoers/ldap_util.c +++ b/plugins/sudoers/ldap_util.c @@ -152,7 +152,7 @@ array_to_member_list(void *a, sudo_ldap_iter_t iter) m->type = ALL; break; } - /* FALLTHROUGH */ + FALLTHROUGH; default: m->type = WORD; break; @@ -222,7 +222,7 @@ host_to_member(char *host) m->type = ALL; break; } - /* FALLTHROUGH */ + FALLTHROUGH; default: if (is_address(host)) { m->type = NTWKADDR; diff --git a/plugins/sudoers/match.c b/plugins/sudoers/match.c index 9051545252..70d6b3e643 100644 --- a/plugins/sudoers/match.c +++ b/plugins/sudoers/match.c @@ -98,7 +98,7 @@ user_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, alias_put(a); break; } - /* FALLTHROUGH */ + FALLTHROUGH; case WORD: if (userpw_matches(m->name, pw->pw_name, pw)) matched = !m->negated; @@ -195,7 +195,7 @@ runaslist_matches(struct sudoers_parse_tree *parse_tree, alias_put(a); break; } - /* FALLTHROUGH */ + FALLTHROUGH; case WORD: if (userpw_matches(m->name, runas_pw->pw_name, runas_pw)) user_matched = !m->negated; @@ -239,7 +239,7 @@ runaslist_matches(struct sudoers_parse_tree *parse_tree, alias_put(a); break; } - /* FALLTHROUGH */ + FALLTHROUGH; case WORD: if (group_matches(m->name, runas_gr)) group_matched = !m->negated; @@ -352,7 +352,7 @@ host_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, alias_put(a); break; } - /* FALLTHROUGH */ + FALLTHROUGH; case WORD: if (hostname_matches(shost, lhost, m->name)) matched = !m->negated; @@ -399,7 +399,7 @@ cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m) matched = !m->negated; break; } - /* FALLTHROUGH */ + FALLTHROUGH; case COMMAND: c = (struct sudo_command *)m->name; if (command_matches(c->cmnd, c->args, &c->digests)) diff --git a/plugins/sudoers/parse_ldif.c b/plugins/sudoers/parse_ldif.c index 0bc919c098..ef0c298a6e 100644 --- a/plugins/sudoers/parse_ldif.c +++ b/plugins/sudoers/parse_ldif.c @@ -368,7 +368,7 @@ role_to_sudoers(struct sudoers_parse_tree *parse_tree, struct sudo_role *role, m->type = ALL; break; } - /* FALLTHROUGH */ + FALLTHROUGH; default: m->type = WORD; break; diff --git a/plugins/sudoers/sssd.c b/plugins/sudoers/sssd.c index b52fec3fa5..4ab55c8412 100644 --- a/plugins/sudoers/sssd.c +++ b/plugins/sudoers/sssd.c @@ -514,7 +514,7 @@ sudo_sss_result_get(struct sudo_nss *nss, struct passwd *pw) break; case ENOMEM: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - /* FALLTHROUGH */ + FALLTHROUGH; default: sudo_debug_printf(SUDO_DEBUG_ERROR, "handle->fn_send_recv: rc=%d", rc); debug_return_ptr(NULL); @@ -753,7 +753,7 @@ sudo_sss_getdefs(struct sudo_nss *nss) break; case ENOMEM: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - /* FALLTHROUGH */ + FALLTHROUGH; default: sudo_debug_printf(SUDO_DEBUG_ERROR, "handle->fn_send_recv_defaults: rc=%d, sss_error=%u", rc, sss_error); diff --git a/plugins/sudoers/sudo_printf.c b/plugins/sudoers/sudo_printf.c index 944280b120..5f0716245c 100644 --- a/plugins/sudoers/sudo_printf.c +++ b/plugins/sudoers/sudo_printf.c @@ -48,7 +48,7 @@ sudo_printf_int(int msg_type, const char *fmt, ...) switch (msg_type & 0xff) { case SUDO_CONV_ERROR_MSG: fp = stderr; - /* FALLTHROUGH */ + FALLTHROUGH; case SUDO_CONV_INFO_MSG: va_start(ap, fmt); len = vfprintf(ttyfp ? ttyfp : fp, fmt, ap); diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index 54a298b2a0..762a416991 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -448,7 +448,7 @@ getsize_cb(int fd, int what, void *v) case -1: if (errno == EAGAIN) goto another; - /* FALLTHROUGH */ + FALLTHROUGH; case 0: goto done; default: @@ -487,7 +487,7 @@ getsize_cb(int fd, int what, void *v) goto done; gc->nums[gc->nums_depth] = 0; gc->state = NUMBER; - /* FALLTHROUGH */ + FALLTHROUGH; case NUMBER: if (!isdigit(ch)) { /* done with number, reparse ch */ diff --git a/plugins/sudoers/timestamp.c b/plugins/sudoers/timestamp.c index 368edebd46..d25df689dd 100644 --- a/plugins/sudoers/timestamp.c +++ b/plugins/sudoers/timestamp.c @@ -367,7 +367,7 @@ ts_init_key(struct timestamp_entry *entry, struct passwd *pw, int flags, default: /* Unknown time stamp ticket type, treat as tty (should not happen). */ sudo_warnx("unknown time stamp ticket type %d", ticket_type); - /* FALLTHROUGH */ + FALLTHROUGH; case tty: if (user_ttypath != NULL && stat(user_ttypath, &sb) == 0) { /* tty-based time stamp */ @@ -377,7 +377,7 @@ ts_init_key(struct timestamp_entry *entry, struct passwd *pw, int flags, get_starttime(entry->sid, &entry->start_time); break; } - /* FALLTHROUGH */ + FALLTHROUGH; case kernel: case ppid: /* ppid-based time stamp */ diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index d319f8bd4d..e019bab801 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -811,7 +811,7 @@ whatnow(void) switch (choice) { case EOF: choice = 'x'; - /* FALLTHROUGH */ + FALLTHROUGH; case 'e': case 'x': case 'Q': diff --git a/src/conversation.c b/src/conversation.c index 389c7842af..55c2319c6c 100644 --- a/src/conversation.c +++ b/src/conversation.c @@ -64,7 +64,7 @@ sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], goto read_pass; case SUDO_CONV_PROMPT_MASK: SET(flags, TGP_MASK); - /* FALLTHROUGH */ + FALLTHROUGH; case SUDO_CONV_PROMPT_ECHO_OFF: if (ISSET(msg->msg_type, SUDO_CONV_PROMPT_ECHO_OK)) SET(flags, TGP_NOECHO_TRY); @@ -84,7 +84,7 @@ sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], break; case SUDO_CONV_ERROR_MSG: fp = stderr; - /* FALLTHROUGH */ + FALLTHROUGH; case SUDO_CONV_INFO_MSG: if (msg->msg != NULL) { size_t len = strlen(msg->msg); @@ -172,7 +172,7 @@ sudo_conversation_printf(int msg_type, const char *fmt, ...) switch (msg_type & 0xff) { case SUDO_CONV_ERROR_MSG: fp = stderr; - /* FALLTHROUGH */ + FALLTHROUGH; case SUDO_CONV_INFO_MSG: va_start(ap, fmt); len = vfprintf(ttyfp ? ttyfp : fp, fmt, ap); diff --git a/src/exec_monitor.c b/src/exec_monitor.c index b781fa8589..3c6d10240a 100644 --- a/src/exec_monitor.c +++ b/src/exec_monitor.c @@ -201,7 +201,7 @@ mon_handle_sigchld(struct monitor_closure *mc) switch (pid) { case 0: errno = ECHILD; - /* FALLTHROUGH */ + FALLTHROUGH; case -1: sudo_warn(U_("%s: %s"), __func__, "waitpid"); debug_return; diff --git a/src/exec_pty.c b/src/exec_pty.c index 97a283c587..1b0863938f 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -542,7 +542,7 @@ suspend_sudo(struct exec_closure_pty *ec, int signo) ret = SIGCONT_FG; /* resume command in foreground */ break; } - /* FALLTHROUGH */ + FALLTHROUGH; case SIGSTOP: case SIGTSTP: /* Flush any remaining output and deschedule I/O events. */ @@ -663,7 +663,7 @@ read_callback(int fd, int what, void *v) /* treat read error as fatal and close the fd */ sudo_debug_printf(SUDO_DEBUG_ERROR, "error reading fd %d: %s", fd, strerror(errno)); - /* FALLTHROUGH */ + FALLTHROUGH; case 0: /* got EOF or pty has gone away */ if (n == 0) { @@ -763,7 +763,7 @@ write_callback(int fd, int what, void *v) /* Schedule SIGTTOU to be forwarded to the command. */ schedule_signal(iob->ec, SIGTTOU); } - /* FALLTHROUGH */ + FALLTHROUGH; case EAGAIN: /* not an error */ break; @@ -1041,7 +1041,7 @@ handle_sigchld_pty(struct exec_closure_pty *ec) switch (pid) { case 0: errno = ECHILD; - /* FALLTHROUGH */ + FALLTHROUGH; case -1: sudo_warn(U_("%s: %s"), __func__, "waitpid"); debug_return; diff --git a/src/parse_args.c b/src/parse_args.c index f5853b8d88..d37a2839ea 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -389,7 +389,7 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, valid_flags = 0; break; } - /* FALLTHROUGH */ + FALLTHROUGH; case OPT_HOSTNAME: assert(optarg != NULL); if (*optarg == '\0') diff --git a/src/regress/noexec/check_noexec.c b/src/regress/noexec/check_noexec.c index 82b072e35f..db51a74f97 100644 --- a/src/regress/noexec/check_noexec.c +++ b/src/regress/noexec/check_noexec.c @@ -161,7 +161,7 @@ try_wordexp(void) break; } wordfree(&we); - /* FALLTHROUGH */ + FALLTHROUGH; default: printf("%s: FAIL (wordexp) [%d]\n", getprogname(), rc); break; diff --git a/src/tgetpass.c b/src/tgetpass.c index 6f6a2732de..ad5c94d605 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -435,7 +435,7 @@ getln(int fd, char *buf, size_t bufsiz, bool feedback, *errval = TGP_ERRVAL_NOPASSWORD; debug_return_str(NULL); } - /* FALLTHROUGH */ + FALLTHROUGH; default: debug_return_str_masked(buf); } From c87a47735d57824a4cce6679b47d3e20406b4a63 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 1 Aug 2020 13:43:27 -0600 Subject: [PATCH 005/113] Add ZFALLTHROUGH macro to use instead of /* FALLTHROUGH */ comments. --- lib/zlib/infback.c | 2 +- lib/zlib/inflate.c | 36 ++++++++++++++++++------------------ lib/zlib/zconf.h.in | 7 +++++++ 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/lib/zlib/infback.c b/lib/zlib/infback.c index 6f42794390..fac20afa12 100644 --- a/lib/zlib/infback.c +++ b/lib/zlib/infback.c @@ -477,7 +477,7 @@ void FAR *out_desc; } Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN; - /* FALLTHROUGH */ + ZFALLTHROUGH; case LEN: /* use inflate_fast() if we have enough input and output */ diff --git a/lib/zlib/inflate.c b/lib/zlib/inflate.c index b623ba707d..86a0f3d79c 100644 --- a/lib/zlib/inflate.c +++ b/lib/zlib/inflate.c @@ -740,7 +740,7 @@ int flush; CRC2(state->check, hold); INITBITS(); state->mode = EXLEN; - /* FALLTHROUGH */ + ZFALLTHROUGH; case EXLEN: if (state->flags & 0x0400) { NEEDBITS(16); @@ -754,7 +754,7 @@ int flush; else if (state->head != Z_NULL) state->head->extra = Z_NULL; state->mode = EXTRA; - /* FALLTHROUGH */ + ZFALLTHROUGH; case EXTRA: if (state->flags & 0x0400) { copy = state->length; @@ -777,7 +777,7 @@ int flush; } state->length = 0; state->mode = NAME; - /* FALLTHROUGH */ + ZFALLTHROUGH; case NAME: if (state->flags & 0x0800) { if (have == 0) goto inf_leave; @@ -799,7 +799,7 @@ int flush; state->head->name = Z_NULL; state->length = 0; state->mode = COMMENT; - /* FALLTHROUGH */ + ZFALLTHROUGH; case COMMENT: if (state->flags & 0x1000) { if (have == 0) goto inf_leave; @@ -820,7 +820,7 @@ int flush; else if (state->head != Z_NULL) state->head->comment = Z_NULL; state->mode = HCRC; - /* FALLTHROUGH */ + ZFALLTHROUGH; case HCRC: if (state->flags & 0x0200) { NEEDBITS(16); @@ -844,7 +844,7 @@ int flush; strm->adler = state->check = ZSWAP32(hold); INITBITS(); state->mode = DICT; - /* FALLTHROUGH */ + ZFALLTHROUGH; case DICT: if (state->havedict == 0) { RESTORE(); @@ -852,10 +852,10 @@ int flush; } strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = TYPE; - /* FALLTHROUGH */ + ZFALLTHROUGH; case TYPE: if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; - /* FALLTHROUGH */ + ZFALLTHROUGH; case TYPEDO: if (state->last) { BYTEBITS(); @@ -906,10 +906,10 @@ int flush; INITBITS(); state->mode = COPY_; if (flush == Z_TREES) goto inf_leave; - /* FALLTHROUGH */ + ZFALLTHROUGH; case COPY_: state->mode = COPY; - /* FALLTHROUGH */ + ZFALLTHROUGH; case COPY: copy = state->length; if (copy) { @@ -1049,10 +1049,10 @@ int flush; Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN_; if (flush == Z_TREES) goto inf_leave; - /* FALLTHROUGH */ + ZFALLTHROUGH; case LEN_: state->mode = LEN; - /* FALLTHROUGH */ + ZFALLTHROUGH; case LEN: if (have >= 6 && left >= 258) { RESTORE(); @@ -1102,7 +1102,7 @@ int flush; } state->extra = (unsigned)(here.op) & 15; state->mode = LENEXT; - /* FALLTHROUGH */ + ZFALLTHROUGH; case LENEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1113,7 +1113,7 @@ int flush; Tracevv((stderr, "inflate: length %u\n", state->length)); state->was = state->length; state->mode = DIST; - /* FALLTHROUGH */ + ZFALLTHROUGH; case DIST: for (;;) { here = state->distcode[BITS(state->distbits)]; @@ -1141,7 +1141,7 @@ int flush; state->offset = (unsigned)here.val; state->extra = (unsigned)(here.op) & 15; state->mode = DISTEXT; - /* FALLTHROUGH */ + ZFALLTHROUGH; case DISTEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1158,7 +1158,7 @@ int flush; #endif Tracevv((stderr, "inflate: distance %u\n", state->offset)); state->mode = MATCH; - /* FALLTHROUGH */ + ZFALLTHROUGH; case MATCH: if (left == 0) goto inf_leave; copy = out - left; @@ -1234,7 +1234,7 @@ int flush; } #ifdef GUNZIP state->mode = LENGTH; - /* FALLTHROUGH */ + ZFALLTHROUGH; case LENGTH: if (state->wrap && state->flags) { NEEDBITS(32); @@ -1248,7 +1248,7 @@ int flush; } #endif state->mode = DONE; - /* FALLTHROUGH */ + ZFALLTHROUGH; case DONE: ret = Z_STREAM_END; goto inf_leave; diff --git a/lib/zlib/zconf.h.in b/lib/zlib/zconf.h.in index 5e6c4a2e8e..0b6bd53600 100644 --- a/lib/zlib/zconf.h.in +++ b/lib/zlib/zconf.h.in @@ -9,6 +9,7 @@ #define ZCONF_H /* The following four defines are enabled by sudo's configure script. */ +#undef HAVE_FALLTHROUGH_ATTRIBUTE #undef HAVE_DSO_VISIBILITY #undef HAVE_MEMCPY #undef HAVE_UNISTD_H @@ -30,6 +31,12 @@ # endif #endif +#ifdef HAVE_FALLTHROUGH_ATTRIBUTE +# define ZFALLTHROUGH __attribute__((__fallthrough__)) +#else +# define ZFALLTHROUGH do { } while (0) +#endif + /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. From 838255bb80b337e0abb51a2fcdf67994220b5168 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 2 Aug 2020 06:42:57 -0600 Subject: [PATCH 006/113] Replace /*FALLTHROUGH*/ in generated code. --- plugins/sudoers/Makefile.in | 2 +- plugins/sudoers/toke.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index c687e33dd7..d2728abc1e 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -356,7 +356,7 @@ $(devdir)/toke.c: $(srcdir)/toke.l prologue else \ toke_l="$(srcdir)/toke.l"; \ fi; \ - cmd='$(FLEX) '"$$toke_l"'; cp prologue $(devdir)/toke.c; $(SED) "s/^\\(#line .*\\) \"lex\\.sudoers\\.c\"/\1 \"toke.c\"/" lex.sudoers.c >> $(devdir)/toke.c; rm -f lex.sudoers.c'; \ + cmd='$(FLEX) '"$$toke_l"'; cp prologue $(devdir)/toke.c; $(SED) -e "s/^\\(#line .*\\) \"lex\\.sudoers\\.c\"/\1 \"toke.c\"/" -e "s:/\* *FALLTHROUGH *\*/:FALLTHROUGH;:" lex.sudoers.c >> $(devdir)/toke.c; rm -f lex.sudoers.c'; \ echo "$$cmd"; eval $$cmd; \ fi diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index da50eb3b8b..9fa8464bff 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -3803,7 +3803,7 @@ static int yy_get_next_buffer (void) /* Reset buffer status. */ sudoersrestart(sudoersin ); - /*FALLTHROUGH*/ + FALLTHROUGH; case EOB_ACT_END_OF_FILE: { From 974f833e175732fe83dd43c4129e83b21427cbe4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 2 Aug 2020 06:43:35 -0600 Subject: [PATCH 007/113] Use "foo in bar" syntax for testing existence of a key. --- plugins/sudoers/mkdefaults | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/mkdefaults b/plugins/sudoers/mkdefaults index 76b6478d00..905320ac97 100755 --- a/plugins/sudoers/mkdefaults +++ b/plugins/sudoers/mkdefaults @@ -88,7 +88,7 @@ BEGIN { # Add to tuple_values as necessary n = split(values, vals) for (i = 1; i <= n; i++) { - if (tuple_keys[vals[i]] == "") { + if (!(vals[i] in tuple_keys)) { tuple_keys[vals[i]] = ++tuple_last tuple_values[tuple_last] = vals[i] } @@ -153,7 +153,7 @@ function print_record(rec, recnum) { split(rec, fields, "\n") type = fields[2] sub(/\|.*/, "", type) - if (!type_map[type]) + if (!(type in type_map)) die("unknown defaults type: " fields[2]) # each variable gets a macro to access its value From 3b4d4ab8dd36740a945c98356a9be4c92850e9af Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 3 Aug 2020 09:53:12 -0600 Subject: [PATCH 008/113] Add missing python_plugin.exp.in file and remove unneeded __dso_public This fixes building the python plugin on systems where the compiler doesn't support symbol hiding (but wherethe linker does). --- MANIFEST | 1 + configure | 3 ++- configure.ac | 2 +- plugins/python/python_plugin.exp.in | 8 ++++++++ plugins/python/python_plugin_approval_multi.inc | 2 +- plugins/python/python_plugin_audit_multi.inc | 2 +- 6 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 plugins/python/python_plugin.exp.in diff --git a/MANIFEST b/MANIFEST index 23e0d9e637..9c6a4cdc9c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -331,6 +331,7 @@ plugins/python/python_baseplugin.c plugins/python/python_convmessage.c plugins/python/python_importblocker.c plugins/python/python_loghandler.c +plugins/python/python_plugin.exp.in plugins/python/python_plugin_approval.c plugins/python/python_plugin_approval_multi.inc plugins/python/python_plugin_audit.c diff --git a/configure b/configure index 697d56f6af..a4bef163c5 100755 --- a/configure +++ b/configure @@ -19215,7 +19215,7 @@ fi PPFILES="$PPFILES "'$(srcdir)/etc/sudo-python.pp' PYTHON_PLUGIN_SRC=plugins/python - ac_config_files="$ac_config_files $PYTHON_PLUGIN_SRC/Makefile" + ac_config_files="$ac_config_files $PYTHON_PLUGIN_SRC/Makefile $PYTHON_PLUGIN_SRC/python_plugin.exp" fi @@ -29014,6 +29014,7 @@ do "pathnames.h") CONFIG_HEADERS="$CONFIG_HEADERS pathnames.h" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "$PYTHON_PLUGIN_SRC/Makefile") CONFIG_FILES="$CONFIG_FILES $PYTHON_PLUGIN_SRC/Makefile" ;; + "$PYTHON_PLUGIN_SRC/python_plugin.exp") CONFIG_FILES="$CONFIG_FILES $PYTHON_PLUGIN_SRC/python_plugin.exp" ;; "lib/zlib/zconf.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/zlib/zconf.h" ;; "lib/zlib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/zlib/Makefile" ;; "etc/init.d/$INIT_SCRIPT") CONFIG_FILES="$CONFIG_FILES etc/init.d/$INIT_SCRIPT" ;; diff --git a/configure.ac b/configure.ac index 098b61b023..c6ab6d0873 100644 --- a/configure.ac +++ b/configure.ac @@ -2599,7 +2599,7 @@ if test ${USE_PYTHON-'no'} = "yes"; then PPFILES="$PPFILES "'$(srcdir)/etc/sudo-python.pp' PYTHON_PLUGIN_SRC=plugins/python - AC_CONFIG_FILES([$PYTHON_PLUGIN_SRC/Makefile]) + AC_CONFIG_FILES([$PYTHON_PLUGIN_SRC/Makefile $PYTHON_PLUGIN_SRC/python_plugin.exp]) fi dnl diff --git a/plugins/python/python_plugin.exp.in b/plugins/python/python_plugin.exp.in new file mode 100644 index 0000000000..1261a58b75 --- /dev/null +++ b/plugins/python/python_plugin.exp.in @@ -0,0 +1,8 @@ +group_plugin +python_approval +python_approval_clone +python_audit +python_audit_clone +python_io +python_io_clone +python_policy diff --git a/plugins/python/python_plugin_approval_multi.inc b/plugins/python/python_plugin_approval_multi.inc index 9f0ceb9583..6ee16bebf7 100644 --- a/plugins/python/python_plugin_approval_multi.inc +++ b/plugins/python/python_plugin_approval_multi.inc @@ -43,7 +43,7 @@ CALLBACK_CFUNC(show_version)(int verbose) return python_plugin_approval_show_version(&PLUGIN_CTX, verbose); } -__dso_public struct approval_plugin APPROVAL_SYMBOL_NAME(python_approval) = { +struct approval_plugin APPROVAL_SYMBOL_NAME(python_approval) = { SUDO_APPROVAL_PLUGIN, SUDO_API_VERSION, CALLBACK_CFUNC(open), diff --git a/plugins/python/python_plugin_audit_multi.inc b/plugins/python/python_plugin_audit_multi.inc index e640389452..bb65f9ee8a 100644 --- a/plugins/python/python_plugin_audit_multi.inc +++ b/plugins/python/python_plugin_audit_multi.inc @@ -60,7 +60,7 @@ CALLBACK_CFUNC(show_version)(int verbose) return python_plugin_audit_show_version(&PLUGIN_CTX, verbose); } -__dso_public struct audit_plugin AUDIT_SYMBOL_NAME(python_audit) = { +struct audit_plugin AUDIT_SYMBOL_NAME(python_audit) = { SUDO_AUDIT_PLUGIN, SUDO_API_VERSION, CALLBACK_CFUNC(open), From 38e28dcbf508580f08c9a0eed423bac7bff4ef88 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 3 Aug 2020 10:15:28 -0600 Subject: [PATCH 009/113] Rename python_plugin.exp.in -> python_plugin.exp There is nothing dynamic in this file. --- MANIFEST | 2 +- configure | 3 +-- configure.ac | 2 +- plugins/python/{python_plugin.exp.in => python_plugin.exp} | 0 4 files changed, 3 insertions(+), 4 deletions(-) rename plugins/python/{python_plugin.exp.in => python_plugin.exp} (100%) diff --git a/MANIFEST b/MANIFEST index 9c6a4cdc9c..302182f336 100644 --- a/MANIFEST +++ b/MANIFEST @@ -331,7 +331,7 @@ plugins/python/python_baseplugin.c plugins/python/python_convmessage.c plugins/python/python_importblocker.c plugins/python/python_loghandler.c -plugins/python/python_plugin.exp.in +plugins/python/python_plugin.exp plugins/python/python_plugin_approval.c plugins/python/python_plugin_approval_multi.inc plugins/python/python_plugin_audit.c diff --git a/configure b/configure index a4bef163c5..697d56f6af 100755 --- a/configure +++ b/configure @@ -19215,7 +19215,7 @@ fi PPFILES="$PPFILES "'$(srcdir)/etc/sudo-python.pp' PYTHON_PLUGIN_SRC=plugins/python - ac_config_files="$ac_config_files $PYTHON_PLUGIN_SRC/Makefile $PYTHON_PLUGIN_SRC/python_plugin.exp" + ac_config_files="$ac_config_files $PYTHON_PLUGIN_SRC/Makefile" fi @@ -29014,7 +29014,6 @@ do "pathnames.h") CONFIG_HEADERS="$CONFIG_HEADERS pathnames.h" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "$PYTHON_PLUGIN_SRC/Makefile") CONFIG_FILES="$CONFIG_FILES $PYTHON_PLUGIN_SRC/Makefile" ;; - "$PYTHON_PLUGIN_SRC/python_plugin.exp") CONFIG_FILES="$CONFIG_FILES $PYTHON_PLUGIN_SRC/python_plugin.exp" ;; "lib/zlib/zconf.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/zlib/zconf.h" ;; "lib/zlib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/zlib/Makefile" ;; "etc/init.d/$INIT_SCRIPT") CONFIG_FILES="$CONFIG_FILES etc/init.d/$INIT_SCRIPT" ;; diff --git a/configure.ac b/configure.ac index c6ab6d0873..098b61b023 100644 --- a/configure.ac +++ b/configure.ac @@ -2599,7 +2599,7 @@ if test ${USE_PYTHON-'no'} = "yes"; then PPFILES="$PPFILES "'$(srcdir)/etc/sudo-python.pp' PYTHON_PLUGIN_SRC=plugins/python - AC_CONFIG_FILES([$PYTHON_PLUGIN_SRC/Makefile $PYTHON_PLUGIN_SRC/python_plugin.exp]) + AC_CONFIG_FILES([$PYTHON_PLUGIN_SRC/Makefile]) fi dnl diff --git a/plugins/python/python_plugin.exp.in b/plugins/python/python_plugin.exp similarity index 100% rename from plugins/python/python_plugin.exp.in rename to plugins/python/python_plugin.exp From 4bc70c02c1e92c6bb41736c6bf0fdfa9c52f7850 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 3 Aug 2020 10:27:27 -0600 Subject: [PATCH 010/113] Always use a linker script to hide symbols if it is supported. We use this even if the compiler has symbol visibility support so we will notice mismatches between the exports file and __dso_public annotations in the source code. --- configure | 122 +++++++++++++++++++-------------------- configure.ac | 158 +++++++++++++++++++++++++-------------------------- 2 files changed, 139 insertions(+), 141 deletions(-) diff --git a/configure b/configure index 697d56f6af..1d1c19cee0 100755 --- a/configure +++ b/configure @@ -27112,26 +27112,25 @@ fi esac fi -if test -n "$LT_LDEXPORTS"; then - if test "$lt_cv_prog_gnu_ld" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports anonymous map files" >&5 +if test "$lt_cv_prog_gnu_ld" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports anonymous map files" >&5 $as_echo_n "checking whether ld supports anonymous map files... " >&6; } if ${sudo_cv_var_gnu_ld_anon_map+:} false; then : $as_echo_n "(cached) " >&6 else - sudo_cv_var_gnu_ld_anon_map=no - cat > conftest.map <<-EOF - { - global: foo; - local: *; - }; + sudo_cv_var_gnu_ld_anon_map=no + cat > conftest.map <<-EOF + { + global: foo; + local: *; + }; EOF - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_prog_compiler_pic" - _LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -fpic -shared -Wl,--version-script,./conftest.map" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + _CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_prog_compiler_pic" + _LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -fpic -shared -Wl,--version-script,./conftest.map" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo; int @@ -27147,37 +27146,37 @@ if ac_fn_c_try_link "$LINENO"; then : fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - CFLAGS="$_CFLAGS" - LDFLAGS="$_LDFLAGS" + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_gnu_ld_anon_map" >&5 $as_echo "$sudo_cv_var_gnu_ld_anon_map" >&6; } - if test "$sudo_cv_var_gnu_ld_anon_map" = "yes"; then - LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,--version-script,\$(shlib_map)" - fi - else - case "$host_os" in - solaris2*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports anonymous map files" >&5 + if test "$sudo_cv_var_gnu_ld_anon_map" = "yes"; then + LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,--version-script,\$(shlib_map)" + fi +else + case "$host_os" in + solaris2*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports anonymous map files" >&5 $as_echo_n "checking whether ld supports anonymous map files... " >&6; } if ${sudo_cv_var_solaris_ld_anon_map+:} false; then : $as_echo_n "(cached) " >&6 else - sudo_cv_var_solaris_ld_anon_map=no - cat > conftest.map <<-EOF - { - global: foo; - local: *; - }; + sudo_cv_var_solaris_ld_anon_map=no + cat > conftest.map <<-EOF + { + global: foo; + local: *; + }; EOF - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_prog_compiler_pic" - _LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared -Wl,-M,./conftest.map" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + _CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_prog_compiler_pic" + _LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared -Wl,-M,./conftest.map" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo; int @@ -27193,35 +27192,35 @@ if ac_fn_c_try_link "$LINENO"; then : fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - CFLAGS="$_CFLAGS" - LDFLAGS="$_LDFLAGS" + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_solaris_ld_anon_map" >&5 $as_echo "$sudo_cv_var_solaris_ld_anon_map" >&6; } - if test "$sudo_cv_var_solaris_ld_anon_map" = "yes"; then - LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,-M,\$(shlib_map)" - fi - ;; - hpux*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports controlling exported symbols" >&5 + if test "$sudo_cv_var_solaris_ld_anon_map" = "yes"; then + LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,-M,\$(shlib_map)" + fi + ;; + hpux*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ld supports controlling exported symbols" >&5 $as_echo_n "checking whether ld supports controlling exported symbols... " >&6; } if ${sudo_cv_var_hpux_ld_symbol_export+:} false; then : $as_echo_n "(cached) " >&6 else - sudo_cv_var_hpux_ld_symbol_export=no - echo "+e foo" > conftest.opt - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_prog_compiler_pic" - _LDFLAGS="$LDFLAGS" - if test -n "$GCC"; then - LDFLAGS="$LDFLAGS -shared -Wl,-c,./conftest.opt" - else - LDFLAGS="$LDFLAGS -Wl,-b -Wl,-c,./conftest.opt" - fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + sudo_cv_var_hpux_ld_symbol_export=no + echo "+e foo" > conftest.opt + _CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_prog_compiler_pic" + _LDFLAGS="$LDFLAGS" + if test -n "$GCC"; then + LDFLAGS="$LDFLAGS -shared -Wl,-c,./conftest.opt" + else + LDFLAGS="$LDFLAGS -Wl,-b -Wl,-c,./conftest.opt" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo; int @@ -27237,20 +27236,19 @@ if ac_fn_c_try_link "$LINENO"; then : fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - CFLAGS="$_CFLAGS" - LDFLAGS="$_LDFLAGS" - rm -f conftest.opt + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" + rm -f conftest.opt fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_hpux_ld_symbol_export" >&5 $as_echo "$sudo_cv_var_hpux_ld_symbol_export" >&6; } - if test "$sudo_cv_var_hpux_ld_symbol_export" = "yes"; then - LT_LDDEP="\$(shlib_opt)"; LT_LDEXPORTS="-Wl,-c,\$(shlib_opt)" - fi - ;; - esac - fi + if test "$sudo_cv_var_hpux_ld_symbol_export" = "yes"; then + LT_LDDEP="\$(shlib_opt)"; LT_LDEXPORTS="-Wl,-c,\$(shlib_opt)" + fi + ;; + esac fi if test "$enable_asan" = "yes"; then diff --git a/configure.ac b/configure.ac index 098b61b023..faaa51f6a7 100644 --- a/configure.ac +++ b/configure.ac @@ -4339,89 +4339,89 @@ else fi dnl -dnl If the compiler doesn't have symbol visibility support, it may -dnl support version scripts (only GNU and Solaris ld). +dnl Check whether ld supports version scripts (only GNU and Solaris ld). +dnl If possible, we use this even if the compiler has symbol visibility +dnl support so we will notice mismatches between the exports file and +dnl __dso_public annotations in the source code. dnl This test relies on AC_LANG_WERROR dnl -if test -n "$LT_LDEXPORTS"; then - if test "$lt_cv_prog_gnu_ld" = "yes"; then - AC_CACHE_CHECK([whether ld supports anonymous map files], - [sudo_cv_var_gnu_ld_anon_map], - [ - sudo_cv_var_gnu_ld_anon_map=no - cat > conftest.map <<-EOF - { - global: foo; - local: *; - }; -EOF - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_prog_compiler_pic" - _LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -fpic -shared -Wl,--version-script,./conftest.map" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])], - [sudo_cv_var_gnu_ld_anon_map=yes]) - CFLAGS="$_CFLAGS" - LDFLAGS="$_LDFLAGS" - ] - ) - if test "$sudo_cv_var_gnu_ld_anon_map" = "yes"; then - LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,--version-script,\$(shlib_map)" - fi - else - case "$host_os" in - solaris2*) - AC_CACHE_CHECK([whether ld supports anonymous map files], - [sudo_cv_var_solaris_ld_anon_map], - [ - sudo_cv_var_solaris_ld_anon_map=no - cat > conftest.map <<-EOF - { - global: foo; - local: *; - }; +if test "$lt_cv_prog_gnu_ld" = "yes"; then + AC_CACHE_CHECK([whether ld supports anonymous map files], + [sudo_cv_var_gnu_ld_anon_map], + [ + sudo_cv_var_gnu_ld_anon_map=no + cat > conftest.map <<-EOF + { + global: foo; + local: *; + }; EOF - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_prog_compiler_pic" - _LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared -Wl,-M,./conftest.map" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])], - [sudo_cv_var_solaris_ld_anon_map=yes]) - CFLAGS="$_CFLAGS" - LDFLAGS="$_LDFLAGS" - ] - ) - if test "$sudo_cv_var_solaris_ld_anon_map" = "yes"; then - LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,-M,\$(shlib_map)" - fi - ;; - hpux*) - AC_CACHE_CHECK([whether ld supports controlling exported symbols], - [sudo_cv_var_hpux_ld_symbol_export], - [ - sudo_cv_var_hpux_ld_symbol_export=no - echo "+e foo" > conftest.opt - _CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $lt_prog_compiler_pic" - _LDFLAGS="$LDFLAGS" - if test -n "$GCC"; then - LDFLAGS="$LDFLAGS -shared -Wl,-c,./conftest.opt" - else - LDFLAGS="$LDFLAGS -Wl,-b -Wl,-c,./conftest.opt" - fi - AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])], - [sudo_cv_var_hpux_ld_symbol_export=yes]) - CFLAGS="$_CFLAGS" - LDFLAGS="$_LDFLAGS" - rm -f conftest.opt - ] - ) - if test "$sudo_cv_var_hpux_ld_symbol_export" = "yes"; then - LT_LDDEP="\$(shlib_opt)"; LT_LDEXPORTS="-Wl,-c,\$(shlib_opt)" - fi - ;; - esac + _CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_prog_compiler_pic" + _LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -fpic -shared -Wl,--version-script,./conftest.map" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])], + [sudo_cv_var_gnu_ld_anon_map=yes]) + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" + ] + ) + if test "$sudo_cv_var_gnu_ld_anon_map" = "yes"; then + LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,--version-script,\$(shlib_map)" fi +else + case "$host_os" in + solaris2*) + AC_CACHE_CHECK([whether ld supports anonymous map files], + [sudo_cv_var_solaris_ld_anon_map], + [ + sudo_cv_var_solaris_ld_anon_map=no + cat > conftest.map <<-EOF + { + global: foo; + local: *; + }; +EOF + _CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_prog_compiler_pic" + _LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared -Wl,-M,./conftest.map" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])], + [sudo_cv_var_solaris_ld_anon_map=yes]) + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" + ] + ) + if test "$sudo_cv_var_solaris_ld_anon_map" = "yes"; then + LT_LDDEP="\$(shlib_map)"; LT_LDEXPORTS="-Wl,-M,\$(shlib_map)" + fi + ;; + hpux*) + AC_CACHE_CHECK([whether ld supports controlling exported symbols], + [sudo_cv_var_hpux_ld_symbol_export], + [ + sudo_cv_var_hpux_ld_symbol_export=no + echo "+e foo" > conftest.opt + _CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_prog_compiler_pic" + _LDFLAGS="$LDFLAGS" + if test -n "$GCC"; then + LDFLAGS="$LDFLAGS -shared -Wl,-c,./conftest.opt" + else + LDFLAGS="$LDFLAGS -Wl,-b -Wl,-c,./conftest.opt" + fi + AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])], + [sudo_cv_var_hpux_ld_symbol_export=yes]) + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" + rm -f conftest.opt + ] + ) + if test "$sudo_cv_var_hpux_ld_symbol_export" = "yes"; then + LT_LDDEP="\$(shlib_opt)"; LT_LDEXPORTS="-Wl,-c,\$(shlib_opt)" + fi + ;; + esac fi dnl From 2a58b19f9622ea0c50909cff1f6dd2e9137df3b4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 5 Aug 2020 09:13:09 -0600 Subject: [PATCH 011/113] Add workaround for yyless() not resetting yy_at_bol. --- plugins/sudoers/toke.c | 133 +++++++++++++++++++++-------------------- plugins/sudoers/toke.l | 3 + 2 files changed, 71 insertions(+), 65 deletions(-) diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index 9fa8464bff..e40ac5818b 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -2693,12 +2693,13 @@ YY_RULE_SETUP { BEGIN INITIAL; yyless(0); + yy_set_bol(0); LEXRETURN(COMMAND); } /* end of command line args */ YY_BREAK case 17: YY_RULE_SETUP -#line 232 "toke.l" +#line 233 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2709,7 +2710,7 @@ YY_RULE_SETUP case 18: YY_RULE_SETUP -#line 240 "toke.l" +#line 241 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -2727,7 +2728,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 255 "toke.l" +#line 256 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -2752,7 +2753,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 277 "toke.l" +#line 278 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2766,7 +2767,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 288 "toke.l" +#line 289 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2781,7 +2782,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 299 "toke.l" +#line 300 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2790,6 +2791,7 @@ YY_RULE_SETUP /* only consume #include */ yyless(sizeof("#include") - 1); + yy_set_bol(0); BEGIN GOTINC; LEXTRACE("INCLUDE "); @@ -2799,7 +2801,7 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 313 "toke.l" +#line 315 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2808,6 +2810,7 @@ YY_RULE_SETUP /* only consume #includedir */ yyless(sizeof("#includedir") - 1); + yy_set_bol(0); BEGIN GOTINC; LEXTRACE("INCLUDEDIR "); @@ -2816,7 +2819,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 327 "toke.l" +#line 330 "toke.l" { char deftype; int n; @@ -2859,7 +2862,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 367 "toke.l" +#line 370 "toke.l" { int n; @@ -2888,7 +2891,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 393 "toke.l" +#line 396 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2897,7 +2900,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 399 "toke.l" +#line 402 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2906,7 +2909,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 405 "toke.l" +#line 408 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2914,7 +2917,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 410 "toke.l" +#line 413 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2922,7 +2925,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 415 "toke.l" +#line 418 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2930,7 +2933,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 420 "toke.l" +#line 423 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2938,7 +2941,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 425 "toke.l" +#line 428 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2946,7 +2949,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 430 "toke.l" +#line 433 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2954,7 +2957,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 435 "toke.l" +#line 438 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2962,7 +2965,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 440 "toke.l" +#line 443 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2970,7 +2973,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 445 "toke.l" +#line 448 "toke.l" { LEXTRACE("MAIL "); LEXRETURN(MAIL); @@ -2978,7 +2981,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 450 "toke.l" +#line 453 "toke.l" { LEXTRACE("NOMAIL "); LEXRETURN(NOMAIL); @@ -2986,7 +2989,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 455 "toke.l" +#line 458 "toke.l" { LEXTRACE("FOLLOW "); LEXRETURN(FOLLOWLNK); @@ -2994,7 +2997,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 460 "toke.l" +#line 463 "toke.l" { LEXTRACE("NOFOLLOW "); LEXRETURN(NOFOLLOWLNK); @@ -3002,7 +3005,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 465 "toke.l" +#line 468 "toke.l" { /* empty group or netgroup */ LEXTRACE("ERROR "); @@ -3011,7 +3014,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 471 "toke.l" +#line 474 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3022,7 +3025,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 479 "toke.l" +#line 482 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3033,7 +3036,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 487 "toke.l" +#line 490 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3043,7 +3046,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 494 "toke.l" +#line 497 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3053,7 +3056,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 501 "toke.l" +#line 504 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -3067,7 +3070,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 512 "toke.l" +#line 515 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -3081,7 +3084,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 523 "toke.l" +#line 526 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); @@ -3090,7 +3093,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 529 "toke.l" +#line 532 "toke.l" { LEXTRACE("CMND_TIMEOUT "); LEXRETURN(CMND_TIMEOUT); @@ -3098,7 +3101,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 534 "toke.l" +#line 537 "toke.l" { LEXTRACE("NOTBEFORE "); LEXRETURN(NOTBEFORE); @@ -3106,7 +3109,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 539 "toke.l" +#line 542 "toke.l" { LEXTRACE("NOTAFTER "); LEXRETURN(NOTAFTER); @@ -3114,7 +3117,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 544 "toke.l" +#line 547 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3126,7 +3129,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 553 "toke.l" +#line 556 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3138,7 +3141,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 561 "toke.l" +#line 564 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3150,7 +3153,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 570 "toke.l" +#line 573 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3162,7 +3165,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 579 "toke.l" +#line 582 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3173,7 +3176,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 587 "toke.l" +#line 590 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3185,7 +3188,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 596 "toke.l" +#line 599 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3195,7 +3198,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 603 "toke.l" +#line 606 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3205,7 +3208,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 610 "toke.l" +#line 613 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3215,7 +3218,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 617 "toke.l" +#line 620 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3225,7 +3228,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 624 "toke.l" +#line 627 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3235,7 +3238,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 631 "toke.l" +#line 634 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3253,7 +3256,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 646 "toke.l" +#line 649 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3263,7 +3266,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 653 "toke.l" +#line 656 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -3275,7 +3278,7 @@ YY_RULE_SETUP case 65: YY_RULE_SETUP -#line 662 "toke.l" +#line 665 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) @@ -3287,7 +3290,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 671 "toke.l" +#line 674 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3298,7 +3301,7 @@ YY_RULE_SETUP case 67: YY_RULE_SETUP -#line 679 "toke.l" +#line 682 "toke.l" { LEXTRACE("( "); LEXRETURN('('); @@ -3306,7 +3309,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 684 "toke.l" +#line 687 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); @@ -3314,7 +3317,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 689 "toke.l" +#line 692 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -3322,7 +3325,7 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 694 "toke.l" +#line 697 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -3330,7 +3333,7 @@ YY_RULE_SETUP YY_BREAK case 71: YY_RULE_SETUP -#line 699 "toke.l" +#line 702 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); @@ -3338,7 +3341,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 704 "toke.l" +#line 707 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3349,7 +3352,7 @@ YY_RULE_SETUP case 73: /* rule 73 can match eol */ YY_RULE_SETUP -#line 711 "toke.l" +#line 714 "toke.l" { if (YY_START == INSTR) { LEXTRACE("ERROR "); @@ -3364,7 +3367,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 723 "toke.l" +#line 726 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } @@ -3372,7 +3375,7 @@ YY_RULE_SETUP case 75: /* rule 75 can match eol */ YY_RULE_SETUP -#line 727 "toke.l" +#line 730 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; @@ -3382,7 +3385,7 @@ YY_RULE_SETUP case 76: /* rule 76 can match eol */ YY_RULE_SETUP -#line 733 "toke.l" +#line 736 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3399,7 +3402,7 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 747 "toke.l" +#line 750 "toke.l" { LEXTRACE("ERROR "); LEXRETURN(ERROR); @@ -3413,7 +3416,7 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): -#line 752 "toke.l" +#line 755 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3426,10 +3429,10 @@ case YY_STATE_EOF(GOTINC): YY_BREAK case 78: YY_RULE_SETUP -#line 762 "toke.l" +#line 765 "toke.l" ECHO; YY_BREAK -#line 3427 "toke.c" +#line 3430 "toke.c" case YY_END_OF_BUFFER: { @@ -4390,7 +4393,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 762 "toke.l" +#line 765 "toke.l" struct path_list { diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 1cd9a4aa52..066373ddd6 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -226,6 +226,7 @@ DEFVAR [a-z_]+ [#:\,=\r\n] { BEGIN INITIAL; yyless(0); + yy_set_bol(0); LEXRETURN(COMMAND); } /* end of command line args */ @@ -304,6 +305,7 @@ DEFVAR [a-z_]+ /* only consume #include */ yyless(sizeof("#include") - 1); + yy_set_bol(0); BEGIN GOTINC; LEXTRACE("INCLUDE "); @@ -318,6 +320,7 @@ DEFVAR [a-z_]+ /* only consume #includedir */ yyless(sizeof("#includedir") - 1); + yy_set_bol(0); BEGIN GOTINC; LEXTRACE("INCLUDEDIR "); From c90539015f345590c2d7156f5b58e956811e08ff Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 5 Aug 2020 12:58:02 -0600 Subject: [PATCH 012/113] Fix libssl dependency on Debian-based systems. Older systems may still have libssl1.0.0, not libssl1.1. --- etc/sudo-logsrvd.pp | 8 +++++++- etc/sudo.pp | 8 +++++++- scripts/mkpkg | 7 +++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/etc/sudo-logsrvd.pp b/etc/sudo-logsrvd.pp index cbdf4d903b..af167b89bc 100644 --- a/etc/sudo-logsrvd.pp +++ b/etc/sudo-logsrvd.pp @@ -161,9 +161,15 @@ fi %depend [deb] - libc6, zlib1g, libssl1.1, sudo + libc6, zlib1g, sudo %fixup [deb] + if test -n "%{libssl_dep}"; then + DEPENDS="%{libssl_dep}" + cp -p %{pp_wrkdir}/%{name}/DEBIAN/control %{pp_wrkdir}/%{name}/DEBIAN/control.$$ + sed "s/^\(Depends:.*\) *$/\1, ${DEPENDS}/" %{pp_wrkdir}/%{name}/DEBIAN/control.$$ > %{pp_wrkdir}/%{name}/DEBIAN/control + rm -f %{pp_wrkdir}/%{name}/DEBIAN/control.$$ + fi echo "Homepage: https://www.sudo.ws" >> %{pp_wrkdir}/%{name}/DEBIAN/control echo "Bugs: https://bugzilla.sudo.ws" >> %{pp_wrkdir}/%{name}/DEBIAN/control diff --git a/etc/sudo.pp b/etc/sudo.pp index f9750e95e7..22011255c0 100644 --- a/etc/sudo.pp +++ b/etc/sudo.pp @@ -90,6 +90,9 @@ if test -n "$linux_audit"; then pp_rpm_requires="audit-libs >= $linux_audit" fi + if test -z "$libssl_dep"; then + libssl_dep="libssl1.1" + fi # The package manager will handle an existing sudoers file rm -f ${pp_destdir}$sudoersdir/sudoers.dist %else @@ -328,7 +331,7 @@ fi %depend [deb] - libc6, libpam0g, libpam-modules, zlib1g, libselinux1, libssl1.1 + libc6, libpam0g, libpam-modules, zlib1g, libselinux1 %fixup [deb] # Add Conflicts, Replaces headers and add libldap dependency as needed. @@ -342,6 +345,9 @@ echo "Provides: sudo" >> %{pp_wrkdir}/%{name}/DEBIAN/control DEPENDS="${DEPENDS}${DEPENDS:+, }libldap-2.4-2" fi + if test -n "%{libssl_dep}"; then + DEPENDS="${DEPENDS}${DEPENDS:+, }%{libssl_dep}" + fi cp -p %{pp_wrkdir}/%{name}/DEBIAN/control %{pp_wrkdir}/%{name}/DEBIAN/control.$$ if test -n "${DEPENDS}"; then sed "s/^\(Depends:.*\) *$/\1, ${DEPENDS}/" %{pp_wrkdir}/%{name}/DEBIAN/control.$$ > %{pp_wrkdir}/%{name}/DEBIAN/control diff --git a/scripts/mkpkg b/scripts/mkpkg index 73eb4e8b25..54698290ab 100755 --- a/scripts/mkpkg +++ b/scripts/mkpkg @@ -324,6 +324,13 @@ case "$osversion" in exit 1 fi PPVARS="${PPVARS}${PPVARS+$space}linux_audit=$linux_audit" + # Use correct libssl dependency + libssl_dep=`dpkg-query -S /usr/lib/${MULTIARCH}${MULTIARCH:+/}libssl.so.1.[0-9]* /lib/${MULTIARCH}${MULTIARCH:+/}libssl.so.1.[0-9]* 2>/dev/null | sort -rn | awk -F: '{ print $1; exit }'` + if [ -z "$libssl_dep" ]; then + echo "unable to determine package for libssl" 1>&2 + exit 1 + fi + PPVARS="${PPVARS}${PPVARS+$space}libssl_dep=$libssl_dep" ;; macos*) # TODO: openssl (homebrew?) From a8bfeba581aea5ba3faf9fd97bbe3c57e6251034 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 6 Aug 2020 21:16:35 -0600 Subject: [PATCH 013/113] regen --- plugins/sudoers/Makefile.in | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index d2728abc1e..ce514a71d0 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -1539,13 +1539,13 @@ iolog_client.lo: $(srcdir)/iolog_client.c $(devdir)/def_data.h \ $(incdir)/protobuf-c/protobuf-c.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)/defaults.h $(srcdir)/iolog_plugin.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 + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/iolog_plugin.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 $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/iolog_client.c iolog_client.i: $(srcdir)/iolog_client.c $(devdir)/def_data.h \ $(incdir)/compat/getaddrinfo.h $(incdir)/compat/stdbool.h \ @@ -1553,13 +1553,13 @@ iolog_client.i: $(srcdir)/iolog_client.c $(devdir)/def_data.h \ $(incdir)/protobuf-c/protobuf-c.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)/defaults.h $(srcdir)/iolog_plugin.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 + $(incdir)/sudo_gettext.h $(incdir)/sudo_iolog.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/iolog_plugin.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) $< iolog_client.plog: iolog_client.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/iolog_client.c --i-file $< --output-file $@ From 03816d020b2b629c69dddfdca4cf8fd869fe108b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 6 Aug 2020 21:16:35 -0600 Subject: [PATCH 014/113] Sync sample_approval.exp with sample_approval.c --- plugins/sample_approval/sample_approval.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/sample_approval/sample_approval.exp b/plugins/sample_approval/sample_approval.exp index 917a0d1dac..ea9cd650a7 100644 --- a/plugins/sample_approval/sample_approval.exp +++ b/plugins/sample_approval/sample_approval.exp @@ -1 +1 @@ -approval_plugin +sample_approval From 99f43f8a00171582d4e47e98eb93148e38a56545 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 6 Aug 2020 21:16:35 -0600 Subject: [PATCH 015/113] Store the current line in our own buffer for better error messages. --- plugins/sudoers/gram.c | 10 +- plugins/sudoers/gram.y | 6 + .../sudoers/regress/testsudoers/test11.out.ok | 2 + plugins/sudoers/toke.c | 210 +++++++++++------- plugins/sudoers/toke.h | 10 +- plugins/sudoers/toke.l | 44 +++- 6 files changed, 194 insertions(+), 88 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index f9df4c8679..9961490bb2 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -738,6 +738,12 @@ sudoerserror(const char *s) sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); sudo_printf(SUDO_CONV_ERROR_MSG, _(fmt), sudoers, _(s), this_lineno); sudoers_setlocale(oldlocale, NULL); + + /* Display the offending line if possible. */ + if (sudolinebuf.len != 0) { + sudo_printf(SUDO_CONV_ERROR_MSG, "%s%s", sudolinebuf.buf, + sudolinebuf.buf[sudolinebuf.len - 1] == '\n' ? "" : "\n"); + } } #endif } @@ -1165,7 +1171,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1111 "gram.c" +#line 1117 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) @@ -2332,7 +2338,7 @@ case 120: } } break; -#line 2278 "gram.c" +#line 2284 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 60702a15fc..71c70bed35 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -952,6 +952,12 @@ sudoerserror(const char *s) sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); sudo_printf(SUDO_CONV_ERROR_MSG, _(fmt), sudoers, _(s), this_lineno); sudoers_setlocale(oldlocale, NULL); + + /* Display the offending line if possible. */ + if (sudolinebuf.len != 0) { + sudo_printf(SUDO_CONV_ERROR_MSG, "%s%s", sudolinebuf.buf, + sudolinebuf.buf[sudolinebuf.len - 1] == '\n' ? "" : "\n"); + } } #endif } diff --git a/plugins/sudoers/regress/testsudoers/test11.out.ok b/plugins/sudoers/regress/testsudoers/test11.out.ok index e7f2c8abf1..d88578b3e1 100644 --- a/plugins/sudoers/regress/testsudoers/test11.out.ok +++ b/plugins/sudoers/regress/testsudoers/test11.out.ok @@ -1,6 +1,7 @@ Testing @include with garbage after the path name >>> sudoers: syntax error near line 1 <<< +@include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp Parse error in sudoers near line 1. Entries for user root: @@ -15,6 +16,7 @@ Command allowed Testing #include with garbage after the path name >>> sudoers: syntax error near line 1 <<< +#include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp Parse error in sudoers near line 1. Entries for user root: diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index e40ac5818b..ee1f93ccef 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -2213,6 +2213,7 @@ char *sudoerstext; int sudolineno; /* current sudoers line number. */ int last_token; /* last token that was parsed. */ char *sudoers; /* sudoers file being parsed. */ +struct sudolinebuf sudolinebuf; /* sudoers line being parsed. */ /* Default sudoers path, mode and owner (may be set via sudo.conf) */ const char *sudoers_file = _PATH_SUDOERS; @@ -2225,6 +2226,7 @@ static int prev_state; static int digest_type = -1; static bool pop_include(void); +static yy_size_t sudoers_input(char *buf, yy_size_t max_size); int (*trace_print)(const char *msg) = sudoers_trace_print; @@ -2234,6 +2236,9 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; } while (0) #define ECHO ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout)) + +#define YY_INPUT(buf, result, max_size) (result) = sudoers_input(buf, max_size) + #define YY_NO_INPUT 1 @@ -2242,7 +2247,7 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; -#line 2240 "toke.c" +#line 2245 "toke.c" #define INITIAL 0 #define GOTDEFS 1 @@ -2459,9 +2464,9 @@ YY_DECL } { -#line 104 "toke.l" +#line 109 "toke.l" -#line 2459 "toke.c" +#line 2464 "toke.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -2521,7 +2526,7 @@ YY_DECL case 1: YY_RULE_SETUP -#line 105 "toke.l" +#line 110 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -2529,12 +2534,12 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 110 "toke.l" +#line 115 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 112 "toke.l" +#line 117 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -2546,7 +2551,7 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP -#line 121 "toke.l" +#line 126 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -2555,7 +2560,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 127 "toke.l" +#line 132 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -2563,7 +2568,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 132 "toke.l" +#line 137 "toke.l" { LEXTRACE("+= "); LEXRETURN('+'); @@ -2571,7 +2576,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 137 "toke.l" +#line 142 "toke.l" { LEXTRACE("-= "); LEXRETURN('-'); @@ -2579,7 +2584,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 142 "toke.l" +#line 147 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2589,7 +2594,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 149 "toke.l" +#line 154 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -2602,7 +2607,7 @@ YY_RULE_SETUP case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 158 "toke.l" +#line 163 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -2611,7 +2616,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 164 "toke.l" +#line 169 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -2646,7 +2651,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 196 "toke.l" +#line 201 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -2655,7 +2660,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 202 "toke.l" +#line 207 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -2666,7 +2671,7 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP -#line 210 "toke.l" +#line 215 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -2677,7 +2682,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 218 "toke.l" +#line 223 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -2689,7 +2694,7 @@ YY_RULE_SETUP case 16: /* rule 16 can match eol */ YY_RULE_SETUP -#line 226 "toke.l" +#line 231 "toke.l" { BEGIN INITIAL; yyless(0); @@ -2699,7 +2704,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 233 "toke.l" +#line 238 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2710,7 +2715,7 @@ YY_RULE_SETUP case 18: YY_RULE_SETUP -#line 241 "toke.l" +#line 246 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -2728,7 +2733,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 256 "toke.l" +#line 261 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -2753,7 +2758,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 278 "toke.l" +#line 283 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2767,7 +2772,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 289 "toke.l" +#line 294 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2782,7 +2787,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 300 "toke.l" +#line 305 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2801,7 +2806,7 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 315 "toke.l" +#line 320 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2819,7 +2824,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 330 "toke.l" +#line 335 "toke.l" { char deftype; int n; @@ -2862,7 +2867,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 370 "toke.l" +#line 375 "toke.l" { int n; @@ -2891,7 +2896,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 396 "toke.l" +#line 401 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2900,7 +2905,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 402 "toke.l" +#line 407 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2909,7 +2914,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 408 "toke.l" +#line 413 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2917,7 +2922,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 413 "toke.l" +#line 418 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2925,7 +2930,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 418 "toke.l" +#line 423 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2933,7 +2938,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 423 "toke.l" +#line 428 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2941,7 +2946,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 428 "toke.l" +#line 433 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2949,7 +2954,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 433 "toke.l" +#line 438 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2957,7 +2962,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 438 "toke.l" +#line 443 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2965,7 +2970,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 443 "toke.l" +#line 448 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2973,7 +2978,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 448 "toke.l" +#line 453 "toke.l" { LEXTRACE("MAIL "); LEXRETURN(MAIL); @@ -2981,7 +2986,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 453 "toke.l" +#line 458 "toke.l" { LEXTRACE("NOMAIL "); LEXRETURN(NOMAIL); @@ -2989,7 +2994,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 458 "toke.l" +#line 463 "toke.l" { LEXTRACE("FOLLOW "); LEXRETURN(FOLLOWLNK); @@ -2997,7 +3002,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 463 "toke.l" +#line 468 "toke.l" { LEXTRACE("NOFOLLOW "); LEXRETURN(NOFOLLOWLNK); @@ -3005,7 +3010,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 468 "toke.l" +#line 473 "toke.l" { /* empty group or netgroup */ LEXTRACE("ERROR "); @@ -3014,7 +3019,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 474 "toke.l" +#line 479 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3025,7 +3030,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 482 "toke.l" +#line 487 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3036,7 +3041,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 490 "toke.l" +#line 495 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3046,7 +3051,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 497 "toke.l" +#line 502 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3056,7 +3061,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 504 "toke.l" +#line 509 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -3070,7 +3075,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 515 "toke.l" +#line 520 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -3084,7 +3089,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 526 "toke.l" +#line 531 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); @@ -3093,7 +3098,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 532 "toke.l" +#line 537 "toke.l" { LEXTRACE("CMND_TIMEOUT "); LEXRETURN(CMND_TIMEOUT); @@ -3101,7 +3106,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 537 "toke.l" +#line 542 "toke.l" { LEXTRACE("NOTBEFORE "); LEXRETURN(NOTBEFORE); @@ -3109,7 +3114,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 542 "toke.l" +#line 547 "toke.l" { LEXTRACE("NOTAFTER "); LEXRETURN(NOTAFTER); @@ -3117,7 +3122,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 547 "toke.l" +#line 552 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3129,7 +3134,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 556 "toke.l" +#line 561 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3141,7 +3146,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 564 "toke.l" +#line 569 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3153,7 +3158,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 573 "toke.l" +#line 578 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3165,7 +3170,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 582 "toke.l" +#line 587 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3176,7 +3181,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 590 "toke.l" +#line 595 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3188,7 +3193,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 599 "toke.l" +#line 604 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3198,7 +3203,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 606 "toke.l" +#line 611 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3208,7 +3213,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 613 "toke.l" +#line 618 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3218,7 +3223,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 620 "toke.l" +#line 625 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3228,7 +3233,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 627 "toke.l" +#line 632 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3238,7 +3243,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 634 "toke.l" +#line 639 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3256,7 +3261,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 649 "toke.l" +#line 654 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3266,7 +3271,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 656 "toke.l" +#line 661 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -3278,7 +3283,7 @@ YY_RULE_SETUP case 65: YY_RULE_SETUP -#line 665 "toke.l" +#line 670 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) @@ -3290,7 +3295,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 674 "toke.l" +#line 679 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3301,7 +3306,7 @@ YY_RULE_SETUP case 67: YY_RULE_SETUP -#line 682 "toke.l" +#line 687 "toke.l" { LEXTRACE("( "); LEXRETURN('('); @@ -3309,7 +3314,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 687 "toke.l" +#line 692 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); @@ -3317,7 +3322,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 692 "toke.l" +#line 697 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -3325,7 +3330,7 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 697 "toke.l" +#line 702 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -3333,7 +3338,7 @@ YY_RULE_SETUP YY_BREAK case 71: YY_RULE_SETUP -#line 702 "toke.l" +#line 707 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); @@ -3341,7 +3346,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 707 "toke.l" +#line 712 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3352,9 +3357,10 @@ YY_RULE_SETUP case 73: /* rule 73 can match eol */ YY_RULE_SETUP -#line 714 "toke.l" +#line 719 "toke.l" { if (YY_START == INSTR) { + /* XXX - better error message */ LEXTRACE("ERROR "); LEXRETURN(ERROR); /* line break in string */ } @@ -3367,7 +3373,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 726 "toke.l" +#line 732 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } @@ -3375,7 +3381,7 @@ YY_RULE_SETUP case 75: /* rule 75 can match eol */ YY_RULE_SETUP -#line 730 "toke.l" +#line 736 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; @@ -3385,7 +3391,7 @@ YY_RULE_SETUP case 76: /* rule 76 can match eol */ YY_RULE_SETUP -#line 736 "toke.l" +#line 742 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3402,7 +3408,7 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 750 "toke.l" +#line 756 "toke.l" { LEXTRACE("ERROR "); LEXRETURN(ERROR); @@ -3416,7 +3422,7 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): -#line 755 "toke.l" +#line 761 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3429,10 +3435,10 @@ case YY_STATE_EOF(GOTINC): YY_BREAK case 78: YY_RULE_SETUP -#line 765 "toke.l" +#line 771 "toke.l" ECHO; YY_BREAK -#line 3430 "toke.c" +#line 3436 "toke.c" case YY_END_OF_BUFFER: { @@ -4393,7 +4399,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 765 "toke.l" +#line 771 "toke.l" struct path_list { @@ -4404,6 +4410,7 @@ struct path_list { SLIST_HEAD(path_list_head, path_list); struct include_stack { + struct sudolinebuf line; YY_BUFFER_STATE bs; char *path; struct path_list_head more; /* more files in case of includedir */ @@ -4559,10 +4566,13 @@ init_lexer(void) if (idepth && !istack[idepth].keepopen) fclose(istack[idepth].bs->yy_input_file); sudoers_delete_buffer(istack[idepth].bs); + free(istack[idepth].line.buf); } free(istack); istack = NULL; istacksize = idepth = 0; + free(sudolinebuf.buf); + memset(&sudolinebuf, 0, sizeof(sudolinebuf)); sudolineno = 1; keepopen = false; sawspace = false; @@ -4740,6 +4750,7 @@ push_include(const char *opath, bool isdir) } /* Push the old (current) file and open the new one. */ istack[idepth].path = sudoers; /* push old path (and its ref) */ + istack[idepth].line = sudolinebuf; istack[idepth].bs = YY_CURRENT_BUFFER; istack[idepth].lineno = sudolineno; istack[idepth].keepopen = keepopen; @@ -4747,6 +4758,7 @@ push_include(const char *opath, bool isdir) sudolineno = 1; sudoers = path; sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE)); + memset(&sudolinebuf, 0, sizeof(sudolinebuf)); debug_return_bool(true); } @@ -4774,6 +4786,7 @@ pop_include(void) SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { + sudolinebuf.len = sudolinebuf.off = 0; rcstr_delref(sudoers); sudoers = pl->path; sudolineno = 1; @@ -4789,6 +4802,8 @@ pop_include(void) if (pl == NULL) { idepth--; sudoers_switch_to_buffer(istack[idepth].bs); + free(sudolinebuf.buf); + sudolinebuf = istack[idepth].line; rcstr_delref(sudoers); sudoers = istack[idepth].path; sudolineno = istack[idepth].lineno; @@ -4827,3 +4842,30 @@ sudoers_trace_print(const char *msg) } #endif /* TRACELEXER */ +static yy_size_t +sudoers_input(char *buf, yy_size_t max_size) +{ + size_t avail = sudolinebuf.len - sudolinebuf.off; + + /* Refill line buffer if needed. */ + if (avail == 0) { + sudolinebuf.off = 0; + sudolinebuf.len = getdelim(&sudolinebuf.buf, &sudolinebuf.size, + '\n', sudoersin); + if (sudolinebuf.len == (size_t)-1) { + if (ferror(sudoersin) && errno != EINTR) + YY_FATAL_ERROR("input in flex scanner failed"); + sudolinebuf.len = 0; + return 0; + } + avail = sudolinebuf.len; + } + + if (avail > max_size) + avail = max_size; + memcpy(buf, sudolinebuf.buf + sudolinebuf.off, avail); + sudolinebuf.off += avail; + + return avail; +} + diff --git a/plugins/sudoers/toke.h b/plugins/sudoers/toke.h index 6450fb783c..3573d624c5 100644 --- a/plugins/sudoers/toke.h +++ b/plugins/sudoers/toke.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2011-2013, 2015-2016 Todd C. Miller + * Copyright (c) 2011-2013, 2015-2016, 2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -19,6 +19,14 @@ #ifndef SUDOERS_TOKE_H #define SUDOERS_TOKE_H +struct sudolinebuf { + char *buf; /* line buffer */ + size_t size; /* size of buffer */ + size_t len; /* used length */ + size_t off; /* consumed length */ +}; +extern struct sudolinebuf sudolinebuf; + bool append(const char *, size_t); bool fill_args(const char *, size_t, int); bool fill_cmnd(const char *, size_t); diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 066373ddd6..a6ddbe2d72 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -53,6 +53,7 @@ int sudolineno; /* current sudoers line number. */ int last_token; /* last token that was parsed. */ char *sudoers; /* sudoers file being parsed. */ +struct sudolinebuf sudolinebuf; /* sudoers line being parsed. */ /* Default sudoers path, mode and owner (may be set via sudo.conf) */ const char *sudoers_file = _PATH_SUDOERS; @@ -65,6 +66,7 @@ static int prev_state; static int digest_type = -1; static bool pop_include(void); +static yy_size_t sudoers_input(char *buf, yy_size_t max_size); int (*trace_print)(const char *msg) = sudoers_trace_print; @@ -74,6 +76,9 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; } while (0) #define ECHO ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout)) + +#define YY_INPUT(buf, result, max_size) (result) = sudoers_input(buf, max_size) + %} HEX16 [0-9A-Fa-f]{1,4} @@ -713,6 +718,7 @@ sudoedit { <*>\r?\n { if (YY_START == INSTR) { + /* XXX - better error message */ LEXTRACE("ERROR "); LEXRETURN(ERROR); /* line break in string */ } @@ -739,7 +745,7 @@ sudoedit { BEGIN INITIAL; sudolineno++; continued = false; - } else if (!feof(yyin)) { + } else if (!feof(sudoersin)) { LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -771,6 +777,7 @@ struct path_list { SLIST_HEAD(path_list_head, path_list); struct include_stack { + struct sudolinebuf line; YY_BUFFER_STATE bs; char *path; struct path_list_head more; /* more files in case of includedir */ @@ -926,10 +933,13 @@ init_lexer(void) if (idepth && !istack[idepth].keepopen) fclose(istack[idepth].bs->yy_input_file); sudoers_delete_buffer(istack[idepth].bs); + free(istack[idepth].line.buf); } free(istack); istack = NULL; istacksize = idepth = 0; + free(sudolinebuf.buf); + memset(&sudolinebuf, 0, sizeof(sudolinebuf)); sudolineno = 1; keepopen = false; sawspace = false; @@ -1107,6 +1117,7 @@ push_include(const char *opath, bool isdir) } /* Push the old (current) file and open the new one. */ istack[idepth].path = sudoers; /* push old path (and its ref) */ + istack[idepth].line = sudolinebuf; istack[idepth].bs = YY_CURRENT_BUFFER; istack[idepth].lineno = sudolineno; istack[idepth].keepopen = keepopen; @@ -1114,6 +1125,7 @@ push_include(const char *opath, bool isdir) sudolineno = 1; sudoers = path; sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE)); + memset(&sudolinebuf, 0, sizeof(sudolinebuf)); debug_return_bool(true); } @@ -1141,6 +1153,7 @@ pop_include(void) SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { + sudolinebuf.len = sudolinebuf.off = 0; rcstr_delref(sudoers); sudoers = pl->path; sudolineno = 1; @@ -1156,6 +1169,8 @@ pop_include(void) if (pl == NULL) { idepth--; sudoers_switch_to_buffer(istack[idepth].bs); + free(sudolinebuf.buf); + sudolinebuf = istack[idepth].line; rcstr_delref(sudoers); sudoers = istack[idepth].path; sudolineno = istack[idepth].lineno; @@ -1193,3 +1208,30 @@ sudoers_trace_print(const char *msg) return 0; } #endif /* TRACELEXER */ + +static yy_size_t +sudoers_input(char *buf, yy_size_t max_size) +{ + size_t avail = sudolinebuf.len - sudolinebuf.off; + + /* Refill line buffer if needed. */ + if (avail == 0) { + sudolinebuf.off = 0; + sudolinebuf.len = getdelim(&sudolinebuf.buf, &sudolinebuf.size, + '\n', sudoersin); + if (sudolinebuf.len == (size_t)-1) { + if (ferror(sudoersin) && errno != EINTR) + YY_FATAL_ERROR("input in flex scanner failed"); + sudolinebuf.len = 0; + return 0; + } + avail = sudolinebuf.len; + } + + if (avail > max_size) + avail = max_size; + memcpy(buf, sudolinebuf.buf + sudolinebuf.off, avail); + sudolinebuf.off += avail; + + return avail; +} From 91cc68d7fdeaac9e31b6fec319389bdee6d7c9d3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Aug 2020 14:13:25 -0600 Subject: [PATCH 016/113] Keep track of the position of the current token for error messages. --- plugins/sudoers/gram.c | 60 +++--- plugins/sudoers/gram.y | 14 +- .../sudoers/regress/testsudoers/test11.out.ok | 2 + plugins/sudoers/toke.c | 202 ++++++++++-------- plugins/sudoers/toke.h | 2 + plugins/sudoers/toke.l | 34 ++- 6 files changed, 176 insertions(+), 138 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 9961490bb2..7aceb3969f 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -739,10 +739,22 @@ sudoerserror(const char *s) sudo_printf(SUDO_CONV_ERROR_MSG, _(fmt), sudoers, _(s), this_lineno); sudoers_setlocale(oldlocale, NULL); - /* Display the offending line if possible. */ + /* Display the offending line and token if possible. */ if (sudolinebuf.len != 0) { + char tildes[128]; + size_t tlen = 0; + sudo_printf(SUDO_CONV_ERROR_MSG, "%s%s", sudolinebuf.buf, sudolinebuf.buf[sudolinebuf.len - 1] == '\n' ? "" : "\n"); + if (sudolinebuf.toke_end > sudolinebuf.toke_start) { + tlen = sudolinebuf.toke_end - sudolinebuf.toke_start - 1; + if (tlen >= sizeof(tildes)) + tlen = sizeof(tildes) - 1; + memset(tildes, '~', tlen); + } + tildes[tlen] = '\0'; + sudo_printf(SUDO_CONV_ERROR_MSG, "%*s^%s\n", + (int)sudolinebuf.toke_start, "", tildes); } } #endif @@ -1171,13 +1183,9 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1117 "gram.c" +#line 1129 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ -#if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) -#else -static int yygrowstack() -#endif { unsigned int newsize; long sslen; @@ -1193,23 +1201,19 @@ static int yygrowstack() #ifdef SIZE_MAX #define YY_SIZE_MAX SIZE_MAX #else -#ifdef __STDC__ #define YY_SIZE_MAX 0xffffffffU -#else -#define YY_SIZE_MAX (unsigned int)0xffffffff -#endif #endif if (YY_SIZE_MAX / newsize < sizeof *newss) goto bail; sslen = yyssp - yyss; - newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) : - (short *)malloc(newsize * sizeof *newss); /* overflow check above */ + newss = yyss ? realloc(yyss, newsize * sizeof *newss) : + malloc(newsize * sizeof *newss); /* overflow check above */ if (newss == NULL) goto bail; yyss = newss; yyssp = newss + sslen; - newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) : - (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */ + newvs = yyvs ? realloc(yyvs, newsize * sizeof *newvs) : + malloc(newsize * sizeof *newvs); /* overflow check above */ if (newvs == NULL) goto bail; yyvs = newvs; @@ -1218,10 +1222,8 @@ static int yygrowstack() yysslim = yyss + newsize - 1; return 0; bail: - if (yyss) - free(yyss); - if (yyvs) - free(yyvs); + free(yyss); + free(yyvs); yyss = yyssp = NULL; yyvs = yyvsp = NULL; yystacksize = 0; @@ -1233,19 +1235,11 @@ static int yygrowstack() #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int -#if defined(__cplusplus) || defined(__STDC__) yyparse(void) -#else -yyparse() -#endif { int yym, yyn, yystate; #if YYDEBUG -#if defined(__cplusplus) || defined(__STDC__) const char *yys; -#else /* !(defined(__cplusplus) || defined(__STDC__)) */ - char *yys; -#endif /* !(defined(__cplusplus) || defined(__STDC__)) */ if ((yys = getenv("YYDEBUG"))) { @@ -2338,7 +2332,7 @@ case 120: } } break; -#line 2284 "gram.c" +#line 2278 "gram.c" } yyssp -= yym; yystate = *yyssp; @@ -2391,19 +2385,15 @@ to state %d\n", YYPREFIX, *yyssp, yystate); yyoverflow: yyerror("yacc stack overflow"); yyabort: - if (yyss) - free(yyss); - if (yyvs) - free(yyvs); + free(yyss); + free(yyvs); yyss = yyssp = NULL; yyvs = yyvsp = NULL; yystacksize = 0; return (1); yyaccept: - if (yyss) - free(yyss); - if (yyvs) - free(yyvs); + free(yyss); + free(yyvs); yyss = yyssp = NULL; yyvs = yyvsp = NULL; yystacksize = 0; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 71c70bed35..cb6cc64eab 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -953,10 +953,22 @@ sudoerserror(const char *s) sudo_printf(SUDO_CONV_ERROR_MSG, _(fmt), sudoers, _(s), this_lineno); sudoers_setlocale(oldlocale, NULL); - /* Display the offending line if possible. */ + /* Display the offending line and token if possible. */ if (sudolinebuf.len != 0) { + char tildes[128]; + size_t tlen = 0; + sudo_printf(SUDO_CONV_ERROR_MSG, "%s%s", sudolinebuf.buf, sudolinebuf.buf[sudolinebuf.len - 1] == '\n' ? "" : "\n"); + if (sudolinebuf.toke_end > sudolinebuf.toke_start) { + tlen = sudolinebuf.toke_end - sudolinebuf.toke_start - 1; + if (tlen >= sizeof(tildes)) + tlen = sizeof(tildes) - 1; + memset(tildes, '~', tlen); + } + tildes[tlen] = '\0'; + sudo_printf(SUDO_CONV_ERROR_MSG, "%*s^%s\n", + (int)sudolinebuf.toke_start, "", tildes); } } #endif diff --git a/plugins/sudoers/regress/testsudoers/test11.out.ok b/plugins/sudoers/regress/testsudoers/test11.out.ok index d88578b3e1..20d4da663a 100644 --- a/plugins/sudoers/regress/testsudoers/test11.out.ok +++ b/plugins/sudoers/regress/testsudoers/test11.out.ok @@ -2,6 +2,7 @@ Testing @include with garbage after the path name >>> sudoers: syntax error near line 1 <<< @include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp + ^ Parse error in sudoers near line 1. Entries for user root: @@ -17,6 +18,7 @@ Testing #include with garbage after the path name >>> sudoers: syntax error near line 1 <<< #include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp + ^ Parse error in sudoers near line 1. Entries for user root: diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index ee1f93ccef..802df69be7 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -2239,6 +2239,16 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; #define YY_INPUT(buf, result, max_size) (result) = sudoers_input(buf, max_size) +#define YY_USER_ACTION do { \ + sudolinebuf.toke_start = sudolinebuf.toke_end; \ + sudolinebuf.toke_end += sudoersleng; \ +} while (0); + +#define sudoersless(n) do { \ + sudolinebuf.toke_end = sudolinebuf.toke_start + (n); \ + yyless(n); \ +} while (0); + #define YY_NO_INPUT 1 @@ -2247,7 +2257,7 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; -#line 2245 "toke.c" +#line 2255 "toke.c" #define INITIAL 0 #define GOTDEFS 1 @@ -2464,9 +2474,9 @@ YY_DECL } { -#line 109 "toke.l" +#line 119 "toke.l" -#line 2464 "toke.c" +#line 2474 "toke.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -2526,7 +2536,7 @@ YY_DECL case 1: YY_RULE_SETUP -#line 110 "toke.l" +#line 120 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -2534,12 +2544,12 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 115 "toke.l" +#line 125 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 117 "toke.l" +#line 127 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -2551,7 +2561,7 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP -#line 126 "toke.l" +#line 136 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -2560,7 +2570,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 132 "toke.l" +#line 142 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -2568,7 +2578,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 137 "toke.l" +#line 147 "toke.l" { LEXTRACE("+= "); LEXRETURN('+'); @@ -2576,7 +2586,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 142 "toke.l" +#line 152 "toke.l" { LEXTRACE("-= "); LEXRETURN('-'); @@ -2584,7 +2594,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 147 "toke.l" +#line 157 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2594,7 +2604,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 154 "toke.l" +#line 164 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -2607,7 +2617,7 @@ YY_RULE_SETUP case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 163 "toke.l" +#line 173 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -2616,7 +2626,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 169 "toke.l" +#line 179 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -2651,7 +2661,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 201 "toke.l" +#line 211 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -2660,7 +2670,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 207 "toke.l" +#line 217 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -2671,7 +2681,7 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP -#line 215 "toke.l" +#line 225 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -2682,7 +2692,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 223 "toke.l" +#line 233 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -2694,17 +2704,17 @@ YY_RULE_SETUP case 16: /* rule 16 can match eol */ YY_RULE_SETUP -#line 231 "toke.l" +#line 241 "toke.l" { BEGIN INITIAL; - yyless(0); + sudoersless(0); yy_set_bol(0); LEXRETURN(COMMAND); } /* end of command line args */ YY_BREAK case 17: YY_RULE_SETUP -#line 238 "toke.l" +#line 248 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2715,7 +2725,7 @@ YY_RULE_SETUP case 18: YY_RULE_SETUP -#line 246 "toke.l" +#line 256 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -2728,12 +2738,12 @@ YY_RULE_SETUP LEXRETURN(DIGEST); } BEGIN INITIAL; - yyless(sudoersleng); + sudoersless(sudoersleng); } /* hex digest */ YY_BREAK case 19: YY_RULE_SETUP -#line 261 "toke.l" +#line 271 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -2753,12 +2763,12 @@ YY_RULE_SETUP LEXRETURN(DIGEST); } BEGIN INITIAL; - yyless(sudoersleng); + sudoersless(sudoersleng); } /* base64 digest */ YY_BREAK case 20: YY_RULE_SETUP -#line 283 "toke.l" +#line 293 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2772,7 +2782,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 294 "toke.l" +#line 304 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2787,7 +2797,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 305 "toke.l" +#line 315 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2795,7 +2805,7 @@ YY_RULE_SETUP } /* only consume #include */ - yyless(sizeof("#include") - 1); + sudoersless(sizeof("#include") - 1); yy_set_bol(0); BEGIN GOTINC; @@ -2806,7 +2816,7 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 320 "toke.l" +#line 330 "toke.l" { if (continued) { LEXTRACE("ERROR "); @@ -2814,7 +2824,7 @@ YY_RULE_SETUP } /* only consume #includedir */ - yyless(sizeof("#includedir") - 1); + sudoersless(sizeof("#includedir") - 1); yy_set_bol(0); BEGIN GOTINC; @@ -2824,7 +2834,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 335 "toke.l" +#line 345 "toke.l" { char deftype; int n; @@ -2844,19 +2854,23 @@ YY_RULE_SETUP BEGIN GOTDEFS; switch (deftype) { case ':': - yyless(n); + sudolinebuf.toke_end = + sudolinebuf.toke_start + n; + sudoersless(n); LEXTRACE("DEFAULTS_USER "); LEXRETURN(DEFAULTS_USER); case '>': - yyless(n); + sudolinebuf.toke_end = + sudolinebuf.toke_start + n; + sudoersless(n); LEXTRACE("DEFAULTS_RUNAS "); LEXRETURN(DEFAULTS_RUNAS); case '@': - yyless(n); + sudoersless(n); LEXTRACE("DEFAULTS_HOST "); LEXRETURN(DEFAULTS_HOST); case '!': - yyless(n); + sudoersless(n); LEXTRACE("DEFAULTS_CMND "); LEXRETURN(DEFAULTS_CMND); default: @@ -2867,7 +2881,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 375 "toke.l" +#line 389 "toke.l" { int n; @@ -2896,7 +2910,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 401 "toke.l" +#line 415 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2905,7 +2919,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 407 "toke.l" +#line 421 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2914,7 +2928,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 413 "toke.l" +#line 427 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2922,7 +2936,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 418 "toke.l" +#line 432 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2930,7 +2944,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 423 "toke.l" +#line 437 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2938,7 +2952,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 428 "toke.l" +#line 442 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2946,7 +2960,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 433 "toke.l" +#line 447 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2954,7 +2968,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 438 "toke.l" +#line 452 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2962,7 +2976,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 443 "toke.l" +#line 457 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2970,7 +2984,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 448 "toke.l" +#line 462 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2978,7 +2992,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 453 "toke.l" +#line 467 "toke.l" { LEXTRACE("MAIL "); LEXRETURN(MAIL); @@ -2986,7 +3000,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 458 "toke.l" +#line 472 "toke.l" { LEXTRACE("NOMAIL "); LEXRETURN(NOMAIL); @@ -2994,7 +3008,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 463 "toke.l" +#line 477 "toke.l" { LEXTRACE("FOLLOW "); LEXRETURN(FOLLOWLNK); @@ -3002,7 +3016,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 468 "toke.l" +#line 482 "toke.l" { LEXTRACE("NOFOLLOW "); LEXRETURN(NOFOLLOWLNK); @@ -3010,7 +3024,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 473 "toke.l" +#line 487 "toke.l" { /* empty group or netgroup */ LEXTRACE("ERROR "); @@ -3019,7 +3033,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 479 "toke.l" +#line 493 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3030,7 +3044,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 487 "toke.l" +#line 501 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3041,7 +3055,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 495 "toke.l" +#line 509 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3051,7 +3065,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 502 "toke.l" +#line 516 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3061,7 +3075,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 509 "toke.l" +#line 523 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -3075,7 +3089,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 520 "toke.l" +#line 534 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -3089,7 +3103,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 531 "toke.l" +#line 545 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); @@ -3098,7 +3112,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 537 "toke.l" +#line 551 "toke.l" { LEXTRACE("CMND_TIMEOUT "); LEXRETURN(CMND_TIMEOUT); @@ -3106,7 +3120,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 542 "toke.l" +#line 556 "toke.l" { LEXTRACE("NOTBEFORE "); LEXRETURN(NOTBEFORE); @@ -3114,7 +3128,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 547 "toke.l" +#line 561 "toke.l" { LEXTRACE("NOTAFTER "); LEXRETURN(NOTAFTER); @@ -3122,7 +3136,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 552 "toke.l" +#line 566 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3134,7 +3148,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 561 "toke.l" +#line 575 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3146,7 +3160,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 569 "toke.l" +#line 583 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3158,7 +3172,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 578 "toke.l" +#line 592 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3170,7 +3184,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 587 "toke.l" +#line 601 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3181,7 +3195,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 595 "toke.l" +#line 609 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3193,7 +3207,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 604 "toke.l" +#line 618 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3203,7 +3217,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 611 "toke.l" +#line 625 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3213,7 +3227,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 618 "toke.l" +#line 632 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3223,7 +3237,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 625 "toke.l" +#line 639 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3233,7 +3247,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 632 "toke.l" +#line 646 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3243,7 +3257,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 639 "toke.l" +#line 653 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3261,7 +3275,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 654 "toke.l" +#line 668 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3271,7 +3285,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 661 "toke.l" +#line 675 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -3283,7 +3297,7 @@ YY_RULE_SETUP case 65: YY_RULE_SETUP -#line 670 "toke.l" +#line 684 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) @@ -3295,7 +3309,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 679 "toke.l" +#line 693 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3306,7 +3320,7 @@ YY_RULE_SETUP case 67: YY_RULE_SETUP -#line 687 "toke.l" +#line 701 "toke.l" { LEXTRACE("( "); LEXRETURN('('); @@ -3314,7 +3328,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 692 "toke.l" +#line 706 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); @@ -3322,7 +3336,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 697 "toke.l" +#line 711 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -3330,7 +3344,7 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 702 "toke.l" +#line 716 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -3338,7 +3352,7 @@ YY_RULE_SETUP YY_BREAK case 71: YY_RULE_SETUP -#line 707 "toke.l" +#line 721 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); @@ -3346,7 +3360,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 712 "toke.l" +#line 726 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3357,7 +3371,7 @@ YY_RULE_SETUP case 73: /* rule 73 can match eol */ YY_RULE_SETUP -#line 719 "toke.l" +#line 733 "toke.l" { if (YY_START == INSTR) { /* XXX - better error message */ @@ -3373,7 +3387,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 732 "toke.l" +#line 746 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } @@ -3381,7 +3395,7 @@ YY_RULE_SETUP case 75: /* rule 75 can match eol */ YY_RULE_SETUP -#line 736 "toke.l" +#line 750 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; @@ -3391,7 +3405,7 @@ YY_RULE_SETUP case 76: /* rule 76 can match eol */ YY_RULE_SETUP -#line 742 "toke.l" +#line 756 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3408,7 +3422,7 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 756 "toke.l" +#line 770 "toke.l" { LEXTRACE("ERROR "); LEXRETURN(ERROR); @@ -3422,7 +3436,7 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): -#line 761 "toke.l" +#line 775 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3435,10 +3449,10 @@ case YY_STATE_EOF(GOTINC): YY_BREAK case 78: YY_RULE_SETUP -#line 771 "toke.l" +#line 785 "toke.l" ECHO; YY_BREAK -#line 3436 "toke.c" +#line 3450 "toke.c" case YY_END_OF_BUFFER: { @@ -4399,7 +4413,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 771 "toke.l" +#line 785 "toke.l" struct path_list { @@ -4786,6 +4800,7 @@ pop_include(void) SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; sudolinebuf.len = sudolinebuf.off = 0; rcstr_delref(sudoers); sudoers = pl->path; @@ -4849,6 +4864,7 @@ sudoers_input(char *buf, yy_size_t max_size) /* Refill line buffer if needed. */ if (avail == 0) { + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; sudolinebuf.off = 0; sudolinebuf.len = getdelim(&sudolinebuf.buf, &sudolinebuf.size, '\n', sudoersin); diff --git a/plugins/sudoers/toke.h b/plugins/sudoers/toke.h index 3573d624c5..fb1302558d 100644 --- a/plugins/sudoers/toke.h +++ b/plugins/sudoers/toke.h @@ -24,6 +24,8 @@ struct sudolinebuf { size_t size; /* size of buffer */ size_t len; /* used length */ size_t off; /* consumed length */ + size_t toke_start; /* starting column of current token */ + size_t toke_end; /* ending column of current token */ }; extern struct sudolinebuf sudolinebuf; diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index a6ddbe2d72..9bfab71786 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -79,6 +79,16 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; #define YY_INPUT(buf, result, max_size) (result) = sudoers_input(buf, max_size) +#define YY_USER_ACTION do { \ + sudolinebuf.toke_start = sudolinebuf.toke_end; \ + sudolinebuf.toke_end += sudoersleng; \ +} while (0); + +#define sudoersless(n) do { \ + sudolinebuf.toke_end = sudolinebuf.toke_start + (n); \ + yyless(n); \ +} while (0); + %} HEX16 [0-9A-Fa-f]{1,4} @@ -230,7 +240,7 @@ DEFVAR [a-z_]+ [#:\,=\r\n] { BEGIN INITIAL; - yyless(0); + sudoersless(0); yy_set_bol(0); LEXRETURN(COMMAND); } /* end of command line args */ @@ -255,7 +265,7 @@ DEFVAR [a-z_]+ LEXRETURN(DIGEST); } BEGIN INITIAL; - yyless(sudoersleng); + sudoersless(sudoersleng); } /* hex digest */ [A-Za-z0-9\+/=]+ { @@ -277,7 +287,7 @@ DEFVAR [a-z_]+ LEXRETURN(DIGEST); } BEGIN INITIAL; - yyless(sudoersleng); + sudoersless(sudoersleng); } /* base64 digest */ @include { @@ -309,7 +319,7 @@ DEFVAR [a-z_]+ } /* only consume #include */ - yyless(sizeof("#include") - 1); + sudoersless(sizeof("#include") - 1); yy_set_bol(0); BEGIN GOTINC; @@ -324,7 +334,7 @@ DEFVAR [a-z_]+ } /* only consume #includedir */ - yyless(sizeof("#includedir") - 1); + sudoersless(sizeof("#includedir") - 1); yy_set_bol(0); BEGIN GOTINC; @@ -351,19 +361,23 @@ DEFVAR [a-z_]+ BEGIN GOTDEFS; switch (deftype) { case ':': - yyless(n); + sudolinebuf.toke_end = + sudolinebuf.toke_start + n; + sudoersless(n); LEXTRACE("DEFAULTS_USER "); LEXRETURN(DEFAULTS_USER); case '>': - yyless(n); + sudolinebuf.toke_end = + sudolinebuf.toke_start + n; + sudoersless(n); LEXTRACE("DEFAULTS_RUNAS "); LEXRETURN(DEFAULTS_RUNAS); case '@': - yyless(n); + sudoersless(n); LEXTRACE("DEFAULTS_HOST "); LEXRETURN(DEFAULTS_HOST); case '!': - yyless(n); + sudoersless(n); LEXTRACE("DEFAULTS_CMND "); LEXRETURN(DEFAULTS_CMND); default: @@ -1153,6 +1167,7 @@ pop_include(void) SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; sudolinebuf.len = sudolinebuf.off = 0; rcstr_delref(sudoers); sudoers = pl->path; @@ -1216,6 +1231,7 @@ sudoers_input(char *buf, yy_size_t max_size) /* Refill line buffer if needed. */ if (avail == 0) { + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; sudolinebuf.off = 0; sudolinebuf.len = getdelim(&sudolinebuf.buf, &sudolinebuf.size, '\n', sudoersin); From 7c342e586219ee03ad12291adec7b38a9a92edb0 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Aug 2020 14:20:21 -0600 Subject: [PATCH 017/113] Let the sudoers parser recover after a parse error. We currently just discard the line with the error. --- plugins/sudoers/file.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/sudoers/file.c b/plugins/sudoers/file.c index 2fcd3938c9..7d04ed3b59 100644 --- a/plugins/sudoers/file.c +++ b/plugins/sudoers/file.c @@ -91,6 +91,7 @@ sudo_file_parse(struct sudo_nss *nss) { debug_decl(sudo_file_close, SUDOERS_DEBUG_NSS); struct sudo_file_handle *handle = nss->handle; + int error; if (handle == NULL || handle->fp == NULL) { sudo_debug_printf(SUDO_DEBUG_ERROR, "%s: called with NULL %s", @@ -99,14 +100,19 @@ sudo_file_parse(struct sudo_nss *nss) } sudoersin = handle->fp; - if (sudoersparse() != 0 || parse_error) { + error = sudoersparse(); + if (error || parse_error) { if (errorlineno != -1) { - log_warningx(SLOG_SEND_MAIL, N_("parse error in %s near line %d"), - errorfile, errorlineno); + log_warningx(SLOG_SEND_MAIL|SLOG_NO_STDERR, + N_("parse error in %s near line %d"), errorfile, errorlineno); } else { - log_warningx(SLOG_SEND_MAIL, N_("parse error in %s"), errorfile); + log_warningx(SLOG_SEND_MAIL|SLOG_NO_STDERR, + N_("parse error in %s"), errorfile); + } + if (error) { + /* unrecoverable error */ + debug_return_ptr(NULL); } - debug_return_ptr(NULL); } /* Move parsed sudoers policy to nss handle. */ From 3235e4353c95256be41c9d9d4af9d413aced5e5d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Aug 2020 14:20:45 -0600 Subject: [PATCH 018/113] Display more specific parser error messages when possible. --- plugins/sudoers/defaults.c | 14 +- plugins/sudoers/gram.c | 16 +- plugins/sudoers/gram.y | 12 +- plugins/sudoers/parse.c | 2 +- plugins/sudoers/regress/sudoers/test1.out.ok | 2 +- plugins/sudoers/regress/sudoers/test10.out.ok | 2 +- plugins/sudoers/regress/sudoers/test11.out.ok | 1 - plugins/sudoers/regress/sudoers/test12.out.ok | 1 - plugins/sudoers/regress/sudoers/test13.out.ok | 1 - plugins/sudoers/regress/sudoers/test14.out.ok | 2 +- plugins/sudoers/regress/sudoers/test15.out.ok | 2 +- plugins/sudoers/regress/sudoers/test16.out.ok | 2 +- plugins/sudoers/regress/sudoers/test17.out.ok | 2 +- plugins/sudoers/regress/sudoers/test18.out.ok | 2 +- .../sudoers/regress/sudoers/test18.toke.ok | 4 +- plugins/sudoers/regress/sudoers/test19.out.ok | 2 +- plugins/sudoers/regress/sudoers/test2.out.ok | 2 +- plugins/sudoers/regress/sudoers/test20.out.ok | 2 +- plugins/sudoers/regress/sudoers/test21.out.ok | 2 +- plugins/sudoers/regress/sudoers/test22.out.ok | 2 +- plugins/sudoers/regress/sudoers/test23.out.ok | 2 +- plugins/sudoers/regress/sudoers/test3.out.ok | 2 +- plugins/sudoers/regress/sudoers/test4.out.ok | 1 - plugins/sudoers/regress/sudoers/test4.toke.ok | 2 +- plugins/sudoers/regress/sudoers/test5.out.ok | 1 - plugins/sudoers/regress/sudoers/test5.toke.ok | 2 +- plugins/sudoers/regress/sudoers/test6.out.ok | 2 +- plugins/sudoers/regress/sudoers/test7.out.ok | 1 - plugins/sudoers/regress/sudoers/test7.toke.ok | 12 +- plugins/sudoers/regress/sudoers/test8.out.ok | 1 - plugins/sudoers/regress/sudoers/test8.toke.ok | 2 +- plugins/sudoers/regress/sudoers/test9.out.ok | 2 +- .../sudoers/regress/testsudoers/test1.out.ok | 2 +- .../sudoers/regress/testsudoers/test10.out.ok | 8 +- .../sudoers/regress/testsudoers/test11.out.ok | 6 +- .../sudoers/regress/testsudoers/test2.out.ok | 4 +- .../sudoers/regress/testsudoers/test3.out.ok | 8 +- .../sudoers/regress/testsudoers/test4.out.ok | 1 - .../sudoers/regress/testsudoers/test5.out.ok | 2 - .../sudoers/regress/testsudoers/test6.out.ok | 2 +- .../sudoers/regress/testsudoers/test7.out.ok | 2 +- .../sudoers/regress/testsudoers/test8.out.ok | 4 +- .../sudoers/regress/testsudoers/test9.out.ok | 2 +- plugins/sudoers/regress/visudo/test2.err.ok | 2 +- plugins/sudoers/regress/visudo/test3.err.ok | 4 +- plugins/sudoers/regress/visudo/test8.err.ok | 2 +- plugins/sudoers/regress/visudo/test8.sh | 2 +- plugins/sudoers/testsudoers.c | 23 +-- plugins/sudoers/toke.c | 188 +++++++++--------- plugins/sudoers/toke.l | 48 +++-- plugins/sudoers/visudo.c | 10 +- 51 files changed, 221 insertions(+), 204 deletions(-) diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 64f17bb5a2..2c477e8143 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -180,7 +180,7 @@ find_default(const char *name, const char *file, int lineno, bool quiet) } if (!quiet && !def_ignore_unknown_defaults) { if (lineno > 0) { - sudo_warnx(U_("%s:%d unknown defaults entry \"%s\""), + sudo_warnx(U_("%s:%d: unknown defaults entry \"%s\""), file, lineno, name); } else { sudo_warnx(U_("%s: unknown defaults entry \"%s\""), @@ -204,7 +204,7 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, int rc; debug_decl(parse_default_entry, SUDOERS_DEBUG_DEFAULTS); - sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %s:%d %s=%s op=%d", + sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %s:%d: %s=%s op=%d", __func__, file, lineno, def->name, val ? val : "", op); /* @@ -229,7 +229,7 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, if (!ISSET(def->type, T_BOOL) || op != false) { if (!quiet) { if (lineno > 0) { - sudo_warnx(U_("%s:%d no value specified for \"%s\""), + sudo_warnx(U_("%s:%d: no value specified for \"%s\""), file, lineno, def->name); } else { sudo_warnx(U_("%s: no value specified for \"%s\""), @@ -252,7 +252,7 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, if (ISSET(def->type, T_PATH) && val != NULL && *val != '/') { if (!quiet) { if (lineno > 0) { - sudo_warnx(U_("%s:%d values for \"%s\" must start with a '/'"), + sudo_warnx(U_("%s:%d: values for \"%s\" must start with a '/'"), file, lineno, def->name); } else { sudo_warnx(U_("%s: values for \"%s\" must start with a '/'"), @@ -277,7 +277,7 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, if (val != NULL) { if (!quiet) { if (lineno > 0) { - sudo_warnx(U_("%s:%d option \"%s\" does not take a value"), + sudo_warnx(U_("%s:%d: option \"%s\" does not take a value"), file, lineno, def->name); } else { sudo_warnx(U_("%s: option \"%s\" does not take a value"), @@ -305,7 +305,7 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, default: if (!quiet) { if (lineno > 0) { - sudo_warnx(U_("%s:%d invalid Defaults type 0x%x for option \"%s\""), + sudo_warnx(U_("%s:%d: invalid Defaults type 0x%x for option \"%s\""), file, lineno, def->type, def->name); } else { sudo_warnx(U_("%s: invalid Defaults type 0x%x for option \"%s\""), @@ -318,7 +318,7 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, if (rc == false) { if (!quiet) { if (lineno > 0) { - sudo_warnx(U_("%s:%d value \"%s\" is invalid for option \"%s\""), + sudo_warnx(U_("%s:%d: value \"%s\" is invalid for option \"%s\""), file, lineno, val, def->name); } else { sudo_warnx(U_("%s: value \"%s\" is invalid for option \"%s\""), diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 7aceb3969f..b4a638ded6 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -719,8 +719,16 @@ int yyparse(void); void sudoerserror(const char *s) { + static int last_error_line = -1; + static char *last_error_file = NULL; debug_decl(sudoerserror, SUDOERS_DEBUG_PARSER); + /* Avoid displaying a generic error after a more specific one. */ + if (last_error_file == sudoers && last_error_line == this_lineno) + debug_return; + last_error_file = sudoers; + last_error_line = this_lineno; + /* Save the line the first error occurred on. */ if (errorlineno == -1) { errorlineno = this_lineno; @@ -731,12 +739,12 @@ sudoerserror(const char *s) LEXTRACE("<*> "); #ifndef TRACELEXER if (trace_print == NULL || trace_print == sudoers_trace_print) { - const char fmt[] = ">>> %s: %s near line %d <<<\n"; int oldlocale; /* Warnings are displayed in the user's locale. */ sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); - sudo_printf(SUDO_CONV_ERROR_MSG, _(fmt), sudoers, _(s), this_lineno); + sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d: %s\n"), sudoers, + this_lineno, _(s)); sudoers_setlocale(oldlocale, NULL); /* Display the offending line and token if possible. */ @@ -1183,7 +1191,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1129 "gram.c" +#line 1137 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -2332,7 +2340,7 @@ case 120: } } break; -#line 2278 "gram.c" +#line 2286 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index cb6cc64eab..e78bf7fa29 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -933,8 +933,16 @@ group : ALIAS { void sudoerserror(const char *s) { + static int last_error_line = -1; + static char *last_error_file = NULL; debug_decl(sudoerserror, SUDOERS_DEBUG_PARSER); + /* Avoid displaying a generic error after a more specific one. */ + if (last_error_file == sudoers && last_error_line == this_lineno) + debug_return; + last_error_file = sudoers; + last_error_line = this_lineno; + /* Save the line the first error occurred on. */ if (errorlineno == -1) { errorlineno = this_lineno; @@ -945,12 +953,12 @@ sudoerserror(const char *s) LEXTRACE("<*> "); #ifndef TRACELEXER if (trace_print == NULL || trace_print == sudoers_trace_print) { - const char fmt[] = ">>> %s: %s near line %d <<<\n"; int oldlocale; /* Warnings are displayed in the user's locale. */ sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); - sudo_printf(SUDO_CONV_ERROR_MSG, _(fmt), sudoers, _(s), this_lineno); + sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d: %s\n"), sudoers, + this_lineno, _(s)); sudoers_setlocale(oldlocale, NULL); /* Display the offending line and token if possible. */ diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index 06f239e24b..d4f9ca4357 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -161,7 +161,7 @@ sudoers_lookup_check(struct sudo_nss *nss, struct passwd *pw, *matching_cs = cs; *defs = &priv->defaults; sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "userspec matched @ %s:%d %s", + "userspec matched @ %s:%d: %s", us->file ? us->file : "???", us->lineno, cmnd_match ? "allowed" : "denied"); debug_return_int(cmnd_match); diff --git a/plugins/sudoers/regress/sudoers/test1.out.ok b/plugins/sudoers/regress/sudoers/test1.out.ok index 8693cea0ec..3d6bab4ef6 100644 --- a/plugins/sudoers/regress/sudoers/test1.out.ok +++ b/plugins/sudoers/regress/sudoers/test1.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK user1 ALL = LOG_INPUT: LOG_OUTPUT: /usr/bin/su - : ALL = NOLOG_INPUT: NOLOG_OUTPUT: /usr/bin/id user2 ALL = SETENV: NOEXEC: NOPASSWD: /usr/bin/vi : ALL = NOSETENV: EXEC: PASSWD: /usr/bin/echo diff --git a/plugins/sudoers/regress/sudoers/test10.out.ok b/plugins/sudoers/regress/sudoers/test10.out.ok index 40c742df99..5af5c531f3 100644 --- a/plugins/sudoers/regress/sudoers/test10.out.ok +++ b/plugins/sudoers/regress/sudoers/test10.out.ok @@ -1,2 +1,2 @@ -Parses OK. +Parses OK diff --git a/plugins/sudoers/regress/sudoers/test11.out.ok b/plugins/sudoers/regress/sudoers/test11.out.ok index 9b2e9d6a9c..8b13789179 100644 --- a/plugins/sudoers/regress/sudoers/test11.out.ok +++ b/plugins/sudoers/regress/sudoers/test11.out.ok @@ -1,2 +1 @@ -Parse error in sudoers near line 1. diff --git a/plugins/sudoers/regress/sudoers/test12.out.ok b/plugins/sudoers/regress/sudoers/test12.out.ok index 9b2e9d6a9c..8b13789179 100644 --- a/plugins/sudoers/regress/sudoers/test12.out.ok +++ b/plugins/sudoers/regress/sudoers/test12.out.ok @@ -1,2 +1 @@ -Parse error in sudoers near line 1. diff --git a/plugins/sudoers/regress/sudoers/test13.out.ok b/plugins/sudoers/regress/sudoers/test13.out.ok index 9b2e9d6a9c..8b13789179 100644 --- a/plugins/sudoers/regress/sudoers/test13.out.ok +++ b/plugins/sudoers/regress/sudoers/test13.out.ok @@ -1,2 +1 @@ -Parse error in sudoers near line 1. diff --git a/plugins/sudoers/regress/sudoers/test14.out.ok b/plugins/sudoers/regress/sudoers/test14.out.ok index 2ce40af7ef..05d0a20dbe 100644 --- a/plugins/sudoers/regress/sudoers/test14.out.ok +++ b/plugins/sudoers/regress/sudoers/test14.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Cmnd_Alias LS = sha224:d06a2617c98d377c250edd470fd5e576327748d82915d6e33b5f8db1, sha224:d7910e1967342b4605cb73a550944044c631cd3514001900966962ac /bin/ls Cmnd_Alias SH = sha256:hOtoe/iK6SlGg7w4BfZBBdSsXjUmTJ5+ts51yjh7vkM=, sha256:1IXHRCxXgSnIEnb+xBz4PAfWaPdXIBWKFF0QCwxJ5G4= /bin/sh diff --git a/plugins/sudoers/regress/sudoers/test15.out.ok b/plugins/sudoers/regress/sudoers/test15.out.ok index fb43c8cd9d..b230cf2720 100644 --- a/plugins/sudoers/regress/sudoers/test15.out.ok +++ b/plugins/sudoers/regress/sudoers/test15.out.ok @@ -1,3 +1,3 @@ -Parses OK. +Parses OK user ALL = sudoedit /etc/motd diff --git a/plugins/sudoers/regress/sudoers/test16.out.ok b/plugins/sudoers/regress/sudoers/test16.out.ok index f541242634..7b8c918ce0 100644 --- a/plugins/sudoers/regress/sudoers/test16.out.ok +++ b/plugins/sudoers/regress/sudoers/test16.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Cmnd_Alias EDIT = sudoedit /etc/motd diff --git a/plugins/sudoers/regress/sudoers/test17.out.ok b/plugins/sudoers/regress/sudoers/test17.out.ok index 4a2c26da9c..f0c8086bc5 100644 --- a/plugins/sudoers/regress/sudoers/test17.out.ok +++ b/plugins/sudoers/regress/sudoers/test17.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Defaults command_timeout=2d8h10m59s diff --git a/plugins/sudoers/regress/sudoers/test18.out.ok b/plugins/sudoers/regress/sudoers/test18.out.ok index ace1ca6596..eefdc3a2cd 100644 --- a/plugins/sudoers/regress/sudoers/test18.out.ok +++ b/plugins/sudoers/regress/sudoers/test18.out.ok @@ -1,4 +1,4 @@ -Parse error in sudoers near line 4 (problem with defaults entries). +Problem with defaults entries Defaults command_timeout=2d8h10m59ss Defaults:root command_timeout=15f diff --git a/plugins/sudoers/regress/sudoers/test18.toke.ok b/plugins/sudoers/regress/sudoers/test18.toke.ok index 05fbaef0f5..66ffa2eb57 100644 --- a/plugins/sudoers/regress/sudoers/test18.toke.ok +++ b/plugins/sudoers/regress/sudoers/test18.toke.ok @@ -6,5 +6,5 @@ WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND -testsudoers: sudoers:2 value "2d8h10m59ss" is invalid for option "command_timeout" -testsudoers: sudoers:3 value "15f" is invalid for option "command_timeout" +testsudoers: sudoers:2: value "2d8h10m59ss" is invalid for option "command_timeout" +testsudoers: sudoers:3: value "15f" is invalid for option "command_timeout" diff --git a/plugins/sudoers/regress/sudoers/test19.out.ok b/plugins/sudoers/regress/sudoers/test19.out.ok index 8d7974ef56..dacfefd62a 100644 --- a/plugins/sudoers/regress/sudoers/test19.out.ok +++ b/plugins/sudoers/regress/sudoers/test19.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK user0 ALL = NOTBEFORE=20170214083000Z NOTAFTER=20170301083000Z /usr/bin/id, /bin/ls user1 ALL = NOTBEFORE=20170214083000Z /usr/bin/id, NOTAFTER=20170301083000Z /bin/ls diff --git a/plugins/sudoers/regress/sudoers/test2.out.ok b/plugins/sudoers/regress/sudoers/test2.out.ok index be5e8f3be4..c99f6d0609 100644 --- a/plugins/sudoers/regress/sudoers/test2.out.ok +++ b/plugins/sudoers/regress/sudoers/test2.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Defaults@somehost set_home Defaults@quoted\" set_home diff --git a/plugins/sudoers/regress/sudoers/test20.out.ok b/plugins/sudoers/regress/sudoers/test20.out.ok index 882af0ddf7..260be81e32 100644 --- a/plugins/sudoers/regress/sudoers/test20.out.ok +++ b/plugins/sudoers/regress/sudoers/test20.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Defaults lecture Defaults !lecture diff --git a/plugins/sudoers/regress/sudoers/test21.out.ok b/plugins/sudoers/regress/sudoers/test21.out.ok index 630fa6b5e1..136ec64c3b 100644 --- a/plugins/sudoers/regress/sudoers/test21.out.ok +++ b/plugins/sudoers/regress/sudoers/test21.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Defaults syslog Defaults !syslog diff --git a/plugins/sudoers/regress/sudoers/test22.out.ok b/plugins/sudoers/regress/sudoers/test22.out.ok index ab43a931f7..7117e1818d 100644 --- a/plugins/sudoers/regress/sudoers/test22.out.ok +++ b/plugins/sudoers/regress/sudoers/test22.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK user1 ALL = (root) ALL user2 ALL = (root) ALL diff --git a/plugins/sudoers/regress/sudoers/test23.out.ok b/plugins/sudoers/regress/sudoers/test23.out.ok index b22b6c75f2..fe6e4158ad 100644 --- a/plugins/sudoers/regress/sudoers/test23.out.ok +++ b/plugins/sudoers/regress/sudoers/test23.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Defaults env_check="COLORTERM LANG LANGUAGE LC_* LINGUAS" Defaults env_check+="TERM TZ" diff --git a/plugins/sudoers/regress/sudoers/test3.out.ok b/plugins/sudoers/regress/sudoers/test3.out.ok index 566aec18e2..7f620c4d73 100644 --- a/plugins/sudoers/regress/sudoers/test3.out.ok +++ b/plugins/sudoers/regress/sudoers/test3.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Defaults:FOO env_reset Defaults:foo, bar env_reset diff --git a/plugins/sudoers/regress/sudoers/test4.out.ok b/plugins/sudoers/regress/sudoers/test4.out.ok index 3552d3bcc9..de27db3a89 100644 --- a/plugins/sudoers/regress/sudoers/test4.out.ok +++ b/plugins/sudoers/regress/sudoers/test4.out.ok @@ -1,4 +1,3 @@ -Parse error in sudoers near line 7. User_Alias BAR = bar User_Alias FOO = foo diff --git a/plugins/sudoers/regress/sudoers/test4.toke.ok b/plugins/sudoers/regress/sudoers/test4.toke.ok index a225792972..3cb47070fa 100644 --- a/plugins/sudoers/regress/sudoers/test4.toke.ok +++ b/plugins/sudoers/regress/sudoers/test4.toke.ok @@ -2,4 +2,4 @@ USERALIAS ALIAS = WORD(5) : ALIAS = WORD(5) # -USERALIAS ALIAS = WORD(5) ERROR <*> ALIAS = WORD(5) +USERALIAS ALIAS = WORD(5) <*> ERROR ALIAS = WORD(5) diff --git a/plugins/sudoers/regress/sudoers/test5.out.ok b/plugins/sudoers/regress/sudoers/test5.out.ok index 3cd2ec8bfd..8b13789179 100644 --- a/plugins/sudoers/regress/sudoers/test5.out.ok +++ b/plugins/sudoers/regress/sudoers/test5.out.ok @@ -1,2 +1 @@ -Parse error in sudoers near line 2. diff --git a/plugins/sudoers/regress/sudoers/test5.toke.ok b/plugins/sudoers/regress/sudoers/test5.toke.ok index 9376455543..caed66b32f 100644 --- a/plugins/sudoers/regress/sudoers/test5.toke.ok +++ b/plugins/sudoers/regress/sudoers/test5.toke.ok @@ -1,3 +1,3 @@ # -USERALIAS ALIAS = BEGINSTR ENDSTR ERROR <*> +USERALIAS ALIAS = BEGINSTR ENDSTR <*> ERROR BEGINSTR ENDSTR ERROR <*> ALL = ALL diff --git a/plugins/sudoers/regress/sudoers/test6.out.ok b/plugins/sudoers/regress/sudoers/test6.out.ok index ccc1627b1d..73b8fe06ff 100644 --- a/plugins/sudoers/regress/sudoers/test6.out.ok +++ b/plugins/sudoers/regress/sudoers/test6.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Defaults:#123 set_home Defaults>#123 set_home diff --git a/plugins/sudoers/regress/sudoers/test7.out.ok b/plugins/sudoers/regress/sudoers/test7.out.ok index 3cd2ec8bfd..8b13789179 100644 --- a/plugins/sudoers/regress/sudoers/test7.out.ok +++ b/plugins/sudoers/regress/sudoers/test7.out.ok @@ -1,2 +1 @@ -Parse error in sudoers near line 2. diff --git a/plugins/sudoers/regress/sudoers/test7.toke.ok b/plugins/sudoers/regress/sudoers/test7.toke.ok index a5bf018738..b0da147c31 100644 --- a/plugins/sudoers/regress/sudoers/test7.toke.ok +++ b/plugins/sudoers/regress/sudoers/test7.toke.ok @@ -1,7 +1,7 @@ # -USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR ERROR <*> -USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR ERROR <*> -USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR ERROR <*> -USERALIAS ALIAS = ERROR <*> -USERALIAS ALIAS = ERROR <*> -USERALIAS ALIAS = ERROR <*> +USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR <*> ERROR +USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR <*> ERROR +USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR <*> ERROR +USERALIAS ALIAS = <*> ERROR +USERALIAS ALIAS = <*> ERROR +USERALIAS ALIAS = <*> ERROR diff --git a/plugins/sudoers/regress/sudoers/test8.out.ok b/plugins/sudoers/regress/sudoers/test8.out.ok index 2ae8c6b393..e62f97f4bf 100644 --- a/plugins/sudoers/regress/sudoers/test8.out.ok +++ b/plugins/sudoers/regress/sudoers/test8.out.ok @@ -1,4 +1,3 @@ -Parse error in sudoers near line 8. User_Alias UA1 = xy User_Alias UA2 = xy diff --git a/plugins/sudoers/regress/sudoers/test8.toke.ok b/plugins/sudoers/regress/sudoers/test8.toke.ok index 0f7e2a91ac..9d6eaf9b16 100644 --- a/plugins/sudoers/regress/sudoers/test8.toke.ok +++ b/plugins/sudoers/regress/sudoers/test8.toke.ok @@ -4,4 +4,4 @@ USERALIAS ALIAS = BEGINSTR STRBODY STRBODY ENDSTR WORD(4) USERALIAS ALIAS = WORD(5) # -USERALIAS ALIAS = BEGINSTR STRBODY ERROR <*> ERROR \ No newline at end of file +USERALIAS ALIAS = BEGINSTR STRBODY <*> ERROR ERROR \ No newline at end of file diff --git a/plugins/sudoers/regress/sudoers/test9.out.ok b/plugins/sudoers/regress/sudoers/test9.out.ok index 40c742df99..5af5c531f3 100644 --- a/plugins/sudoers/regress/sudoers/test9.out.ok +++ b/plugins/sudoers/regress/sudoers/test9.out.ok @@ -1,2 +1,2 @@ -Parses OK. +Parses OK diff --git a/plugins/sudoers/regress/testsudoers/test1.out.ok b/plugins/sudoers/regress/testsudoers/test1.out.ok index f980873c3f..5c292be397 100644 --- a/plugins/sudoers/regress/testsudoers/test1.out.ok +++ b/plugins/sudoers/regress/testsudoers/test1.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test10.out.ok b/plugins/sudoers/regress/testsudoers/test10.out.ok index 5a1a68ad81..3515094c61 100644 --- a/plugins/sudoers/regress/testsudoers/test10.out.ok +++ b/plugins/sudoers/regress/testsudoers/test10.out.ok @@ -1,6 +1,6 @@ Testing @include of a path with escaped white space -Parses OK. +Parses OK Entries for user root: @@ -13,7 +13,7 @@ Command allowed Testing @include of a double-quoted path with white space -Parses OK. +Parses OK Entries for user root: @@ -26,7 +26,7 @@ Command allowed Testing #include of a path with escaped white space -Parses OK. +Parses OK Entries for user root: @@ -39,7 +39,7 @@ Command allowed Testing #include of a double-quoted path with white space -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test11.out.ok b/plugins/sudoers/regress/testsudoers/test11.out.ok index 20d4da663a..d813b0fc33 100644 --- a/plugins/sudoers/regress/testsudoers/test11.out.ok +++ b/plugins/sudoers/regress/testsudoers/test11.out.ok @@ -1,9 +1,8 @@ Testing @include with garbage after the path name ->>> sudoers: syntax error near line 1 <<< +sudoers:1: syntax error @include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp ^ -Parse error in sudoers near line 1. Entries for user root: @@ -16,10 +15,9 @@ Command allowed Testing #include with garbage after the path name ->>> sudoers: syntax error near line 1 <<< +sudoers:1: syntax error #include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp ^ -Parse error in sudoers near line 1. Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test2.out.ok b/plugins/sudoers/regress/testsudoers/test2.out.ok index c23a24587f..661f22ed56 100644 --- a/plugins/sudoers/regress/testsudoers/test2.out.ok +++ b/plugins/sudoers/regress/testsudoers/test2.out.ok @@ -1,6 +1,6 @@ Testing @include -Parses OK. +Parses OK Entries for user root: @@ -13,7 +13,7 @@ Command allowed Testing #include -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test3.out.ok b/plugins/sudoers/regress/testsudoers/test3.out.ok index 06ee4b8387..788f2eab9f 100644 --- a/plugins/sudoers/regress/testsudoers/test3.out.ok +++ b/plugins/sudoers/regress/testsudoers/test3.out.ok @@ -1,6 +1,6 @@ Testing @includedir of an unquoted path -Parses OK. +Parses OK Entries for user root: @@ -13,7 +13,7 @@ Command allowed Testing @includedir of a double-quoted path -Parses OK. +Parses OK Entries for user root: @@ -26,7 +26,7 @@ Command allowed Testing #includedir of an unquoted path -Parses OK. +Parses OK Entries for user root: @@ -39,7 +39,7 @@ Command allowed Testing #includedir of a double-quoted path -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test4.out.ok b/plugins/sudoers/regress/testsudoers/test4.out.ok index 6b27d71ada..cf68da5c2d 100644 --- a/plugins/sudoers/regress/testsudoers/test4.out.ok +++ b/plugins/sudoers/regress/testsudoers/test4.out.ok @@ -1,5 +1,4 @@ testsudoers: test2.inc should be owned by uid 1 -Parse error in sudoers near line 1. Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test5.out.ok b/plugins/sudoers/regress/testsudoers/test5.out.ok index cecf70043e..a4ead0ee3e 100644 --- a/plugins/sudoers/regress/testsudoers/test5.out.ok +++ b/plugins/sudoers/regress/testsudoers/test5.out.ok @@ -1,11 +1,9 @@ testsudoers: test5.inc is world writable -Parse error in sudoers near line 1. Entries for user root: Command unmatched testsudoers: test5.inc should be owned by gid 4294967294 -Parse error in sudoers near line 1. Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test6.out.ok b/plugins/sudoers/regress/testsudoers/test6.out.ok index eabeb20e79..3ec84bda02 100644 --- a/plugins/sudoers/regress/testsudoers/test6.out.ok +++ b/plugins/sudoers/regress/testsudoers/test6.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test7.out.ok b/plugins/sudoers/regress/testsudoers/test7.out.ok index eabeb20e79..3ec84bda02 100644 --- a/plugins/sudoers/regress/testsudoers/test7.out.ok +++ b/plugins/sudoers/regress/testsudoers/test7.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test8.out.ok b/plugins/sudoers/regress/testsudoers/test8.out.ok index bbee34b36c..b1ed931ad1 100644 --- a/plugins/sudoers/regress/testsudoers/test8.out.ok +++ b/plugins/sudoers/regress/testsudoers/test8.out.ok @@ -1,6 +1,6 @@ Testing @include without a newline -Parses OK. +Parses OK Entries for user root: @@ -13,7 +13,7 @@ Command allowed Testing #include without a newline -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/testsudoers/test9.out.ok b/plugins/sudoers/regress/testsudoers/test9.out.ok index eabeb20e79..3ec84bda02 100644 --- a/plugins/sudoers/regress/testsudoers/test9.out.ok +++ b/plugins/sudoers/regress/testsudoers/test9.out.ok @@ -1,4 +1,4 @@ -Parses OK. +Parses OK Entries for user root: diff --git a/plugins/sudoers/regress/visudo/test2.err.ok b/plugins/sudoers/regress/visudo/test2.err.ok index 38189df91b..d101a103c8 100644 --- a/plugins/sudoers/regress/visudo/test2.err.ok +++ b/plugins/sudoers/regress/visudo/test2.err.ok @@ -1 +1 @@ -Error: stdin:1 cycle in User_Alias "FOO" +Error: stdin:1: cycle in User_Alias "FOO" diff --git a/plugins/sudoers/regress/visudo/test3.err.ok b/plugins/sudoers/regress/visudo/test3.err.ok index 8390f8680f..af3a983d32 100644 --- a/plugins/sudoers/regress/visudo/test3.err.ok +++ b/plugins/sudoers/regress/visudo/test3.err.ok @@ -1,2 +1,2 @@ -Warning: stdin:1 unused User_Alias "A" -Warning: stdin:2 unused User_Alias "B" +Warning: stdin:1: unused User_Alias "A" +Warning: stdin:2: unused User_Alias "B" diff --git a/plugins/sudoers/regress/visudo/test8.err.ok b/plugins/sudoers/regress/visudo/test8.err.ok index e8a2b18276..3e71f62dbf 100644 --- a/plugins/sudoers/regress/visudo/test8.err.ok +++ b/plugins/sudoers/regress/visudo/test8.err.ok @@ -1 +1 @@ -visudo: stdin:1 value "2.5" is invalid for option "passwd_timeout" +visudo: stdin:1: value "2.5" is invalid for option "passwd_timeout" diff --git a/plugins/sudoers/regress/visudo/test8.sh b/plugins/sudoers/regress/visudo/test8.sh index 6674a55c1e..db68a6d998 100755 --- a/plugins/sudoers/regress/visudo/test8.sh +++ b/plugins/sudoers/regress/visudo/test8.sh @@ -24,7 +24,7 @@ if [ $? -eq 0 ]; then else # No support for LC_NUMERIC? echo "parse error in stdin near line 1" - echo 'visudo: stdin:1 value "2.5" is invalid for option "passwd_timeout"' 1>&2 + echo 'visudo: stdin:1: value "2.5" is invalid for option "passwd_timeout"' 1>&2 fi exit 0 diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index 682bbd794d..5acc804158 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -290,30 +290,23 @@ main(int argc, char *argv[]) sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, NULL); switch (input_format) { case format_ldif: - if (!sudoers_parse_ldif(&parsed_policy, stdin, NULL, true)) - (void) printf("Parse error in LDIF"); - else - (void) fputs("Parses OK", stdout); + if (!sudoers_parse_ldif(&parsed_policy, stdin, NULL, true)) { + (void) puts("Parse error in LDIF"); + parse_error = true; + } break; case format_sudoers: - if (sudoersparse() != 0 || parse_error) { + if (sudoersparse() != 0 || parse_error) parse_error = true; - if (errorlineno != -1) - (void) printf("Parse error in %s near line %d", - errorfile, errorlineno); - else - (void) printf("Parse error in %s", errorfile); - } else { - (void) fputs("Parses OK", stdout); - } break; default: sudo_fatalx("error: unhandled input %d", input_format); } + if (!parse_error) + (void) puts("Parses OK"); if (!update_defaults(&parsed_policy, NULL, SETDEF_ALL, false)) - (void) fputs(" (problem with defaults entries)", stdout); - puts("."); + (void) puts("Problem with defaults entries"); if (dflag) { (void) putchar('\n'); diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index 802df69be7..dca198f921 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -2632,7 +2632,8 @@ YY_RULE_SETUP BEGIN prev_state; if (sudoerslval.string == NULL) { - LEXTRACE("ERROR "); /* empty string */ + sudoerserror("empty string"); + LEXTRACE("ERROR "); LEXRETURN(ERROR); } if (prev_state == INITIAL || prev_state == GOTDEFS) { @@ -2641,14 +2642,16 @@ YY_RULE_SETUP if (sudoerslval.string[1] == '\0' || (sudoerslval.string[1] == ':' && sudoerslval.string[2] == '\0')) { - LEXTRACE("ERROR "); /* empty group */ + sudoerserror("empty group"); + LEXTRACE("ERROR "); LEXRETURN(ERROR); } LEXTRACE("USERGROUP "); LEXRETURN(USERGROUP); case '+': if (sudoerslval.string[1] == '\0') { - LEXTRACE("ERROR "); /* empty netgroup */ + sudoerserror("empty netgroup"); + LEXTRACE("ERROR "); LEXRETURN(ERROR); } LEXTRACE("NETGROUP "); @@ -2661,7 +2664,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 211 "toke.l" +#line 214 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -2670,7 +2673,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 217 "toke.l" +#line 220 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -2681,7 +2684,7 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP -#line 225 "toke.l" +#line 228 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -2692,7 +2695,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 233 "toke.l" +#line 236 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -2704,7 +2707,7 @@ YY_RULE_SETUP case 16: /* rule 16 can match eol */ YY_RULE_SETUP -#line 241 "toke.l" +#line 244 "toke.l" { BEGIN INITIAL; sudoersless(0); @@ -2714,7 +2717,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 248 "toke.l" +#line 251 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2725,7 +2728,7 @@ YY_RULE_SETUP case 18: YY_RULE_SETUP -#line 256 "toke.l" +#line 259 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -2743,7 +2746,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 271 "toke.l" +#line 274 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -2768,9 +2771,10 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 293 "toke.l" +#line 296 "toke.l" { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -2782,9 +2786,10 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 304 "toke.l" +#line 308 "toke.l" { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -2797,9 +2802,10 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 315 "toke.l" +#line 320 "toke.l" { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -2816,9 +2822,10 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 330 "toke.l" +#line 336 "toke.l" { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -2834,12 +2841,13 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 345 "toke.l" +#line 352 "toke.l" { char deftype; int n; if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -2854,14 +2862,10 @@ YY_RULE_SETUP BEGIN GOTDEFS; switch (deftype) { case ':': - sudolinebuf.toke_end = - sudolinebuf.toke_start + n; sudoersless(n); LEXTRACE("DEFAULTS_USER "); LEXRETURN(DEFAULTS_USER); case '>': - sudolinebuf.toke_end = - sudolinebuf.toke_start + n; sudoersless(n); LEXTRACE("DEFAULTS_RUNAS "); LEXRETURN(DEFAULTS_RUNAS); @@ -2881,11 +2885,12 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 389 "toke.l" +#line 393 "toke.l" { int n; if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -2910,7 +2915,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 415 "toke.l" +#line 420 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2919,7 +2924,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 421 "toke.l" +#line 426 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2928,7 +2933,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 427 "toke.l" +#line 432 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2936,7 +2941,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 432 "toke.l" +#line 437 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2944,7 +2949,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 437 "toke.l" +#line 442 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2952,7 +2957,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 442 "toke.l" +#line 447 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2960,7 +2965,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 447 "toke.l" +#line 452 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2968,7 +2973,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 452 "toke.l" +#line 457 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2976,7 +2981,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 457 "toke.l" +#line 462 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2984,7 +2989,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 462 "toke.l" +#line 467 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2992,7 +2997,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 467 "toke.l" +#line 472 "toke.l" { LEXTRACE("MAIL "); LEXRETURN(MAIL); @@ -3000,7 +3005,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 472 "toke.l" +#line 477 "toke.l" { LEXTRACE("NOMAIL "); LEXRETURN(NOMAIL); @@ -3008,7 +3013,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 477 "toke.l" +#line 482 "toke.l" { LEXTRACE("FOLLOW "); LEXRETURN(FOLLOWLNK); @@ -3016,7 +3021,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 482 "toke.l" +#line 487 "toke.l" { LEXTRACE("NOFOLLOW "); LEXRETURN(NOFOLLOWLNK); @@ -3024,16 +3029,19 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 487 "toke.l" +#line 492 "toke.l" { - /* empty group or netgroup */ + if (sudoerstext[0] == '+') + sudoerserror("empty netgroup"); + else + sudoerserror("empty group"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } YY_BREAK case 41: YY_RULE_SETUP -#line 493 "toke.l" +#line 501 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3044,7 +3052,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 501 "toke.l" +#line 509 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3055,7 +3063,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 509 "toke.l" +#line 517 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3065,7 +3073,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 516 "toke.l" +#line 524 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3075,9 +3083,10 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 523 "toke.l" +#line 531 "toke.l" { if (!ipv6_valid(sudoerstext)) { + sudoerserror("invalid IPv6 address"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -3089,9 +3098,10 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 534 "toke.l" +#line 543 "toke.l" { if (!ipv6_valid(sudoerstext)) { + sudoerserror("invalid IPv6 address"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -3103,7 +3113,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 545 "toke.l" +#line 555 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); @@ -3112,7 +3122,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 551 "toke.l" +#line 561 "toke.l" { LEXTRACE("CMND_TIMEOUT "); LEXRETURN(CMND_TIMEOUT); @@ -3120,7 +3130,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 556 "toke.l" +#line 566 "toke.l" { LEXTRACE("NOTBEFORE "); LEXRETURN(NOTBEFORE); @@ -3128,7 +3138,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 561 "toke.l" +#line 571 "toke.l" { LEXTRACE("NOTAFTER "); LEXRETURN(NOTAFTER); @@ -3136,7 +3146,7 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 566 "toke.l" +#line 576 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3148,7 +3158,7 @@ YY_RULE_SETUP YY_BREAK case 52: YY_RULE_SETUP -#line 575 "toke.l" +#line 585 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3160,7 +3170,7 @@ YY_RULE_SETUP YY_BREAK case 53: YY_RULE_SETUP -#line 583 "toke.l" +#line 593 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3172,7 +3182,7 @@ YY_RULE_SETUP YY_BREAK case 54: YY_RULE_SETUP -#line 592 "toke.l" +#line 602 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3184,7 +3194,7 @@ YY_RULE_SETUP YY_BREAK case 55: YY_RULE_SETUP -#line 601 "toke.l" +#line 611 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3195,7 +3205,7 @@ YY_RULE_SETUP YY_BREAK case 56: YY_RULE_SETUP -#line 609 "toke.l" +#line 619 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3207,7 +3217,7 @@ YY_RULE_SETUP YY_BREAK case 57: YY_RULE_SETUP -#line 618 "toke.l" +#line 628 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3217,7 +3227,7 @@ YY_RULE_SETUP YY_BREAK case 58: YY_RULE_SETUP -#line 625 "toke.l" +#line 635 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3227,7 +3237,7 @@ YY_RULE_SETUP YY_BREAK case 59: YY_RULE_SETUP -#line 632 "toke.l" +#line 642 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3237,7 +3247,7 @@ YY_RULE_SETUP YY_BREAK case 60: YY_RULE_SETUP -#line 639 "toke.l" +#line 649 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3247,7 +3257,7 @@ YY_RULE_SETUP YY_BREAK case 61: YY_RULE_SETUP -#line 646 "toke.l" +#line 656 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3257,7 +3267,7 @@ YY_RULE_SETUP YY_BREAK case 62: YY_RULE_SETUP -#line 653 "toke.l" +#line 663 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3275,7 +3285,7 @@ YY_RULE_SETUP YY_BREAK case 63: YY_RULE_SETUP -#line 668 "toke.l" +#line 678 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3285,7 +3295,7 @@ YY_RULE_SETUP YY_BREAK case 64: YY_RULE_SETUP -#line 675 "toke.l" +#line 685 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -3297,7 +3307,7 @@ YY_RULE_SETUP case 65: YY_RULE_SETUP -#line 684 "toke.l" +#line 694 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) @@ -3309,7 +3319,7 @@ YY_RULE_SETUP YY_BREAK case 66: YY_RULE_SETUP -#line 693 "toke.l" +#line 703 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3320,7 +3330,7 @@ YY_RULE_SETUP case 67: YY_RULE_SETUP -#line 701 "toke.l" +#line 711 "toke.l" { LEXTRACE("( "); LEXRETURN('('); @@ -3328,7 +3338,7 @@ YY_RULE_SETUP YY_BREAK case 68: YY_RULE_SETUP -#line 706 "toke.l" +#line 716 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); @@ -3336,7 +3346,7 @@ YY_RULE_SETUP YY_BREAK case 69: YY_RULE_SETUP -#line 711 "toke.l" +#line 721 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -3344,7 +3354,7 @@ YY_RULE_SETUP YY_BREAK case 70: YY_RULE_SETUP -#line 716 "toke.l" +#line 726 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -3352,7 +3362,7 @@ YY_RULE_SETUP YY_BREAK case 71: YY_RULE_SETUP -#line 721 "toke.l" +#line 731 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); @@ -3360,7 +3370,7 @@ YY_RULE_SETUP YY_BREAK case 72: YY_RULE_SETUP -#line 726 "toke.l" +#line 736 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3371,12 +3381,12 @@ YY_RULE_SETUP case 73: /* rule 73 can match eol */ YY_RULE_SETUP -#line 733 "toke.l" +#line 743 "toke.l" { if (YY_START == INSTR) { - /* XXX - better error message */ + sudoerserror("unexpected line break in string"); LEXTRACE("ERROR "); - LEXRETURN(ERROR); /* line break in string */ + LEXRETURN(ERROR); } BEGIN INITIAL; sudolineno++; @@ -3387,7 +3397,7 @@ YY_RULE_SETUP YY_BREAK case 74: YY_RULE_SETUP -#line 746 "toke.l" +#line 756 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } @@ -3395,7 +3405,7 @@ YY_RULE_SETUP case 75: /* rule 75 can match eol */ YY_RULE_SETUP -#line 750 "toke.l" +#line 760 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; @@ -3405,7 +3415,7 @@ YY_RULE_SETUP case 76: /* rule 76 can match eol */ YY_RULE_SETUP -#line 756 "toke.l" +#line 766 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3413,6 +3423,7 @@ YY_RULE_SETUP sudolineno++; continued = false; } else if (!feof(sudoersin)) { + sudoerserror(strerror(errno)); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -3422,7 +3433,7 @@ YY_RULE_SETUP YY_BREAK case 77: YY_RULE_SETUP -#line 770 "toke.l" +#line 781 "toke.l" { LEXTRACE("ERROR "); LEXRETURN(ERROR); @@ -3436,7 +3447,7 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): -#line 775 "toke.l" +#line 786 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3449,10 +3460,10 @@ case YY_STATE_EOF(GOTINC): YY_BREAK case 78: YY_RULE_SETUP -#line 785 "toke.l" +#line 796 "toke.l" ECHO; YY_BREAK -#line 3450 "toke.c" +#line 3461 "toke.c" case YY_END_OF_BUFFER: { @@ -4413,7 +4424,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 785 "toke.l" +#line 796 "toke.l" struct path_list { @@ -4800,8 +4811,8 @@ pop_include(void) SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { - sudolinebuf.toke_start = sudolinebuf.toke_end = 0; sudolinebuf.len = sudolinebuf.off = 0; + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; rcstr_delref(sudoers); sudoers = pl->path; sudolineno = 1; @@ -4850,7 +4861,7 @@ sudoers_trace_print(const char *msg) if (strchr(msg, '\n') != NULL) { sudo_debug_printf2(NULL, NULL, 0, SUDOERS_DEBUG_PARSER|SUDO_DEBUG_DEBUG, - "%s:%d %s", sudoers, sudolineno, lbuf.buf); + "%s:%d: %s", sudoers, sudolineno, lbuf.buf); lbuf.len = 0; } return 0; @@ -4864,17 +4875,16 @@ sudoers_input(char *buf, yy_size_t max_size) /* Refill line buffer if needed. */ if (avail == 0) { - sudolinebuf.toke_start = sudolinebuf.toke_end = 0; - sudolinebuf.off = 0; - sudolinebuf.len = getdelim(&sudolinebuf.buf, &sudolinebuf.size, - '\n', sudoersin); - if (sudolinebuf.len == (size_t)-1) { + avail = getdelim(&sudolinebuf.buf, &sudolinebuf.size, '\n', sudoersin); + if (avail == (size_t)-1) { + /* EOF or error. */ if (ferror(sudoersin) && errno != EINTR) YY_FATAL_ERROR("input in flex scanner failed"); - sudolinebuf.len = 0; return 0; } - avail = sudolinebuf.len; + sudolinebuf.len = avail; + sudolinebuf.off = 0; + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; } if (avail > max_size) diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 9bfab71786..46fd1080dd 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -181,7 +181,8 @@ DEFVAR [a-z_]+ BEGIN prev_state; if (sudoerslval.string == NULL) { - LEXTRACE("ERROR "); /* empty string */ + sudoerserror("empty string"); + LEXTRACE("ERROR "); LEXRETURN(ERROR); } if (prev_state == INITIAL || prev_state == GOTDEFS) { @@ -190,14 +191,16 @@ DEFVAR [a-z_]+ if (sudoerslval.string[1] == '\0' || (sudoerslval.string[1] == ':' && sudoerslval.string[2] == '\0')) { - LEXTRACE("ERROR "); /* empty group */ + sudoerserror("empty group"); + LEXTRACE("ERROR "); LEXRETURN(ERROR); } LEXTRACE("USERGROUP "); LEXRETURN(USERGROUP); case '+': if (sudoerslval.string[1] == '\0') { - LEXTRACE("ERROR "); /* empty netgroup */ + sudoerserror("empty netgroup"); + LEXTRACE("ERROR "); LEXRETURN(ERROR); } LEXTRACE("NETGROUP "); @@ -292,6 +295,7 @@ DEFVAR [a-z_]+ @include { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -303,6 +307,7 @@ DEFVAR [a-z_]+ @includedir { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -314,6 +319,7 @@ DEFVAR [a-z_]+ ^#include[[:blank:]]+.*(\r\n|\n)? { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -329,6 +335,7 @@ DEFVAR [a-z_]+ ^#includedir[[:blank:]]+.*(\r\n|\n)? { if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -347,6 +354,7 @@ DEFVAR [a-z_]+ int n; if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -361,14 +369,10 @@ DEFVAR [a-z_]+ BEGIN GOTDEFS; switch (deftype) { case ':': - sudolinebuf.toke_end = - sudolinebuf.toke_start + n; sudoersless(n); LEXTRACE("DEFAULTS_USER "); LEXRETURN(DEFAULTS_USER); case '>': - sudolinebuf.toke_end = - sudolinebuf.toke_start + n; sudoersless(n); LEXTRACE("DEFAULTS_RUNAS "); LEXRETURN(DEFAULTS_RUNAS); @@ -390,6 +394,7 @@ DEFVAR [a-z_]+ int n; if (continued) { + sudoerserror("invalid line continuation"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -485,7 +490,10 @@ NOFOLLOW[[:blank:]]*: { } (\+|\%|\%:) { - /* empty group or netgroup */ + if (sudoerstext[0] == '+') + sudoerserror("empty netgroup"); + else + sudoerserror("empty group"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -522,6 +530,7 @@ NOFOLLOW[[:blank:]]*: { {IPV6ADDR}(\/{IPV6ADDR})? { if (!ipv6_valid(sudoerstext)) { + sudoerserror("invalid IPv6 address"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -533,6 +542,7 @@ NOFOLLOW[[:blank:]]*: { {IPV6ADDR}\/([0-9]|[1-9][0-9]|1[01][0-9]|12[0-8]) { if (!ipv6_valid(sudoerstext)) { + sudoerserror("invalid IPv6 address"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -732,9 +742,9 @@ sudoedit { <*>\r?\n { if (YY_START == INSTR) { - /* XXX - better error message */ + sudoerserror("unexpected line break in string"); LEXTRACE("ERROR "); - LEXRETURN(ERROR); /* line break in string */ + LEXRETURN(ERROR); } BEGIN INITIAL; sudolineno++; @@ -760,6 +770,7 @@ sudoedit { sudolineno++; continued = false; } else if (!feof(sudoersin)) { + sudoerserror(strerror(errno)); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -1167,8 +1178,8 @@ pop_include(void) SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { - sudolinebuf.toke_start = sudolinebuf.toke_end = 0; sudolinebuf.len = sudolinebuf.off = 0; + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; rcstr_delref(sudoers); sudoers = pl->path; sudolineno = 1; @@ -1217,7 +1228,7 @@ sudoers_trace_print(const char *msg) if (strchr(msg, '\n') != NULL) { sudo_debug_printf2(NULL, NULL, 0, SUDOERS_DEBUG_PARSER|SUDO_DEBUG_DEBUG, - "%s:%d %s", sudoers, sudolineno, lbuf.buf); + "%s:%d: %s", sudoers, sudolineno, lbuf.buf); lbuf.len = 0; } return 0; @@ -1231,17 +1242,16 @@ sudoers_input(char *buf, yy_size_t max_size) /* Refill line buffer if needed. */ if (avail == 0) { - sudolinebuf.toke_start = sudolinebuf.toke_end = 0; - sudolinebuf.off = 0; - sudolinebuf.len = getdelim(&sudolinebuf.buf, &sudolinebuf.size, - '\n', sudoersin); - if (sudolinebuf.len == (size_t)-1) { + avail = getdelim(&sudolinebuf.buf, &sudolinebuf.size, '\n', sudoersin); + if (avail == (size_t)-1) { + /* EOF or error. */ if (ferror(sudoersin) && errno != EINTR) YY_FATAL_ERROR("input in flex scanner failed"); - sudolinebuf.len = 0; return 0; } - avail = sudolinebuf.len; + sudolinebuf.len = avail; + sudolinebuf.off = 0; + sudolinebuf.toke_start = sudolinebuf.toke_end = 0; } if (avail > max_size) diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index e019bab801..1982c8cd66 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -1080,13 +1080,13 @@ check_alias(char *name, int type, char *file, int lineno, bool strict, bool quie if (!quiet) { if (errno == ELOOP) { fprintf(stderr, strict ? - U_("Error: %s:%d cycle in %s \"%s\"") : - U_("Warning: %s:%d cycle in %s \"%s\""), + U_("Error: %s:%d: cycle in %s \"%s\"") : + U_("Warning: %s:%d: cycle in %s \"%s\""), file, lineno, alias_type_to_string(type), name); } else { fprintf(stderr, strict ? - U_("Error: %s:%d %s \"%s\" referenced but not defined") : - U_("Warning: %s:%d %s \"%s\" referenced but not defined"), + U_("Error: %s:%d: %s \"%s\" referenced but not defined") : + U_("Warning: %s:%d: %s \"%s\" referenced but not defined"), file, lineno, alias_type_to_string(type), name); } fputc('\n', stderr); @@ -1177,7 +1177,7 @@ check_aliases(bool strict, bool quiet) static int print_unused(struct sudoers_parse_tree *parse_tree, struct alias *a, void *v) { - fprintf(stderr, U_("Warning: %s:%d unused %s \"%s\""), + fprintf(stderr, U_("Warning: %s:%d: unused %s \"%s\""), a->file, a->lineno, alias_type_to_string(a->type), a->name); fputc('\n', stderr); return 0; From 5f5f28ac7c08277e41489846bf4e53e3ab2ad9ea Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Aug 2020 14:22:24 -0600 Subject: [PATCH 019/113] Require that a @include line end with a newline or EOF. We now parse the entire line before reading the include file. This is less surprising behavior and results in better error messages. --- plugins/sudoers/gram.c | 757 +++++++++--------- plugins/sudoers/gram.h | 1 + plugins/sudoers/gram.y | 37 +- .../sudoers/regress/testsudoers/test11.out.ok | 22 +- plugins/sudoers/regress/testsudoers/test11.sh | 4 +- 5 files changed, 431 insertions(+), 390 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index b4a638ded6..e64e34bb37 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -128,6 +128,7 @@ typedef union { } YYSTYPE; #endif /* YYSTYPE_DEFINED */ #line 125 "gram.c" +#define END 0 #define COMMAND 257 #define ALIAS 258 #define DEFVAR 259 @@ -183,18 +184,19 @@ const short sudoerslhs[] = short sudoerslhs[] = #endif { -1, - 0, 0, 33, 33, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 4, 4, - 3, 3, 3, 3, 3, 21, 21, 20, 11, 11, - 9, 9, 9, 9, 9, 2, 2, 1, 31, 31, - 31, 31, 32, 32, 7, 7, 6, 6, 28, 29, - 30, 24, 25, 26, 27, 18, 18, 19, 19, 19, - 19, 19, 23, 23, 23, 23, 23, 23, 23, 23, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 5, 5, 5, 36, 36, - 39, 10, 10, 37, 37, 40, 8, 8, 38, 38, - 41, 35, 35, 42, 14, 14, 12, 12, 13, 13, - 13, 13, 13, 17, 17, 15, 15, 16, 16, 16, + 0, 0, 35, 35, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, 31, 31, + 32, 32, 4, 4, 3, 3, 3, 3, 3, 21, + 21, 20, 11, 11, 9, 9, 9, 9, 9, 2, + 2, 1, 33, 33, 33, 33, 34, 34, 7, 7, + 6, 6, 28, 29, 30, 24, 25, 26, 27, 18, + 18, 19, 19, 19, 19, 19, 23, 23, 23, 23, + 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 5, + 5, 5, 38, 38, 41, 10, 10, 39, 39, 42, + 8, 8, 40, 40, 43, 37, 37, 44, 14, 14, + 12, 12, 13, 13, 13, 13, 13, 17, 17, 15, + 15, 16, 16, 16, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerslen[] = @@ -202,18 +204,19 @@ const short sudoerslen[] = short sudoerslen[] = #endif { 2, - 0, 1, 1, 2, 1, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 3, 1, 3, - 1, 2, 3, 3, 3, 1, 3, 3, 1, 2, - 1, 1, 1, 1, 1, 1, 3, 4, 3, 3, - 3, 3, 1, 3, 1, 2, 1, 2, 3, 3, - 3, 3, 3, 3, 3, 0, 3, 0, 1, 3, - 2, 1, 0, 2, 2, 2, 2, 2, 2, 2, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 1, 1, 3, - 3, 1, 3, 1, 3, 3, 1, 3, 1, 3, - 3, 1, 3, 3, 1, 3, 1, 2, 1, 1, - 1, 1, 1, 1, 3, 1, 2, 1, 1, 1, + 0, 1, 1, 2, 1, 2, 1, 1, 2, 2, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 1, 3, 1, 2, 3, 3, 3, 1, + 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, + 3, 4, 3, 3, 3, 3, 1, 3, 1, 2, + 1, 2, 3, 3, 3, 3, 3, 3, 3, 0, + 3, 0, 1, 3, 2, 1, 0, 2, 2, 2, + 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, 3, 3, 1, 3, 1, 3, 3, + 1, 3, 1, 3, 3, 1, 3, 3, 1, 3, + 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, + 2, 1, 1, 1, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoersdefred[] = @@ -221,26 +224,26 @@ const short sudoersdefred[] = short sudoersdefred[] = #endif { 0, - 0, 109, 111, 112, 113, 0, 0, 0, 0, 0, - 0, 0, 110, 5, 0, 0, 0, 0, 0, 0, - 105, 107, 0, 0, 3, 6, 7, 8, 0, 0, - 19, 0, 31, 34, 33, 35, 32, 0, 29, 0, - 92, 0, 0, 88, 87, 86, 0, 0, 0, 0, - 0, 47, 45, 97, 0, 43, 0, 0, 0, 89, - 0, 0, 94, 0, 0, 102, 0, 0, 99, 108, - 0, 0, 26, 0, 4, 0, 0, 0, 22, 0, - 30, 0, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, - 0, 0, 106, 0, 0, 23, 24, 25, 20, 93, - 39, 40, 41, 42, 98, 44, 0, 90, 0, 95, - 0, 103, 0, 100, 0, 36, 0, 63, 27, 0, - 0, 0, 0, 0, 118, 120, 119, 0, 114, 116, - 0, 0, 57, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 67, 68, 69, 70, 66, 64, 65, 117, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 84, - 85, 82, 83, 38, 115, 53, 52, 54, 55, 49, - 50, 51, + 0, 113, 115, 116, 117, 0, 0, 0, 0, 0, + 0, 0, 114, 5, 0, 0, 0, 0, 0, 0, + 109, 111, 0, 7, 8, 0, 3, 6, 0, 0, + 0, 0, 23, 0, 35, 38, 37, 39, 36, 0, + 33, 0, 96, 0, 0, 92, 91, 90, 0, 0, + 0, 0, 0, 51, 49, 101, 0, 47, 0, 0, + 0, 93, 0, 0, 98, 0, 0, 106, 0, 0, + 103, 112, 0, 0, 30, 0, 4, 20, 19, 22, + 21, 0, 0, 0, 26, 0, 34, 0, 0, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 50, + 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, + 0, 27, 28, 29, 24, 97, 43, 44, 45, 46, + 102, 48, 0, 94, 0, 99, 0, 107, 0, 104, + 0, 40, 0, 67, 31, 0, 0, 0, 0, 0, + 122, 124, 123, 0, 118, 120, 0, 0, 61, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 71, 72, + 73, 74, 70, 68, 69, 121, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 88, 89, 86, 87, 42, + 119, 57, 56, 58, 59, 53, 54, 55, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoersdgoto[] = @@ -248,11 +251,11 @@ const short sudoersdgoto[] = short sudoersdgoto[] = #endif { 20, - 126, 127, 31, 32, 52, 53, 54, 55, 39, 72, - 41, 21, 22, 23, 139, 140, 141, 128, 132, 73, - 74, 152, 134, 153, 154, 155, 156, 157, 158, 159, - 56, 57, 24, 25, 65, 59, 62, 68, 60, 63, - 69, 66, + 132, 133, 33, 34, 54, 55, 56, 57, 41, 74, + 43, 21, 22, 23, 145, 146, 147, 134, 138, 75, + 76, 158, 140, 159, 160, 161, 162, 163, 164, 165, + 24, 25, 58, 59, 26, 27, 67, 61, 64, 70, + 62, 65, 71, 68, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerssindex[] = @@ -260,63 +263,63 @@ const short sudoerssindex[] = short sudoerssindex[] = #endif { 703, - -278, 0, 0, 0, 0, -241, -231, -19, 51, 59, - 59, -28, 0, 0, -215, -212, -211, -210, -233, 0, - 0, 0, -26, 703, 0, 0, 0, 0, -12, -232, - 0, 6, 0, 0, 0, 0, 0, -222, 0, -33, - 0, -31, -31, 0, 0, 0, -242, 8, 10, 11, - 13, 0, 0, 0, -23, 0, -9, 17, 14, 0, - 18, 22, 0, 20, 24, 0, 25, 27, 0, 0, - 59, -38, 0, 29, 0, -180, -175, -173, 0, -19, - 0, 51, 6, 6, 6, 0, -171, -170, -168, -167, - -28, 6, -227, 0, 51, -215, -28, -212, 59, -211, - 59, -210, 0, 58, 51, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 47, 0, 55, 0, - 56, 0, 56, 0, -7, 0, 57, 0, 0, -25, - -2, 61, 58, -236, 0, 0, 0, -246, 0, 0, - 60, -25, 0, 0, 42, 44, 46, 50, 52, 53, - 54, 620, 0, 0, 0, 0, 0, 0, 0, 0, - -25, 60, -151, -147, -146, -145, -144, -143, -142, 0, + -277, 0, 0, 0, 0, -240, -230, -15, 51, -21, + -21, -28, 0, 0, -222, -211, -210, -197, -233, 0, + 0, 0, -25, 0, 0, 703, 0, 0, 7, 9, + -1, -196, 0, 18, 0, 0, 0, 0, 0, -220, + 0, -33, 0, -31, -31, 0, 0, 0, -237, -19, + 11, 13, 14, 0, 0, 0, -27, 0, -9, 4, + 23, 0, 21, 25, 0, 24, 28, 0, 26, 30, + 0, 0, -21, -30, 0, 31, 0, 0, 0, 0, + 0, -195, -173, -172, 0, -15, 0, 51, 18, 18, + 18, 0, -171, -170, -167, -166, -28, 18, -245, 0, + 51, -222, -28, -211, -21, -210, -21, -197, 0, 60, + 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 55, 0, 57, 0, 58, 0, 58, 0, + -7, 0, 61, 0, 0, 59, -12, 62, 60, -219, + 0, 0, 0, -236, 0, 0, 63, 59, 0, 0, + 43, 47, 50, 52, 53, 54, 56, 620, 0, 0, + 0, 0, 0, 0, 0, 0, 59, 63, -147, -145, + -144, -143, -142, -141, -140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,}; + 0, 0, 0, 0, 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) const short sudoersrindex[] = #else short sudoersrindex[] = #endif - { 122, + { 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, + 1, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 1, 0, - 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, + 253, 0, 0, 297, 0, 0, 333, 0, 0, 369, + 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 441, 477, + 513, 0, 0, 0, 0, 0, 0, 549, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, - 0, 297, 0, 0, 333, 0, 0, 369, 0, 0, - 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, - 0, 0, 441, 477, 513, 0, 0, 0, 0, 0, - 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 0, 73, 0, - 109, 0, 145, 0, 83, 0, 181, 0, 0, 84, - 85, 0, 572, 653, 0, 0, 0, 0, 0, 0, - 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 37, 0, 73, 0, 109, 0, 145, 0, + 85, 0, 181, 0, 0, 86, 87, 0, 572, 653, + 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,}; + 0, 0, 0, 0, 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) const short sudoersgindex[] = #else short sudoersgindex[] = #endif { 0, - -4, 0, 63, 12, 88, 75, -87, 33, 95, -6, - 62, 65, 118, 9, -22, 2, -1, 0, 0, 41, + -6, 0, 46, 10, 90, 75, -94, 32, 97, -5, + 64, 65, 121, 5, -26, 2, -4, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 0, 124, 0, 0, 0, 0, 64, 49, - 48, 66, + 0, 0, 44, 0, 0, 122, 0, 0, 0, 0, + 48, 45, 49, 66, }; #define YYTABLESIZE 994 #if defined(__cplusplus) || defined(__STDC__) @@ -324,55 +327,55 @@ const short sudoerstable[] = #else short sudoerstable[] = #endif - { 30, - 21, 30, 40, 115, 47, 82, 38, 138, 26, 30, - 82, 135, 71, 30, 44, 45, 136, 71, 42, 43, - 91, 27, 104, 47, 2, 19, 79, 3, 4, 5, - 77, 28, 78, 21, 93, 33, 91, 34, 35, 137, - 36, 71, 58, 46, 21, 61, 64, 67, 76, 80, - 130, 83, 13, 84, 85, 142, 145, 146, 147, 148, - 149, 150, 151, 37, 184, 87, 92, 88, 89, 91, - 90, 96, 96, 48, 49, 50, 51, 95, 97, 98, - 99, 100, 106, 38, 102, 101, 105, 107, 117, 108, - 82, 19, 111, 112, 91, 113, 114, 125, 91, 71, - 133, 143, 163, 161, 164, 96, 165, 121, 104, 123, - 166, 186, 167, 168, 169, 187, 188, 189, 190, 191, - 192, 1, 2, 58, 62, 59, 61, 60, 144, 119, - 96, 94, 81, 131, 86, 103, 70, 116, 185, 160, - 162, 104, 109, 110, 101, 129, 120, 75, 0, 124, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 122, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, + { 32, + 25, 32, 121, 42, 49, 32, 78, 40, 80, 28, + 88, 19, 73, 88, 44, 45, 97, 32, 73, 46, + 47, 141, 29, 49, 2, 19, 142, 3, 4, 5, + 110, 73, 30, 25, 99, 60, 95, 35, 93, 36, + 37, 83, 38, 84, 25, 148, 63, 66, 48, 143, + 136, 89, 13, 90, 91, 50, 51, 52, 53, 82, + 69, 86, 85, 190, 101, 39, 98, 112, 94, 95, + 95, 96, 100, 151, 152, 153, 154, 155, 156, 157, + 102, 103, 104, 40, 105, 106, 107, 108, 111, 113, + 114, 144, 117, 118, 95, 123, 119, 120, 88, 131, + 97, 73, 149, 169, 139, 100, 167, 170, 108, 127, + 171, 129, 172, 173, 174, 192, 175, 193, 194, 195, + 196, 197, 198, 1, 2, 62, 66, 63, 65, 64, + 100, 115, 150, 100, 125, 137, 87, 109, 92, 72, + 191, 108, 122, 168, 105, 166, 135, 77, 126, 124, + 0, 116, 0, 0, 0, 0, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, + 0, 128, 0, 0, 0, 0, 0, 105, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 28, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 29, 0, 29, 44, 45, - 0, 33, 135, 34, 35, 29, 36, 136, 28, 29, - 0, 0, 0, 0, 0, 0, 0, 44, 45, 14, - 2, 0, 11, 3, 4, 5, 21, 46, 21, 37, - 137, 21, 21, 21, 0, 21, 21, 21, 21, 21, - 21, 21, 48, 49, 50, 51, 46, 0, 13, 0, - 0, 0, 0, 0, 0, 11, 21, 21, 21, 21, - 21, 21, 91, 0, 91, 0, 12, 91, 91, 91, - 0, 91, 91, 91, 91, 91, 91, 91, 33, 0, - 34, 35, 0, 36, 0, 0, 2, 0, 0, 3, - 4, 5, 91, 91, 91, 91, 91, 91, 96, 12, - 96, 0, 10, 96, 96, 96, 37, 96, 96, 96, - 96, 96, 96, 96, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, - 96, 96, 96, 96, 104, 10, 104, 0, 13, 104, - 104, 104, 0, 104, 104, 104, 104, 104, 104, 104, + 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 0, 31, 46, 47, + 0, 31, 35, 0, 36, 37, 2, 38, 32, 3, + 4, 5, 0, 31, 0, 0, 0, 46, 47, 14, + 2, 0, 11, 3, 4, 5, 25, 48, 25, 0, + 39, 25, 25, 25, 13, 25, 25, 25, 25, 25, + 25, 25, 50, 51, 52, 53, 48, 0, 13, 0, + 0, 0, 0, 0, 0, 11, 25, 25, 25, 25, + 25, 25, 95, 79, 95, 81, 12, 95, 95, 95, + 0, 95, 95, 95, 95, 95, 95, 95, 35, 0, + 36, 37, 0, 38, 0, 0, 141, 0, 0, 0, + 0, 142, 95, 95, 95, 95, 95, 95, 100, 12, + 100, 0, 10, 100, 100, 100, 39, 100, 100, 100, + 100, 100, 100, 100, 143, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 100, 100, + 100, 100, 100, 100, 108, 10, 108, 0, 13, 108, + 108, 108, 0, 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, - 101, 13, 101, 0, 9, 101, 101, 101, 0, 101, - 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 108, 108, 108, 108, 108, + 105, 13, 105, 0, 9, 105, 105, 105, 0, 105, + 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 101, 101, 101, 101, 101, 101, 28, 9, 28, 0, - 17, 28, 28, 28, 0, 28, 28, 28, 28, 28, - 28, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 28, 28, 28, - 28, 28, 14, 17, 14, 0, 15, 14, 14, 14, + 105, 105, 105, 105, 105, 105, 32, 9, 32, 0, + 17, 32, 32, 32, 0, 32, 32, 32, 32, 32, + 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, + 32, 32, 14, 17, 14, 0, 15, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 14, 11, 15, @@ -385,15 +388,15 @@ short sudoerstable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 12, 12, 12, 12, 12, 12, 10, 0, 10, 0, 0, 10, 10, 10, 0, 10, 10, 10, - 10, 10, 10, 10, 56, 0, 0, 0, 0, 0, + 10, 10, 10, 10, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 13, 0, 13, 0, 0, 13, 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 47, 0, 13, 13, 13, 13, 13, 13, + 0, 0, 49, 0, 13, 13, 13, 13, 13, 13, 9, 0, 9, 0, 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 17, 0, 17, 0, 0, 17, 17, 17, 0, 17, 17, 17, 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, @@ -407,20 +410,20 @@ short sudoerstable[] = 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 18, 0, 18, 0, 0, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 56, + 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 0, 0, - 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, - 56, 0, 56, 56, 56, 56, 44, 45, 0, 0, + 0, 0, 0, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 0, 0, + 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, + 60, 0, 60, 60, 60, 60, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 46, 0, 0, 0, 71, - 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 49, 50, 51, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 0, + 0, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 48, 0, 0, 0, 75, + 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 51, 52, 53, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 71, 71, 71, 71, 0, 1, 0, + 0, 0, 0, 75, 75, 75, 75, 0, 1, 0, 2, 0, 0, 3, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, @@ -432,39 +435,39 @@ const short sudoerscheck[] = short sudoerscheck[] = #endif { 33, - 0, 33, 9, 91, 33, 44, 33, 33, 287, 33, - 44, 258, 44, 33, 257, 258, 263, 44, 10, 11, - 44, 263, 61, 33, 258, 33, 259, 261, 262, 263, - 43, 263, 45, 33, 44, 258, 0, 260, 261, 286, - 263, 44, 258, 286, 44, 258, 258, 258, 61, 44, - 58, 40, 286, 42, 43, 58, 293, 294, 295, 296, - 297, 298, 299, 286, 152, 58, 55, 58, 58, 33, - 58, 58, 0, 301, 302, 303, 304, 61, 61, 58, - 61, 58, 263, 33, 58, 61, 58, 263, 95, 263, - 44, 33, 264, 264, 58, 264, 264, 40, 44, 44, - 44, 41, 61, 44, 61, 33, 61, 99, 0, 101, - 61, 263, 61, 61, 61, 263, 263, 263, 263, 263, - 263, 0, 0, 41, 41, 41, 41, 41, 133, 97, - 58, 57, 38, 125, 47, 71, 19, 93, 161, 138, - 142, 33, 80, 82, 0, 105, 98, 24, -1, 102, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 96, - -1, -1, -1, -1, -1, 100, 58, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + 0, 33, 97, 9, 33, 33, 0, 33, 0, 287, + 44, 33, 44, 44, 10, 11, 44, 33, 44, 257, + 258, 258, 263, 33, 258, 33, 263, 261, 262, 263, + 61, 44, 263, 33, 44, 258, 0, 258, 58, 260, + 261, 43, 263, 45, 44, 58, 258, 258, 286, 286, + 58, 42, 286, 44, 45, 301, 302, 303, 304, 61, + 258, 44, 259, 158, 61, 286, 57, 263, 58, 33, + 58, 58, 0, 293, 294, 295, 296, 297, 298, 299, + 58, 61, 58, 33, 61, 58, 61, 58, 58, 263, + 263, 33, 264, 264, 58, 101, 264, 264, 44, 40, + 44, 44, 41, 61, 44, 33, 44, 61, 0, 105, + 61, 107, 61, 61, 61, 263, 61, 263, 263, 263, + 263, 263, 263, 0, 0, 41, 41, 41, 41, 41, + 58, 86, 139, 59, 103, 131, 40, 73, 49, 19, + 167, 33, 99, 148, 0, 144, 111, 26, 104, 102, + -1, 88, -1, -1, -1, -1, 108, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, + -1, 106, -1, -1, -1, -1, -1, 33, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, 259, -1, 259, 257, 258, - -1, 258, 258, 260, 261, 259, 263, 263, 58, 259, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 33, - 258, -1, 0, 261, 262, 263, 256, 286, 258, 286, - 286, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, 259, 258, -1, 260, 261, 258, 263, 58, 261, + 262, 263, -1, 259, -1, -1, -1, 257, 258, 33, + 258, -1, 0, 261, 262, 263, 256, 286, 258, -1, + 286, 261, 262, 263, 286, 265, 266, 267, 268, 269, 270, 271, 301, 302, 303, 304, 286, -1, 286, -1, -1, -1, -1, -1, -1, 33, 286, 287, 288, 289, - 290, 291, 256, -1, 258, -1, 0, 261, 262, 263, + 290, 291, 256, 287, 258, 287, 0, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, 258, -1, - 260, 261, -1, 263, -1, -1, 258, -1, -1, 261, - 262, 263, 286, 287, 288, 289, 290, 291, 256, 33, + 260, 261, -1, 263, -1, -1, 258, -1, -1, -1, + -1, 263, 286, 287, 288, 289, 290, 291, 256, 33, 258, -1, 0, 261, 262, 263, 286, 265, 266, 267, 268, 269, 270, 271, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, @@ -573,8 +576,8 @@ char *sudoersrule[] = "line : line entry", "entry : COMMENT", "entry : error COMMENT", -"entry : INCLUDE WORD", -"entry : INCLUDEDIR WORD", +"entry : include", +"entry : includedir", "entry : userlist privileges", "entry : USERALIAS useraliases", "entry : HOSTALIAS hostaliases", @@ -585,6 +588,10 @@ char *sudoersrule[] = "entry : DEFAULTS_RUNAS userlist defaults_list", "entry : DEFAULTS_HOST hostlist defaults_list", "entry : DEFAULTS_CMND cmndlist defaults_list", +"include : INCLUDE WORD COMMENT", +"include : INCLUDE WORD END", +"includedir : INCLUDEDIR WORD COMMENT", +"includedir : INCLUDEDIR WORD END", "defaults_list : defaults_entry", "defaults_list : defaults_list ',' defaults_entry", "defaults_entry : DEFVAR", @@ -715,7 +722,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 933 "gram.y" +#line 952 "gram.y" void sudoerserror(const char *s) { @@ -1191,7 +1198,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1137 "gram.c" +#line 1144 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1382,23 +1389,23 @@ yyparse(void) switch (yyn) { case 1: -#line 173 "gram.y" +#line 176 "gram.y" { ; } break; case 5: -#line 181 "gram.y" +#line 184 "gram.y" { ; } break; case 6: -#line 184 "gram.y" +#line 187 "gram.y" { yyerrok; } break; case 7: -#line 187 "gram.y" +#line 190 "gram.y" { if (!push_include(yyvsp[0].string, false)) { free(yyvsp[0].string); @@ -1408,7 +1415,7 @@ case 7: } break; case 8: -#line 194 "gram.y" +#line 197 "gram.y" { if (!push_include(yyvsp[0].string, true)) { free(yyvsp[0].string); @@ -1418,7 +1425,7 @@ case 8: } break; case 9: -#line 201 "gram.y" +#line 204 "gram.y" { if (!add_userspec(yyvsp[-1].member, yyvsp[0].privilege)) { sudoerserror(N_("unable to allocate memory")); @@ -1427,73 +1434,97 @@ case 9: } break; case 10: -#line 207 "gram.y" +#line 210 "gram.y" { ; } break; case 11: -#line 210 "gram.y" +#line 213 "gram.y" { ; } break; case 12: -#line 213 "gram.y" +#line 216 "gram.y" { ; } break; case 13: -#line 216 "gram.y" +#line 219 "gram.y" { ; } break; case 14: -#line 219 "gram.y" +#line 222 "gram.y" { if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) YYERROR; } break; case 15: -#line 223 "gram.y" +#line 226 "gram.y" { if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 16: -#line 227 "gram.y" +#line 230 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 17: -#line 231 "gram.y" +#line 234 "gram.y" { if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 18: -#line 235 "gram.y" +#line 238 "gram.y" { if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; +case 19: +#line 244 "gram.y" +{ + yyval.string = yyvsp[-1].string; + } +break; case 20: -#line 242 "gram.y" +#line 247 "gram.y" +{ + yyval.string = yyvsp[-1].string; + } +break; +case 21: +#line 252 "gram.y" +{ + yyval.string = yyvsp[-1].string; + } +break; +case 22: +#line 255 "gram.y" +{ + yyval.string = yyvsp[-1].string; + } +break; +case 24: +#line 261 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; -case 21: -#line 248 "gram.y" +case 25: +#line 267 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1502,8 +1533,8 @@ case 21: } } break; -case 22: -#line 255 "gram.y" +case 26: +#line 274 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1512,8 +1543,8 @@ case 22: } } break; -case 23: -#line 262 "gram.y" +case 27: +#line 281 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1522,8 +1553,8 @@ case 23: } } break; -case 24: -#line 269 "gram.y" +case 28: +#line 288 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1532,8 +1563,8 @@ case 24: } } break; -case 25: -#line 276 "gram.y" +case 29: +#line 295 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1542,15 +1573,15 @@ case 25: } } break; -case 27: -#line 286 "gram.y" +case 31: +#line 305 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; -case 28: -#line 292 "gram.y" +case 32: +#line 311 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1564,22 +1595,22 @@ case 28: yyval.privilege = p; } break; -case 29: -#line 306 "gram.y" +case 33: +#line 325 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 30: -#line 310 "gram.y" +case 34: +#line 329 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 31: -#line 316 "gram.y" +case 35: +#line 335 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1588,8 +1619,8 @@ case 31: } } break; -case 32: -#line 323 "gram.y" +case 36: +#line 342 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1598,8 +1629,8 @@ case 32: } } break; -case 33: -#line 330 "gram.y" +case 37: +#line 349 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1608,8 +1639,8 @@ case 33: } } break; -case 34: -#line 337 "gram.y" +case 38: +#line 356 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1618,8 +1649,8 @@ case 34: } } break; -case 35: -#line 344 "gram.y" +case 39: +#line 363 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1628,8 +1659,8 @@ case 35: } } break; -case 37: -#line 354 "gram.y" +case 41: +#line 373 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1682,8 +1713,8 @@ case 37: yyval.cmndspec = yyvsp[-2].cmndspec; } break; -case 38: -#line 407 "gram.y" +case 42: +#line 426 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1736,8 +1767,8 @@ case 38: yyval.cmndspec = cs; } break; -case 39: -#line 460 "gram.y" +case 43: +#line 479 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1746,8 +1777,8 @@ case 39: } } break; -case 40: -#line 467 "gram.y" +case 44: +#line 486 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1756,8 +1787,8 @@ case 40: } } break; -case 41: -#line 474 "gram.y" +case 45: +#line 493 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1766,8 +1797,8 @@ case 41: } } break; -case 42: -#line 481 "gram.y" +case 46: +#line 500 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1776,21 +1807,21 @@ case 42: } } break; -case 44: -#line 491 "gram.y" +case 48: +#line 510 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; -case 45: -#line 497 "gram.y" +case 49: +#line 516 "gram.y" { yyval.member = yyvsp[0].member; } break; -case 46: -#line 500 "gram.y" +case 50: +#line 519 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1811,76 +1842,76 @@ case 46: yyval.member = yyvsp[0].member; } break; -case 47: -#line 521 "gram.y" +case 51: +#line 540 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 48: -#line 525 "gram.y" +case 52: +#line 544 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 49: -#line 531 "gram.y" +case 53: +#line 550 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 50: -#line 536 "gram.y" +case 54: +#line 555 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 51: -#line 540 "gram.y" +case 55: +#line 559 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 52: -#line 545 "gram.y" +case 56: +#line 564 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 53: -#line 550 "gram.y" +case 57: +#line 569 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 54: -#line 555 "gram.y" +case 58: +#line 574 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 55: -#line 559 "gram.y" +case 59: +#line 578 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 56: -#line 564 "gram.y" +case 60: +#line 583 "gram.y" { yyval.runas = NULL; } break; -case 57: -#line 567 "gram.y" +case 61: +#line 586 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; -case 58: -#line 572 "gram.y" +case 62: +#line 591 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1897,8 +1928,8 @@ case 58: } } break; -case 59: -#line 587 "gram.y" +case 63: +#line 606 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1909,8 +1940,8 @@ case 59: /* $$->runasgroups = NULL; */ } break; -case 60: -#line 596 "gram.y" +case 64: +#line 615 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1921,8 +1952,8 @@ case 60: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 61: -#line 605 "gram.y" +case 65: +#line 624 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1933,8 +1964,8 @@ case 61: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 62: -#line 614 "gram.y" +case 66: +#line 633 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1951,14 +1982,14 @@ case 62: } } break; -case 63: -#line 631 "gram.y" +case 67: +#line 650 "gram.y" { init_options(&yyval.options); } break; -case 64: -#line 634 "gram.y" +case 68: +#line 653 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1968,8 +1999,8 @@ case 64: } } break; -case 65: -#line 642 "gram.y" +case 69: +#line 661 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1979,8 +2010,8 @@ case 65: } } break; -case 66: -#line 650 "gram.y" +case 70: +#line 669 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -1993,8 +2024,8 @@ case 66: } } break; -case 67: -#line 661 "gram.y" +case 71: +#line 680 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -2002,8 +2033,8 @@ case 67: #endif } break; -case 68: -#line 667 "gram.y" +case 72: +#line 686 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -2011,8 +2042,8 @@ case 68: #endif } break; -case 69: -#line 673 "gram.y" +case 73: +#line 692 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -2020,8 +2051,8 @@ case 69: #endif } break; -case 70: -#line 679 "gram.y" +case 74: +#line 698 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -2029,98 +2060,98 @@ case 70: #endif } break; -case 71: -#line 687 "gram.y" +case 75: +#line 706 "gram.y" { TAGS_INIT(yyval.tag); } break; -case 72: -#line 690 "gram.y" +case 76: +#line 709 "gram.y" { yyval.tag.nopasswd = true; } break; -case 73: -#line 693 "gram.y" +case 77: +#line 712 "gram.y" { yyval.tag.nopasswd = false; } break; -case 74: -#line 696 "gram.y" +case 78: +#line 715 "gram.y" { yyval.tag.noexec = true; } break; -case 75: -#line 699 "gram.y" +case 79: +#line 718 "gram.y" { yyval.tag.noexec = false; } break; -case 76: -#line 702 "gram.y" +case 80: +#line 721 "gram.y" { yyval.tag.setenv = true; } break; -case 77: -#line 705 "gram.y" +case 81: +#line 724 "gram.y" { yyval.tag.setenv = false; } break; -case 78: -#line 708 "gram.y" +case 82: +#line 727 "gram.y" { yyval.tag.log_input = true; } break; -case 79: -#line 711 "gram.y" +case 83: +#line 730 "gram.y" { yyval.tag.log_input = false; } break; -case 80: -#line 714 "gram.y" +case 84: +#line 733 "gram.y" { yyval.tag.log_output = true; } break; -case 81: -#line 717 "gram.y" +case 85: +#line 736 "gram.y" { yyval.tag.log_output = false; } break; -case 82: -#line 720 "gram.y" +case 86: +#line 739 "gram.y" { yyval.tag.follow = true; } break; -case 83: -#line 723 "gram.y" +case 87: +#line 742 "gram.y" { yyval.tag.follow = false; } break; -case 84: -#line 726 "gram.y" +case 88: +#line 745 "gram.y" { yyval.tag.send_mail = true; } break; -case 85: -#line 729 "gram.y" +case 89: +#line 748 "gram.y" { yyval.tag.send_mail = false; } break; -case 86: -#line 734 "gram.y" +case 90: +#line 753 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2129,8 +2160,8 @@ case 86: } } break; -case 87: -#line 741 "gram.y" +case 91: +#line 760 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2139,8 +2170,8 @@ case 87: } } break; -case 88: -#line 748 "gram.y" +case 92: +#line 767 "gram.y" { struct sudo_command *c; @@ -2156,8 +2187,8 @@ case 88: } } break; -case 91: -#line 768 "gram.y" +case 95: +#line 787 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2168,15 +2199,15 @@ case 91: } } break; -case 93: -#line 780 "gram.y" +case 97: +#line 799 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 96: -#line 790 "gram.y" +case 100: +#line 809 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2187,15 +2218,15 @@ case 96: } } break; -case 98: -#line 802 "gram.y" +case 102: +#line 821 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 101: -#line 812 "gram.y" +case 105: +#line 831 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2206,8 +2237,8 @@ case 101: } } break; -case 104: -#line 827 "gram.y" +case 108: +#line 846 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2218,29 +2249,29 @@ case 104: } } break; -case 106: -#line 839 "gram.y" +case 110: +#line 858 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 107: -#line 845 "gram.y" +case 111: +#line 864 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 108: -#line 849 "gram.y" +case 112: +#line 868 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 109: -#line 855 "gram.y" +case 113: +#line 874 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2249,8 +2280,8 @@ case 109: } } break; -case 110: -#line 862 "gram.y" +case 114: +#line 881 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2259,8 +2290,8 @@ case 110: } } break; -case 111: -#line 869 "gram.y" +case 115: +#line 888 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2269,8 +2300,8 @@ case 111: } } break; -case 112: -#line 876 "gram.y" +case 116: +#line 895 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2279,8 +2310,8 @@ case 112: } } break; -case 113: -#line 883 "gram.y" +case 117: +#line 902 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2289,29 +2320,29 @@ case 113: } } break; -case 115: -#line 893 "gram.y" +case 119: +#line 912 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 116: -#line 899 "gram.y" +case 120: +#line 918 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 117: -#line 903 "gram.y" +case 121: +#line 922 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 118: -#line 909 "gram.y" +case 122: +#line 928 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2320,8 +2351,8 @@ case 118: } } break; -case 119: -#line 916 "gram.y" +case 123: +#line 935 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2330,8 +2361,8 @@ case 119: } } break; -case 120: -#line 923 "gram.y" +case 124: +#line 942 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2340,7 +2371,7 @@ case 120: } } break; -#line 2286 "gram.c" +#line 2317 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index 0283daa68d..9e93d6cad8 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -1,3 +1,4 @@ +#define END 0 #define COMMAND 257 #define ALIAS 258 #define DEFVAR 259 diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index e78bf7fa29..6a582f146a 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -84,6 +84,7 @@ static struct command_digest *new_digest(int, char *); } %start file /* special start symbol */ +%token END 0 /* end of file from lexer */ %token COMMAND /* absolute pathname w/ optional args */ %token ALIAS /* an UPPERCASE alias name */ %token DEFVAR /* a Defaults variable name */ @@ -121,7 +122,7 @@ static struct command_digest *new_digest(int, char *); %token RUNASALIAS /* Runas_Alias keyword */ %token ':' '=' ',' '!' '+' '-' /* union member tokens */ %token '(' ')' /* runas tokens */ -%token ERROR +%token ERROR /* error from lexer */ %token TYPE /* SELinux type */ %token ROLE /* SELinux role */ %token PRIVS /* Solaris privileges */ @@ -165,6 +166,8 @@ static struct command_digest *new_digest(int, char *); %type timeoutspec %type notbeforespec %type notafterspec +%type include +%type includedir %type digestspec %type digestlist @@ -184,19 +187,19 @@ entry : COMMENT { | error COMMENT { yyerrok; } - | INCLUDE WORD { - if (!push_include($2, false)) { - free($2); + | include { + if (!push_include($1, false)) { + free($1); YYERROR; } - free($2); + free($1); } - | INCLUDEDIR WORD { - if (!push_include($2, true)) { - free($2); + | includedir { + if (!push_include($1, true)) { + free($1); YYERROR; } - free($2); + free($1); } | userlist privileges { if (!add_userspec($1, $2)) { @@ -238,6 +241,22 @@ entry : COMMENT { } ; +include : INCLUDE WORD COMMENT { + $$ = $2; + } + | INCLUDE WORD END { + $$ = $2; + } + ; + +includedir : INCLUDEDIR WORD COMMENT { + $$ = $2; + } + | INCLUDEDIR WORD END { + $$ = $2; + } + ; + defaults_list : defaults_entry | defaults_list ',' defaults_entry { HLTQ_CONCAT($1, $3, entries); diff --git a/plugins/sudoers/regress/testsudoers/test11.out.ok b/plugins/sudoers/regress/testsudoers/test11.out.ok index d813b0fc33..acb525f2bd 100644 --- a/plugins/sudoers/regress/testsudoers/test11.out.ok +++ b/plugins/sudoers/regress/testsudoers/test11.out.ok @@ -1,29 +1,19 @@ Testing @include with garbage after the path name sudoers:1: syntax error -@include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp - ^ +@include sudoers.local womp womp + ^~~~ Entries for user root: -ALL = ALL - host matched - runas matched - cmnd allowed - -Command allowed +Command unmatched Testing #include with garbage after the path name sudoers:1: syntax error -#include ../../../trunk/plugins/sudoers/regress/testsudoers/test2.inc womp womp - ^ +#include sudoers.local womp womp + ^~~~ Entries for user root: -ALL = ALL - host matched - runas matched - cmnd allowed - -Command allowed +Command unmatched diff --git a/plugins/sudoers/regress/testsudoers/test11.sh b/plugins/sudoers/regress/testsudoers/test11.sh index 5a7089670f..a5bd2d317f 100755 --- a/plugins/sudoers/regress/testsudoers/test11.sh +++ b/plugins/sudoers/regress/testsudoers/test11.sh @@ -13,14 +13,14 @@ exec 2>&1 echo "Testing @include with garbage after the path name" echo "" ./testsudoers -U $MYUID -G $MYGID root id < Date: Fri, 7 Aug 2020 14:22:28 -0600 Subject: [PATCH 020/113] Refactor freeing of InfoMessage list into free_info_messages(). Also fixes a false positive from the clang analyzer. --- logsrvd/sendlog.c | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 9a0aad8a87..cf8304ed01 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -345,6 +345,26 @@ fmt_client_hello(struct client_closure *closure) debug_return_bool(ret); } +static void +free_info_messages(InfoMessage **info_msgs, size_t n_info_msgs) +{ + debug_decl(free_info_messages, SUDO_DEBUG_UTIL); + + if (info_msgs != NULL) { + while (n_info_msgs-- > 0) { + if (info_msgs[n_info_msgs]->value_case == INFO_MESSAGE__VALUE_STRLISTVAL) { + /* Only strlistval was dynamically allocated */ + free(info_msgs[n_info_msgs]->strlistval->strings); + free(info_msgs[n_info_msgs]->strlistval); + } + free(info_msgs[n_info_msgs]); + } + free(info_msgs); + } + + debug_return; +} + static InfoMessage ** fmt_info_messages(struct iolog_info *log_info, char *hostname, size_t *n_info_msgs) @@ -395,6 +415,7 @@ fmt_info_messages(struct iolog_info *log_info, char *hostname, info_msgs[n]->key = "runargv"; info_msgs[n]->strlistval = runargv; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; + runargv = NULL; n++; if (log_info->runas_group != NULL) { @@ -441,9 +462,7 @@ fmt_info_messages(struct iolog_info *log_info, char *hostname, oom: sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - while (n-- > 0) - free(info_msgs[n]); - free(info_msgs); + free_info_messages(info_msgs, n); if (runargv != NULL) { free(runargv->strings); free(runargv); @@ -505,15 +524,7 @@ fmt_reject_message(struct client_closure *closure) } done: - while (n_info_msgs-- > 0) { - if (reject_msg.info_msgs[n_info_msgs]->value_case == INFO_MESSAGE__VALUE_STRLISTVAL) { - /* strlistval was dynamically allocated */ - free(reject_msg.info_msgs[n_info_msgs]->strlistval->strings); - free(reject_msg.info_msgs[n_info_msgs]->strlistval); - } - free(reject_msg.info_msgs[n_info_msgs]); - } - free(reject_msg.info_msgs); + free_info_messages(reject_msg.info_msgs, n_info_msgs); free(hostname); debug_return_bool(ret); @@ -572,15 +583,7 @@ fmt_accept_message(struct client_closure *closure) } done: - while (n_info_msgs-- > 0) { - if (accept_msg.info_msgs[n_info_msgs]->value_case == INFO_MESSAGE__VALUE_STRLISTVAL) { - /* strlistval was dynamically allocated */ - free(accept_msg.info_msgs[n_info_msgs]->strlistval->strings); - free(accept_msg.info_msgs[n_info_msgs]->strlistval); - } - free(accept_msg.info_msgs[n_info_msgs]); - } - free(accept_msg.info_msgs); + free_info_messages(accept_msg.info_msgs, n_info_msgs); free(hostname); debug_return_bool(ret); From fa5d44b8b5ed13f759c63f78efe1efc9c564ea1b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 7 Aug 2020 14:22:56 -0600 Subject: [PATCH 021/113] Quiet some clang 10 analyzer warnings. --- lib/util/event.c | 6 ++--- plugins/sudoers/cvtsudoers_pwutil.c | 13 ++++++---- plugins/sudoers/defaults.c | 37 ++++++++++++++--------------- plugins/sudoers/linux_audit.c | 5 ++-- plugins/sudoers/logging.c | 2 +- plugins/sudoers/pwutil.c | 6 ++--- plugins/sudoers/pwutil_impl.c | 11 +++++---- src/selinux.c | 4 ++++ 8 files changed, 46 insertions(+), 38 deletions(-) diff --git a/lib/util/event.c b/lib/util/event.c index d2a6c8c6a8..41927702d4 100644 --- a/lib/util/event.c +++ b/lib/util/event.c @@ -826,10 +826,9 @@ sudo_ev_get_timeleft_v2(struct sudo_event *ev, struct timespec *ts) { debug_decl(sudo_ev_get_timeleft, SUDO_DEBUG_EVENT); - if (sudo_ev_pending_v1(ev, SUDO_EV_TIMEOUT, ts) != SUDO_EV_TIMEOUT) { - sudo_timespecclear(ts); + sudo_timespecclear(ts); + if (sudo_ev_pending_v1(ev, SUDO_EV_TIMEOUT, ts) != SUDO_EV_TIMEOUT) debug_return_int(-1); - } debug_return_int(0); } @@ -846,6 +845,7 @@ sudo_ev_pending_v1(struct sudo_event *ev, short events, struct timespec *ts) debug_return_int(0); ret = ev->events & events; + CLR(ret, SUDO_EV_TIMEOUT); if (ISSET(ev->flags, SUDO_EVQ_TIMEOUTS) && ISSET(events, SUDO_EV_TIMEOUT)) { ret |= SUDO_EV_TIMEOUT; if (ts != NULL) { diff --git a/plugins/sudoers/cvtsudoers_pwutil.c b/plugins/sudoers/cvtsudoers_pwutil.c index 47c4876791..a7b163e914 100644 --- a/plugins/sudoers/cvtsudoers_pwutil.c +++ b/plugins/sudoers/cvtsudoers_pwutil.c @@ -58,6 +58,8 @@ do { \ if ((src)->name) { \ size = strlen((src)->name) + 1; \ total += size; \ + } else { \ + size = 0; \ } \ } while (0) @@ -65,7 +67,7 @@ do { \ do { \ if ((src)->name) { \ memcpy(cp, (src)->name, size); \ - (dst)->name = cp; \ + (dst)->name = cp; \ cp += size; \ } \ } while (0) @@ -81,7 +83,10 @@ struct cache_item * cvtsudoers_make_pwitem(uid_t uid, const char *name) { char *cp, uidstr[MAX_UID_T_LEN + 2]; - size_t nsize, psize, csize, gsize, dsize, ssize, total; + size_t nsize, psize, gsize, dsize, ssize, total; +#ifdef HAVE_LOGIN_CAP_H + size_t csize; +#endif struct cache_item_pw *pwitem; struct passwd pw, *newpw; struct sudoers_string *s = NULL; @@ -128,7 +133,6 @@ cvtsudoers_make_pwitem(uid_t uid, const char *name) pw.pw_dir = "/"; /* Allocate in one big chunk for easy freeing. */ - nsize = psize = csize = gsize = dsize = ssize = 0; total = sizeof(*pwitem); FIELD_SIZE(&pw, pw_name, nsize); FIELD_SIZE(&pw, pw_passwd, psize); @@ -188,7 +192,7 @@ struct cache_item * cvtsudoers_make_gritem(gid_t gid, const char *name) { char *cp, gidstr[MAX_UID_T_LEN + 2]; - size_t nsize, psize, nmem, total, len; + size_t nsize, psize, total, len, nmem = 0; struct cache_item_gr *gritem; struct group gr, *newgr; struct sudoers_string *s = NULL; @@ -231,7 +235,6 @@ cvtsudoers_make_gritem(gid_t gid, const char *name) gr.gr_gid = gid; /* Allocate in one big chunk for easy freeing. */ - nsize = psize = nmem = 0; total = sizeof(*gritem); FIELD_SIZE(&gr, gr_name, nsize); FIELD_SIZE(&gr, gr_passwd, psize); diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 2c477e8143..a72b3de226 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -199,7 +199,7 @@ find_default(const char *name, const char *file, int lineno, bool quiet) */ static bool parse_default_entry(struct sudo_defs_types *def, const char *val, int op, - union sudo_defs_val *sd_un, const char *file, int lineno, bool quiet) + const char *file, int lineno, bool quiet) { int rc; debug_decl(parse_default_entry, SUDOERS_DEBUG_DEFAULTS); @@ -243,10 +243,10 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, switch (def->type & T_MASK) { case T_LOGFAC: - rc = store_syslogfac(val, sd_un); + rc = store_syslogfac(val, &def->sd_un); break; case T_LOGPRI: - rc = store_syslogpri(val, sd_un); + rc = store_syslogpri(val, &def->sd_un); break; case T_STR: if (ISSET(def->type, T_PATH) && val != NULL && *val != '/') { @@ -262,16 +262,16 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, rc = -1; break; } - rc = store_str(val, sd_un); + rc = store_str(val, &def->sd_un); break; case T_INT: - rc = store_int(val, sd_un); + rc = store_int(val, &def->sd_un); break; case T_UINT: - rc = store_uint(val, sd_un); + rc = store_uint(val, &def->sd_un); break; case T_MODE: - rc = store_mode(val, sd_un); + rc = store_mode(val, &def->sd_un); break; case T_FLAG: if (val != NULL) { @@ -287,20 +287,20 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, rc = -1; break; } - sd_un->flag = op; + def->sd_un.flag = op; rc = true; break; case T_LIST: - rc = store_list(val, sd_un, op); + rc = store_list(val, &def->sd_un, op); break; case T_TIMEOUT: - rc = store_timeout(val, sd_un); + rc = store_timeout(val, &def->sd_un); break; case T_TUPLE: - rc = store_tuple(val, sd_un, def->values); + rc = store_tuple(val, &def->sd_un, def->values); break; case T_TIMESPEC: - rc = store_timespec(val, sd_un); + rc = store_timespec(val, &def->sd_un); break; default: if (!quiet) { @@ -371,7 +371,7 @@ set_default(const char *var, const char *val, int op, const char *file, if (idx != -1) { /* Set parsed value in sudo_defs_table and run callback (if any). */ struct sudo_defs_types *def = &sudo_defs_table[idx]; - if (parse_default_entry(def, val, op, &def->sd_un, file, lineno, quiet)) + if (parse_default_entry(def, val, op, file, lineno, quiet)) debug_return_bool(run_callback(def)); } debug_return_bool(false); @@ -392,7 +392,7 @@ set_early_default(const char *var, const char *val, int op, const char *file, if (idx != -1) { /* Set parsed value in sudo_defs_table but defer callback (if any). */ struct sudo_defs_types *def = &sudo_defs_table[idx]; - if (parse_default_entry(def, val, op, &def->sd_un, file, lineno, quiet)) { + if (parse_default_entry(def, val, op, file, lineno, quiet)) { early->run_callback = true; debug_return_bool(true); } @@ -776,12 +776,11 @@ check_defaults(struct sudoers_parse_tree *parse_tree, bool quiet) TAILQ_FOREACH(d, &parse_tree->defaults, entries) { idx = find_default(d->var, d->file, d->lineno, quiet); if (idx != -1) { - struct sudo_defs_types *def = &sudo_defs_table[idx]; - union sudo_defs_val sd_un; - memset(&sd_un, 0, sizeof(sd_un)); - if (parse_default_entry(def, d->val, d->op, &sd_un, d->file, + struct sudo_defs_types def = sudo_defs_table[idx]; + memset(&def.sd_un, 0, sizeof(def.sd_un)); + if (parse_default_entry(&def, d->val, d->op, d->file, d->lineno, quiet)) { - free_defs_val(def->type, &sd_un); + free_defs_val(def.type, &def.sd_un); continue; } } diff --git a/plugins/sudoers/linux_audit.c b/plugins/sudoers/linux_audit.c index 3fe1ff0c68..89e5e1021d 100644 --- a/plugins/sudoers/linux_audit.c +++ b/plugins/sudoers/linux_audit.c @@ -66,7 +66,7 @@ int linux_audit_command(char *const argv[], int result) { int au_fd, rc = -1; - char *command, *cp; + char *cp, *command = NULL; char * const *av; size_t size, n; debug_decl(linux_audit_command, SUDOERS_DEBUG_AUDIT); @@ -78,7 +78,8 @@ linux_audit_command(char *const argv[], int result) /* Convert argv to a flat string. */ for (size = 0, av = argv; *av != NULL; av++) size += strlen(*av) + 1; - command = malloc(size); + if (size != 0) + command = malloc(size); if (command == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto done; diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 88e3cd3d2d..81da0f7887 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -786,7 +786,7 @@ send_mail(const char *fmt, ...) break; case 0: /* Child. */ - switch (pid = fork()) { + switch (fork()) { case -1: /* Error. */ mysyslog(LOG_ERR, _("unable to fork: %m")); diff --git a/plugins/sudoers/pwutil.c b/plugins/sudoers/pwutil.c index 19d8005d07..7209396022 100644 --- a/plugins/sudoers/pwutil.c +++ b/plugins/sudoers/pwutil.c @@ -856,7 +856,6 @@ int sudo_set_grlist(struct passwd *pw, char * const *groups) { struct cache_item key, *item; - struct rbnode *node; debug_decl(sudo_set_grlist, SUDOERS_DEBUG_NSS); if (grlist_cache == NULL) { @@ -872,7 +871,7 @@ sudo_set_grlist(struct passwd *pw, char * const *groups) */ key.k.name = pw->pw_name; getauthregistry(NULL, key.registry); - if ((node = rbfind(grlist_cache, &key)) == NULL) { + if (rbfind(grlist_cache, &key) == NULL) { if ((item = make_grlist_item(pw, groups)) == NULL) { sudo_warnx(U_("unable to parse groups for %s"), pw->pw_name); debug_return_int(-1); @@ -958,7 +957,6 @@ int sudo_set_gidlist(struct passwd *pw, char * const *gids, unsigned int type) { struct cache_item key, *item; - struct rbnode *node; debug_decl(sudo_set_gidlist, SUDOERS_DEBUG_NSS); if (gidlist_cache == NULL) { @@ -975,7 +973,7 @@ sudo_set_gidlist(struct passwd *pw, char * const *gids, unsigned int type) key.k.name = pw->pw_name; key.type = type; getauthregistry(NULL, key.registry); - if ((node = rbfind(gidlist_cache, &key)) == NULL) { + if (rbfind(gidlist_cache, &key) == NULL) { if ((item = make_gidlist_item(pw, gids, type)) == NULL) { sudo_warnx(U_("unable to parse gids for %s"), pw->pw_name); debug_return_int(-1); diff --git a/plugins/sudoers/pwutil_impl.c b/plugins/sudoers/pwutil_impl.c index 363fd16b47..2e39e0802e 100644 --- a/plugins/sudoers/pwutil_impl.c +++ b/plugins/sudoers/pwutil_impl.c @@ -54,6 +54,8 @@ do { \ if (src->name) { \ size = strlen(src->name) + 1; \ total += size; \ + } else { \ + size = 0; \ } \ } while (0) @@ -78,7 +80,10 @@ sudo_make_pwitem(uid_t uid, const char *name) { char *cp; const char *pw_shell; - size_t nsize, psize, csize, gsize, dsize, ssize, total; + size_t nsize, psize, gsize, dsize, ssize, total; +#ifdef HAVE_LOGIN_CAP_H + size_t csize; +#endif struct cache_item_pw *pwitem; struct passwd *pw, *newpw; debug_decl(sudo_make_pwitem, SUDOERS_DEBUG_NSS); @@ -95,7 +100,6 @@ sudo_make_pwitem(uid_t uid, const char *name) ? _PATH_BSHELL : pw->pw_shell; /* Allocate in one big chunk for easy freeing. */ - nsize = psize = csize = gsize = dsize = ssize = 0; total = sizeof(*pwitem); FIELD_SIZE(pw, pw_name, nsize); FIELD_SIZE(pw, pw_passwd, psize); @@ -160,7 +164,7 @@ struct cache_item * sudo_make_gritem(gid_t gid, const char *name) { char *cp; - size_t nsize, psize, nmem, total, len; + size_t nsize, psize, total, len, nmem = 0; struct cache_item_gr *gritem; struct group *gr, *newgr; debug_decl(sudo_make_gritem, SUDOERS_DEBUG_NSS); @@ -173,7 +177,6 @@ sudo_make_gritem(gid_t gid, const char *name) } /* Allocate in one big chunk for easy freeing. */ - nsize = psize = nmem = 0; total = sizeof(*gritem); FIELD_SIZE(gr, gr_name, nsize); FIELD_SIZE(gr, gr_passwd, psize); diff --git a/src/selinux.c b/src/selinux.c index 4a0f4524c1..5f74c81cc0 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -480,6 +480,10 @@ selinux_execve(int fd, const char *path, char *const argv[], char *envp[], */ for (argc = 0; argv[argc] != NULL; argc++) continue; + if (argc == 0) { + errno = EINVAL; + debug_return; + } nargv = reallocarray(NULL, argc + 3, sizeof(char *)); if (nargv == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); From 6702f4ac4e25083dbf108eedf1cf85599bef8942 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Aug 2020 13:30:10 -0600 Subject: [PATCH 022/113] Some minor cleanup. Use ntuples instead of tuple_last Strip leading and trailing double quotes using a single gsub() ntuples will never be zero so don't bother checking No need to explicitly close files in END --- plugins/sudoers/mkdefaults | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/plugins/sudoers/mkdefaults b/plugins/sudoers/mkdefaults index 905320ac97..e70fc444b2 100755 --- a/plugins/sudoers/mkdefaults +++ b/plugins/sudoers/mkdefaults @@ -29,10 +29,9 @@ fi ${AWK-awk} -f - -v outfile=$OUTFILE $INFILE <<'EOF' BEGIN { - count = 0 tuple_values[0] = "never" tuple_keys["never"] = 0 - tuple_last = 0 + ntuples = 1 header = outfile ".h" cfile = outfile ".c" @@ -74,8 +73,7 @@ BEGIN { desc = "NULL" } else { # Strip leading and trailing double quote and escape the rest - sub(/^"/, "") - sub(/"$/, "") + gsub(/^"|"$/, "") gsub(/"/, "\\\"") desc = sprintf("N_(\"%s\")", $0) } @@ -89,8 +87,8 @@ BEGIN { n = split(values, vals) for (i = 1; i <= n; i++) { if (!(vals[i] in tuple_keys)) { - tuple_keys[vals[i]] = ++tuple_last - tuple_values[tuple_last] = vals[i] + tuple_keys[vals[i]] = ntuples + tuple_values[ntuples++] = vals[i] } } } @@ -131,17 +129,10 @@ END { print "\tNULL, 0, NULL\n }\n};" > cfile # Print out def_tuple - if (tuple_last > 0) { - print "\nenum def_tuple {" > header - for (i = 0; i <= tuple_last; i++) { - printf("\t%s%s\n", tuple_values[i], - i != tuple_last ? "," : "") > header - } - print "};" > header - } - - close(header) - close(cfile) + print "\nenum def_tuple {" > header + for (i = 0; i < ntuples; i++) + printf "%s\t%s", i ? ",\n" : "", tuple_values[i] > header + print "\n};" > header } function die(msg) { @@ -163,11 +154,7 @@ function print_record(rec, recnum) { fields[1], defname, type_map[type] > header printf "\t\"%s\", %s,\n\t%s,\n", fields[1], fields[2], fields[3] > cfile - if (fields[4]) { - printf "\tdef_data_%s,\n", fields[1] > cfile - } else { - printf "\tNULL,\n" > cfile - } + printf "\t%s,\n", fields[4] ? "def_data_" fields[1] : "NULL" > cfile if (fields[5]) { printf "\t%s,\n", fields[5] > cfile } From 8a97150f563edae61e95b8ab2a187ad6aad8c1cc Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Aug 2020 13:59:31 -0600 Subject: [PATCH 023/113] Define YYERROR_VERBOSE for bison and rename COMMENT -> '\n' This results in better error messages when there is a parse error --- plugins/sudoers/gram.c | 713 ++++++++++++++++++++--------------------- plugins/sudoers/gram.h | 35 +- plugins/sudoers/gram.y | 18 +- plugins/sudoers/toke.c | 18 +- plugins/sudoers/toke.l | 4 +- 5 files changed, 397 insertions(+), 391 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index e64e34bb37..75ca1799f5 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -81,8 +81,12 @@ #include "sudo_digest.h" #include "toke.h" +#ifdef YYBISON +# define YYERROR_VERBOSE +#endif + /* If we last saw a newline the entry is on the preceding line. */ -#define this_lineno (last_token == COMMENT ? sudolineno - 1 : sudolineno) +#define this_lineno (last_token == '\n' ? sudolineno - 1 : sudolineno) /* * Globals @@ -109,8 +113,9 @@ static bool add_defaults(int, struct member *, struct defaults *); static bool add_userspec(struct member *, struct privilege *); static struct defaults *new_default(char *, char *, short); static struct member *new_member(char *, int); +static struct sudo_command *new_command(char *, char *); static struct command_digest *new_digest(int, char *); -#line 72 "gram.y" +#line 77 "gram.y" #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { @@ -127,7 +132,7 @@ typedef union { int tok; } YYSTYPE; #endif /* YYSTYPE_DEFINED */ -#line 125 "gram.c" +#line 130 "gram.c" #define END 0 #define COMMAND 257 #define ALIAS 258 @@ -159,24 +164,23 @@ typedef union { #define FOLLOWLNK 284 #define NOFOLLOWLNK 285 #define ALL 286 -#define COMMENT 287 -#define HOSTALIAS 288 -#define CMNDALIAS 289 -#define USERALIAS 290 -#define RUNASALIAS 291 -#define ERROR 292 -#define TYPE 293 -#define ROLE 294 -#define PRIVS 295 -#define LIMITPRIVS 296 -#define CMND_TIMEOUT 297 -#define NOTBEFORE 298 -#define NOTAFTER 299 -#define MYSELF 300 -#define SHA224_TOK 301 -#define SHA256_TOK 302 -#define SHA384_TOK 303 -#define SHA512_TOK 304 +#define HOSTALIAS 287 +#define CMNDALIAS 288 +#define USERALIAS 289 +#define RUNASALIAS 290 +#define ERROR 291 +#define TYPE 292 +#define ROLE 293 +#define PRIVS 294 +#define LIMITPRIVS 295 +#define CMND_TIMEOUT 296 +#define NOTBEFORE 297 +#define NOTAFTER 298 +#define MYSELF 299 +#define SHA224_TOK 300 +#define SHA256_TOK 301 +#define SHA384_TOK 302 +#define SHA512_TOK 303 #define YYERRCODE 256 #if defined(__cplusplus) || defined(__STDC__) const short sudoerslhs[] = @@ -225,7 +229,7 @@ short sudoersdefred[] = #endif { 0, 0, 113, 115, 116, 117, 0, 0, 0, 0, 0, - 0, 0, 114, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 114, 0, 0, 0, 0, 0, 5, 0, 109, 111, 0, 7, 8, 0, 3, 6, 0, 0, 0, 0, 23, 0, 35, 38, 37, 39, 36, 0, 33, 0, 96, 0, 0, 92, 91, 90, 0, 0, @@ -262,25 +266,25 @@ const short sudoerssindex[] = #else short sudoerssindex[] = #endif - { 703, - -277, 0, 0, 0, 0, -240, -230, -15, 51, -21, - -21, -28, 0, 0, -222, -211, -210, -197, -233, 0, - 0, 0, -25, 0, 0, 703, 0, 0, 7, 9, - -1, -196, 0, 18, 0, 0, 0, 0, 0, -220, - 0, -33, 0, -31, -31, 0, 0, 0, -237, -19, - 11, 13, 14, 0, 0, 0, -27, 0, -9, 4, - 23, 0, 21, 25, 0, 24, 28, 0, 26, 30, - 0, 0, -21, -30, 0, 31, 0, 0, 0, 0, - 0, -195, -173, -172, 0, -15, 0, 51, 18, 18, - 18, 0, -171, -170, -167, -166, -28, 18, -245, 0, - 51, -222, -28, -211, -21, -210, -21, -197, 0, 60, - 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 0, 57, 0, 58, 0, 58, 0, - -7, 0, 61, 0, 0, 59, -12, 62, 60, -219, - 0, 0, 0, -236, 0, 0, 63, 59, 0, 0, - 43, 47, 50, 52, 53, 54, 56, 620, 0, 0, - 0, 0, 0, 0, 0, 0, 59, 63, -147, -145, - -144, -143, -142, -141, -140, 0, 0, 0, 0, 0, + { 565, + 8, 0, 0, 0, 0, -241, -240, 19, -21, -13, + -13, -26, 0, -231, -219, -215, -202, -221, 0, 0, + 0, 0, -25, 0, 0, 565, 0, 0, 14, 44, + -14, -198, 0, 18, 0, 0, 0, 0, 0, -210, + 0, -18, 0, -16, -16, 0, 0, 0, -248, 6, + 10, 12, 16, 0, 0, 0, -12, 0, -31, 21, + 17, 0, 29, 33, 0, 31, 35, 0, 34, 38, + 0, 0, -13, -28, 0, 41, 0, 0, 0, 0, + 0, -197, -190, -162, 0, 19, 0, -21, 18, 18, + 18, 0, -161, -159, -157, -156, -26, 18, -223, 0, + -21, -231, -26, -219, -13, -215, -13, -202, 0, 62, + -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 65, 0, 66, 0, 67, 0, 67, 0, + -33, 0, 68, 0, 0, 22, 5, 72, 62, -209, + 0, 0, 0, -228, 0, 0, 70, 22, 0, 0, + 54, 56, 57, 58, 59, 60, 61, 631, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 70, -140, -138, + -137, -136, -135, -133, -132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; #if defined(__cplusplus) || defined(__STDC__) @@ -288,24 +292,24 @@ const short sudoersrindex[] = #else short sudoersrindex[] = #endif - { 124, + { 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 125, 0, 0, 0, 0, - 1, 0, 0, 217, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, + 1, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 253, 0, 0, 297, 0, 0, 333, 0, 0, 369, - 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 441, 477, - 513, 0, 0, 0, 0, 0, 0, 549, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 572, + 246, 0, 0, 283, 0, 0, 318, 0, 0, 353, + 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 423, 458, + 493, 0, 0, 0, 0, 0, 0, 528, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 0, 73, 0, 109, 0, 145, 0, - 85, 0, 181, 0, 0, 86, 87, 0, 572, 653, - 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, + 0, 0, 36, 0, 71, 0, 106, 0, 141, 0, + 93, 0, 176, 0, 0, 94, 95, 0, 584, 663, + 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; @@ -315,119 +319,116 @@ const short sudoersgindex[] = short sudoersgindex[] = #endif { 0, - -6, 0, 46, 10, 90, 75, -94, 32, 97, -5, - 64, 65, 121, 5, -26, 2, -4, 0, 0, 36, + 3, 0, 63, 15, 91, 84, -91, 42, 104, -4, + 64, 73, 129, -7, -19, 9, 2, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 44, 0, 0, 122, 0, 0, 0, 0, - 48, 45, 49, 66, + 0, 0, 69, 0, 0, 130, 0, 0, 0, 0, + 53, 55, 49, 52, }; -#define YYTABLESIZE 994 +#define YYTABLESIZE 966 #if defined(__cplusplus) || defined(__STDC__) const short sudoerstable[] = #else short sudoerstable[] = #endif - { 32, - 25, 32, 121, 42, 49, 32, 78, 40, 80, 28, - 88, 19, 73, 88, 44, 45, 97, 32, 73, 46, - 47, 141, 29, 49, 2, 19, 142, 3, 4, 5, - 110, 73, 30, 25, 99, 60, 95, 35, 93, 36, - 37, 83, 38, 84, 25, 148, 63, 66, 48, 143, - 136, 89, 13, 90, 91, 50, 51, 52, 53, 82, - 69, 86, 85, 190, 101, 39, 98, 112, 94, 95, - 95, 96, 100, 151, 152, 153, 154, 155, 156, 157, - 102, 103, 104, 40, 105, 106, 107, 108, 111, 113, - 114, 144, 117, 118, 95, 123, 119, 120, 88, 131, - 97, 73, 149, 169, 139, 100, 167, 170, 108, 127, - 171, 129, 172, 173, 174, 192, 175, 193, 194, 195, - 196, 197, 198, 1, 2, 62, 66, 63, 65, 64, - 100, 115, 150, 100, 125, 137, 87, 109, 92, 72, - 191, 108, 122, 168, 105, 166, 135, 77, 126, 124, - 0, 116, 0, 0, 0, 0, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, - 0, 128, 0, 0, 0, 0, 0, 105, 0, 0, - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 32, 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 0, 31, 46, 47, - 0, 31, 35, 0, 36, 37, 2, 38, 32, 3, - 4, 5, 0, 31, 0, 0, 0, 46, 47, 14, - 2, 0, 11, 3, 4, 5, 25, 48, 25, 0, - 39, 25, 25, 25, 13, 25, 25, 25, 25, 25, - 25, 25, 50, 51, 52, 53, 48, 0, 13, 0, - 0, 0, 0, 0, 0, 11, 25, 25, 25, 25, - 25, 25, 95, 79, 95, 81, 12, 95, 95, 95, - 0, 95, 95, 95, 95, 95, 95, 95, 35, 0, - 36, 37, 0, 38, 0, 0, 141, 0, 0, 0, - 0, 142, 95, 95, 95, 95, 95, 95, 100, 12, - 100, 0, 10, 100, 100, 100, 39, 100, 100, 100, - 100, 100, 100, 100, 143, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 100, - 100, 100, 100, 100, 108, 10, 108, 0, 13, 108, - 108, 108, 0, 108, 108, 108, 108, 108, 108, 108, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 108, 108, 108, 108, 108, 108, - 105, 13, 105, 0, 9, 105, 105, 105, 0, 105, - 105, 105, 105, 105, 105, 105, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 105, 105, 105, 105, 105, 105, 32, 9, 32, 0, - 17, 32, 32, 32, 0, 32, 32, 32, 32, 32, - 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, - 32, 32, 14, 17, 14, 0, 15, 14, 14, 14, - 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 14, 14, 14, 14, 14, 14, 11, 15, - 11, 0, 16, 11, 11, 11, 0, 11, 11, 11, - 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, - 11, 11, 11, 11, 0, 16, 0, 0, 18, 0, - 0, 0, 12, 0, 12, 0, 0, 12, 12, 12, - 0, 12, 12, 12, 12, 12, 12, 12, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 12, 12, 12, 12, 12, 12, 10, 0, - 10, 0, 0, 10, 10, 10, 0, 10, 10, 10, - 10, 10, 10, 10, 60, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, - 10, 10, 10, 10, 13, 0, 13, 0, 0, 13, - 13, 13, 0, 13, 13, 13, 13, 13, 13, 13, + { 18, + 25, 49, 44, 45, 42, 121, 49, 40, 46, 47, + 25, 40, 99, 78, 32, 88, 32, 28, 73, 18, + 32, 29, 30, 79, 136, 88, 60, 73, 83, 141, + 84, 97, 110, 25, 142, 95, 2, 48, 63, 3, + 4, 5, 66, 80, 25, 95, 82, 35, 73, 36, + 37, 32, 38, 81, 144, 69, 89, 143, 90, 91, + 85, 86, 148, 93, 13, 112, 190, 94, 95, 95, + 100, 98, 113, 96, 102, 39, 50, 51, 52, 53, + 100, 101, 151, 152, 153, 154, 155, 156, 157, 103, + 104, 105, 106, 95, 107, 108, 123, 127, 111, 129, + 114, 131, 117, 100, 118, 108, 119, 120, 88, 97, + 73, 139, 149, 167, 169, 108, 170, 171, 172, 173, + 174, 175, 192, 137, 193, 194, 195, 196, 100, 197, + 198, 1, 2, 62, 66, 63, 65, 64, 108, 92, + 105, 150, 100, 87, 125, 109, 72, 191, 115, 168, + 105, 116, 166, 135, 124, 77, 130, 128, 126, 0, + 0, 0, 0, 108, 0, 0, 0, 122, 0, 0, + 0, 0, 0, 105, 0, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 14, 0, 0, 0, 2, 46, 47, 3, 4, 5, + 46, 47, 35, 32, 36, 37, 35, 38, 36, 37, + 31, 38, 31, 14, 2, 11, 31, 3, 4, 5, + 0, 0, 13, 0, 48, 11, 25, 0, 25, 48, + 39, 25, 25, 25, 39, 25, 25, 25, 25, 25, + 25, 25, 13, 50, 51, 52, 53, 31, 11, 141, + 0, 0, 12, 0, 142, 0, 25, 25, 25, 25, + 25, 95, 12, 95, 0, 0, 95, 95, 95, 0, + 95, 95, 95, 95, 95, 95, 95, 143, 0, 0, + 0, 0, 0, 0, 0, 12, 0, 10, 0, 0, + 0, 95, 95, 95, 95, 95, 100, 10, 100, 0, + 0, 100, 100, 100, 0, 100, 100, 100, 100, 100, + 100, 100, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 13, 0, 0, 0, 100, 100, 100, 100, + 100, 108, 13, 108, 0, 0, 108, 108, 108, 0, + 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 0, 9, 0, 0, + 0, 108, 108, 108, 108, 108, 105, 9, 105, 0, + 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, + 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 17, 0, 0, 0, 105, 105, 105, 105, + 105, 32, 17, 32, 0, 0, 32, 32, 32, 0, + 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 15, 0, 0, + 0, 32, 32, 32, 32, 32, 14, 15, 14, 0, + 0, 14, 14, 14, 0, 14, 14, 14, 14, 14, + 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 16, 0, 0, 0, 14, 14, 14, 14, + 14, 11, 16, 11, 0, 0, 11, 11, 11, 0, + 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 18, 0, 0, + 0, 11, 11, 11, 11, 11, 0, 18, 12, 0, + 12, 0, 0, 12, 12, 12, 0, 12, 12, 12, + 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, + 18, 0, 0, 0, 0, 0, 0, 0, 12, 12, + 12, 12, 12, 10, 19, 10, 0, 0, 10, 10, + 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 0, 0, 0, 10, 10, 10, 10, 10, 13, 0, + 13, 0, 0, 13, 13, 13, 60, 13, 13, 13, + 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, + 13, 13, 13, 9, 0, 9, 0, 0, 9, 9, + 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, + 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 9, 9, 9, 9, 17, 0, + 17, 0, 0, 17, 17, 17, 0, 17, 17, 17, + 17, 17, 17, 17, 0, 75, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, + 17, 17, 17, 15, 0, 15, 0, 0, 15, 15, + 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 0, 13, 13, 13, 13, 13, 13, - 9, 0, 9, 0, 0, 9, 9, 9, 0, 9, - 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 17, 0, 17, 0, - 0, 17, 17, 17, 0, 17, 17, 17, 17, 17, - 17, 17, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, - 17, 17, 15, 0, 15, 19, 0, 15, 15, 15, - 0, 15, 15, 15, 15, 15, 15, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 15, 15, 15, 15, 15, 15, 16, 0, + 0, 0, 0, 15, 15, 15, 15, 15, 16, 0, 16, 0, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, - 16, 16, 16, 16, 18, 0, 18, 0, 0, 18, - 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 60, 60, - 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 0, 0, - 0, 0, 0, 0, 60, 60, 60, 60, 60, 60, - 60, 0, 60, 60, 60, 60, 46, 47, 0, 0, + 16, 16, 16, 18, 0, 18, 0, 0, 18, 18, + 18, 0, 18, 18, 18, 18, 18, 18, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 18, 18, 18, 18, 18, 0, 0, + 1, 0, 2, 0, 0, 3, 4, 5, 0, 6, + 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, + 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 14, 15, 16, 17, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 0, 0, 0, 0, 0, 60, 60, 60, 60, 60, + 60, 60, 0, 60, 60, 60, 60, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 48, 0, 0, 0, 75, + 0, 0, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 48, 0, 0, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, 52, 53, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 75, 75, 75, 75, 0, 1, 0, - 2, 0, 0, 3, 4, 5, 0, 6, 7, 8, - 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, - 15, 16, 17, 18, + 0, 0, 75, 75, 75, 75, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerscheck[] = @@ -435,112 +436,109 @@ const short sudoerscheck[] = short sudoerscheck[] = #endif { 33, - 0, 33, 97, 9, 33, 33, 0, 33, 0, 287, - 44, 33, 44, 44, 10, 11, 44, 33, 44, 257, - 258, 258, 263, 33, 258, 33, 263, 261, 262, 263, - 61, 44, 263, 33, 44, 258, 0, 258, 58, 260, - 261, 43, 263, 45, 44, 58, 258, 258, 286, 286, - 58, 42, 286, 44, 45, 301, 302, 303, 304, 61, - 258, 44, 259, 158, 61, 286, 57, 263, 58, 33, - 58, 58, 0, 293, 294, 295, 296, 297, 298, 299, - 58, 61, 58, 33, 61, 58, 61, 58, 58, 263, - 263, 33, 264, 264, 58, 101, 264, 264, 44, 40, - 44, 44, 41, 61, 44, 33, 44, 61, 0, 105, - 61, 107, 61, 61, 61, 263, 61, 263, 263, 263, - 263, 263, 263, 0, 0, 41, 41, 41, 41, 41, - 58, 86, 139, 59, 103, 131, 40, 73, 49, 19, - 167, 33, 99, 148, 0, 144, 111, 26, 104, 102, - -1, 88, -1, -1, -1, -1, 108, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, - -1, 106, -1, -1, -1, -1, -1, 33, -1, -1, + 0, 33, 10, 11, 9, 97, 33, 33, 257, 258, + 10, 33, 44, 0, 33, 44, 33, 10, 44, 33, + 33, 263, 263, 10, 58, 44, 258, 44, 43, 258, + 45, 44, 61, 33, 263, 0, 258, 286, 258, 261, + 262, 263, 258, 0, 44, 10, 61, 258, 44, 260, + 261, 33, 263, 10, 33, 258, 42, 286, 44, 45, + 259, 44, 58, 58, 286, 263, 158, 58, 33, 58, + 0, 57, 263, 58, 58, 286, 300, 301, 302, 303, + 10, 61, 292, 293, 294, 295, 296, 297, 298, 61, + 58, 61, 58, 58, 61, 58, 101, 105, 58, 107, + 263, 40, 264, 33, 264, 0, 264, 264, 44, 44, + 44, 44, 41, 44, 61, 10, 61, 61, 61, 61, + 61, 61, 263, 131, 263, 263, 263, 263, 58, 263, + 263, 0, 0, 41, 41, 41, 41, 41, 33, 49, + 0, 139, 59, 40, 103, 73, 18, 167, 86, 148, + 10, 88, 144, 111, 102, 26, 108, 106, 104, -1, + -1, -1, -1, 58, -1, -1, -1, 99, -1, -1, + -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, -1, -1, 0, -1, -1, -1, - -1, -1, -1, -1, -1, 259, -1, 259, 257, 258, - -1, 259, 258, -1, 260, 261, 258, 263, 58, 261, - 262, 263, -1, 259, -1, -1, -1, 257, 258, 33, - 258, -1, 0, 261, 262, 263, 256, 286, 258, -1, + 10, -1, -1, -1, 258, 257, 258, 261, 262, 263, + 257, 258, 258, 58, 260, 261, 258, 263, 260, 261, + 259, 263, 259, 33, 258, 0, 259, 261, 262, 263, + -1, -1, 286, -1, 286, 10, 256, -1, 258, 286, 286, 261, 262, 263, 286, 265, 266, 267, 268, 269, - 270, 271, 301, 302, 303, 304, 286, -1, 286, -1, - -1, -1, -1, -1, -1, 33, 286, 287, 288, 289, - 290, 291, 256, 287, 258, 287, 0, 261, 262, 263, - -1, 265, 266, 267, 268, 269, 270, 271, 258, -1, - 260, 261, -1, 263, -1, -1, 258, -1, -1, -1, - -1, 263, 286, 287, 288, 289, 290, 291, 256, 33, - 258, -1, 0, 261, 262, 263, 286, 265, 266, 267, - 268, 269, 270, 271, 286, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 291, 256, 33, 258, -1, 0, 261, - 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 286, 287, 288, 289, 290, 291, - 256, 33, 258, -1, 0, 261, 262, 263, -1, 265, - 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 286, 287, 288, 289, 290, 291, 256, 33, 258, -1, - 0, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 286, 300, 301, 302, 303, 259, 33, 258, + -1, -1, 0, -1, 263, -1, 286, 287, 288, 289, + 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, + 265, 266, 267, 268, 269, 270, 271, 286, -1, -1, + -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, + -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, - 290, 291, 256, 33, 258, -1, 0, 261, 262, 263, - -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 286, 287, 288, 289, 290, 291, 256, 33, - 258, -1, 0, 261, 262, 263, -1, 265, 266, 267, + 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, + 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, + 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, + -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, + 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, + 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, + -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, + -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, + 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, + 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, + -1, 286, 287, 288, 289, 290, -1, 10, 256, -1, + 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, + 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, -1, 286, 287, + 288, 289, 290, 256, 10, 258, -1, -1, 261, 262, + 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, + 258, -1, -1, 261, 262, 263, 33, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 291, -1, 33, -1, -1, 0, -1, - -1, -1, 256, -1, 258, -1, -1, 261, 262, 263, - -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 33, 286, 287, 288, 289, 290, 291, 256, -1, + 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, + 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, - 268, 269, 270, 271, 33, -1, -1, -1, -1, -1, + 268, 269, 270, 271, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 291, 256, -1, 258, -1, -1, 261, - 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, + 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 33, -1, 286, 287, 288, 289, 290, 291, - 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, - 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, - 286, 287, 288, 289, 290, 291, 256, -1, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, - 290, 291, 256, -1, 258, 33, -1, 261, 262, 263, - -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 286, 287, 288, 289, 290, 291, 256, -1, + -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 291, 256, -1, 258, -1, -1, 261, - 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - -1, -1, -1, -1, 286, 287, 288, 289, 290, 291, - -1, -1, -1, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, - -1, -1, -1, -1, 293, 294, 295, 296, 297, 298, - 299, -1, 301, 302, 303, 304, 257, 258, -1, -1, + 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, + 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, -1, -1, -1, 257, + -1, -1, -1, 286, 287, 288, 289, 290, -1, -1, + 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, + 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, + 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, + 286, 287, 288, 289, 290, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + -1, -1, -1, -1, -1, 292, 293, 294, 295, 296, + 297, 298, -1, 300, 301, 302, 303, 257, 258, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, -1, -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 301, 302, 303, 304, 272, 273, 274, 275, 276, 277, + 300, 301, 302, 303, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 301, 302, 303, 304, -1, 256, -1, - 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, - 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 291, + -1, -1, 300, 301, 302, 303, }; #define YYFINAL 20 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 304 +#define YYMAXTOKEN 303 #if YYDEBUG #if defined(__cplusplus) || defined(__STDC__) const char * const sudoersname[] = @@ -548,21 +546,21 @@ const char * const sudoersname[] = char *sudoersname[] = #endif { -"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"'!'",0,0,0,0,0,0,"'('","')'",0,"'+'","','","'-'",0,0,0,0,0,0,0,0,0,0,0,0,"':'", -0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,"'!'",0,0,0,0,0,0,"'('","')'",0,"'+'","','","'-'",0,0,0,0,0,0,0,0,0,0,0,0, +"':'",0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -"COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD","DIGEST", -"INCLUDE","INCLUDEDIR","DEFAULTS","DEFAULTS_HOST","DEFAULTS_USER", +0,0,0,"COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD", +"DIGEST","INCLUDE","INCLUDEDIR","DEFAULTS","DEFAULTS_HOST","DEFAULTS_USER", "DEFAULTS_RUNAS","DEFAULTS_CMND","NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV", "NOSETENV","LOG_INPUT","NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","MAIL", -"NOMAIL","FOLLOWLNK","NOFOLLOWLNK","ALL","COMMENT","HOSTALIAS","CMNDALIAS", -"USERALIAS","RUNASALIAS","ERROR","TYPE","ROLE","PRIVS","LIMITPRIVS", -"CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK","SHA256_TOK", -"SHA384_TOK","SHA512_TOK", +"NOMAIL","FOLLOWLNK","NOFOLLOWLNK","ALL","HOSTALIAS","CMNDALIAS","USERALIAS", +"RUNASALIAS","ERROR","TYPE","ROLE","PRIVS","LIMITPRIVS","CMND_TIMEOUT", +"NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK","SHA256_TOK","SHA384_TOK", +"SHA512_TOK", }; #if defined(__cplusplus) || defined(__STDC__) const char * const sudoersrule[] = @@ -574,8 +572,8 @@ char *sudoersrule[] = "file : line", "line : entry", "line : line entry", -"entry : COMMENT", -"entry : error COMMENT", +"entry : '\\n'", +"entry : error '\\n'", "entry : include", "entry : includedir", "entry : userlist privileges", @@ -588,9 +586,9 @@ char *sudoersrule[] = "entry : DEFAULTS_RUNAS userlist defaults_list", "entry : DEFAULTS_HOST hostlist defaults_list", "entry : DEFAULTS_CMND cmndlist defaults_list", -"include : INCLUDE WORD COMMENT", +"include : INCLUDE WORD '\\n'", "include : INCLUDE WORD END", -"includedir : INCLUDEDIR WORD COMMENT", +"includedir : INCLUDEDIR WORD '\\n'", "includedir : INCLUDEDIR WORD END", "defaults_list : defaults_entry", "defaults_list : defaults_list ',' defaults_entry", @@ -722,7 +720,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 952 "gram.y" +#line 957 "gram.y" void sudoerserror(const char *s) { @@ -820,6 +818,7 @@ new_member(char *name, int type) debug_return_ptr(m); } + static struct sudo_command * new_command(char *cmnd, char *args) { @@ -1198,7 +1197,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1144 "gram.c" +#line 1143 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1389,23 +1388,23 @@ yyparse(void) switch (yyn) { case 1: -#line 176 "gram.y" +#line 181 "gram.y" { ; } break; case 5: -#line 184 "gram.y" +#line 189 "gram.y" { ; } break; case 6: -#line 187 "gram.y" +#line 192 "gram.y" { yyerrok; } break; case 7: -#line 190 "gram.y" +#line 195 "gram.y" { if (!push_include(yyvsp[0].string, false)) { free(yyvsp[0].string); @@ -1415,7 +1414,7 @@ case 7: } break; case 8: -#line 197 "gram.y" +#line 202 "gram.y" { if (!push_include(yyvsp[0].string, true)) { free(yyvsp[0].string); @@ -1425,7 +1424,7 @@ case 8: } break; case 9: -#line 204 "gram.y" +#line 209 "gram.y" { if (!add_userspec(yyvsp[-1].member, yyvsp[0].privilege)) { sudoerserror(N_("unable to allocate memory")); @@ -1434,97 +1433,97 @@ case 9: } break; case 10: -#line 210 "gram.y" +#line 215 "gram.y" { ; } break; case 11: -#line 213 "gram.y" +#line 218 "gram.y" { ; } break; case 12: -#line 216 "gram.y" +#line 221 "gram.y" { ; } break; case 13: -#line 219 "gram.y" +#line 224 "gram.y" { ; } break; case 14: -#line 222 "gram.y" +#line 227 "gram.y" { if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) YYERROR; } break; case 15: -#line 226 "gram.y" +#line 231 "gram.y" { if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 16: -#line 230 "gram.y" +#line 235 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 17: -#line 234 "gram.y" +#line 239 "gram.y" { if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 18: -#line 238 "gram.y" +#line 243 "gram.y" { if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 19: -#line 244 "gram.y" +#line 249 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 20: -#line 247 "gram.y" +#line 252 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 21: -#line 252 "gram.y" +#line 257 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 22: -#line 255 "gram.y" +#line 260 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 24: -#line 261 "gram.y" +#line 266 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; case 25: -#line 267 "gram.y" +#line 272 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1534,7 +1533,7 @@ case 25: } break; case 26: -#line 274 "gram.y" +#line 279 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1544,7 +1543,7 @@ case 26: } break; case 27: -#line 281 "gram.y" +#line 286 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1554,7 +1553,7 @@ case 27: } break; case 28: -#line 288 "gram.y" +#line 293 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1564,7 +1563,7 @@ case 28: } break; case 29: -#line 295 "gram.y" +#line 300 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1574,14 +1573,14 @@ case 29: } break; case 31: -#line 305 "gram.y" +#line 310 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; case 32: -#line 311 "gram.y" +#line 316 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1596,21 +1595,21 @@ case 32: } break; case 33: -#line 325 "gram.y" +#line 330 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 34: -#line 329 "gram.y" +#line 334 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 35: -#line 335 "gram.y" +#line 340 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1620,7 +1619,7 @@ case 35: } break; case 36: -#line 342 "gram.y" +#line 347 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1630,7 +1629,7 @@ case 36: } break; case 37: -#line 349 "gram.y" +#line 354 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1640,7 +1639,7 @@ case 37: } break; case 38: -#line 356 "gram.y" +#line 361 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1650,7 +1649,7 @@ case 38: } break; case 39: -#line 363 "gram.y" +#line 368 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1660,7 +1659,7 @@ case 39: } break; case 41: -#line 373 "gram.y" +#line 378 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1714,7 +1713,7 @@ case 41: } break; case 42: -#line 426 "gram.y" +#line 431 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1768,7 +1767,7 @@ case 42: } break; case 43: -#line 479 "gram.y" +#line 484 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1778,7 +1777,7 @@ case 43: } break; case 44: -#line 486 "gram.y" +#line 491 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1788,7 +1787,7 @@ case 44: } break; case 45: -#line 493 "gram.y" +#line 498 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1798,7 +1797,7 @@ case 45: } break; case 46: -#line 500 "gram.y" +#line 505 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1808,20 +1807,20 @@ case 46: } break; case 48: -#line 510 "gram.y" +#line 515 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; case 49: -#line 516 "gram.y" +#line 521 "gram.y" { yyval.member = yyvsp[0].member; } break; case 50: -#line 519 "gram.y" +#line 524 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1843,75 +1842,75 @@ case 50: } break; case 51: -#line 540 "gram.y" +#line 545 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 52: -#line 544 "gram.y" +#line 549 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 53: -#line 550 "gram.y" +#line 555 "gram.y" { yyval.string = yyvsp[0].string; } break; case 54: -#line 555 "gram.y" +#line 560 "gram.y" { yyval.string = yyvsp[0].string; } break; case 55: -#line 559 "gram.y" +#line 564 "gram.y" { yyval.string = yyvsp[0].string; } break; case 56: -#line 564 "gram.y" +#line 569 "gram.y" { yyval.string = yyvsp[0].string; } break; case 57: -#line 569 "gram.y" +#line 574 "gram.y" { yyval.string = yyvsp[0].string; } break; case 58: -#line 574 "gram.y" +#line 579 "gram.y" { yyval.string = yyvsp[0].string; } break; case 59: -#line 578 "gram.y" +#line 583 "gram.y" { yyval.string = yyvsp[0].string; } break; case 60: -#line 583 "gram.y" +#line 588 "gram.y" { yyval.runas = NULL; } break; case 61: -#line 586 "gram.y" +#line 591 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; case 62: -#line 591 "gram.y" +#line 596 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1929,7 +1928,7 @@ case 62: } break; case 63: -#line 606 "gram.y" +#line 611 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1941,7 +1940,7 @@ case 63: } break; case 64: -#line 615 "gram.y" +#line 620 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1953,7 +1952,7 @@ case 64: } break; case 65: -#line 624 "gram.y" +#line 629 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1965,7 +1964,7 @@ case 65: } break; case 66: -#line 633 "gram.y" +#line 638 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1983,13 +1982,13 @@ case 66: } break; case 67: -#line 650 "gram.y" +#line 655 "gram.y" { init_options(&yyval.options); } break; case 68: -#line 653 "gram.y" +#line 658 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -2000,7 +1999,7 @@ case 68: } break; case 69: -#line 661 "gram.y" +#line 666 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -2011,7 +2010,7 @@ case 69: } break; case 70: -#line 669 "gram.y" +#line 674 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -2025,7 +2024,7 @@ case 70: } break; case 71: -#line 680 "gram.y" +#line 685 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -2034,7 +2033,7 @@ case 71: } break; case 72: -#line 686 "gram.y" +#line 691 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -2043,7 +2042,7 @@ case 72: } break; case 73: -#line 692 "gram.y" +#line 697 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -2052,7 +2051,7 @@ case 73: } break; case 74: -#line 698 "gram.y" +#line 703 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -2061,97 +2060,97 @@ case 74: } break; case 75: -#line 706 "gram.y" +#line 711 "gram.y" { TAGS_INIT(yyval.tag); } break; case 76: -#line 709 "gram.y" +#line 714 "gram.y" { yyval.tag.nopasswd = true; } break; case 77: -#line 712 "gram.y" +#line 717 "gram.y" { yyval.tag.nopasswd = false; } break; case 78: -#line 715 "gram.y" +#line 720 "gram.y" { yyval.tag.noexec = true; } break; case 79: -#line 718 "gram.y" +#line 723 "gram.y" { yyval.tag.noexec = false; } break; case 80: -#line 721 "gram.y" +#line 726 "gram.y" { yyval.tag.setenv = true; } break; case 81: -#line 724 "gram.y" +#line 729 "gram.y" { yyval.tag.setenv = false; } break; case 82: -#line 727 "gram.y" +#line 732 "gram.y" { yyval.tag.log_input = true; } break; case 83: -#line 730 "gram.y" +#line 735 "gram.y" { yyval.tag.log_input = false; } break; case 84: -#line 733 "gram.y" +#line 738 "gram.y" { yyval.tag.log_output = true; } break; case 85: -#line 736 "gram.y" +#line 741 "gram.y" { yyval.tag.log_output = false; } break; case 86: -#line 739 "gram.y" +#line 744 "gram.y" { yyval.tag.follow = true; } break; case 87: -#line 742 "gram.y" +#line 747 "gram.y" { yyval.tag.follow = false; } break; case 88: -#line 745 "gram.y" +#line 750 "gram.y" { yyval.tag.send_mail = true; } break; case 89: -#line 748 "gram.y" +#line 753 "gram.y" { yyval.tag.send_mail = false; } break; case 90: -#line 753 "gram.y" +#line 758 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2161,7 +2160,7 @@ case 90: } break; case 91: -#line 760 "gram.y" +#line 765 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2171,7 +2170,7 @@ case 91: } break; case 92: -#line 767 "gram.y" +#line 772 "gram.y" { struct sudo_command *c; @@ -2188,7 +2187,7 @@ case 92: } break; case 95: -#line 787 "gram.y" +#line 792 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2200,14 +2199,14 @@ case 95: } break; case 97: -#line 799 "gram.y" +#line 804 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 100: -#line 809 "gram.y" +#line 814 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2219,14 +2218,14 @@ case 100: } break; case 102: -#line 821 "gram.y" +#line 826 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 105: -#line 831 "gram.y" +#line 836 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2238,7 +2237,7 @@ case 105: } break; case 108: -#line 846 "gram.y" +#line 851 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2250,28 +2249,28 @@ case 108: } break; case 110: -#line 858 "gram.y" +#line 863 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 111: -#line 864 "gram.y" +#line 869 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 112: -#line 868 "gram.y" +#line 873 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 113: -#line 874 "gram.y" +#line 879 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2281,7 +2280,7 @@ case 113: } break; case 114: -#line 881 "gram.y" +#line 886 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2291,7 +2290,7 @@ case 114: } break; case 115: -#line 888 "gram.y" +#line 893 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2301,7 +2300,7 @@ case 115: } break; case 116: -#line 895 "gram.y" +#line 900 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2311,7 +2310,7 @@ case 116: } break; case 117: -#line 902 "gram.y" +#line 907 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2321,28 +2320,28 @@ case 117: } break; case 119: -#line 912 "gram.y" +#line 917 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 120: -#line 918 "gram.y" +#line 923 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 121: -#line 922 "gram.y" +#line 927 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 122: -#line 928 "gram.y" +#line 933 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2352,7 +2351,7 @@ case 122: } break; case 123: -#line 935 "gram.y" +#line 940 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2362,7 +2361,7 @@ case 123: } break; case 124: -#line 942 "gram.y" +#line 947 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2371,7 +2370,7 @@ case 124: } } break; -#line 2317 "gram.c" +#line 2316 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index 9e93d6cad8..6cfe58631b 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -29,24 +29,23 @@ #define FOLLOWLNK 284 #define NOFOLLOWLNK 285 #define ALL 286 -#define COMMENT 287 -#define HOSTALIAS 288 -#define CMNDALIAS 289 -#define USERALIAS 290 -#define RUNASALIAS 291 -#define ERROR 292 -#define TYPE 293 -#define ROLE 294 -#define PRIVS 295 -#define LIMITPRIVS 296 -#define CMND_TIMEOUT 297 -#define NOTBEFORE 298 -#define NOTAFTER 299 -#define MYSELF 300 -#define SHA224_TOK 301 -#define SHA256_TOK 302 -#define SHA384_TOK 303 -#define SHA512_TOK 304 +#define HOSTALIAS 287 +#define CMNDALIAS 288 +#define USERALIAS 289 +#define RUNASALIAS 290 +#define ERROR 291 +#define TYPE 292 +#define ROLE 293 +#define PRIVS 294 +#define LIMITPRIVS 295 +#define CMND_TIMEOUT 296 +#define NOTBEFORE 297 +#define NOTAFTER 298 +#define MYSELF 299 +#define SHA224_TOK 300 +#define SHA256_TOK 301 +#define SHA384_TOK 302 +#define SHA512_TOK 303 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 6a582f146a..7f023b0b88 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -38,8 +38,12 @@ #include "sudo_digest.h" #include "toke.h" +#ifdef YYBISON +# define YYERROR_VERBOSE +#endif + /* If we last saw a newline the entry is on the preceding line. */ -#define this_lineno (last_token == COMMENT ? sudolineno - 1 : sudolineno) +#define this_lineno (last_token == '\n' ? sudolineno - 1 : sudolineno) /* * Globals @@ -66,6 +70,7 @@ static bool add_defaults(int, struct member *, struct defaults *); static bool add_userspec(struct member *, struct privilege *); static struct defaults *new_default(char *, char *, short); static struct member *new_member(char *, int); +static struct sudo_command *new_command(char *, char *); static struct command_digest *new_digest(int, char *); %} @@ -115,13 +120,13 @@ static struct command_digest *new_digest(int, char *); %token FOLLOWLNK /* follow symbolic links */ %token NOFOLLOWLNK /* don't follow symbolic links */ %token ALL /* ALL keyword */ -%token COMMENT /* comment and/or carriage return */ %token HOSTALIAS /* Host_Alias keyword */ %token CMNDALIAS /* Cmnd_Alias keyword */ %token USERALIAS /* User_Alias keyword */ %token RUNASALIAS /* Runas_Alias keyword */ %token ':' '=' ',' '!' '+' '-' /* union member tokens */ %token '(' ')' /* runas tokens */ +%token '\n' /* newline (with optional comment) */ %token ERROR /* error from lexer */ %token TYPE /* SELinux type */ %token ROLE /* SELinux role */ @@ -181,10 +186,10 @@ line : entry | line entry ; -entry : COMMENT { +entry : '\n' { ; } - | error COMMENT { + | error '\n' { yyerrok; } | include { @@ -241,7 +246,7 @@ entry : COMMENT { } ; -include : INCLUDE WORD COMMENT { +include : INCLUDE WORD '\n' { $$ = $2; } | INCLUDE WORD END { @@ -249,7 +254,7 @@ include : INCLUDE WORD COMMENT { } ; -includedir : INCLUDEDIR WORD COMMENT { +includedir : INCLUDEDIR WORD '\n' { $$ = $2; } | INCLUDEDIR WORD END { @@ -1046,6 +1051,7 @@ new_member(char *name, int type) debug_return_ptr(m); } + static struct sudo_command * new_command(char *cmnd, char *args) { diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index dca198f921..50cfc23086 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -9,7 +9,7 @@ #define YY_INT_ALIGNED short int -/* $OpenBSD: flex.skl,v 1.16 2017/05/02 19:16:19 millert Exp $ */ +/* $OpenBSD: flex.skl,v 1.17 2020/08/06 17:23:29 deraadt Exp $ */ /* A lexical scanner generated by flex */ @@ -2458,11 +2458,13 @@ YY_DECL if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ - if ( ! sudoersin ) + if ( ! sudoersin ) { sudoersin = stdin; + } - if ( ! sudoersout ) + if ( ! sudoersout ) { sudoersout = stdout; + } if ( ! YY_CURRENT_BUFFER ) { sudoersensure_buffer_stack (); @@ -2471,12 +2473,12 @@ YY_DECL } sudoers_load_buffer_state( ); - } + } { #line 119 "toke.l" -#line 2474 "toke.c" +#line 2476 "toke.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -3392,7 +3394,7 @@ YY_RULE_SETUP sudolineno++; continued = false; LEXTRACE("\n"); - LEXRETURN(COMMENT); + LEXRETURN('\n'); } /* return newline */ YY_BREAK case 74: @@ -3428,7 +3430,7 @@ YY_RULE_SETUP LEXRETURN(ERROR); } LEXTRACE("#\n"); - LEXRETURN(COMMENT); + LEXRETURN('\n'); } /* comment, not uid/gid */ YY_BREAK case 77: @@ -3463,7 +3465,7 @@ YY_RULE_SETUP #line 796 "toke.l" ECHO; YY_BREAK -#line 3461 "toke.c" +#line 3463 "toke.c" case YY_END_OF_BUFFER: { diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 46fd1080dd..282fd1f43f 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -750,7 +750,7 @@ sudoedit { sudolineno++; continued = false; LEXTRACE("\n"); - LEXRETURN(COMMENT); + LEXRETURN('\n'); } /* return newline */ <*>[[:blank:]]+ { /* throw away space/tabs */ @@ -775,7 +775,7 @@ sudoedit { LEXRETURN(ERROR); } LEXTRACE("#\n"); - LEXRETURN(COMMENT); + LEXRETURN('\n'); } /* comment, not uid/gid */ <*>. { From cef6e3687e0e67eea8678024fe9a060d0a8d8047 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Aug 2020 19:24:32 -0600 Subject: [PATCH 024/113] Switch from memset_s() -> explicit_bzero(). memset_s() (and all of Annex K) is likely to be removed from the a future version of the standard. --- MANIFEST | 2 +- config.h.in | 18 ++++--- configure | 88 +++++++++++++------------------ configure.ac | 13 ++--- doc/sudo_plugin.man.in | 3 -- doc/sudo_plugin.mdoc.in | 3 -- include/sudo_compat.h | 16 ++---- include/sudo_plugin.h | 4 +- lib/util/Makefile.in | 16 +++--- lib/util/arc4random.c | 2 +- lib/util/explicit_bzero.c | 77 +++++++++++++++++++++++++++ lib/util/getentropy.c | 2 +- lib/util/memset_s.c | 78 --------------------------- lib/util/sha2.c | 8 +-- plugins/sudoers/auth/aix_auth.c | 2 +- plugins/sudoers/auth/bsdauth.c | 2 +- plugins/sudoers/auth/fwtk.c | 4 +- plugins/sudoers/auth/pam.c | 4 +- plugins/sudoers/auth/passwd.c | 2 +- plugins/sudoers/auth/secureware.c | 2 +- plugins/sudoers/auth/securid5.c | 4 +- plugins/sudoers/auth/sia.c | 2 +- plugins/sudoers/auth/sudo_auth.c | 2 +- scripts/mkdep.pl | 2 +- src/conversation.c | 4 +- 25 files changed, 168 insertions(+), 192 deletions(-) create mode 100644 lib/util/explicit_bzero.c delete mode 100644 lib/util/memset_s.c diff --git a/MANIFEST b/MANIFEST index 302182f336..fcd66bfac6 100644 --- a/MANIFEST +++ b/MANIFEST @@ -138,6 +138,7 @@ lib/util/dup3.c lib/util/event.c lib/util/event_poll.c lib/util/event_select.c +lib/util/explicit_bzero.c lib/util/fatal.c lib/util/fchmodat.c lib/util/fnmatch.c @@ -163,7 +164,6 @@ lib/util/locking.c lib/util/logfac.c lib/util/logpri.c lib/util/memrchr.c -lib/util/memset_s.c lib/util/mkdir_parents.c lib/util/mksiglist.c lib/util/mksiglist.h diff --git a/config.h.in b/config.h.in index 1168b38db8..c363339104 100644 --- a/config.h.in +++ b/config.h.in @@ -88,6 +88,9 @@ /* Define to 1 to enable BSM audit support. */ #undef HAVE_BSM_AUDIT +/* Define to 1 if you have the `bzero' function. */ +#undef HAVE_BZERO + /* Define to 1 if you have the `cfmakeraw' function. */ #undef HAVE_CFMAKERAW @@ -255,6 +258,12 @@ /* Define to 1 if you have the `execvpe' function. */ #undef HAVE_EXECVPE +/* Define to 1 if you have the `explicit_bzero' function. */ +#undef HAVE_EXPLICIT_BZERO + +/* Define to 1 if you have the `explicit_memset' function. */ +#undef HAVE_EXPLICIT_MEMSET + /* Define to 1 if you have the `faccessat' function. */ #undef HAVE_FACCESSAT @@ -535,6 +544,9 @@ /* Define to 1 if you have the `memrchr' function. */ #undef HAVE_MEMRCHR +/* Define to 1 if you have the `memset_explicit' function. */ +#undef HAVE_MEMSET_EXPLICIT + /* Define to 1 if you have the `memset_s' function. */ #undef HAVE_MEMSET_S @@ -1263,9 +1275,6 @@ /* Define to empty if `const' does not conform to ANSI C. */ #undef const -/* Define to `int' if does not define. */ -#undef errno_t - /* Define to `int' if doesn't define. */ #undef gid_t @@ -1284,9 +1293,6 @@ /* Define to an OS-specific initialization function or `os_init_common'. */ #undef os_init -/* Define to `size_t' if does not define. */ -#undef rsize_t - /* Define to `int' if does not define. */ #undef sig_atomic_t diff --git a/configure b/configure index 1d1c19cee0..8e3af5fd05 100755 --- a/configure +++ b/configure @@ -18057,8 +18057,6 @@ fi fi -$as_echo "#define __STDC_WANT_LIB_EXT1__ 1" >>confdefs.h - ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : @@ -18318,28 +18316,6 @@ else fi -ac_fn_c_check_type "$LINENO" "rsize_t" "ac_cv_type_rsize_t" "$ac_includes_default" -if test "x$ac_cv_type_rsize_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define rsize_t size_t -_ACEOF - -fi - -ac_fn_c_check_type "$LINENO" "errno_t" "ac_cv_type_errno_t" "$ac_includes_default" -if test "x$ac_cv_type_errno_t" = xyes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define errno_t int -_ACEOF - -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking max length of uid_t" >&5 $as_echo_n "checking max length of uid_t... " >&6; } @@ -20513,6 +20489,44 @@ fi done +fi +done + +for ac_func in explicit_bzero +do : + ac_fn_c_check_func "$LINENO" "explicit_bzero" "ac_cv_func_explicit_bzero" +if test "x$ac_cv_func_explicit_bzero" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_EXPLICIT_BZERO 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" explicit_bzero.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS explicit_bzero.$ac_objext" + ;; +esac + + + for _sym in sudo_explicit_bzero; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + for ac_func in explicit_memset memset_explicit memset_s bzero +do : + as_ac_var=`$as_echo "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 `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + break +fi +done + + fi done @@ -20659,32 +20673,6 @@ esac done -fi -done - -for ac_func in memset_s -do : - ac_fn_c_check_func "$LINENO" "memset_s" "ac_cv_func_memset_s" -if test "x$ac_cv_func_memset_s" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_MEMSET_S 1 -_ACEOF - -else - - case " $LIBOBJS " in - *" memset_s.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS memset_s.$ac_objext" - ;; -esac - - - for _sym in sudo_memset_s; do - COMPAT_EXP="${COMPAT_EXP}${_sym} -" - done - - fi done diff --git a/configure.ac b/configure.ac index faaa51f6a7..3b3d047f39 100644 --- a/configure.ac +++ b/configure.ac @@ -2504,9 +2504,7 @@ if test ${with_project-'no'} != "no"; then fi dnl dnl typedef checks -dnl We need to define __STDC_WANT_LIB_EXT1__ for errno_t and rsize_t dnl -AC_DEFINE([__STDC_WANT_LIB_EXT1__]) AC_TYPE_MODE_T AC_TYPE_UID_T AC_CHECK_TYPE([clockid_t], [], [AC_DEFINE(clockid_t, int)], [#include @@ -2527,8 +2525,6 @@ AC_CHECK_TYPE(uint64_t, unsigned long long) AC_CHECK_TYPE(socklen_t, [], [AC_DEFINE(socklen_t, unsigned int)], [ AC_INCLUDES_DEFAULT #include ]) -AC_CHECK_TYPE(rsize_t, size_t) -AC_CHECK_TYPE(errno_t, int) SUDO_UID_T_LEN SUDO_SOCK_SA_LEN SUDO_SOCK_SIN_LEN @@ -2810,6 +2806,11 @@ AC_CHECK_FUNCS([futimens], [], [ SUDO_APPEND_COMPAT_EXP(sudo_futimens) AC_CHECK_FUNCS([futimes futimesat futime], [break]) ]) +AC_CHECK_FUNCS([explicit_bzero], [], [ + AC_LIBOBJ(explicit_bzero) + SUDO_APPEND_COMPAT_EXP(sudo_explicit_bzero) + AC_CHECK_FUNCS([explicit_memset memset_explicit memset_s bzero], [break]) +]) SUDO_FUNC_FNMATCH([AC_DEFINE(HAVE_FNMATCH)], [ AC_LIBOBJ(fnmatch) SUDO_APPEND_COMPAT_EXP(sudo_fnmatch) @@ -2824,10 +2825,6 @@ AC_CHECK_FUNCS([memrchr], [], [ AC_LIBOBJ(memrchr) SUDO_APPEND_COMPAT_EXP(sudo_memrchr) ]) -AC_CHECK_FUNCS([memset_s], [], [ - AC_LIBOBJ(memset_s) - SUDO_APPEND_COMPAT_EXP(sudo_memset_s) -]) AC_CHECK_FUNCS(nanosleep, [], [ # On Solaris, nanosleep is in librt AC_CHECK_LIB(rt, nanosleep, [ diff --git a/doc/sudo_plugin.man.in b/doc/sudo_plugin.man.in index 0b69f4fb7e..4ba139f49b 100644 --- a/doc/sudo_plugin.man.in +++ b/doc/sudo_plugin.man.in @@ -4481,9 +4481,6 @@ the trailing NUL character). In practical terms, this is the longest password \fBsudo\fR will support. -It is also useful as a maximum value for the -\fBmemset_s\fR() -function when clearing passwords filled in by the conversation function. .PP The \fBprintf\fR()-style diff --git a/doc/sudo_plugin.mdoc.in b/doc/sudo_plugin.mdoc.in index f5442088d6..c942db8a81 100644 --- a/doc/sudo_plugin.mdoc.in +++ b/doc/sudo_plugin.mdoc.in @@ -3960,9 +3960,6 @@ the trailing NUL character). In practical terms, this is the longest password .Nm sudo will support. -It is also useful as a maximum value for the -.Fn memset_s -function when clearing passwords filled in by the conversation function. .Pp The .Fn printf Ns -style diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 879a0f3ff4..03e256828c 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -30,12 +30,6 @@ !defined(HAVE_VSYSLOG) || defined(PREFER_PORTABLE_SNPRINTF) # include #endif -#if !defined(HAVE_MEMSET_S) && !defined(rsize_t) -# include /* for rsize_t */ -# ifdef HAVE_STRING_H -# include /* for rsize_t on AIX */ -# endif /* HAVE_STRING_H */ -#endif /* HAVE_MEMSET_S && rsize_t */ /* * Macros and functions that may be missing on some operating systems. @@ -442,6 +436,11 @@ __dso_public void sudo_closefrom(int); # undef closefrom # define closefrom(_a) sudo_closefrom((_a)) #endif /* HAVE_CLOSEFROM */ +#ifndef HAVE_EXPLICIT_BZERO +__dso_public void sudo_explicit_bzero(void *s, size_t n); +# undef explicit_bzero +# define explicit_bzero(_a, _b) sudo_explicit_bzero((_a), (_b)) +#endif /* HAVE_EXPLICIT_BZERO */ #ifdef PREFER_PORTABLE_GETCWD __dso_public char *sudo_getcwd(char *, size_t size); # undef getcwd @@ -536,11 +535,6 @@ __dso_public void *sudo_memrchr(const void *s, int c, size_t n); # undef memrchr # define memrchr(_a, _b, _c) sudo_memrchr((_a), (_b), (_c)) #endif /* HAVE_MEMRCHR */ -#ifndef HAVE_MEMSET_S -__dso_public errno_t sudo_memset_s(void *v, rsize_t smax, int c, rsize_t n); -# undef memset_s -# define memset_s(_a, _b, _c, _d) sudo_memset_s((_a), (_b), (_c), (_d)) -#endif /* HAVE_MEMSET_S */ #if !defined(HAVE_MKDTEMP) || !defined(HAVE_MKSTEMPS) __dso_public char *sudo_mkdtemp(char *path); # undef mkdtemp diff --git a/include/sudo_plugin.h b/include/sudo_plugin.h index 439ef09e82..61f0f3dd9f 100644 --- a/include/sudo_plugin.h +++ b/include/sudo_plugin.h @@ -57,9 +57,7 @@ struct sudo_conv_message { * conversing with the user. In practical terms, this is the longest * password sudo will support. This means that a buffer of size * SUDO_CONV_REPL_MAX+1 is guaranteed to be able to hold any reply - * from the conversation function. It is also useful as a max value - * for memset_s() when clearing passwords returned by the conversation - * function. + * from the conversation function. */ #define SUDO_CONV_REPL_MAX 1023 diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index f1e9a6223b..342489f0f0 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -559,6 +559,14 @@ event_select.i: $(srcdir)/event_select.c $(incdir)/compat/stdbool.h \ $(CC) -E -o $@ $(CPPFLAGS) $< event_select.plog: event_select.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/event_select.c --i-file $< --output-file $@ +explicit_bzero.lo: $(srcdir)/explicit_bzero.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/explicit_bzero.c +explicit_bzero.i: $(srcdir)/explicit_bzero.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +explicit_bzero.plog: explicit_bzero.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/explicit_bzero.c --i-file $< --output-file $@ fatal.lo: $(srcdir)/fatal.c $(incdir)/compat/getaddrinfo.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ @@ -847,14 +855,6 @@ memrchr.i: $(srcdir)/memrchr.c $(incdir)/sudo_compat.h $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< memrchr.plog: memrchr.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/memrchr.c --i-file $< --output-file $@ -memset_s.lo: $(srcdir)/memset_s.c $(incdir)/sudo_compat.h \ - $(top_builddir)/config.h - $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/memset_s.c -memset_s.i: $(srcdir)/memset_s.c $(incdir)/sudo_compat.h \ - $(top_builddir)/config.h - $(CC) -E -o $@ $(CPPFLAGS) $< -memset_s.plog: memset_s.i - rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/memset_s.c --i-file $< --output-file $@ mkdir_parents.lo: $(srcdir)/mkdir_parents.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ diff --git a/lib/util/arc4random.c b/lib/util/arc4random.c index 4e5994951b..77e3ec205f 100644 --- a/lib/util/arc4random.c +++ b/lib/util/arc4random.c @@ -103,7 +103,7 @@ _rs_stir(void) _rs_init(rnd, sizeof(rnd)); } else _rs_rekey(rnd, sizeof(rnd)); - memset_s(rnd, sizeof(rnd), 0, sizeof(rnd)); /* discard source seed */ + explicit_bzero(rnd, sizeof(rnd)); /* discard source seed */ /* invalidate rs_buf */ rs_have = 0; diff --git a/lib/util/explicit_bzero.c b/lib/util/explicit_bzero.c new file mode 100644 index 0000000000..a7defbd0f4 --- /dev/null +++ b/lib/util/explicit_bzero.c @@ -0,0 +1,77 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include + +#define __STDC_WANT_LIB_EXT1__ 1 /* for memset_s() */ + +#include +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ + +#include "sudo_compat.h" + +#ifndef HAVE_EXPLICIT_BZERO + +# if defined(HAVE_EXPLICIT_MEMSET) +void +sudo_explicit_bzero(void *s, size_t n) +{ + explicit_memset(s, 0, n); +} +# elif defined(HAVE_MEMSET_EXPLICIT) +void +sudo_explicit_bzero(void *s, size_t n) +{ + memset_explicit(s, 0, n); +} +# elif defined(HAVE_MEMSET_S) +void +sudo_explicit_bzero(void *s, size_t n) +{ + (void)memset_s(s, n, 0, n); +} +# elif defined(HAVE_BZERO) +/* Jumping through a volatile function pointer should not be optimized away. */ +void (* volatile sudo_explicit_bzero_impl)(void *, size_t) = + (void (*)(void *, size_t))bzero; + +void +sudo_explicit_bzero(void *s, size_t n) +{ + sudo_explicit_bzero_impl(s, n); +} +# else +void +sudo_explicit_bzero(void *v, size_t n) +{ + volatile unsigned char *s = v; + + /* Updating through a volatile pointer should not be optimized away. */ + while (n--) + *s++ = '\0'; +} +# endif /* HAVE_BZERO */ + +#endif /* HAVE_EXPLICIT_BZERO */ diff --git a/lib/util/getentropy.c b/lib/util/getentropy.c index 73d7b634a5..694eb52b5f 100644 --- a/lib/util/getentropy.c +++ b/lib/util/getentropy.c @@ -614,7 +614,7 @@ getentropy_fallback(void *buf, size_t len) done: sudo_digest_free(ctx); if (results != NULL) { - memset_s(results, sizeof(results), 0, sizeof(results)); + explicit_bzero(results, sizeof(results)); free(results); } return (ret); diff --git a/lib/util/memset_s.c b/lib/util/memset_s.c deleted file mode 100644 index f6a04fa699..0000000000 --- a/lib/util/memset_s.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: ISC - * - * Copyright (c) 2013-2014 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 -#if defined(HAVE_STDINT_H) -# include -#elif defined(HAVE_INTTYPES_H) -# include -#endif - -#include "sudo_compat.h" - -#ifndef RSIZE_MAX -# if defined(SIZE_MAX) -# define RSIZE_MAX (SIZE_MAX >> 1) -# elif defined(__LP64__) -# define RSIZE_MAX 0x7fffffffffffffffUL -# else -# define RSIZE_MAX 0x7fffffffU -# endif -#endif - -/* - * Simple implementation of C11 memset_s() function. - * We use a volatile pointer when updating the byte string. - * Most compilers will avoid optimizing away access to a - * volatile pointer, even if the pointer appears to be unused - * after the call. - * - * Note that C11 does not specify the return value on error, only - * that it be non-zero. We use EINVAL for all errors. - */ -errno_t -sudo_memset_s(void *v, rsize_t smax, int c, rsize_t n) -{ - errno_t ret = 0; - volatile unsigned char *s = v; - - /* Fatal runtime-constraint violations. */ - if (s == NULL || smax > RSIZE_MAX) { - ret = errno = EINVAL; - goto done; - } - /* Non-fatal runtime-constraint violation, n must not exceed smax. */ - if (n > smax) { - n = smax; - ret = errno = EINVAL; - } - /* Updating through a volatile pointer should not be optimized away. */ - while (n--) - *s++ = (unsigned char)c; -done: - return ret; -} diff --git a/lib/util/sha2.c b/lib/util/sha2.c index b8b51e6cab..b7a28cca8f 100644 --- a/lib/util/sha2.c +++ b/lib/util/sha2.c @@ -237,8 +237,8 @@ SHA256Transform(uint32_t state[8], const uint8_t data[SHA256_BLOCK_LENGTH]) state[6] += g(0); state[7] += h(0); /* Cleanup */ - memset_s(T, sizeof(T), 0, sizeof(T)); - memset_s(W, sizeof(W), 0, sizeof(W)); + explicit_bzero(T, sizeof(T)); + explicit_bzero(W, sizeof(W)); } #undef S0 @@ -454,8 +454,8 @@ SHA512Transform(uint64_t state[8], const uint8_t data[SHA512_BLOCK_LENGTH]) state[6] += g(0); state[7] += h(0); /* Cleanup. */ - memset_s(T, sizeof(T), 0, sizeof(T)); - memset_s(W, sizeof(W), 0, sizeof(W)); + explicit_bzero(T, sizeof(T)); + explicit_bzero(W, sizeof(W)); } void diff --git a/plugins/sudoers/auth/aix_auth.c b/plugins/sudoers/auth/aix_auth.c index f9e3539402..5983503635 100644 --- a/plugins/sudoers/auth/aix_auth.c +++ b/plugins/sudoers/auth/aix_auth.c @@ -243,7 +243,7 @@ sudo_aix_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_co free(message); message = NULL; result = authenticate(pw->pw_name, pass, &reenter, &message); - memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); free(pass); prompt = message; } while (reenter); diff --git a/plugins/sudoers/auth/bsdauth.c b/plugins/sudoers/auth/bsdauth.c index f90e94e38b..3ed6c458a7 100644 --- a/plugins/sudoers/auth/bsdauth.c +++ b/plugins/sudoers/auth/bsdauth.c @@ -151,7 +151,7 @@ bsdauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_con if (pass) { authok = auth_userresponse(as, pass, 1); - memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); free(pass); } diff --git a/plugins/sudoers/auth/fwtk.c b/plugins/sudoers/auth/fwtk.c index c315a352e8..4c99a84a64 100644 --- a/plugins/sudoers/auth/fwtk.c +++ b/plugins/sudoers/auth/fwtk.c @@ -133,8 +133,8 @@ sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_c sudo_warnx("%s", resp); error = AUTH_FAILURE; done: - memset_s(buf, sizeof(buf), 0, sizeof(buf)); - memset_s(pass, SUDO_PASS_MAX, 0, strlen(pass)); + explicit_bzero(buf, sizeof(buf)); + explicit_bzero(pass, strlen(pass)); free(pass); debug_return_int(error); } diff --git a/plugins/sudoers/auth/pam.c b/plugins/sudoers/auth/pam.c index 6b4e249707..a725f1f629 100644 --- a/plugins/sudoers/auth/pam.c +++ b/plugins/sudoers/auth/pam.c @@ -702,7 +702,7 @@ converse(int num_msg, PAM_CONST struct pam_message **msg, sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "password longer than %d", PAM_MAX_RESP_SIZE); ret = PAM_CONV_ERR; - memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); goto done; } reply[n].resp = pass; /* auth_getpass() malloc's a copy */ @@ -732,7 +732,7 @@ converse(int num_msg, PAM_CONST struct pam_message **msg, struct pam_response *pr = &reply[n]; if (pr->resp != NULL) { - memset_s(pr->resp, SUDO_CONV_REPL_MAX, 0, strlen(pr->resp)); + explicit_bzero(pr->resp, strlen(pr->resp)); free(pr->resp); pr->resp = NULL; } diff --git a/plugins/sudoers/auth/passwd.c b/plugins/sudoers/auth/passwd.c index d837160118..3053541967 100644 --- a/plugins/sudoers/auth/passwd.c +++ b/plugins/sudoers/auth/passwd.c @@ -101,7 +101,7 @@ sudo_passwd_cleanup(struct passwd *pw, sudo_auth *auth, bool force) debug_decl(sudo_passwd_cleanup, SUDOERS_DEBUG_AUTH); if (pw_epasswd != NULL) { - memset_s(pw_epasswd, SUDO_CONV_REPL_MAX, 0, strlen(pw_epasswd)); + explicit_bzero(pw_epasswd, strlen(pw_epasswd)); free(pw_epasswd); } debug_return_int(AUTH_SUCCESS); diff --git a/plugins/sudoers/auth/secureware.c b/plugins/sudoers/auth/secureware.c index 1b7c98745a..dd02f515e7 100644 --- a/plugins/sudoers/auth/secureware.c +++ b/plugins/sudoers/auth/secureware.c @@ -102,7 +102,7 @@ sudo_secureware_cleanup(struct passwd *pw, sudo_auth *auth, bool force) debug_decl(sudo_secureware_cleanup, SUDOERS_DEBUG_AUTH); if (pw_epasswd != NULL) { - memset_s(pw_epasswd, SUDO_CONV_REPL_MAX, 0, strlen(pw_epasswd)); + explicit_bzero(pw_epasswd, strlen(pw_epasswd)); free(pw_epasswd); } debug_return_int(AUTH_SUCCESS); diff --git a/plugins/sudoers/auth/securid5.c b/plugins/sudoers/auth/securid5.c index 93c712e690..e8eebdf2e4 100644 --- a/plugins/sudoers/auth/securid5.c +++ b/plugins/sudoers/auth/securid5.c @@ -177,7 +177,7 @@ sudo_securid_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_ ACE challenges for the next token displayed (entered without the PIN) */ if (pass != NULL) { - memset_s(pass, SUDO_PASS_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); free(pass); } pass = auth_getpass("\ @@ -218,7 +218,7 @@ then enter the new token code.\n", \ SD_Close(*sd); if (pass != NULL) { - memset_s(pass, SUDO_PASS_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); free(pass); } diff --git a/plugins/sudoers/auth/sia.c b/plugins/sudoers/auth/sia.c index 5c7791f411..414a64b465 100644 --- a/plugins/sudoers/auth/sia.c +++ b/plugins/sudoers/auth/sia.c @@ -90,7 +90,7 @@ sudo_sia_verify(struct passwd *pw, char *prompt, sudo_auth *auth, /* Check password and zero out plaintext copy. */ rc = sia_ses_authent(NULL, pass, siah); - memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); free(pass); if (rc == SIASUCCESS) diff --git a/plugins/sudoers/auth/sudo_auth.c b/plugins/sudoers/auth/sudo_auth.c index 1bdacdb7cc..5570c78b34 100644 --- a/plugins/sudoers/auth/sudo_auth.c +++ b/plugins/sudoers/auth/sudo_auth.c @@ -326,7 +326,7 @@ verify_user(struct passwd *pw, char *prompt, int validated, break; } if (pass != NULL) { - memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); free(pass); } diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index 28e7ff05c7..b42de26ee8 100755 --- a/scripts/mkdep.pl +++ b/scripts/mkdep.pl @@ -116,7 +116,7 @@ sub mkdep { # XXX - fill in AUTH_OBJS from contents of the auth dir instead $makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; $makefile =~ s:\@DIGEST\@:digest.lo digest_openssl.lo digest_gcrypt.lo:; - $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo closefrom.lo dup3.lo fchmodat.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; + $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; # Parse OBJS lines my %objs; diff --git a/src/conversation.c b/src/conversation.c index 55c2319c6c..7a9f01ff21 100644 --- a/src/conversation.c +++ b/src/conversation.c @@ -80,7 +80,7 @@ sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], sudo_fatalx_nodebug(U_("%s: %s"), "sudo_conversation", U_("unable to allocate memory")); } - memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + explicit_bzero(pass, strlen(pass)); break; case SUDO_CONV_ERROR_MSG: fp = stderr; @@ -135,7 +135,7 @@ sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply *repl = &replies[n]; if (repl->reply == NULL) continue; - memset_s(repl->reply, SUDO_CONV_REPL_MAX, 0, strlen(repl->reply)); + explicit_bzero(repl->reply, strlen(repl->reply)); free(repl->reply); repl->reply = NULL; } while (n--); From ce97ca28db2bc09b07d555895bceafac4b8418b3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 10 Aug 2020 19:24:33 -0600 Subject: [PATCH 025/113] Use OpenBSD-compatible freezero() in place of explicit_bzero() + free() --- MANIFEST | 1 + config.h.in | 3 +++ configure | 26 +++++++++++++++++++++ configure.ac | 4 ++++ include/sudo_compat.h | 5 ++++ lib/util/Makefile.in | 8 +++++++ lib/util/freezero.c | 38 +++++++++++++++++++++++++++++++ lib/util/getentropy.c | 6 ++--- plugins/sudoers/auth/aix_auth.c | 3 +-- plugins/sudoers/auth/bsdauth.c | 3 +-- plugins/sudoers/auth/fwtk.c | 3 +-- plugins/sudoers/auth/pam.c | 3 +-- plugins/sudoers/auth/passwd.c | 7 +++--- plugins/sudoers/auth/secureware.c | 6 ++--- plugins/sudoers/auth/securid5.c | 12 ++++------ plugins/sudoers/auth/sia.c | 3 +-- plugins/sudoers/auth/sudo_auth.c | 6 ++--- scripts/mkdep.pl | 2 +- src/conversation.c | 3 +-- 19 files changed, 105 insertions(+), 37 deletions(-) create mode 100644 lib/util/freezero.c diff --git a/MANIFEST b/MANIFEST index fcd66bfac6..d2d32e9a04 100644 --- a/MANIFEST +++ b/MANIFEST @@ -142,6 +142,7 @@ lib/util/explicit_bzero.c lib/util/fatal.c lib/util/fchmodat.c lib/util/fnmatch.c +lib/util/freezero.c lib/util/fstatat.c lib/util/getaddrinfo.c lib/util/getcwd.c diff --git a/config.h.in b/config.h.in index c363339104..6a3f07351d 100644 --- a/config.h.in +++ b/config.h.in @@ -285,6 +285,9 @@ /* Define to 1 if you have the `freeifaddrs' function. */ #undef HAVE_FREEIFADDRS +/* Define to 1 if you have the `freezero' function. */ +#undef HAVE_FREEZERO + /* Define to 1 if you have the `fseeko' function. */ #undef HAVE_FSEEKO diff --git a/configure b/configure index 8e3af5fd05..aca575a724 100755 --- a/configure +++ b/configure @@ -20673,6 +20673,32 @@ esac done +fi +done + +for ac_func in freezero +do : + ac_fn_c_check_func "$LINENO" "freezero" "ac_cv_func_freezero" +if test "x$ac_cv_func_freezero" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FREEZERO 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" freezero.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS freezero.$ac_objext" + ;; +esac + + + for _sym in sudo_freezero; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + fi done diff --git a/configure.ac b/configure.ac index 3b3d047f39..3784cc9d74 100644 --- a/configure.ac +++ b/configure.ac @@ -2825,6 +2825,10 @@ AC_CHECK_FUNCS([memrchr], [], [ AC_LIBOBJ(memrchr) SUDO_APPEND_COMPAT_EXP(sudo_memrchr) ]) +AC_CHECK_FUNCS([freezero], [], [ + AC_LIBOBJ(freezero) + SUDO_APPEND_COMPAT_EXP(sudo_freezero) +]) AC_CHECK_FUNCS(nanosleep, [], [ # On Solaris, nanosleep is in librt AC_CHECK_LIB(rt, nanosleep, [ diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 03e256828c..72d62e5efa 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -441,6 +441,11 @@ __dso_public void sudo_explicit_bzero(void *s, size_t n); # undef explicit_bzero # define explicit_bzero(_a, _b) sudo_explicit_bzero((_a), (_b)) #endif /* HAVE_EXPLICIT_BZERO */ +#ifndef HAVE_FREEZERO +__dso_public void sudo_freezero(void *p, size_t n); +# undef freezero +# define freezero(_a, _b) sudo_freezero((_a), (_b)) +#endif /* HAVE_FREEZERO */ #ifdef PREFER_PORTABLE_GETCWD __dso_public char *sudo_getcwd(char *, size_t size); # undef getcwd diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 342489f0f0..6988f1847e 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -609,6 +609,14 @@ fnmatch.i: $(srcdir)/fnmatch.c $(incdir)/compat/charclass.h \ $(CC) -E -o $@ $(CPPFLAGS) $< fnmatch.plog: fnmatch.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/fnmatch.c --i-file $< --output-file $@ +freezero.lo: $(srcdir)/freezero.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/freezero.c +freezero.i: $(srcdir)/freezero.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +freezero.plog: freezero.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/freezero.c --i-file $< --output-file $@ fstatat.lo: $(srcdir)/fstatat.c $(incdir)/sudo_compat.h $(top_builddir)/config.h $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/fstatat.c fstatat.i: $(srcdir)/fstatat.c $(incdir)/sudo_compat.h $(top_builddir)/config.h diff --git a/lib/util/freezero.c b/lib/util/freezero.c new file mode 100644 index 0000000000..e2d2e8a2a7 --- /dev/null +++ b/lib/util/freezero.c @@ -0,0 +1,38 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include + +#include +#include + +#include "sudo_compat.h" + +#ifndef HAVE_FREEZERO +void +sudo_freezero(void *p, size_t n) +{ + explicit_bzero(p, n); + free(p); +} +#endif /* HAVE_FREEZERO */ diff --git a/lib/util/getentropy.c b/lib/util/getentropy.c index 694eb52b5f..510283550a 100644 --- a/lib/util/getentropy.c +++ b/lib/util/getentropy.c @@ -613,10 +613,8 @@ getentropy_fallback(void *buf, size_t len) } done: sudo_digest_free(ctx); - if (results != NULL) { - explicit_bzero(results, sizeof(results)); - free(results); - } + if (results != NULL) + freezero(results, sizeof(results)); return (ret); } diff --git a/plugins/sudoers/auth/aix_auth.c b/plugins/sudoers/auth/aix_auth.c index 5983503635..fed2c46fae 100644 --- a/plugins/sudoers/auth/aix_auth.c +++ b/plugins/sudoers/auth/aix_auth.c @@ -243,8 +243,7 @@ sudo_aix_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_co free(message); message = NULL; result = authenticate(pw->pw_name, pass, &reenter, &message); - explicit_bzero(pass, strlen(pass)); - free(pass); + freezero(pass, strlen(pass)); prompt = message; } while (reenter); diff --git a/plugins/sudoers/auth/bsdauth.c b/plugins/sudoers/auth/bsdauth.c index 3ed6c458a7..1c321340f1 100644 --- a/plugins/sudoers/auth/bsdauth.c +++ b/plugins/sudoers/auth/bsdauth.c @@ -151,8 +151,7 @@ bsdauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_con if (pass) { authok = auth_userresponse(as, pass, 1); - explicit_bzero(pass, strlen(pass)); - free(pass); + freezero(pass, strlen(pass)); } /* restore old signal handler */ diff --git a/plugins/sudoers/auth/fwtk.c b/plugins/sudoers/auth/fwtk.c index 4c99a84a64..c9ab06b7f9 100644 --- a/plugins/sudoers/auth/fwtk.c +++ b/plugins/sudoers/auth/fwtk.c @@ -134,8 +134,7 @@ sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_c error = AUTH_FAILURE; done: explicit_bzero(buf, sizeof(buf)); - explicit_bzero(pass, strlen(pass)); - free(pass); + freezero(pass, strlen(pass)); debug_return_int(error); } diff --git a/plugins/sudoers/auth/pam.c b/plugins/sudoers/auth/pam.c index a725f1f629..526675f534 100644 --- a/plugins/sudoers/auth/pam.c +++ b/plugins/sudoers/auth/pam.c @@ -732,8 +732,7 @@ converse(int num_msg, PAM_CONST struct pam_message **msg, struct pam_response *pr = &reply[n]; if (pr->resp != NULL) { - explicit_bzero(pr->resp, strlen(pr->resp)); - free(pr->resp); + freezero(pr->resp, strlen(pr->resp)); pr->resp = NULL; } } diff --git a/plugins/sudoers/auth/passwd.c b/plugins/sudoers/auth/passwd.c index 3053541967..18e7f30b65 100644 --- a/plugins/sudoers/auth/passwd.c +++ b/plugins/sudoers/auth/passwd.c @@ -100,9 +100,8 @@ sudo_passwd_cleanup(struct passwd *pw, sudo_auth *auth, bool force) char *pw_epasswd = auth->data; debug_decl(sudo_passwd_cleanup, SUDOERS_DEBUG_AUTH); - if (pw_epasswd != NULL) { - explicit_bzero(pw_epasswd, strlen(pw_epasswd)); - free(pw_epasswd); - } + if (pw_epasswd != NULL) + freezero(pw_epasswd, strlen(pw_epasswd)); + debug_return_int(AUTH_SUCCESS); } diff --git a/plugins/sudoers/auth/secureware.c b/plugins/sudoers/auth/secureware.c index dd02f515e7..dd7aa42eb5 100644 --- a/plugins/sudoers/auth/secureware.c +++ b/plugins/sudoers/auth/secureware.c @@ -101,10 +101,8 @@ sudo_secureware_cleanup(struct passwd *pw, sudo_auth *auth, bool force) char *pw_epasswd = auth->data; debug_decl(sudo_secureware_cleanup, SUDOERS_DEBUG_AUTH); - if (pw_epasswd != NULL) { - explicit_bzero(pw_epasswd, strlen(pw_epasswd)); - free(pw_epasswd); - } + if (pw_epasswd != NULL) + freezero(pw_epasswd, strlen(pw_epasswd)); debug_return_int(AUTH_SUCCESS); } diff --git a/plugins/sudoers/auth/securid5.c b/plugins/sudoers/auth/securid5.c index e8eebdf2e4..d5804011bd 100644 --- a/plugins/sudoers/auth/securid5.c +++ b/plugins/sudoers/auth/securid5.c @@ -176,10 +176,8 @@ sudo_securid_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_ /* Sometimes (when current token close to expire?) ACE challenges for the next token displayed (entered without the PIN) */ - if (pass != NULL) { - explicit_bzero(pass, strlen(pass)); - free(pass); - } + if (pass != NULL) + freezero(pass, strlen(pass)); pass = auth_getpass("\ !!! ATTENTION !!!\n\ Wait for the token code to change, \n\ @@ -217,10 +215,8 @@ then enter the new token code.\n", \ /* Free resources */ SD_Close(*sd); - if (pass != NULL) { - explicit_bzero(pass, strlen(pass)); - free(pass); - } + if (pass != NULL) + freezero(pass, strlen(pass)); /* Return stored state to calling process */ debug_return_int(ret); diff --git a/plugins/sudoers/auth/sia.c b/plugins/sudoers/auth/sia.c index 414a64b465..7feb19e038 100644 --- a/plugins/sudoers/auth/sia.c +++ b/plugins/sudoers/auth/sia.c @@ -90,8 +90,7 @@ sudo_sia_verify(struct passwd *pw, char *prompt, sudo_auth *auth, /* Check password and zero out plaintext copy. */ rc = sia_ses_authent(NULL, pass, siah); - explicit_bzero(pass, strlen(pass)); - free(pass); + freezero(pass, strlen(pass)); if (rc == SIASUCCESS) debug_return_int(AUTH_SUCCESS); diff --git a/plugins/sudoers/auth/sudo_auth.c b/plugins/sudoers/auth/sudo_auth.c index 5570c78b34..188b65fded 100644 --- a/plugins/sudoers/auth/sudo_auth.c +++ b/plugins/sudoers/auth/sudo_auth.c @@ -325,10 +325,8 @@ verify_user(struct passwd *pw, char *prompt, int validated, if (success != AUTH_FAILURE) break; } - if (pass != NULL) { - explicit_bzero(pass, strlen(pass)); - free(pass); - } + if (pass != NULL) + freezero(pass, strlen(pass)); if (success != AUTH_FAILURE) goto done; diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index b42de26ee8..5299c0fe24 100755 --- a/scripts/mkdep.pl +++ b/scripts/mkdep.pl @@ -116,7 +116,7 @@ sub mkdep { # XXX - fill in AUTH_OBJS from contents of the auth dir instead $makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; $makefile =~ s:\@DIGEST\@:digest.lo digest_openssl.lo digest_gcrypt.lo:; - $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; + $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; # Parse OBJS lines my %objs; diff --git a/src/conversation.c b/src/conversation.c index 7a9f01ff21..95ecadde45 100644 --- a/src/conversation.c +++ b/src/conversation.c @@ -135,8 +135,7 @@ sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply *repl = &replies[n]; if (repl->reply == NULL) continue; - explicit_bzero(repl->reply, strlen(repl->reply)); - free(repl->reply); + freezero(repl->reply, strlen(repl->reply)); repl->reply = NULL; } while (n--); } From 71a879d905ed810179d306b81fcc5ae7b6211df3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 11 Aug 2020 14:07:31 -0600 Subject: [PATCH 026/113] Mention visudo in sudo(8) and document sudoers error recovery. --- doc/sudo.man.in | 20 +++++++++++++++----- doc/sudo.mdoc.in | 20 +++++++++++++++----- doc/sudoers.man.in | 20 ++++++++++++++------ doc/sudoers.mdoc.in | 20 ++++++++++++++------ 4 files changed, 58 insertions(+), 22 deletions(-) diff --git a/doc/sudo.man.in b/doc/sudo.man.in index bcc1a7f701..4ab3300657 100644 --- a/doc/sudo.man.in +++ b/doc/sudo.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDO" "@mansectsu@" "July 22, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "@mansectsu@" "August 11, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -156,6 +156,16 @@ with the option, a user can update the cached credentials without running a \fIcommand\fR. .PP +On systems where +\fBsudo\fR +is the primary method of gaining superuser privileges, it is imperative +to avoid syntax errors in the security policy configuration files. +For the default security policy, +sudoers(@mansectform@), +changes to the configuration files should be made using the +visudo(@mansectsu@) +utility which will ensure that no syntax errors are introduced. +.PP When invoked as \fBsudoedit\fR, the @@ -932,13 +942,13 @@ or compiled directly into the binary. If no sudo.conf(@mansectform@) -file is present, or it contains no +file is present, or if it doesn't contain any \fRPlugin\fR lines, \fBsudo\fR -will use the traditional -\fIsudoers\fR -security policy and I/O logging. +will use +sudoers(@mansectform@) +for the policy, auditing and I/O logging plugins. See the sudo.conf(@mansectform@) manual for details of the diff --git a/doc/sudo.mdoc.in b/doc/sudo.mdoc.in index 0f452420a3..d597dd519e 100644 --- a/doc/sudo.mdoc.in +++ b/doc/sudo.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd July 22, 2020 +.Dd August 11, 2020 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -158,6 +158,16 @@ with the option, a user can update the cached credentials without running a .Ar command . .Pp +On systems where +.Nm +is the primary method of gaining superuser privileges, it is imperative +to avoid syntax errors in the security policy configuration files. +For the default security policy, +.Xr sudoers @mansectform@ , +changes to the configuration files should be made using the +.Xr visudo @mansectsu@ +utility which will ensure that no syntax errors are introduced. +.Pp When invoked as .Nm sudoedit , the @@ -873,13 +883,13 @@ or compiled directly into the binary. If no .Xr sudo.conf @mansectform@ -file is present, or it contains no +file is present, or if it doesn't contain any .Li Plugin lines, .Nm -will use the traditional -.Em sudoers -security policy and I/O logging. +will use +.Xr sudoers @mansectform@ +for the policy, auditing and I/O logging plugins. See the .Xr sudo.conf @mansectform@ manual for details of the diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index 91a8cff98f..8b90e97f2e 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -6245,15 +6245,23 @@ file should \fBalways\fR be edited by the \fBvisudo\fR -command which locks the file and does grammatical checking. -It is -imperative that the +utility which locks the file and checks for syntax errors. +If \fIsudoers\fR -file be free of syntax errors since +contains syntax errors, +\fBsudo\fR +may refuse to run, which is a serious problem if +\fBsudo\fR +is your only method of obtaining superuser privileges. +Recent versions of +\fBsudoers\fR +will attempt to recover after a syntax error by ignoring the rest of +the line after encountering an error. +Older versions of \fBsudo\fR -will not run with a syntactically incorrect +will not run if \fIsudoers\fR -file. +contains a syntax error. .PP When using netgroups of machines (as opposed to users), if you store fully qualified host name in the netgroup (as is usually the diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index 25abe3461e..3e9691b1bf 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -5762,15 +5762,23 @@ file should .Sy always be edited by the .Nm visudo -command which locks the file and does grammatical checking. -It is -imperative that the +utility which locks the file and checks for syntax errors. +If .Em sudoers -file be free of syntax errors since +contains syntax errors, +.Nm sudo +may refuse to run, which is a serious problem if +.Nm sudo +is your only method of obtaining superuser privileges. +Recent versions of +.Nm +will attempt to recover after a syntax error by ignoring the rest of +the line after encountering an error. +Older versions of .Nm sudo -will not run with a syntactically incorrect +will not run if .Em sudoers -file. +contains a syntax error. .Pp When using netgroups of machines (as opposed to users), if you store fully qualified host name in the netgroup (as is usually the From 4193f548269ae729b78d72a7b57c13c571e9f9c6 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 11 Aug 2020 16:58:47 -0600 Subject: [PATCH 027/113] Update to uncrustify 0.71.0 --- etc/uncrustify.cfg | 119 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 111 insertions(+), 8 deletions(-) diff --git a/etc/uncrustify.cfg b/etc/uncrustify.cfg index dc98f1395d..f21757af4e 100644 --- a/etc/uncrustify.cfg +++ b/etc/uncrustify.cfg @@ -1,8 +1,7 @@ -# Uncrustify-0.70.1 +# Uncrustify-0.71.0 # # Customized to match sudo's coding style. -# TODO: fix indentation of /* FALLTHROUGH */ comment before case. # # @@ -42,13 +41,18 @@ string_replace_tab_chars = false # true/false # Improvements to template detection may make this option obsolete. tok_split_gte = false # true/false +# Disable formatting of NL_CONT ('\\n') ended lines (e.g. multiline macros) +disable_processing_nl_cont = false # true/false + # Specify the marker used in comments to disable processing of part of the # file. +# The comment should be used alone in one line. # # Default: *INDENT-OFF* disable_processing_cmt = " *INDENT-OFF*" # string # Specify the marker used in comments to (re)enable processing in a file. +# The comment should be used alone in one line. # # Default: *INDENT-ON* enable_processing_cmt = " *INDENT-ON*" # string @@ -609,6 +613,10 @@ sp_catch_paren = ignore # ignore/add/remove/force # in '@catch (something) { }'. If set to ignore, sp_catch_paren is used. sp_oc_catch_paren = ignore # ignore/add/remove/force +# (OC) Add or remove space before Objective-C protocol list +# as in '@protocol Protocol' or '@interface MyClass : NSObject'. +sp_before_oc_proto_list = ignore # ignore/add/remove/force + # (OC) Add or remove space between class name and '(' # in '@interface className(categoryName):BaseClass' sp_oc_classname_paren = ignore # ignore/add/remove/force @@ -676,9 +684,7 @@ sp_getset_brace = ignore # ignore/add/remove/force # Add or remove space between a variable and '{' for C++ uniform # initialization. -# -# Default: add -sp_word_brace = add # ignore/add/remove/force +sp_word_brace_init_lst = ignore # ignore/add/remove/force # Add or remove space between a variable and '{' for a namespace. # @@ -1118,6 +1124,10 @@ indent_member_single = false # true/false # Spaces to indent single line ('//') comments on lines before code. indent_sing_line_comments = 0 # unsigned number +# When opening a paren for a control statement (if, for, while, etc), increase +# the indent level by this value. Negative values decrease the indent level. +indent_sparen_extra = 0 # number + # Whether to indent trailing single line ('//') comments relative to the code # instead of trying to keep the same absolute column. indent_relative_single_line_comments = false # true/false @@ -1224,12 +1234,19 @@ indent_preserve_sql = false # true/false # Default: true indent_align_assign = true # true/false +# If true, the indentation of the chunks after a '=' sequence will be set at +# LHS token indentation column before '='. +indent_off_after_assign = false # true/false + # Whether to align continued statements at the '('. If false or the '(' is # followed by a newline, the next line indent is one tab. # # Default: true indent_align_paren = true # true/false +# (OC) Whether to indent Objective-C code inside message selectors. +indent_oc_inside_msg_sel = false # true/false + # (OC) Whether to indent Objective-C blocks at brace level instead of usual # rules. indent_oc_block = false # true/false @@ -1289,6 +1306,15 @@ indent_token_after_brace = true # true/false # Whether to indent the body of a C++11 lambda. indent_cpp_lambda_body = false # true/false +# How to indent compound literals that are being returned. +# true: add both the indent from return & the compound literal open brace (ie: +# 2 indent levels) +# false: only indent 1 level, don't add the indent for the open brace, only add +# the indent for the return. +# +# Default: true +indent_compound_literal_return = true # true/false + # (C#) Whether to indent a 'using' block if no braces are used. # # Default: true @@ -1301,6 +1327,12 @@ indent_using_block = true # true/false # 2: When the `:` is a continuation, indent it under `?` indent_ternary_operator = 0 # unsigned number +# Whether to indent the statments inside ternary operator. +indent_inside_ternary_operator = false # true/false + +# If true, the indentation of the chunks after a `return` sequence will be set at return indentation column. +indent_off_after_return = false # true/false + # If true, the indentation of the chunks after a `return new` sequence will be set at return indentation column. indent_off_after_return_new = false # true/false @@ -1334,7 +1366,7 @@ nl_getset_leave_one_liners = false # true/false nl_cs_property_leave_one_liners = false # true/false # Don't split one-line function definitions, as in 'int foo() { return 0; }'. -# night modify nl_func_type_name +# might modify nl_func_type_name nl_func_leave_one_liners = false # true/false # Don't split one-line C++11 lambdas, as in '[]() { return 0; }'. @@ -1441,6 +1473,9 @@ nl_else_brace = remove # ignore/add/remove/force # Add or remove newline between 'else' and 'if'. nl_else_if = remove # ignore/add/remove/force +# Add or remove newline before '{' opening brace +nl_before_opening_brace_func_class_def = ignore # ignore/add/remove/force + # Add or remove newline before 'if'/'else if' closing parenthesis. nl_before_if_closing_paren = remove # ignore/add/remove/force @@ -1689,6 +1724,9 @@ nl_func_decl_args = ignore # ignore/add/remove/force # Add or remove newline after each ',' in a function definition. nl_func_def_args = ignore # ignore/add/remove/force +# Add or remove newline after each ',' in a function call. +nl_func_call_args = ignore # ignore/add/remove/force + # Whether to add a newline after each ',' in a function declaration if '(' # and ')' are in different lines. If false, nl_func_decl_args is used instead. nl_func_decl_args_multi_line = false # true/false @@ -1730,6 +1768,9 @@ nl_func_call_empty = ignore # ignore/add/remove/force # has preference over nl_func_call_start_multi_line. nl_func_call_start = ignore # ignore/add/remove/force +# Whether to add a newline before ')' in a function call. +nl_func_call_end = ignore # ignore/add/remove/force + # Whether to add a newline after '(' in a function call if '(' and ')' are in # different lines. nl_func_call_start_multi_line = false # true/false @@ -1742,6 +1783,9 @@ nl_func_call_args_multi_line = false # true/false # different lines. nl_func_call_end_multi_line = false # true/false +# Whether to respect nl_func_call_XXX option incase of closure args. +nl_func_call_args_multi_line_ignore_closures = false # true/false + # Whether to add a newline after '<' of a template parameter list. nl_template_start = false # true/false @@ -1876,7 +1920,7 @@ nl_before_return = false # true/false # close brace. nl_after_return = false # true/false -# (Java) Whether to put a blank line before a member '.' or '->' operators. +# Whether to put a blank line before a member '.' or '->' operators. nl_before_member = ignore # ignore/add/remove/force # (Java) Whether to put a blank line after a member '.' or '->' operators. @@ -2139,6 +2183,26 @@ nl_after_annotation = ignore # ignore/add/remove/force # (Java) Add or remove newline between two annotations. nl_between_annotation = ignore # ignore/add/remove/force +# The number of newlines before a whole-file #ifdef. +# +# 0: No change (default). +nl_before_whole_file_ifdef = 0 # unsigned number + +# The number of newlines after a whole-file #ifdef. +# +# 0: No change (default). +nl_after_whole_file_ifdef = 0 # unsigned number + +# The number of newlines before a whole-file #endif. +# +# 0: No change (default). +nl_before_whole_file_endif = 0 # unsigned number + +# The number of newlines after a whole-file #endif. +# +# 0: No change (default). +nl_after_whole_file_endif = 0 # unsigned number + # # Positioning options # @@ -2151,7 +2215,7 @@ pos_arith = ignore # ignore/break/force/lead/trail/join/ pos_assign = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of Boolean operators in wrapped expressions. -pos_bool = trail # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force +pos_bool = trail # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force # The position of comparison operators in wrapped expressions. pos_compare = ignore # ignore/break/force/lead/trail/join/lead_break/lead_force/trail_break/trail_force @@ -2508,6 +2572,11 @@ align_oc_msg_colon_first = false # true/false # on the ':'. align_oc_decl_colon = false # true/false +# (OC) Whether to not align parameters in an Objectve-C message call if first +# colon is not on next line of the message call (the same way Xcode does +# aligment) +align_oc_msg_colon_xcode_like = false # true/false + # # Comment modification options # @@ -2739,6 +2808,25 @@ mod_sort_using = false # true/false # break your code if your includes/imports have ordering dependencies. mod_sort_include = false # true/false +# Whether to prioritize '#include' and '#import' statements that contain +# filename without extension when sorting is enabled. +mod_sort_incl_import_prioritize_filename = false # true/false + +# Whether to prioritize '#include' and '#import' statements that does not +# contain extensions when sorting is enabled. +mod_sort_incl_import_prioritize_extensionless = false # true/false + +# Whether to prioritize '#include' and '#import' statements that contain +# angle over quotes when sorting is enabled. +mod_sort_incl_import_prioritize_angle_over_quotes = false # true/false + +# Whether to ignore file extension in '#include' and '#import' statements +# for sorting comparison. +mod_sort_incl_import_ignore_extension = false # true/false + +# Whether to group '#include' and '#import' statements when sorting is enabled. +mod_sort_incl_import_grouping_enabled = false # true/false + # Whether to move a 'break' that appears after a fully braced 'case' before # the close brace, as in 'case X: { ... } break;' => 'case X: { ... break; }'. mod_move_case_break = false # true/false @@ -2925,6 +3013,11 @@ use_sp_after_angle_always = false # true/false # Default: true use_options_overriding_for_qt_macros = true # true/false +# If true: the form feed character is removed from the list +# of whitespace characters. +# See https://en.cppreference.com/w/cpp/string/byte/isspace +use_form_feed_no_more_as_whitespace_character = false # true/false + # # Warn levels - 1: error, 2: warning (default), 3: note # @@ -2935,6 +3028,16 @@ use_options_overriding_for_qt_macros = true # true/false # Default: 2 warn_level_tabs_found_in_verbatim_string_literals = 2 # unsigned number +# Limit the number of loops. +# Used by uncrustify.cpp to exit from infinite loop. +# 0: no limit. +debug_max_number_of_loops = 0 # number + +# Set the number of the line to protocol; +# Used in the function prot_the_line if the 2. parameter is zero. +# 0: nothing protocol. +debug_line_number_to_protocol = 0 # number + # Meaning of the settings: # Ignore - do not do any changes # Add - makes sure there is 1 or more space/brace/newline/etc From 4b0783b0b4414ef0585ab84ef4ad58611f9447cb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 12 Aug 2020 09:11:20 -0600 Subject: [PATCH 028/113] Add *.map to the ignore file. --- .gitignore | 1 + .hgignore | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index ce2ef75b80..8e2bf4ea89 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ **/*.i **/*.l[ao] **/*.lai +**/*.map **/*.mo **/*.o **/*.plog diff --git a/.hgignore b/.hgignore index f96642d770..2812f835a1 100644 --- a/.hgignore +++ b/.hgignore @@ -2,6 +2,7 @@ \.i$ \.l[ao]$ \.lai$ +\.map$ \.mo$ \.o$ \.plog$ @@ -19,16 +20,16 @@ Makefile$ ^build$ ^ChangeLog$ -^PVS-Studio.cfg$ -^uncrustify.files$ +^PVS-Studio\.cfg$ +^uncrustify\.files$ ^doc/.*\.man$ ^doc/.*\.mdoc$ ^doc/fixman\.sed$ ^examples/sudo\.conf$ -^init.d/.*.sh$ -^init.d/sudo.conf$ +^init\.d/.*\.sh$ +^init\.d/sudo\.conf$ ^pathnames\.h$ ^src/sudo$ @@ -51,7 +52,7 @@ Makefile$ ^plugins/sudoers/(cvtsudoers|sudoers|sudoreplay|testsudoers|tsdump|visudo|prologue|check_[a-z0-9_]+)$ ^plugins/sudoers/.*\.(out|toke|err|json|ldif|sudo|ldif2sudo)$ ^plugins/sudoers/regress/iolog_plugin/iolog$ -^plugins/sudoers/regress/testsudoers/test3.d/root$ +^plugins/sudoers/regress/testsudoers/test3\.d/root$ ^plugins/python/__pycache__ ^plugins/python/regress/__pycache__ From 076d0376db676d7463945c890e96067fecae792a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 12 Aug 2020 09:50:35 -0600 Subject: [PATCH 029/113] We no longer need to include sudo_gettext.h before sudo_compat.h --- lib/iolog/host_port.c | 2 +- lib/iolog/iolog_fileio.c | 8 ++++---- lib/iolog/iolog_json.c | 7 +++---- lib/iolog/iolog_path.c | 7 +++---- lib/iolog/iolog_util.c | 7 +++---- lib/util/ttyname_dev.c | 2 +- logsrvd/eventlog.c | 9 +++++---- logsrvd/iolog_writer.c | 9 +++++---- logsrvd/logsrv_util.c | 5 +++-- logsrvd/logsrvd.c | 13 +++++++------ logsrvd/logsrvd_conf.c | 17 +++++++++-------- logsrvd/sendlog.c | 17 +++++++++-------- plugins/audit_json/audit_json.c | 5 ++--- plugins/sample/sample_plugin.c | 2 +- plugins/sample_approval/sample_approval.c | 3 +-- plugins/sudoers/locale.c | 3 ++- plugins/sudoers/sudoers.h | 15 ++++++++------- plugins/sudoers/sudoreplay.c | 17 ++++++++--------- src/net_ifs.c | 4 ++-- src/sesh.c | 5 ++--- src/sudo.h | 16 +++++++--------- 21 files changed, 86 insertions(+), 87 deletions(-) diff --git a/lib/iolog/host_port.c b/lib/iolog/host_port.c index c334f8b329..b16c65867a 100644 --- a/lib/iolog/host_port.c +++ b/lib/iolog/host_port.c @@ -26,9 +26,9 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" #include "sudo_debug.h" +#include "sudo_gettext.h" #include "sudo_util.h" /* diff --git a/lib/iolog/iolog_fileio.c b/lib/iolog/iolog_fileio.c index 75ed27b307..fa59b21a23 100644 --- a/lib/iolog/iolog_fileio.c +++ b/lib/iolog/iolog_fileio.c @@ -37,17 +37,17 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ +#include "pathnames.h" #include "sudo_compat.h" #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_event.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" #include "sudo_json.h" #include "sudo_queue.h" #include "sudo_util.h" -#include "sudo_fatal.h" -#include "sudo_iolog.h" -#include "pathnames.h" static unsigned char const gzip_magic[2] = {0x1f, 0x8b}; static unsigned int sessid_max = SESSID_MAX; diff --git a/lib/iolog/iolog_json.c b/lib/iolog/iolog_json.c index 3adf06dc53..1c52e2c6cd 100644 --- a/lib/iolog/iolog_json.c +++ b/lib/iolog/iolog_json.c @@ -37,13 +37,12 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - #include "sudo_compat.h" -#include "sudo_fatal.h" #include "sudo_debug.h" -#include "sudo_util.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" +#include "sudo_util.h" #include "iolog_json.h" diff --git a/lib/iolog/iolog_path.c b/lib/iolog/iolog_path.c index c11eab1fd0..1f34c0b103 100644 --- a/lib/iolog/iolog_path.c +++ b/lib/iolog/iolog_path.c @@ -35,13 +35,12 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - #include "sudo_compat.h" -#include "sudo_fatal.h" #include "sudo_debug.h" -#include "sudo_util.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" +#include "sudo_util.h" /* * Expand any escape sequences in inpath, returning the expanded path. diff --git a/lib/iolog/iolog_util.c b/lib/iolog/iolog_util.c index 05264e2339..c1339d5dcf 100644 --- a/lib/iolog/iolog_util.c +++ b/lib/iolog/iolog_util.c @@ -39,13 +39,12 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - #include "sudo_compat.h" -#include "sudo_fatal.h" #include "sudo_debug.h" -#include "sudo_util.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" +#include "sudo_util.h" static int timing_event_adj; diff --git a/lib/util/ttyname_dev.c b/lib/util/ttyname_dev.c index 9349a722c4..def4ace2c2 100644 --- a/lib/util/ttyname_dev.c +++ b/lib/util/ttyname_dev.c @@ -41,7 +41,7 @@ #include #include -#include +#include "pathnames.h" #include "sudo_compat.h" #include "sudo_debug.h" #include "sudo_conf.h" diff --git a/logsrvd/eventlog.c b/logsrvd/eventlog.c index 2c7920c661..006a9b5dc4 100644 --- a/logsrvd/eventlog.c +++ b/logsrvd/eventlog.c @@ -45,15 +45,16 @@ #include #include -#include "log_server.pb-c.h" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" +#include "sudo_debug.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" #include "sudo_json.h" #include "sudo_queue.h" -#include "sudo_debug.h" #include "sudo_util.h" -#include "sudo_iolog.h" + +#include "log_server.pb-c.h" #include "logsrvd.h" #define LL_HOST_STR "HOST=" diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index f001477276..7e99182965 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -38,13 +38,14 @@ #include #include -#include "log_server.pb-c.h" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_queue.h" #include "sudo_debug.h" -#include "sudo_util.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" +#include "sudo_queue.h" +#include "sudo_util.h" + +#include "log_server.pb-c.h" #include "logsrvd.h" static inline bool diff --git a/logsrvd/logsrv_util.c b/logsrvd/logsrv_util.c index 72b0700c3b..6ddc3e3027 100644 --- a/logsrvd/logsrv_util.c +++ b/logsrvd/logsrv_util.c @@ -37,12 +37,13 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" #include "sudo_debug.h" -#include "sudo_util.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" +#include "sudo_util.h" + #include "logsrv_util.h" /* diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index c34881323d..559bbe9bed 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -51,18 +51,19 @@ #define NEED_INET_NTOP /* to expose sudo_inet_ntop in sudo_compat.h */ -#include "log_server.pb-c.h" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ +#include "pathnames.h" #include "sudo_compat.h" #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_event.h" -#include "sudo_queue.h" -#include "sudo_util.h" -#include "sudo_rand.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" -#include "pathnames.h" +#include "sudo_queue.h" +#include "sudo_rand.h" +#include "sudo_util.h" + +#include "log_server.pb-c.h" #include "hostcheck.h" #include "logsrvd.h" diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index 4877f3d8e6..37b65c5368 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -41,20 +41,21 @@ #include #include -#ifndef HAVE_GETADDRINFO -# include "compat/getaddrinfo.h" -#endif - -#include "log_server.pb-c.h" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ +#include "pathnames.h" #include "sudo_compat.h" #include "sudo_debug.h" -#include "sudo_util.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" -#include "pathnames.h" +#include "sudo_util.h" + +#include "log_server.pb-c.h" #include "logsrvd.h" +#ifndef HAVE_GETADDRINFO +# include "compat/getaddrinfo.h" +#endif + #if defined(HAVE_OPENSSL) # define DEFAULT_CA_CERT_PATH "/etc/ssl/sudo/cacert.pem" # define DEFAULT_SERVER_CERT_PATH "/etc/ssl/sudo/certs/logsrvd_cert.pem" diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index cf8304ed01..7af7219a65 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -46,23 +46,24 @@ #include #include -#include "log_server.pb-c.h" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ +#if defined(HAVE_OPENSSL) +# include +# include +#endif + #include "sudo_compat.h" #include "sudo_conf.h" #include "sudo_debug.h" -#include "sudo_util.h" #include "sudo_event.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_iolog.h" +#include "sudo_util.h" + #include "hostcheck.h" +#include "log_server.pb-c.h" #include "sendlog.h" -#if defined(HAVE_OPENSSL) -# include -# include -#endif - #ifndef HAVE_GETADDRINFO # include "compat/getaddrinfo.h" #endif diff --git a/plugins/audit_json/audit_json.c b/plugins/audit_json/audit_json.c index 85a0ff3518..04b1866cef 100644 --- a/plugins/audit_json/audit_json.c +++ b/plugins/audit_json/audit_json.c @@ -40,17 +40,16 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - +#include "pathnames.h" #include "sudo_compat.h" #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_dso.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_json.h" #include "sudo_plugin.h" #include "sudo_util.h" -#include "pathnames.h" static int audit_debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER; static sudo_conv_t audit_conv; diff --git a/plugins/sample/sample_plugin.c b/plugins/sample/sample_plugin.c index 232aece80c..1886ea687f 100644 --- a/plugins/sample/sample_plugin.c +++ b/plugins/sample/sample_plugin.c @@ -44,7 +44,7 @@ #include #include -#include +#include "pathnames.h" #include "sudo_compat.h" #include "sudo_plugin.h" #include "sudo_util.h" diff --git a/plugins/sample_approval/sample_approval.c b/plugins/sample_approval/sample_approval.c index eae64d1f18..c433f208f9 100644 --- a/plugins/sample_approval/sample_approval.c +++ b/plugins/sample_approval/sample_approval.c @@ -34,12 +34,11 @@ #include #include -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - #include "sudo_compat.h" #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_plugin.h" #include "sudo_util.h" diff --git a/plugins/sudoers/locale.c b/plugins/sudoers/locale.c index 074a204f0e..a5d393cedf 100644 --- a/plugins/sudoers/locale.c +++ b/plugins/sudoers/locale.c @@ -33,11 +33,12 @@ #endif /* HAVE_STDBOOL_H */ #define DEFAULT_TEXT_DOMAIN "sudoers" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" #include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudoers_debug.h" + #include "defaults.h" #include "logging.h" diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index b2eb5811d9..df6d5b3766 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -33,21 +33,22 @@ #endif /* HAVE_STDBOOL_H */ #define DEFAULT_TEXT_DOMAIN "sudoers" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ -#include +#include "pathnames.h" #include "sudo_compat.h" +#include "sudo_conf.h" #include "sudo_fatal.h" -#include "sudo_queue.h" -#include "defaults.h" -#include "logging.h" -#include "parse.h" +#include "sudo_gettext.h" #include "sudo_nss.h" #include "sudo_plugin.h" -#include "sudo_conf.h" +#include "sudo_queue.h" #include "sudo_util.h" #include "sudoers_debug.h" +#include "defaults.h" +#include "logging.h" +#include "parse.h" + /* * Info passed in from the sudo front-end. */ diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index 762a416991..45fe0afa22 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -51,21 +51,20 @@ #include #include -#include - -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - +#include "pathnames.h" #include "sudo_compat.h" -#include "sudo_fatal.h" -#include "logging.h" -#include "sudo_iolog.h" -#include "sudo_queue.h" -#include "sudo_plugin.h" #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_event.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_iolog.h" +#include "sudo_plugin.h" +#include "sudo_queue.h" #include "sudo_util.h" +#include "logging.h" + #ifdef HAVE_GETOPT_LONG # include # else diff --git a/src/net_ifs.c b/src/net_ifs.c index 8d8220b047..0bdeace649 100644 --- a/src/net_ifs.c +++ b/src/net_ifs.c @@ -83,12 +83,12 @@ struct rtentry; #define NEED_INET_NTOP /* to expose sudo_inet_ntop in sudo_compat.h */ #define DEFAULT_TEXT_DOMAIN "sudo" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_fatal.h" #include "sudo_conf.h" #include "sudo_debug.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" /* Minix apparently lacks IFF_LOOPBACK */ #ifndef IFF_LOOPBACK diff --git a/src/sesh.c b/src/sesh.c index c9d426000b..55f409c292 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -39,13 +39,12 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - #include "sudo_compat.h" -#include "sudo_fatal.h" #include "sudo_conf.h" #include "sudo_debug.h" #include "sudo_exec.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" #include "sudo_plugin.h" #include "sudo_util.h" diff --git a/src/sudo.h b/src/sudo.h index 2a3c5050f8..23f734c6e3 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -25,27 +25,25 @@ #define SUDO_SUDO_H #include -#include #ifdef HAVE_STDBOOL_H # include #else # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#ifdef HAVE_PRIV_SET +# include +#endif -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - +#include "pathnames.h" #include "sudo_compat.h" -#include "sudo_fatal.h" #include "sudo_conf.h" #include "sudo_debug.h" -#include "sudo_queue.h" #include "sudo_event.h" +#include "sudo_fatal.h" +#include "sudo_gettext.h" +#include "sudo_queue.h" #include "sudo_util.h" -#ifdef HAVE_PRIV_SET -# include -#endif - /* Enable asserts() to avoid static analyzer false positives. */ #if !(defined(SUDO_DEVEL) || defined(__clang_analyzer__) || defined(__COVERITY__)) # define NDEBUG From 985af422d2c4e806d9130a8e2f12b52c2253a3bb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 12 Aug 2020 09:57:42 -0600 Subject: [PATCH 030/113] Rename __dso_public -> sudo_dso_public and move to config.h. --- config.h.in | 13 +++ configure.ac | 17 +++- include/compat/fnmatch.h | 2 +- include/compat/getaddrinfo.h | 6 +- include/compat/getopt.h | 6 +- include/compat/glob.h | 4 +- include/compat/sha2.h | 40 ++++---- include/sudo_compat.h | 98 ++++++++----------- include/sudo_conf.h | 30 +++--- include/sudo_debug.h | 54 +++++----- include/sudo_digest.h | 12 +-- include/sudo_dso.h | 10 +- include/sudo_event.h | 38 +++---- include/sudo_fatal.h | 34 +++---- include/sudo_json.h | 20 ++-- include/sudo_lbuf.h | 14 +-- include/sudo_rand.h | 6 +- include/sudo_util.h | 84 ++++++++-------- lib/iolog/regress/host_port/host_port_test.c | 2 +- .../regress/iolog_json/check_iolog_json.c | 2 +- .../regress/iolog_mkpath/check_iolog_mkpath.c | 2 +- .../regress/iolog_path/check_iolog_path.c | 2 +- .../regress/iolog_util/check_iolog_util.c | 2 +- lib/util/mksiglist.c | 2 +- lib/util/mksigname.c | 2 +- lib/util/regress/fnmatch/fnm_test.c | 2 +- lib/util/regress/getdelim/getdelim_test.c | 2 +- .../regress/getgrouplist/getgrouplist_test.c | 2 +- lib/util/regress/glob/globtest.c | 2 +- lib/util/regress/mktemp/mktemp_test.c | 2 +- lib/util/regress/parse_gids/parse_gids_test.c | 2 +- lib/util/regress/progname/progname_test.c | 2 +- lib/util/regress/strsig/strsig_test.c | 2 +- lib/util/regress/strsplit/strsplit_test.c | 2 +- lib/util/regress/strtofoo/strtobool_test.c | 2 +- lib/util/regress/strtofoo/strtoid_test.c | 2 +- lib/util/regress/strtofoo/strtomode_test.c | 2 +- lib/util/regress/strtofoo/strtonum_test.c | 2 +- lib/util/regress/sudo_conf/conf_test.c | 2 +- lib/util/regress/sudo_parseln/parseln_test.c | 2 +- lib/util/regress/tailq/hltq_test.c | 2 +- lib/util/regress/vsyslog/vsyslog_test.c | 2 +- lib/util/term.c | 6 +- logsrvd/logsrvd.c | 2 +- logsrvd/sendlog.c | 2 +- plugins/audit_json/audit_json.c | 2 +- plugins/group_file/group_file.c | 2 +- plugins/group_file/plugin_test.c | 2 +- plugins/python/python_plugin_approval.c | 4 +- plugins/python/python_plugin_audit.c | 4 +- plugins/python/python_plugin_group.c | 2 +- plugins/python/python_plugin_io.c | 4 +- plugins/python/python_plugin_policy.c | 2 +- plugins/sample/sample_plugin.c | 4 +- plugins/sample_approval/sample_approval.c | 2 +- plugins/sudoers/audit.c | 2 +- plugins/sudoers/cvtsudoers.c | 2 +- plugins/sudoers/iolog.c | 4 +- plugins/sudoers/policy.c | 4 +- .../regress/check_symbols/check_symbols.c | 2 +- .../regress/env_match/check_env_pattern.c | 2 +- .../regress/iolog_plugin/check_iolog_plugin.c | 2 +- plugins/sudoers/regress/logging/check_wrap.c | 2 +- plugins/sudoers/regress/parser/check_addr.c | 2 +- plugins/sudoers/regress/parser/check_base64.c | 2 +- plugins/sudoers/regress/parser/check_digest.c | 2 +- plugins/sudoers/regress/parser/check_fill.c | 2 +- .../sudoers/regress/parser/check_gentime.c | 2 +- .../sudoers/regress/parser/check_hexchar.c | 2 +- .../regress/starttime/check_starttime.c | 2 +- plugins/sudoers/sudoers.h | 8 +- plugins/sudoers/sudoreplay.c | 2 +- plugins/sudoers/testsudoers.c | 2 +- plugins/sudoers/tsdump.c | 2 +- plugins/sudoers/visudo.c | 2 +- plugins/system_group/system_group.c | 2 +- src/env_hooks.c | 10 +- src/regress/noexec/check_noexec.c | 2 +- src/regress/ttyname/check_ttyname.c | 2 +- src/sesh.c | 2 +- src/sudo.c | 2 +- src/sudo_noexec.c | 14 +-- 82 files changed, 333 insertions(+), 325 deletions(-) diff --git a/config.h.in b/config.h.in index 6a3f07351d..2fa1d92a64 100644 --- a/config.h.in +++ b/config.h.in @@ -1324,6 +1324,19 @@ code using `volatile' can become incorrect without. Disable with care. */ #undef volatile +/* Symbol visibility controls */ +#ifdef HAVE_DSO_VISIBILITY +# if defined(__GNUC__) +# define sudo_dso_public __attribute__((__visibility__("default"))) +# elif defined(__SUNPRO_C) +# define sudo_dso_public __global +# else +# define sudo_dso_public __declspec(dllexport) +# endif +#else +# define sudo_dso_public +#endif + /* BSD compatibility on some SVR4 systems. */ #ifdef __svr4__ # define BSD_COMP diff --git a/configure.ac b/configure.ac index 3784cc9d74..bf9f321968 100644 --- a/configure.ac +++ b/configure.ac @@ -4343,7 +4343,7 @@ dnl dnl Check whether ld supports version scripts (only GNU and Solaris ld). dnl If possible, we use this even if the compiler has symbol visibility dnl support so we will notice mismatches between the exports file and -dnl __dso_public annotations in the source code. +dnl sudo_dso_public annotations in the source code. dnl This test relies on AC_LANG_WERROR dnl if test "$lt_cv_prog_gnu_ld" = "yes"; then @@ -4905,7 +4905,20 @@ dnl AH_TOP([#ifndef SUDO_CONFIG_H #define SUDO_CONFIG_H]) -AH_BOTTOM([/* BSD compatibility on some SVR4 systems. */ +AH_BOTTOM([/* Symbol visibility controls */ +#ifdef HAVE_DSO_VISIBILITY +# if defined(__GNUC__) +# define sudo_dso_public __attribute__((__visibility__("default"))) +# elif defined(__SUNPRO_C) +# define sudo_dso_public __global +# else +# define sudo_dso_public __declspec(dllexport) +# endif +#else +# define sudo_dso_public +#endif + +/* BSD compatibility on some SVR4 systems. */ #ifdef __svr4__ # define BSD_COMP #endif diff --git a/include/compat/fnmatch.h b/include/compat/fnmatch.h index 41cd3da89e..75cac1f806 100644 --- a/include/compat/fnmatch.h +++ b/include/compat/fnmatch.h @@ -27,7 +27,7 @@ #define FNM_LEADING_DIR (1 << 3) /* Only match the leading directory */ #define FNM_CASEFOLD (1 << 4) /* Case insensitive matching */ -__dso_public int sudo_fnmatch(const char *pattern, const char *string, int flags); +sudo_dso_public int sudo_fnmatch(const char *pattern, const char *string, int flags); #define fnmatch(_a, _b, _c) sudo_fnmatch((_a), (_b), (_c)) diff --git a/include/compat/getaddrinfo.h b/include/compat/getaddrinfo.h index 9b36eaecdd..709bb098f3 100644 --- a/include/compat/getaddrinfo.h +++ b/include/compat/getaddrinfo.h @@ -66,10 +66,10 @@ struct addrinfo { #define EAI_OVERFLOW 10 /* An argument buffer overflowed */ /* Function prototypes. */ -__dso_public int sudo_getaddrinfo(const char *nodename, const char *servname, +sudo_dso_public int sudo_getaddrinfo(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res); -__dso_public void sudo_freeaddrinfo(struct addrinfo *ai); -__dso_public const char *sudo_gai_strerror(int ecode); +sudo_dso_public void sudo_freeaddrinfo(struct addrinfo *ai); +sudo_dso_public const char *sudo_gai_strerror(int ecode); /* Map sudo_* to RFC 3493 names. */ #undef getaddrinfo diff --git a/include/compat/getopt.h b/include/compat/getopt.h index d83577effe..da99d34ce5 100644 --- a/include/compat/getopt.h +++ b/include/compat/getopt.h @@ -57,19 +57,19 @@ struct option { int val; }; -__dso_public int sudo_getopt_long(int, char * const *, const char *, +sudo_dso_public int sudo_getopt_long(int, char * const *, const char *, const struct option *, int *); #undef getopt_long #define getopt_long(_a, _b, _c, _d, _e) \ sudo_getopt_long((_a), (_b), (_c), (_d), (_e)) -__dso_public int sudo_getopt_long_only(int, char * const *, const char *, +sudo_dso_public int sudo_getopt_long_only(int, char * const *, const char *, const struct option *, int *); #undef getopt_long_only #define getopt_long_only(_a, _b, _c, _d, _e) \ sudo_getopt_long_only((_a), (_b), (_c), (_d), (_e)) #if 0 -__dso_public int sudo_getopt(int, char * const [], const char *); +sudo_dso_public int sudo_getopt(int, char * const [], const char *); #undef getopt #define getopt(_a, _b, _c) sudo_getopt((_a), (_b), (_c)) #endif diff --git a/include/compat/glob.h b/include/compat/glob.h index 7e3b58316a..7c06a2e809 100644 --- a/include/compat/glob.h +++ b/include/compat/glob.h @@ -69,8 +69,8 @@ typedef struct { #define GLOB_NOMATCH (-3) /* No match and GLOB_NOCHECK not set. */ #define GLOB_NOSYS (-4) /* Function not supported. */ -__dso_public int sudo_glob(const char *, int, int (*)(const char *, int), glob_t *); -__dso_public void sudo_globfree(glob_t *); +sudo_dso_public int sudo_glob(const char *, int, int (*)(const char *, int), glob_t *); +sudo_dso_public void sudo_globfree(glob_t *); #define glob(_a, _b, _c, _d) sudo_glob((_a), (_b), (_c), (_d)) #define globfree(_a) sudo_globfree((_a)) diff --git a/include/compat/sha2.h b/include/compat/sha2.h index 463c33ad77..290869674d 100644 --- a/include/compat/sha2.h +++ b/include/compat/sha2.h @@ -49,11 +49,11 @@ typedef struct { uint8_t buffer[SHA512_BLOCK_LENGTH]; } SHA2_CTX; -__dso_public void sudo_SHA224Init(SHA2_CTX *ctx); -__dso_public void sudo_SHA224Pad(SHA2_CTX *ctx); -__dso_public void sudo_SHA224Transform(uint32_t state[8], const uint8_t buffer[SHA224_BLOCK_LENGTH]); -__dso_public void sudo_SHA224Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void sudo_SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA224Init(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA224Pad(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA224Transform(uint32_t state[8], const uint8_t buffer[SHA224_BLOCK_LENGTH]); +sudo_dso_public void sudo_SHA224Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); +sudo_dso_public void sudo_SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CTX *ctx); #define SHA224Init sudo_SHA224Init #define SHA224Pad sudo_SHA224Pad @@ -61,11 +61,11 @@ __dso_public void sudo_SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CT #define SHA224Update sudo_SHA224Update #define SHA224Final sudo_SHA224Final -__dso_public void sudo_SHA256Init(SHA2_CTX *ctx); -__dso_public void sudo_SHA256Pad(SHA2_CTX *ctx); -__dso_public void sudo_SHA256Transform(uint32_t state[8], const uint8_t buffer[SHA256_BLOCK_LENGTH]); -__dso_public void sudo_SHA256Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void sudo_SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA256Init(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA256Pad(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA256Transform(uint32_t state[8], const uint8_t buffer[SHA256_BLOCK_LENGTH]); +sudo_dso_public void sudo_SHA256Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); +sudo_dso_public void sudo_SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CTX *ctx); #define SHA256Init sudo_SHA256Init #define SHA256Pad sudo_SHA256Pad @@ -73,11 +73,11 @@ __dso_public void sudo_SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CT #define SHA256Update sudo_SHA256Update #define SHA256Final sudo_SHA256Final -__dso_public void sudo_SHA384Init(SHA2_CTX *ctx); -__dso_public void sudo_SHA384Pad(SHA2_CTX *ctx); -__dso_public void sudo_SHA384Transform(uint64_t state[8], const uint8_t buffer[SHA384_BLOCK_LENGTH]); -__dso_public void sudo_SHA384Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void sudo_SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA384Init(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA384Pad(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA384Transform(uint64_t state[8], const uint8_t buffer[SHA384_BLOCK_LENGTH]); +sudo_dso_public void sudo_SHA384Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); +sudo_dso_public void sudo_SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CTX *ctx); #define SHA384Init sudo_SHA384Init #define SHA384Pad sudo_SHA384Pad @@ -85,11 +85,11 @@ __dso_public void sudo_SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CT #define SHA384Update sudo_SHA384Update #define SHA384Final sudo_SHA384Final -__dso_public void sudo_SHA512Init(SHA2_CTX *ctx); -__dso_public void sudo_SHA512Pad(SHA2_CTX *ctx); -__dso_public void sudo_SHA512Transform(uint64_t state[8], const uint8_t buffer[SHA512_BLOCK_LENGTH]); -__dso_public void sudo_SHA512Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void sudo_SHA512Final(uint8_t digest[SHA512_DIGEST_LENGTH], SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA512Init(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA512Pad(SHA2_CTX *ctx); +sudo_dso_public void sudo_SHA512Transform(uint64_t state[8], const uint8_t buffer[SHA512_BLOCK_LENGTH]); +sudo_dso_public void sudo_SHA512Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); +sudo_dso_public void sudo_SHA512Final(uint8_t digest[SHA512_DIGEST_LENGTH], SHA2_CTX *ctx); #define SHA512Init sudo_SHA512Init #define SHA512Pad sudo_SHA512Pad diff --git a/include/sudo_compat.h b/include/sudo_compat.h index 72d62e5efa..019a8206ed 100644 --- a/include/sudo_compat.h +++ b/include/sudo_compat.h @@ -88,24 +88,6 @@ # define __containerof(x, s, m) ((s *)((char *)(x) - offsetof(s, m))) #endif -#ifndef __dso_public -# ifdef HAVE_DSO_VISIBILITY -# if defined(__GNUC__) -# define __dso_public __attribute__((__visibility__("default"))) -# define __dso_hidden __attribute__((__visibility__("hidden"))) -# elif defined(__SUNPRO_C) -# define __dso_public __global -# define __dso_hidden __hidden -# else -# define __dso_public __declspec(dllexport) -# define __dso_hidden -# endif -# else -# define __dso_public -# define __dso_hidden -# endif -#endif - /* * Pre-C99 compilers may lack a va_copy macro. */ @@ -259,7 +241,7 @@ * Simple isblank() macro and function for systems without it. */ #ifndef HAVE_ISBLANK -__dso_public int isblank(int); +sudo_dso_public int isblank(int); # define isblank(_x) ((_x) == ' ' || (_x) == '\t') #endif @@ -427,37 +409,37 @@ struct timespec; struct termios; #ifndef HAVE_CFMAKERAW -__dso_public void sudo_cfmakeraw(struct termios *term); +sudo_dso_public void sudo_cfmakeraw(struct termios *term); # undef cfmakeraw # define cfmakeraw(_a) sudo_cfmakeraw((_a)) #endif /* HAVE_CFMAKERAW */ #ifndef HAVE_CLOSEFROM -__dso_public void sudo_closefrom(int); +sudo_dso_public void sudo_closefrom(int); # undef closefrom # define closefrom(_a) sudo_closefrom((_a)) #endif /* HAVE_CLOSEFROM */ #ifndef HAVE_EXPLICIT_BZERO -__dso_public void sudo_explicit_bzero(void *s, size_t n); +sudo_dso_public void sudo_explicit_bzero(void *s, size_t n); # undef explicit_bzero # define explicit_bzero(_a, _b) sudo_explicit_bzero((_a), (_b)) #endif /* HAVE_EXPLICIT_BZERO */ #ifndef HAVE_FREEZERO -__dso_public void sudo_freezero(void *p, size_t n); +sudo_dso_public void sudo_freezero(void *p, size_t n); # undef freezero # define freezero(_a, _b) sudo_freezero((_a), (_b)) #endif /* HAVE_FREEZERO */ #ifdef PREFER_PORTABLE_GETCWD -__dso_public char *sudo_getcwd(char *, size_t size); +sudo_dso_public char *sudo_getcwd(char *, size_t size); # undef getcwd # define getcwd(_a, _b) sudo_getcwd((_a), (_b)) #endif /* PREFER_PORTABLE_GETCWD */ #ifndef HAVE_GETGROUPLIST -__dso_public int sudo_getgrouplist(const char *name, GETGROUPS_T basegid, GETGROUPS_T *groups, int *ngroupsp); +sudo_dso_public int sudo_getgrouplist(const char *name, GETGROUPS_T basegid, GETGROUPS_T *groups, int *ngroupsp); # undef getgrouplist # define getgrouplist(_a, _b, _c, _d) sudo_getgrouplist((_a), (_b), (_c), (_d)) #endif /* GETGROUPLIST */ #if !defined(HAVE_GETDELIM) -__dso_public ssize_t sudo_getdelim(char **bufp, size_t *bufsizep, int delim, FILE *fp); +sudo_dso_public ssize_t sudo_getdelim(char **bufp, size_t *bufsizep, int delim, FILE *fp); # undef getdelim # define getdelim(_a, _b, _c, _d) sudo_getdelim((_a), (_b), (_c), (_d)) #elif defined(HAVE_DECL_GETDELIM) && !HAVE_DECL_GETDELIM @@ -465,156 +447,156 @@ __dso_public ssize_t sudo_getdelim(char **bufp, size_t *bufsizep, int delim, FIL ssize_t getdelim(char **bufp, size_t *bufsizep, int delim, FILE *fp); #endif /* HAVE_GETDELIM */ #ifndef HAVE_GETUSERSHELL -__dso_public char *sudo_getusershell(void); +sudo_dso_public char *sudo_getusershell(void); # undef getusershell # define getusershell() sudo_getusershell() -__dso_public void sudo_setusershell(void); +sudo_dso_public void sudo_setusershell(void); # undef setusershell # define setusershell() sudo_setusershell() -__dso_public void sudo_endusershell(void); +sudo_dso_public void sudo_endusershell(void); # undef endusershell # define endusershell() sudo_endusershell() #endif /* HAVE_GETUSERSHELL */ #ifndef HAVE_UTIMENSAT -__dso_public int sudo_utimensat(int fd, const char *file, const struct timespec *times, int flag); +sudo_dso_public int sudo_utimensat(int fd, const char *file, const struct timespec *times, int flag); # undef utimensat # define utimensat(_a, _b, _c, _d) sudo_utimensat((_a), (_b), (_c), (_d)) #endif /* HAVE_UTIMENSAT */ #ifndef HAVE_FCHMODAT -__dso_public int sudo_fchmodat(int dfd, const char *path, mode_t mode, int flag); +sudo_dso_public int sudo_fchmodat(int dfd, const char *path, mode_t mode, int flag); # undef fchmodat # define fchmodat(_a, _b, _c, _d) sudo_fchmodat((_a), (_b), (_c), (_d)) #endif /* HAVE_FCHMODAT */ #ifndef HAVE_FSTATAT -__dso_public int sudo_fstatat(int dfd, const char *path, struct stat *sb, int flag); +sudo_dso_public int sudo_fstatat(int dfd, const char *path, struct stat *sb, int flag); # undef fstatat # define fstatat(_a, _b, _c, _d) sudo_fstatat((_a), (_b), (_c), (_d)) #endif /* HAVE_FSTATAT */ #ifndef HAVE_FUTIMENS -__dso_public int sudo_futimens(int fd, const struct timespec *times); +sudo_dso_public int sudo_futimens(int fd, const struct timespec *times); # undef futimens # define futimens(_a, _b) sudo_futimens((_a), (_b)) #endif /* HAVE_FUTIMENS */ #if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -__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, ...) __printflike(3, 4); # undef snprintf # define snprintf sudo_snprintf #endif /* HAVE_SNPRINTF */ #if !defined(HAVE_VSNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -__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) __printflike(3, 0); # undef vsnprintf # define vsnprintf sudo_vsnprintf #endif /* HAVE_VSNPRINTF */ #if !defined(HAVE_ASPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -__dso_public int sudo_asprintf(char **str, char const *fmt, ...) __printflike(2, 3); +sudo_dso_public int sudo_asprintf(char **str, char const *fmt, ...) __printflike(2, 3); # undef asprintf # define asprintf sudo_asprintf #endif /* HAVE_ASPRINTF */ #if !defined(HAVE_VASPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) -__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) __printflike(2, 0); # undef vasprintf # define vasprintf sudo_vasprintf #endif /* HAVE_VASPRINTF */ #ifndef HAVE_STRLCAT -__dso_public size_t sudo_strlcat(char *dst, const char *src, size_t siz); +sudo_dso_public size_t sudo_strlcat(char *dst, const char *src, size_t siz); # undef strlcat # define strlcat(_a, _b, _c) sudo_strlcat((_a), (_b), (_c)) #endif /* HAVE_STRLCAT */ #ifndef HAVE_STRLCPY -__dso_public size_t sudo_strlcpy(char *dst, const char *src, size_t siz); +sudo_dso_public size_t sudo_strlcpy(char *dst, const char *src, size_t siz); # undef strlcpy # define strlcpy(_a, _b, _c) sudo_strlcpy((_a), (_b), (_c)) #endif /* HAVE_STRLCPY */ #ifndef HAVE_STRNDUP -__dso_public char *sudo_strndup(const char *str, size_t maxlen); +sudo_dso_public char *sudo_strndup(const char *str, size_t maxlen); # undef strndup # define strndup(_a, _b) sudo_strndup((_a), (_b)) #endif /* HAVE_STRNDUP */ #ifndef HAVE_STRNLEN -__dso_public size_t sudo_strnlen(const char *str, size_t maxlen); +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_MEMRCHR -__dso_public void *sudo_memrchr(const void *s, int c, size_t n); +sudo_dso_public void *sudo_memrchr(const void *s, int c, size_t n); # undef memrchr # define memrchr(_a, _b, _c) sudo_memrchr((_a), (_b), (_c)) #endif /* HAVE_MEMRCHR */ #if !defined(HAVE_MKDTEMP) || !defined(HAVE_MKSTEMPS) -__dso_public char *sudo_mkdtemp(char *path); +sudo_dso_public char *sudo_mkdtemp(char *path); # undef mkdtemp # define mkdtemp(_a) sudo_mkdtemp((_a)) -__dso_public int sudo_mkstemps(char *path, int slen); +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 */ #ifndef HAVE_NANOSLEEP -__dso_public int sudo_nanosleep(const struct timespec *timeout, struct timespec *remainder); +sudo_dso_public int sudo_nanosleep(const struct timespec *timeout, struct timespec *remainder); #undef nanosleep # define nanosleep(_a, _b) sudo_nanosleep((_a), (_b)) #endif /* HAVE_NANOSLEEP */ #ifndef HAVE_OPENAT -__dso_public int sudo_openat(int dfd, const char *path, int flags, mode_t mode); +sudo_dso_public int sudo_openat(int dfd, const char *path, int flags, mode_t mode); # undef openat # define openat(_a, _b, _c, _d) sudo_openat((_a), (_b), (_c), (_d)) #endif /* HAVE_OPENAT */ #ifndef HAVE_PW_DUP -__dso_public struct passwd *sudo_pw_dup(const struct passwd *pw); +sudo_dso_public struct passwd *sudo_pw_dup(const struct passwd *pw); # undef pw_dup # define pw_dup(_a) sudo_pw_dup((_a)) #endif /* HAVE_PW_DUP */ #ifndef HAVE_STRSIGNAL -__dso_public char *sudo_strsignal(int signo); +sudo_dso_public char *sudo_strsignal(int signo); # undef strsignal # define strsignal(_a) sudo_strsignal((_a)) #endif /* HAVE_STRSIGNAL */ #ifndef HAVE_SIG2STR -__dso_public int sudo_sig2str(int signo, char *signame); +sudo_dso_public int sudo_sig2str(int signo, char *signame); # undef sig2str # define sig2str(_a, _b) sudo_sig2str((_a), (_b)) #endif /* HAVE_SIG2STR */ #ifndef HAVE_STR2SIG -__dso_public int sudo_str2sig(const char *signame, int *signum); +sudo_dso_public int sudo_str2sig(const char *signame, int *signum); # undef str2sig # define str2sig(_a, _b) sudo_str2sig((_a), (_b)) #endif /* HAVE_STR2SIG */ #if !defined(HAVE_INET_NTOP) && defined(NEED_INET_NTOP) -__dso_public char *sudo_inet_ntop(int af, const void *src, char *dst, socklen_t size); +sudo_dso_public char *sudo_inet_ntop(int af, const void *src, char *dst, socklen_t size); # undef inet_ntop # define inet_ntop(_a, _b, _c, _d) sudo_inet_ntop((_a), (_b), (_c), (_d)) #endif /* HAVE_INET_NTOP */ #ifndef HAVE_INET_PTON -__dso_public int sudo_inet_pton(int af, const char *src, void *dst); +sudo_dso_public int sudo_inet_pton(int af, const char *src, void *dst); # undef inet_pton # define inet_pton(_a, _b, _c) sudo_inet_pton((_a), (_b), (_c)) #endif /* HAVE_INET_PTON */ #ifndef HAVE_GETPROGNAME -__dso_public const char *sudo_getprogname(void); +sudo_dso_public const char *sudo_getprogname(void); # undef getprogname # define getprogname() sudo_getprogname() #endif /* HAVE_GETPROGNAME */ #ifndef HAVE_REALLOCARRAY -__dso_public void *sudo_reallocarray(void *ptr, size_t nmemb, size_t size); +sudo_dso_public void *sudo_reallocarray(void *ptr, size_t nmemb, size_t size); # undef reallocarray # define reallocarray(_a, _b, _c) sudo_reallocarray((_a), (_b), (_c)) #endif /* HAVE_REALLOCARRAY */ #ifndef HAVE_VSYSLOG -__dso_public void sudo_vsyslog(int pri, const char *fmt, va_list ap); +sudo_dso_public void sudo_vsyslog(int pri, const char *fmt, va_list ap); # undef vsyslog # define vsyslog(_a, _b, _c) sudo_vsyslog((_a), (_b), (_c)) #endif /* HAVE_VSYSLOG */ #ifndef HAVE_DUP3 -__dso_public int sudo_dup3(int oldd, int newd, int flags); +sudo_dso_public int sudo_dup3(int oldd, int newd, int flags); # undef dup3 # define dup3(_a, _b, _c) sudo_dup3((_a), (_b), (_c)) #endif /* HAVE_DUP3 */ #ifndef HAVE_PIPE2 -__dso_public int sudo_pipe2(int fildes[2], int flags); +sudo_dso_public int sudo_pipe2(int fildes[2], int flags); # undef pipe2 # define pipe2(_a, _b) sudo_pipe2((_a), (_b)) #endif /* HAVE_PIPE2 */ #ifndef HAVE_UNLINKAT -__dso_public int sudo_unlinkat(int dfd, const char *path, int flag); +sudo_dso_public int sudo_unlinkat(int dfd, const char *path, int flag); # undef unlinkat # define unlinkat(_a, _b, _c) sudo_unlinkat((_a), (_b), (_c)) #endif /* HAVE_UNLINKAT */ diff --git a/include/sudo_conf.h b/include/sudo_conf.h index 5664b30a45..e7c08c8555 100644 --- a/include/sudo_conf.h +++ b/include/sudo_conf.h @@ -59,24 +59,24 @@ struct sudo_conf_debug { TAILQ_HEAD(sudo_conf_debug_list, sudo_conf_debug); /* Read main sudo.conf file. */ -__dso_public int sudo_conf_read_v1(const char *conf_file, int conf_types); +sudo_dso_public int sudo_conf_read_v1(const char *conf_file, int conf_types); #define sudo_conf_read(_a, _b) sudo_conf_read_v1((_a), (_b)) /* Accessor functions. */ -__dso_public const char *sudo_conf_askpass_path_v1(void); -__dso_public const char *sudo_conf_sesh_path_v1(void); -__dso_public const char *sudo_conf_noexec_path_v1(void); -__dso_public const char *sudo_conf_plugin_dir_path_v1(void); -__dso_public const char *sudo_conf_devsearch_path_v1(void); -__dso_public struct sudo_conf_debug_list *sudo_conf_debugging_v1(void); -__dso_public struct sudo_conf_debug_file_list *sudo_conf_debug_files_v1(const char *progname); -__dso_public struct plugin_info_list *sudo_conf_plugins_v1(void); -__dso_public bool sudo_conf_disable_coredump_v1(void); -__dso_public bool sudo_conf_developer_mode_v1(void); -__dso_public bool sudo_conf_probe_interfaces_v1(void); -__dso_public int sudo_conf_group_source_v1(void); -__dso_public int sudo_conf_max_groups_v1(void); -__dso_public void sudo_conf_clear_paths_v1(void); +sudo_dso_public const char *sudo_conf_askpass_path_v1(void); +sudo_dso_public const char *sudo_conf_sesh_path_v1(void); +sudo_dso_public const char *sudo_conf_noexec_path_v1(void); +sudo_dso_public const char *sudo_conf_plugin_dir_path_v1(void); +sudo_dso_public const char *sudo_conf_devsearch_path_v1(void); +sudo_dso_public struct sudo_conf_debug_list *sudo_conf_debugging_v1(void); +sudo_dso_public struct sudo_conf_debug_file_list *sudo_conf_debug_files_v1(const char *progname); +sudo_dso_public struct plugin_info_list *sudo_conf_plugins_v1(void); +sudo_dso_public bool sudo_conf_disable_coredump_v1(void); +sudo_dso_public bool sudo_conf_developer_mode_v1(void); +sudo_dso_public bool sudo_conf_probe_interfaces_v1(void); +sudo_dso_public int sudo_conf_group_source_v1(void); +sudo_dso_public int sudo_conf_max_groups_v1(void); +sudo_dso_public void sudo_conf_clear_paths_v1(void); #define sudo_conf_askpass_path() sudo_conf_askpass_path_v1() #define sudo_conf_sesh_path() sudo_conf_sesh_path_v1() #define sudo_conf_noexec_path() sudo_conf_noexec_path_v1() diff --git a/include/sudo_debug.h b/include/sudo_debug.h index 08479be165..a441874d72 100644 --- a/include/sudo_debug.h +++ b/include/sudo_debug.h @@ -245,33 +245,33 @@ struct sudo_conf_debug_file_list; #define sudo_debug_write(fd, str, len, errnum) \ sudo_debug_write2(fd, NULL, NULL, 0, (str), (len), (errnum)) -__dso_public int sudo_debug_deregister_v1(int instance_id); -__dso_public void sudo_debug_enter_v1(const char *func, const char *file, int line, int subsys); -__dso_public void sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *const envp[]); -__dso_public void sudo_debug_exit_v1(const char *func, const char *file, int line, int subsys); -__dso_public void sudo_debug_exit_bool_v1(const char *func, const char *file, int line, int subsys, bool ret); -__dso_public void sudo_debug_exit_int_v1(const char *func, const char *file, int line, int subsys, int ret); -__dso_public void sudo_debug_exit_long_v1(const char *func, const char *file, int line, int subsys, long ret); -__dso_public void sudo_debug_exit_ptr_v1(const char *func, const char *file, int line, int subsys, const void *ret); -__dso_public void sudo_debug_exit_id_t_v1(const char *func, const char *file, int line, int subsys, id_t ret); -__dso_public void sudo_debug_exit_size_t_v1(const char *func, const char *file, int line, int subsys, size_t ret); -__dso_public void sudo_debug_exit_ssize_t_v1(const char *func, const char *file, int line, int subsys, ssize_t ret); -__dso_public void sudo_debug_exit_str_v1(const char *func, const char *file, int line, int subsys, const char *ret); -__dso_public void sudo_debug_exit_str_masked_v1(const char *func, const char *file, int line, int subsys, const char *ret); -__dso_public void sudo_debug_exit_time_t_v1(const char *func, const char *file, int line, int subsys, time_t ret); -__dso_public pid_t sudo_debug_fork_v1(void); -__dso_public int sudo_debug_get_active_instance_v1(void); -__dso_public int sudo_debug_get_fds_v1(unsigned char **fds); -__dso_public int sudo_debug_get_instance_v1(const char *program); -__dso_public int sudo_debug_parse_flags_v1(struct sudo_conf_debug_file_list *debug_files, const char *entry); -__dso_public void sudo_debug_printf2_v1(const char *func, const char *file, int line, int level, const char *fmt, ...) __printf0like(5, 6); -__dso_public void sudo_debug_printf_nvm_v1(int pri, const char *fmt, ...) __printf0like(2, 3); -__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); -__dso_public int sudo_debug_set_active_instance_v1(int inst); -__dso_public void sudo_debug_update_fd_v1(int ofd, int nfd); -__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); -__dso_public void sudo_debug_write2_v1(int fd, const char *func, const char *file, int line, const char *str, int len, int errnum); -__dso_public bool sudo_debug_needed_v1(int level); +sudo_dso_public int sudo_debug_deregister_v1(int instance_id); +sudo_dso_public void sudo_debug_enter_v1(const char *func, const char *file, int line, int subsys); +sudo_dso_public void sudo_debug_execve2_v1(int level, const char *path, char *const argv[], char *const envp[]); +sudo_dso_public void sudo_debug_exit_v1(const char *func, const char *file, int line, int subsys); +sudo_dso_public void sudo_debug_exit_bool_v1(const char *func, const char *file, int line, int subsys, bool ret); +sudo_dso_public void sudo_debug_exit_int_v1(const char *func, const char *file, int line, int subsys, int ret); +sudo_dso_public void sudo_debug_exit_long_v1(const char *func, const char *file, int line, int subsys, long ret); +sudo_dso_public void sudo_debug_exit_ptr_v1(const char *func, const char *file, int line, int subsys, const void *ret); +sudo_dso_public void sudo_debug_exit_id_t_v1(const char *func, const char *file, int line, int subsys, id_t ret); +sudo_dso_public void sudo_debug_exit_size_t_v1(const char *func, const char *file, int line, int subsys, size_t ret); +sudo_dso_public void sudo_debug_exit_ssize_t_v1(const char *func, const char *file, int line, int subsys, ssize_t ret); +sudo_dso_public void sudo_debug_exit_str_v1(const char *func, const char *file, int line, int subsys, const char *ret); +sudo_dso_public void sudo_debug_exit_str_masked_v1(const char *func, const char *file, int line, int subsys, const char *ret); +sudo_dso_public void sudo_debug_exit_time_t_v1(const char *func, const char *file, int line, int subsys, time_t ret); +sudo_dso_public pid_t sudo_debug_fork_v1(void); +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 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_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_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); #define sudo_debug_needed(level) sudo_debug_needed_v1((level)|sudo_debug_subsys) #define sudo_debug_deregister(_a) sudo_debug_deregister_v1((_a)) diff --git a/include/sudo_digest.h b/include/sudo_digest.h index dcf97367a7..fccfc58178 100644 --- a/include/sudo_digest.h +++ b/include/sudo_digest.h @@ -29,12 +29,12 @@ struct sudo_digest; /* Public functions. */ -__dso_public struct sudo_digest *sudo_digest_alloc_v1(int digest_type); -__dso_public void sudo_digest_free_v1(struct sudo_digest *dig); -__dso_public void sudo_digest_reset_v1(struct sudo_digest *dig); -__dso_public int sudo_digest_getlen_v1(int digest_type); -__dso_public void sudo_digest_update_v1(struct sudo_digest *dig, const void *data, size_t len); -__dso_public void sudo_digest_final_v1(struct sudo_digest *dig, unsigned char *md); +sudo_dso_public struct sudo_digest *sudo_digest_alloc_v1(int digest_type); +sudo_dso_public void sudo_digest_free_v1(struct sudo_digest *dig); +sudo_dso_public void sudo_digest_reset_v1(struct sudo_digest *dig); +sudo_dso_public int sudo_digest_getlen_v1(int digest_type); +sudo_dso_public void sudo_digest_update_v1(struct sudo_digest *dig, const void *data, size_t len); +sudo_dso_public void sudo_digest_final_v1(struct sudo_digest *dig, unsigned char *md); #define sudo_digest_alloc(_a) sudo_digest_alloc_v1((_a)) #define sudo_digest_free(_a) sudo_digest_free_v1((_a)) diff --git a/include/sudo_dso.h b/include/sudo_dso.h index 2daf09ab89..c2e1aaf499 100644 --- a/include/sudo_dso.h +++ b/include/sudo_dso.h @@ -42,11 +42,11 @@ struct sudo_preload_table { }; /* Public functions. */ -__dso_public char *sudo_dso_strerror_v1(void); -__dso_public int sudo_dso_unload_v1(void *handle); -__dso_public void *sudo_dso_findsym_v1(void *handle, const char *symbol); -__dso_public void *sudo_dso_load_v1(const char *path, int mode); -__dso_public void sudo_dso_preload_table_v1(struct sudo_preload_table *table); +sudo_dso_public char *sudo_dso_strerror_v1(void); +sudo_dso_public int sudo_dso_unload_v1(void *handle); +sudo_dso_public void *sudo_dso_findsym_v1(void *handle, const char *symbol); +sudo_dso_public void *sudo_dso_load_v1(const char *path, int mode); +sudo_dso_public void sudo_dso_preload_table_v1(struct sudo_preload_table *table); #define sudo_dso_strerror() sudo_dso_strerror_v1() #define sudo_dso_unload(_a) sudo_dso_unload_v1((_a)) diff --git a/include/sudo_event.h b/include/sudo_event.h index a3fd8f9296..2bb7bb2beb 100644 --- a/include/sudo_event.h +++ b/include/sudo_event.h @@ -113,73 +113,73 @@ struct sudo_event_base { }; /* Allocate a new event base. */ -__dso_public struct sudo_event_base *sudo_ev_base_alloc_v1(void); +sudo_dso_public struct sudo_event_base *sudo_ev_base_alloc_v1(void); #define sudo_ev_base_alloc() sudo_ev_base_alloc_v1() /* Free an event base. */ -__dso_public void sudo_ev_base_free_v1(struct sudo_event_base *base); +sudo_dso_public void sudo_ev_base_free_v1(struct sudo_event_base *base); #define sudo_ev_base_free(_a) sudo_ev_base_free_v1((_a)) /* Set the default event base. */ -__dso_public void sudo_ev_base_setdef_v1(struct sudo_event_base *base); +sudo_dso_public void sudo_ev_base_setdef_v1(struct sudo_event_base *base); #define sudo_ev_base_setdef(_a) sudo_ev_base_setdef_v1((_a)) /* Allocate a new event. */ -__dso_public struct sudo_event *sudo_ev_alloc_v1(int fd, short events, sudo_ev_callback_t callback, void *closure); +sudo_dso_public struct sudo_event *sudo_ev_alloc_v1(int fd, short events, sudo_ev_callback_t callback, void *closure); #define sudo_ev_alloc(_a, _b, _c, _d) sudo_ev_alloc_v1((_a), (_b), (_c), (_d)) /* Free an event. */ -__dso_public void sudo_ev_free_v1(struct sudo_event *ev); +sudo_dso_public void sudo_ev_free_v1(struct sudo_event *ev); #define sudo_ev_free(_a) sudo_ev_free_v1((_a)) /* Set an event struct that was pre-allocated. */ -__dso_public int sudo_ev_set_v1(struct sudo_event *ev, int fd, short events, sudo_ev_callback_t callback, void *closure); +sudo_dso_public int sudo_ev_set_v1(struct sudo_event *ev, int fd, short events, sudo_ev_callback_t callback, void *closure); #define sudo_ev_set(_a, _b, _c, _d, _e) sudo_ev_set_v1((_a), (_b), (_c), (_d), (_e)) /* Add an event, returns 0 on success, -1 on error */ -__dso_public int sudo_ev_add_v1(struct sudo_event_base *head, struct sudo_event *ev, const struct timeval *timo, bool tohead); -__dso_public int sudo_ev_add_v2(struct sudo_event_base *head, struct sudo_event *ev, const struct timespec *timo, bool tohead); +sudo_dso_public int sudo_ev_add_v1(struct sudo_event_base *head, struct sudo_event *ev, const struct timeval *timo, bool tohead); +sudo_dso_public int sudo_ev_add_v2(struct sudo_event_base *head, struct sudo_event *ev, const struct timespec *timo, bool tohead); #define sudo_ev_add(_a, _b, _c, _d) sudo_ev_add_v2((_a), (_b), (_c), (_d)) /* Delete an event, returns 0 on success, -1 on error */ -__dso_public int sudo_ev_del_v1(struct sudo_event_base *head, struct sudo_event *ev); +sudo_dso_public int sudo_ev_del_v1(struct sudo_event_base *head, struct sudo_event *ev); #define sudo_ev_del(_a, _b) sudo_ev_del_v1((_a), (_b)) /* Dispatch events, returns SUDO_CB_SUCCESS, SUDO_CB_BREAK or SUDO_CB_ERROR */ -__dso_public int sudo_ev_dispatch_v1(struct sudo_event_base *head); +sudo_dso_public int sudo_ev_dispatch_v1(struct sudo_event_base *head); #define sudo_ev_dispatch(_a) sudo_ev_dispatch_v1((_a)) /* Main event loop, returns SUDO_CB_SUCCESS, SUDO_CB_BREAK or SUDO_CB_ERROR */ -__dso_public int sudo_ev_loop_v1(struct sudo_event_base *head, int flags); +sudo_dso_public int sudo_ev_loop_v1(struct sudo_event_base *head, int flags); #define sudo_ev_loop(_a, _b) sudo_ev_loop_v1((_a), (_b)) /* Return pending event types, fills in ts if non-NULL and there is a timeout */ -__dso_public int sudo_ev_pending_v1(struct sudo_event *ev, short events, struct timespec *ts); +sudo_dso_public int sudo_ev_pending_v1(struct sudo_event *ev, short events, struct timespec *ts); #define sudo_ev_pending(_a, _b, _c) sudo_ev_pending_v1((_a), (_b), (_c)) /* Return the remaining timeout associated with an event (deprecated). */ -__dso_public int sudo_ev_get_timeleft_v1(struct sudo_event *ev, struct timeval *tv); -__dso_public int sudo_ev_get_timeleft_v2(struct sudo_event *ev, struct timespec *tv); +sudo_dso_public int sudo_ev_get_timeleft_v1(struct sudo_event *ev, struct timeval *tv); +sudo_dso_public int sudo_ev_get_timeleft_v2(struct sudo_event *ev, struct timespec *tv); #define sudo_ev_get_timeleft(_a, _b) sudo_ev_get_timeleft_v2((_a), (_b)) /* Cause the event loop to exit after one run through. */ -__dso_public void sudo_ev_loopexit_v1(struct sudo_event_base *base); +sudo_dso_public void sudo_ev_loopexit_v1(struct sudo_event_base *base); #define sudo_ev_loopexit(_a) sudo_ev_loopexit_v1((_a)) /* Break out of the event loop right now. */ -__dso_public void sudo_ev_loopbreak_v1(struct sudo_event_base *base); +sudo_dso_public void sudo_ev_loopbreak_v1(struct sudo_event_base *base); #define sudo_ev_loopbreak(_a) sudo_ev_loopbreak_v1((_a)) /* Rescan for events and restart the event loop. */ -__dso_public void sudo_ev_loopcontinue_v1(struct sudo_event_base *base); +sudo_dso_public void sudo_ev_loopcontinue_v1(struct sudo_event_base *base); #define sudo_ev_loopcontinue(_a) sudo_ev_loopcontinue_v1((_a)) /* Returns true if event loop stopped due to sudo_ev_loopexit(). */ -__dso_public bool sudo_ev_got_exit_v1(struct sudo_event_base *base); +sudo_dso_public bool sudo_ev_got_exit_v1(struct sudo_event_base *base); #define sudo_ev_got_exit(_a) sudo_ev_got_exit_v1((_a)) /* Returns true if event loop stopped due to sudo_ev_loopbreak(). */ -__dso_public bool sudo_ev_got_break_v1(struct sudo_event_base *base); +sudo_dso_public bool sudo_ev_got_break_v1(struct sudo_event_base *base); #define sudo_ev_got_break(_a) sudo_ev_got_break_v1((_a)) /* Return the fd associated with an event. */ diff --git a/include/sudo_fatal.h b/include/sudo_fatal.h index 3d78e12635..14e44b4b85 100644 --- a/include/sudo_fatal.h +++ b/include/sudo_fatal.h @@ -163,23 +163,23 @@ struct sudo_conv_message; struct sudo_conv_reply; struct sudo_conv_callback; -__dso_public int sudo_fatal_callback_deregister_v1(sudo_fatal_callback_t func); -__dso_public int sudo_fatal_callback_register_v1(sudo_fatal_callback_t func); -__dso_public char *sudo_warn_gettext_v1(const char *domainname, const char *msgid) __format_arg(2); -__dso_public void sudo_warn_set_locale_func_v1(bool (*func)(bool, int *)); -__dso_public void sudo_fatal_nodebug_v1(const char *fmt, ...) __printf0like(1, 2) __attribute__((__noreturn__)); -__dso_public void sudo_fatalx_nodebug_v1(const char *fmt, ...) __printflike(1, 2) __attribute__((__noreturn__)); -__dso_public void sudo_gai_fatal_nodebug_v1(int errnum, const char *fmt, ...) __printflike(2, 3) __attribute__((__noreturn__)); -__dso_public void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) __printf0like(1, 0) __attribute__((__noreturn__)); -__dso_public void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) __printflike(1, 0) __attribute__((__noreturn__)); -__dso_public void sudo_gai_vfatal_nodebug_v1(int errnum, const char *fmt, va_list ap) __printflike(2, 0) __attribute__((__noreturn__)); -__dso_public void sudo_warn_nodebug_v1(const char *fmt, ...) __printf0like(1, 2); -__dso_public void sudo_warnx_nodebug_v1(const char *fmt, ...) __printflike(1, 2); -__dso_public void sudo_gai_warn_nodebug_v1(int errnum, const char *fmt, ...) __printflike(2, 3); -__dso_public void sudo_vwarn_nodebug_v1(const char *fmt, va_list ap) __printf0like(1, 0); -__dso_public void sudo_vwarnx_nodebug_v1(const char *fmt, va_list ap) __printflike(1, 0); -__dso_public void sudo_gai_vwarn_nodebug_v1(int errnum, const char *fmt, va_list ap) __printflike(2, 0); -__dso_public void sudo_warn_set_conversation_v1(int (*conv)(int num_msgs, const struct sudo_conv_message *msgs, struct sudo_conv_reply *replies, struct sudo_conv_callback *callback)); +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 void sudo_warn_set_locale_func_v1(bool (*func)(bool, int *)); +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 void sudo_warn_set_conversation_v1(int (*conv)(int num_msgs, const struct sudo_conv_message *msgs, struct sudo_conv_reply *replies, struct sudo_conv_callback *callback)); #define sudo_fatal_callback_deregister(_a) sudo_fatal_callback_deregister_v1((_a)) #define sudo_fatal_callback_register(_a) sudo_fatal_callback_register_v1((_a)) diff --git a/include/sudo_json.h b/include/sudo_json.h index 811e10079e..f12b84ed4e 100644 --- a/include/sudo_json.h +++ b/include/sudo_json.h @@ -65,34 +65,34 @@ struct json_container { bool need_comma; }; -__dso_public bool sudo_json_init_v1(struct json_container *json, int indent, bool compact, bool memfatal); +sudo_dso_public bool sudo_json_init_v1(struct json_container *json, int indent, bool compact, bool memfatal); #define sudo_json_init(_a, _b, _c, _d) sudo_json_init_v1((_a), (_b), (_c), (_d)) -__dso_public void sudo_json_free_v1(struct json_container *json); +sudo_dso_public void sudo_json_free_v1(struct json_container *json); #define sudo_json_free(_a) sudo_json_free_v1((_a)) -__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 *json, const char *name); #define sudo_json_open_object(_a, _b) sudo_json_open_object_v1((_a), (_b)) -__dso_public bool sudo_json_close_object_v1(struct json_container *json); +sudo_dso_public bool sudo_json_close_object_v1(struct json_container *json); #define sudo_json_close_object(_a) sudo_json_close_object_v1((_a)) -__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 *json, const char *name); #define sudo_json_open_array(_a, _b) sudo_json_open_array_v1((_a), (_b)) -__dso_public bool sudo_json_close_array_v1(struct json_container *json); +sudo_dso_public bool sudo_json_close_array_v1(struct json_container *json); #define sudo_json_close_array(_a) sudo_json_close_array_v1((_a)) -__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 *json, const char *name, struct json_value *value); #define sudo_json_add_value(_a, _b, _c) sudo_json_add_value_v1((_a), (_b), (_c)) -__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 *json, 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)) -__dso_public char *sudo_json_get_buf_v1(struct json_container *json); +sudo_dso_public char *sudo_json_get_buf_v1(struct json_container *json); #define sudo_json_get_buf(_a) sudo_json_get_buf_v1((_a)) -__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 *json); #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 4c81780239..c0a20c5f7b 100644 --- a/include/sudo_lbuf.h +++ b/include/sudo_lbuf.h @@ -36,13 +36,13 @@ struct sudo_lbuf { typedef int (*sudo_lbuf_output_t)(const char *); -__dso_public void sudo_lbuf_init_v1(struct sudo_lbuf *lbuf, sudo_lbuf_output_t output, int indent, const char *continuation, int cols); -__dso_public void sudo_lbuf_destroy_v1(struct sudo_lbuf *lbuf); -__dso_public bool sudo_lbuf_append_v1(struct sudo_lbuf *lbuf, const char *fmt, ...) __printflike(2, 3); -__dso_public bool sudo_lbuf_append_quoted_v1(struct sudo_lbuf *lbuf, const char *set, const char *fmt, ...) __printflike(3, 4); -__dso_public void sudo_lbuf_print_v1(struct sudo_lbuf *lbuf); -__dso_public bool sudo_lbuf_error_v1(struct sudo_lbuf *lbuf); -__dso_public void sudo_lbuf_clearerr_v1(struct sudo_lbuf *lbuf); +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 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); #define sudo_lbuf_init(_a, _b, _c, _d, _e) sudo_lbuf_init_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_lbuf_destroy(_a) sudo_lbuf_destroy_v1((_a)) diff --git a/include/sudo_rand.h b/include/sudo_rand.h index bb7d365963..d030ed0e5c 100644 --- a/include/sudo_rand.h +++ b/include/sudo_rand.h @@ -30,19 +30,19 @@ */ #ifndef HAVE_ARC4RANDOM -__dso_public uint32_t sudo_arc4random(void); +sudo_dso_public uint32_t sudo_arc4random(void); # undef arc4random # define arc4random() sudo_arc4random() #endif /* ARC4RANDOM */ #ifndef HAVE_ARC4RANDOM_BUF -__dso_public void sudo_arc4random_buf(void *buf, size_t n); +sudo_dso_public void sudo_arc4random_buf(void *buf, size_t n); # undef arc4random_buf # define arc4random_buf(a, b) sudo_arc4random_buf((a), (b)) #endif /* ARC4RANDOM_BUF */ #ifndef HAVE_ARC4RANDOM_UNIFORM -__dso_public uint32_t sudo_arc4random_uniform(uint32_t upper_bound); +sudo_dso_public uint32_t sudo_arc4random_uniform(uint32_t upper_bound); # undef arc4random_uniform # define arc4random_uniform(_a) sudo_arc4random_uniform((_a)) #endif /* ARC4RANDOM_UNIFORM */ diff --git a/include/sudo_util.h b/include/sudo_util.h index fbdd2f55cc..3448149bac 100644 --- a/include/sudo_util.h +++ b/include/sudo_util.h @@ -178,75 +178,75 @@ #endif /* aix.c */ -__dso_public int aix_getauthregistry_v1(char *user, char *saved_registry); +sudo_dso_public int aix_getauthregistry_v1(char *user, char *saved_registry); #define aix_getauthregistry(_a, _b) aix_getauthregistry_v1((_a), (_b)) -__dso_public int aix_prep_user_v1(char *user, const char *tty); +sudo_dso_public int aix_prep_user_v1(char *user, const char *tty); #define aix_prep_user(_a, _b) aix_prep_user_v1((_a), (_b)) -__dso_public int aix_restoreauthdb_v1(void); +sudo_dso_public int aix_restoreauthdb_v1(void); #define aix_restoreauthdb() aix_restoreauthdb_v1() -__dso_public int aix_setauthdb_v1(char *user); -__dso_public int aix_setauthdb_v2(char *user, char *registry); +sudo_dso_public int aix_setauthdb_v1(char *user); +sudo_dso_public int aix_setauthdb_v2(char *user, char *registry); #define aix_setauthdb(_a, _b) aix_setauthdb_v2((_a), (_b)) /* gethostname.c */ -__dso_public char *sudo_gethostname_v1(void); +sudo_dso_public char *sudo_gethostname_v1(void); #define sudo_gethostname() sudo_gethostname_v1() /* gettime.c */ -__dso_public int sudo_gettime_awake_v1(struct timespec *ts); +sudo_dso_public int sudo_gettime_awake_v1(struct timespec *ts); #define sudo_gettime_awake(_a) sudo_gettime_awake_v1((_a)) -__dso_public int sudo_gettime_mono_v1(struct timespec *ts); +sudo_dso_public int sudo_gettime_mono_v1(struct timespec *ts); #define sudo_gettime_mono(_a) sudo_gettime_mono_v1((_a)) -__dso_public int sudo_gettime_real_v1(struct timespec *ts); +sudo_dso_public int sudo_gettime_real_v1(struct timespec *ts); #define sudo_gettime_real(_a) sudo_gettime_real_v1((_a)) /* gidlist.c */ -__dso_public int sudo_parse_gids_v1(const char *gidstr, const gid_t *basegid, GETGROUPS_T **gidsp); +sudo_dso_public int sudo_parse_gids_v1(const char *gidstr, const gid_t *basegid, GETGROUPS_T **gidsp); #define sudo_parse_gids(_a, _b, _c) sudo_parse_gids_v1((_a), (_b), (_c)) /* getgrouplist.c */ -__dso_public int sudo_getgrouplist2_v1(const char *name, gid_t basegid, GETGROUPS_T **groupsp, int *ngroupsp); +sudo_dso_public int sudo_getgrouplist2_v1(const char *name, gid_t basegid, GETGROUPS_T **groupsp, int *ngroupsp); #define sudo_getgrouplist2(_a, _b, _c, _d) sudo_getgrouplist2_v1((_a), (_b), (_c), (_d)) /* key_val.c */ -__dso_public char *sudo_new_key_val_v1(const char *key, const char *value); +sudo_dso_public char *sudo_new_key_val_v1(const char *key, const char *value); #define sudo_new_key_val(_a, _b) sudo_new_key_val_v1((_a), (_b)) /* locking.c */ #define SUDO_LOCK 1 /* lock a file */ #define SUDO_TLOCK 2 /* test & lock a file (non-blocking) */ #define SUDO_UNLOCK 4 /* unlock a file */ -__dso_public bool sudo_lock_file_v1(int fd, int action); +sudo_dso_public bool sudo_lock_file_v1(int fd, int action); #define sudo_lock_file(_a, _b) sudo_lock_file_v1((_a), (_b)) -__dso_public bool sudo_lock_region_v1(int fd, int action, off_t len); +sudo_dso_public bool sudo_lock_region_v1(int fd, int action, off_t len); #define sudo_lock_region(_a, _b, _c) sudo_lock_region_v1((_a), (_b), (_c)) /* logfac.c */ -__dso_public bool sudo_str2logfac_v1(const char *str, int *logfac); +sudo_dso_public bool sudo_str2logfac_v1(const char *str, int *logfac); #define sudo_str2logfac(_a, _b) sudo_str2logfac_v1((_a), (_b)) -__dso_public const char *sudo_logfac2str_v1(int num); +sudo_dso_public const char *sudo_logfac2str_v1(int num); #define sudo_logfac2str(_a) sudo_logfac2str_v1((_a)) /* logpri.c */ -__dso_public bool sudo_str2logpri_v1(const char *str, int *logpri); +sudo_dso_public bool sudo_str2logpri_v1(const char *str, int *logpri); #define sudo_str2logpri(_a, _b) sudo_str2logpri_v1((_a), (_b)) -__dso_public const char *sudo_logpri2str_v1(int num); +sudo_dso_public const char *sudo_logpri2str_v1(int num); #define sudo_logpri2str(_a) sudo_logpri2str_v1((_a)) /* mkdir_parents.c */ -__dso_public bool sudo_mkdir_parents_v1(char *path, uid_t uid, gid_t gid, mode_t mode, bool quiet); +sudo_dso_public bool sudo_mkdir_parents_v1(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)) /* parseln.c */ -__dso_public ssize_t sudo_parseln_v1(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp); -__dso_public ssize_t sudo_parseln_v2(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp, int flags); +sudo_dso_public ssize_t sudo_parseln_v1(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp); +sudo_dso_public ssize_t sudo_parseln_v2(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp, int flags); #define sudo_parseln(_a, _b, _c, _d, _e) sudo_parseln_v2((_a), (_b), (_c), (_d), (_e)) /* progname.c */ -__dso_public void initprogname(const char *); +sudo_dso_public void initprogname(const char *); /* roundup.c */ -__dso_public unsigned int sudo_pow2_roundup_v1(unsigned int len); +sudo_dso_public unsigned int sudo_pow2_roundup_v1(unsigned int len); #define sudo_pow2_roundup(_a) sudo_pow2_roundup_v1((_a)) /* secure_path.c */ @@ -257,65 +257,65 @@ __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; -__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 *sbp); #define sudo_secure_dir(_a, _b, _c, _d) sudo_secure_dir_v1((_a), (_b), (_c), (_d)) -__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 *sbp); #define sudo_secure_file(_a, _b, _c, _d) sudo_secure_file_v1((_a), (_b), (_c), (_d)) /* setgroups.c */ -__dso_public int sudo_setgroups_v1(int ngids, const GETGROUPS_T *gids); +sudo_dso_public int sudo_setgroups_v1(int ngids, const GETGROUPS_T *gids); #define sudo_setgroups(_a, _b) sudo_setgroups_v1((_a), (_b)) /* strsplit.c */ -__dso_public const char *sudo_strsplit_v1(const char *str, const char *endstr, const char *sep, const char **last); +sudo_dso_public const char *sudo_strsplit_v1(const char *str, const char *endstr, const char *sep, const char **last); #define sudo_strsplit(_a, _b, _c, _d) sudo_strsplit_v1(_a, _b, _c, _d) /* strtobool.c */ -__dso_public int sudo_strtobool_v1(const char *str); +sudo_dso_public int sudo_strtobool_v1(const char *str); #define sudo_strtobool(_a) sudo_strtobool_v1((_a)) /* strtonum.c */ /* Not versioned for historical reasons. */ -__dso_public long long sudo_strtonum(const char *, long long, long long, const char **); +sudo_dso_public long long sudo_strtonum(const char *, long long, long long, const char **); /* strtoid.c */ -__dso_public id_t sudo_strtoid_v1(const char *str, const char *sep, char **endp, const char **errstr); -__dso_public id_t sudo_strtoid_v2(const char *str, const char **errstr); +sudo_dso_public id_t sudo_strtoid_v1(const char *str, const char *sep, char **endp, const char **errstr); +sudo_dso_public id_t sudo_strtoid_v2(const char *str, const char **errstr); #define sudo_strtoid(_a, _b) sudo_strtoid_v2((_a), (_b)) -__dso_public id_t sudo_strtoidx_v1(const char *str, const char *sep, char **endp, const char **errstr); +sudo_dso_public id_t sudo_strtoidx_v1(const char *str, const char *sep, char **endp, const char **errstr); #define sudo_strtoidx(_a, _b, _c, _d) sudo_strtoidx_v1((_a), (_b), (_c), (_d)) /* strtomode.c */ -__dso_public int sudo_strtomode_v1(const char *cp, const char **errstr); +sudo_dso_public int sudo_strtomode_v1(const char *cp, const char **errstr); #define sudo_strtomode(_a, _b) sudo_strtomode_v1((_a), (_b)) /* sudo_printf.c */ extern int (*sudo_printf)(int msg_type, const char *fmt, ...); /* term.c */ -__dso_public bool sudo_term_cbreak_v1(int fd); +sudo_dso_public bool sudo_term_cbreak_v1(int fd); #define sudo_term_cbreak(_a) sudo_term_cbreak_v1((_a)) -__dso_public bool sudo_term_copy_v1(int src, int dst); +sudo_dso_public bool sudo_term_copy_v1(int src, int dst); #define sudo_term_copy(_a, _b) sudo_term_copy_v1((_a), (_b)) -__dso_public bool sudo_term_noecho_v1(int fd); +sudo_dso_public bool sudo_term_noecho_v1(int fd); #define sudo_term_noecho(_a) sudo_term_noecho_v1((_a)) -__dso_public bool sudo_term_raw_v1(int fd, int isig); +sudo_dso_public bool sudo_term_raw_v1(int fd, int isig); #define sudo_term_raw(_a, _b) sudo_term_raw_v1((_a), (_b)) -__dso_public bool sudo_term_restore_v1(int fd, bool flush); +sudo_dso_public bool sudo_term_restore_v1(int fd, bool flush); #define sudo_term_restore(_a, _b) sudo_term_restore_v1((_a), (_b)) /* ttyname_dev.c */ -__dso_public char *sudo_ttyname_dev_v1(dev_t tdev, char *name, size_t namelen); +sudo_dso_public char *sudo_ttyname_dev_v1(dev_t tdev, char *name, size_t namelen); #define sudo_ttyname_dev(_a, _b, _c) sudo_ttyname_dev_v1((_a), (_b), (_c)) /* ttysize.c */ -__dso_public void sudo_get_ttysize_v1(int *rowp, int *colp); +sudo_dso_public void sudo_get_ttysize_v1(int *rowp, int *colp); #define sudo_get_ttysize(_a, _b) sudo_get_ttysize_v1((_a), (_b)) /* uuid.c */ -__dso_public void sudo_uuid_create_v1(unsigned char uuid_out[16]); +sudo_dso_public void sudo_uuid_create_v1(unsigned char uuid_out[16]); #define sudo_uuid_create(_a) sudo_uuid_create_v1((_a)) -__dso_public char *sudo_uuid_to_string_v1(unsigned char uuid[16], char *dst, size_t dstsiz); +sudo_dso_public char *sudo_uuid_to_string_v1(unsigned char uuid[16], char *dst, size_t dstsiz); #define sudo_uuid_to_string(_a, _b, _c) sudo_uuid_to_string_v1((_a), (_b), (_c)) #endif /* SUDO_UTIL_H */ diff --git a/lib/iolog/regress/host_port/host_port_test.c b/lib/iolog/regress/host_port/host_port_test.c index 1b27d55f2f..109393a237 100644 --- a/lib/iolog/regress/host_port/host_port_test.c +++ b/lib/iolog/regress/host_port/host_port_test.c @@ -34,7 +34,7 @@ #include "sudo_iolog.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Test that iolog_parse_host_port() works as expected. diff --git a/lib/iolog/regress/iolog_json/check_iolog_json.c b/lib/iolog/regress/iolog_json/check_iolog_json.c index d2044bc8aa..a967ba6418 100644 --- a/lib/iolog/regress/iolog_json/check_iolog_json.c +++ b/lib/iolog/regress/iolog_json/check_iolog_json.c @@ -32,7 +32,7 @@ #include "iolog_json.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); bool json_print_object(struct json_container *json, struct json_object *object) diff --git a/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c b/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c index 70be07e72d..bb1378712d 100644 --- a/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c +++ b/lib/iolog/regress/iolog_mkpath/check_iolog_mkpath.c @@ -32,7 +32,7 @@ #include "sudo_fatal.h" #include "sudo_iolog.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static const char *test_paths[] = { "testdir/a/b/c/user", /* create new */ diff --git a/lib/iolog/regress/iolog_path/check_iolog_path.c b/lib/iolog/regress/iolog_path/check_iolog_path.c index 7cbbc824fb..8598384b46 100644 --- a/lib/iolog/regress/iolog_path/check_iolog_path.c +++ b/lib/iolog/regress/iolog_path/check_iolog_path.c @@ -42,7 +42,7 @@ static struct iolog_escape_data { char *command; } escape_data; -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static void usage(void) diff --git a/lib/iolog/regress/iolog_util/check_iolog_util.c b/lib/iolog/regress/iolog_util/check_iolog_util.c index 44badadefd..de94ee17e0 100644 --- a/lib/iolog/regress/iolog_util/check_iolog_util.c +++ b/lib/iolog/regress/iolog_util/check_iolog_util.c @@ -31,7 +31,7 @@ #include "sudo_fatal.h" #include "sudo_iolog.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static struct parse_delay_test { const char *input; diff --git a/lib/util/mksiglist.c b/lib/util/mksiglist.c index c0b78599d0..d730a27921 100644 --- a/lib/util/mksiglist.c +++ b/lib/util/mksiglist.c @@ -29,7 +29,7 @@ #include "sudo_compat.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/lib/util/mksigname.c b/lib/util/mksigname.c index 0784e623ae..08dc1120f3 100644 --- a/lib/util/mksigname.c +++ b/lib/util/mksigname.c @@ -29,7 +29,7 @@ #include "sudo_compat.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/lib/util/regress/fnmatch/fnm_test.c b/lib/util/regress/fnmatch/fnm_test.c index 6d629f98a6..2d6a9d2c41 100644 --- a/lib/util/regress/fnmatch/fnm_test.c +++ b/lib/util/regress/fnmatch/fnm_test.c @@ -19,7 +19,7 @@ # include "compat/fnmatch.h" #endif -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/lib/util/regress/getdelim/getdelim_test.c b/lib/util/regress/getdelim/getdelim_test.c index 9e1743741c..e854f2f3e9 100644 --- a/lib/util/regress/getdelim/getdelim_test.c +++ b/lib/util/regress/getdelim/getdelim_test.c @@ -35,7 +35,7 @@ #include "sudo_fatal.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Test that sudo_getdelim() works as expected. diff --git a/lib/util/regress/getgrouplist/getgrouplist_test.c b/lib/util/regress/getgrouplist/getgrouplist_test.c index 92b27ccfed..fd9fefc14a 100644 --- a/lib/util/regress/getgrouplist/getgrouplist_test.c +++ b/lib/util/regress/getgrouplist/getgrouplist_test.c @@ -33,7 +33,7 @@ #include "sudo_fatal.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Test that sudo_getgrouplist2() works as expected. diff --git a/lib/util/regress/glob/globtest.c b/lib/util/regress/glob/globtest.c index 6be1aa8614..a98d03ca24 100644 --- a/lib/util/regress/glob/globtest.c +++ b/lib/util/regress/glob/globtest.c @@ -29,7 +29,7 @@ struct gl_entry { }; int test_glob(struct gl_entry *); -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char **argv) diff --git a/lib/util/regress/mktemp/mktemp_test.c b/lib/util/regress/mktemp/mktemp_test.c index e8cb44b818..cd5aa97558 100644 --- a/lib/util/regress/mktemp/mktemp_test.c +++ b/lib/util/regress/mktemp/mktemp_test.c @@ -38,7 +38,7 @@ #define SUFFIX ".suff" #define SLEN (sizeof SUFFIX - 1) -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * verify that a path generated by mkdtemp() or mkstemp() looks like a diff --git a/lib/util/regress/parse_gids/parse_gids_test.c b/lib/util/regress/parse_gids/parse_gids_test.c index 52268d3fe2..d96a8a0e0c 100644 --- a/lib/util/regress/parse_gids/parse_gids_test.c +++ b/lib/util/regress/parse_gids/parse_gids_test.c @@ -26,7 +26,7 @@ #include "sudo_fatal.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Test that sudo_parse_gids() works as expected. diff --git a/lib/util/regress/progname/progname_test.c b/lib/util/regress/progname/progname_test.c index 00c95b8d94..0ac5398682 100644 --- a/lib/util/regress/progname/progname_test.c +++ b/lib/util/regress/progname/progname_test.c @@ -25,7 +25,7 @@ #include "sudo_compat.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Test that getprogname() returns the expected result. diff --git a/lib/util/regress/strsig/strsig_test.c b/lib/util/regress/strsig/strsig_test.c index 5fe20e2cbe..0d6b5b8a67 100644 --- a/lib/util/regress/strsig/strsig_test.c +++ b/lib/util/regress/strsig/strsig_test.c @@ -27,7 +27,7 @@ #include "sudo_util.h" #include "sudo_fatal.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Note: we do not test SIGUNUSED as it may not appear in sys_sigabbrev[] diff --git a/lib/util/regress/strsplit/strsplit_test.c b/lib/util/regress/strsplit/strsplit_test.c index db40732bcf..d44f19e0ea 100644 --- a/lib/util/regress/strsplit/strsplit_test.c +++ b/lib/util/regress/strsplit/strsplit_test.c @@ -26,7 +26,7 @@ #include "sudo_fatal.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Test that sudo_strsplit() works as expected. diff --git a/lib/util/regress/strtofoo/strtobool_test.c b/lib/util/regress/strtofoo/strtobool_test.c index 5edb8065bd..b34fd5f98c 100644 --- a/lib/util/regress/strtofoo/strtobool_test.c +++ b/lib/util/regress/strtofoo/strtobool_test.c @@ -30,7 +30,7 @@ #include "sudo_util.h" #include "sudo_fatal.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* sudo_strtobool() tests */ static struct strtobool_data { diff --git a/lib/util/regress/strtofoo/strtoid_test.c b/lib/util/regress/strtofoo/strtoid_test.c index 225c6a0c13..31bb566a59 100644 --- a/lib/util/regress/strtofoo/strtoid_test.c +++ b/lib/util/regress/strtofoo/strtoid_test.c @@ -26,7 +26,7 @@ #include "sudo_util.h" #include "sudo_fatal.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* sudo_strtoidx() tests */ static struct strtoidx_data { diff --git a/lib/util/regress/strtofoo/strtomode_test.c b/lib/util/regress/strtofoo/strtomode_test.c index f5cf94d804..4430a24ac9 100644 --- a/lib/util/regress/strtofoo/strtomode_test.c +++ b/lib/util/regress/strtofoo/strtomode_test.c @@ -25,7 +25,7 @@ #include "sudo_util.h" #include "sudo_fatal.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* sudo_strtomode() tests */ static struct strtomode_data { diff --git a/lib/util/regress/strtofoo/strtonum_test.c b/lib/util/regress/strtofoo/strtonum_test.c index d383d84e9a..bc075eab67 100644 --- a/lib/util/regress/strtofoo/strtonum_test.c +++ b/lib/util/regress/strtofoo/strtonum_test.c @@ -27,7 +27,7 @@ #include "sudo_util.h" #include "sudo_fatal.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* sudo_strtonum() tests */ static struct strtonum_data { diff --git a/lib/util/regress/sudo_conf/conf_test.c b/lib/util/regress/sudo_conf/conf_test.c index 27632db217..5c5ffec549 100644 --- a/lib/util/regress/sudo_conf/conf_test.c +++ b/lib/util/regress/sudo_conf/conf_test.c @@ -29,7 +29,7 @@ static void sudo_conf_dump(void); -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Simple test driver for sudo_conf(). diff --git a/lib/util/regress/sudo_parseln/parseln_test.c b/lib/util/regress/sudo_parseln/parseln_test.c index b37806f5a0..9176ebdbc3 100644 --- a/lib/util/regress/sudo_parseln/parseln_test.c +++ b/lib/util/regress/sudo_parseln/parseln_test.c @@ -25,7 +25,7 @@ #include "sudo_compat.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Simple test driver for sudo_parseln(). diff --git a/lib/util/regress/tailq/hltq_test.c b/lib/util/regress/tailq/hltq_test.c index 8fd61c1474..834f5114f4 100644 --- a/lib/util/regress/tailq/hltq_test.c +++ b/lib/util/regress/tailq/hltq_test.c @@ -28,7 +28,7 @@ #include "sudo_queue.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Note: HLTQ_ENTRY is intentionally in the middle of the struct diff --git a/lib/util/regress/vsyslog/vsyslog_test.c b/lib/util/regress/vsyslog/vsyslog_test.c index 308e2fe052..549c1afc7e 100644 --- a/lib/util/regress/vsyslog/vsyslog_test.c +++ b/lib/util/regress/vsyslog/vsyslog_test.c @@ -28,7 +28,7 @@ #include "sudo_fatal.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Test that sudo_vsyslog() works as expected. diff --git a/lib/util/term.c b/lib/util/term.c index 327c0dac90..0dbbaf67ce 100644 --- a/lib/util/term.c +++ b/lib/util/term.c @@ -90,9 +90,9 @@ static struct termios term, oterm; static int changed; /* tgetpass() needs to know the erase and kill chars for cbreak mode. */ -__dso_public int sudo_term_eof; -__dso_public int sudo_term_erase; -__dso_public int sudo_term_kill; +sudo_dso_public int sudo_term_eof; +sudo_dso_public int sudo_term_erase; +sudo_dso_public int sudo_term_kill; static volatile sig_atomic_t got_sigttou; diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index 559bbe9bed..bf76bab162 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -1863,7 +1863,7 @@ static struct option long_opts[] = { { NULL, no_argument, NULL, 0 }, }; -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 7af7219a65..ea5151fc49 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -1661,7 +1661,7 @@ static struct option long_opts[] = { { NULL, no_argument, NULL, 0 }, }; -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/plugins/audit_json/audit_json.c b/plugins/audit_json/audit_json.c index 04b1866cef..ea8921bec9 100644 --- a/plugins/audit_json/audit_json.c +++ b/plugins/audit_json/audit_json.c @@ -683,7 +683,7 @@ audit_json_show_version(int verbose) debug_return_int(true); } -__dso_public struct audit_plugin audit_json = { +sudo_dso_public struct audit_plugin audit_json = { SUDO_AUDIT_PLUGIN, SUDO_API_VERSION, audit_json_open, diff --git a/plugins/group_file/group_file.c b/plugins/group_file/group_file.c index bbab495182..15aea5a138 100644 --- a/plugins/group_file/group_file.c +++ b/plugins/group_file/group_file.c @@ -120,7 +120,7 @@ sample_query(const char *user, const char *group, const struct passwd *pwd) return false; } -__dso_public struct sudoers_group_plugin group_plugin = { +sudo_dso_public struct sudoers_group_plugin group_plugin = { GROUP_API_VERSION, sample_init, sample_cleanup, diff --git a/plugins/group_file/plugin_test.c b/plugins/group_file/plugin_test.c index 72ca179ff8..701d665046 100644 --- a/plugins/group_file/plugin_test.c +++ b/plugins/group_file/plugin_test.c @@ -33,7 +33,7 @@ #include "sudo_plugin.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * Simple driver to test sudoer group plugins. diff --git a/plugins/python/python_plugin_approval.c b/plugins/python/python_plugin_approval.c index 481f0dd565..38947ea5a6 100644 --- a/plugins/python/python_plugin_approval.c +++ b/plugins/python/python_plugin_approval.c @@ -145,7 +145,7 @@ python_plugin_approval_show_version(struct ApprovalPluginContext *approval_ctx, CALLBACK_PYNAME(show_version), verbose, PY_APPROVAL_PLUGIN_VERSION, "approval")); } -__dso_public struct approval_plugin python_approval; +sudo_dso_public struct approval_plugin python_approval; // generate symbols for loading multiple approval plugins: #define APPROVAL_SYMBOL_NAME(symbol) symbol @@ -175,7 +175,7 @@ static struct approval_plugin *extra_approval_plugins[] = { &python_approval7 }; -__dso_public struct approval_plugin * +sudo_dso_public struct approval_plugin * python_approval_clone(void) { static size_t counter = 0; diff --git a/plugins/python/python_plugin_audit.c b/plugins/python/python_plugin_audit.c index 50046b618f..8ff5221906 100644 --- a/plugins/python/python_plugin_audit.c +++ b/plugins/python/python_plugin_audit.c @@ -233,7 +233,7 @@ python_plugin_audit_show_version(struct AuditPluginContext *audit_ctx, int verbo CALLBACK_PYNAME(show_version), verbose, PY_AUDIT_PLUGIN_VERSION, "audit")); } -__dso_public struct audit_plugin python_audit; +sudo_dso_public struct audit_plugin python_audit; // generate symbols for loading multiple audit plugins: #define AUDIT_SYMBOL_NAME(symbol) symbol @@ -263,7 +263,7 @@ static struct audit_plugin *extra_audit_plugins[] = { &python_audit7 }; -__dso_public struct audit_plugin * +sudo_dso_public struct audit_plugin * python_audit_clone(void) { static size_t counter = 0; diff --git a/plugins/python/python_plugin_group.c b/plugins/python/python_plugin_group.c index 1875f88c59..30f460ffe6 100644 --- a/plugins/python/python_plugin_group.c +++ b/plugins/python/python_plugin_group.c @@ -106,7 +106,7 @@ python_plugin_group_query(const char *user, const char *group, const struct pass debug_return_int(rc); } -__dso_public struct sudoers_group_plugin group_plugin = { +sudo_dso_public struct sudoers_group_plugin group_plugin = { GROUP_API_VERSION, CALLBACK_CFUNC(init), CALLBACK_CFUNC(cleanup), diff --git a/plugins/python/python_plugin_io.c b/plugins/python/python_plugin_io.c index 3dbf807948..d7b9fc4e89 100644 --- a/plugins/python/python_plugin_io.c +++ b/plugins/python/python_plugin_io.c @@ -230,7 +230,7 @@ python_plugin_io_log_suspend(struct IOPluginContext *io_ctx, int signo, const ch } // generate symbols for loading multiple io plugins: -__dso_public struct io_plugin python_io; +sudo_dso_public struct io_plugin python_io; #define IO_SYMBOL_NAME(symbol) symbol #include "python_plugin_io_multi.inc" #define IO_SYMBOL_NAME(symbol) symbol##1 @@ -258,7 +258,7 @@ static struct io_plugin *extra_io_plugins[] = { &python_io7 }; -__dso_public struct io_plugin * +sudo_dso_public struct io_plugin * python_io_clone(void) { static size_t counter = 0; diff --git a/plugins/python/python_plugin_policy.c b/plugins/python/python_plugin_policy.c index 56264e342e..ea84d2c451 100644 --- a/plugins/python/python_plugin_policy.c +++ b/plugins/python/python_plugin_policy.c @@ -273,7 +273,7 @@ python_plugin_policy_init_session(struct passwd *pwd, char **user_env[], const c debug_return_int(rc); } -__dso_public struct policy_plugin python_policy = { +sudo_dso_public struct policy_plugin python_policy = { SUDO_POLICY_PLUGIN, SUDO_API_VERSION, CALLBACK_CFUNC(open), diff --git a/plugins/sample/sample_plugin.c b/plugins/sample/sample_plugin.c index 1886ea687f..1b57e9c1d0 100644 --- a/plugins/sample/sample_plugin.c +++ b/plugins/sample/sample_plugin.c @@ -459,7 +459,7 @@ io_log_output(const char *buf, unsigned int len) return ret; } -__dso_public struct policy_plugin sample_policy = { +sudo_dso_public struct policy_plugin sample_policy = { SUDO_POLICY_PLUGIN, SUDO_API_VERSION, policy_open, @@ -478,7 +478,7 @@ __dso_public struct policy_plugin sample_policy = { * Note: This plugin does not differentiate between tty and pipe I/O. * It all gets logged to the same file. */ -__dso_public struct io_plugin sample_io = { +sudo_dso_public struct io_plugin sample_io = { SUDO_IO_PLUGIN, SUDO_API_VERSION, io_open, diff --git a/plugins/sample_approval/sample_approval.c b/plugins/sample_approval/sample_approval.c index c433f208f9..c4634c1014 100644 --- a/plugins/sample_approval/sample_approval.c +++ b/plugins/sample_approval/sample_approval.c @@ -159,7 +159,7 @@ sample_approval_show_version(int verbose) debug_return_int(true); } -__dso_public struct approval_plugin sample_approval = { +sudo_dso_public struct approval_plugin sample_approval = { SUDO_APPROVAL_PLUGIN, SUDO_API_VERSION, sample_approval_open, diff --git a/plugins/sudoers/audit.c b/plugins/sudoers/audit.c index 901fae476f..3e05d41403 100644 --- a/plugins/sudoers/audit.c +++ b/plugins/sudoers/audit.c @@ -278,7 +278,7 @@ sudoers_audit_version(int verbose) debug_return_int(true); } -__dso_public struct audit_plugin sudoers_audit = { +sudo_dso_public struct audit_plugin sudoers_audit = { SUDO_AUDIT_PLUGIN, SUDO_API_VERSION, sudoers_audit_open, diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index c314ac58b1..83621274ef 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -78,7 +78,7 @@ static struct option long_opts[] = { { NULL, no_argument, NULL, '\0' }, }; -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static void help(void) __attribute__((__noreturn__)); static void usage(int); static bool convert_sudoers_sudoers(struct sudoers_parse_tree *parse_tree, const char *output_file, struct cvtsudoers_config *conf); diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index 38fea43e13..6e58d39ca2 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -73,7 +73,7 @@ static struct timespec last_time; static void sudoers_io_setops(void); /* sudoers_io is declared at the end of this file. */ -extern __dso_public struct io_plugin sudoers_io; +extern sudo_dso_public struct io_plugin sudoers_io; /* * Sudoers callback for maxseq Defaults setting. @@ -1238,7 +1238,7 @@ sudoers_io_setops(void) debug_return; } -__dso_public struct io_plugin sudoers_io = { +sudo_dso_public struct io_plugin sudoers_io = { SUDO_IO_PLUGIN, SUDO_API_VERSION, sudoers_io_open, diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index cee354540a..0dd9083b76 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -55,7 +55,7 @@ const char *path_ldap_conf = _PATH_LDAP_CONF; const char *path_ldap_secret = _PATH_LDAP_SECRET; static bool session_opened; -extern __dso_public struct policy_plugin sudoers_policy; +extern sudo_dso_public struct policy_plugin sudoers_policy; #ifdef HAVE_BSD_AUTH_H extern char *login_style; @@ -1109,7 +1109,7 @@ sudoers_policy_register_hooks(int version, int (*register_hook)(struct sudo_hook } } -__dso_public struct policy_plugin sudoers_policy = { +sudo_dso_public struct policy_plugin sudoers_policy = { SUDO_POLICY_PLUGIN, SUDO_API_VERSION, sudoers_policy_open, diff --git a/plugins/sudoers/regress/check_symbols/check_symbols.c b/plugins/sudoers/regress/check_symbols/check_symbols.c index b6a91d489f..5a5e02bb0f 100644 --- a/plugins/sudoers/regress/check_symbols/check_symbols.c +++ b/plugins/sudoers/regress/check_symbols/check_symbols.c @@ -29,7 +29,7 @@ #include "sudo_util.h" #include "sudo_fatal.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static void usage(void) diff --git a/plugins/sudoers/regress/env_match/check_env_pattern.c b/plugins/sudoers/regress/env_match/check_env_pattern.c index 9e07ac086d..ce2c267e81 100644 --- a/plugins/sudoers/regress/env_match/check_env_pattern.c +++ b/plugins/sudoers/regress/env_match/check_env_pattern.c @@ -24,7 +24,7 @@ #include "sudoers.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c index 4314073308..14794e2049 100644 --- a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c +++ b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c @@ -39,7 +39,7 @@ struct passwd *list_pw; sudo_printf_t sudo_printf; sudo_conv_t sudo_conv; -__dso_public int main(int argc, char *argv[], char *envp[]); +sudo_dso_public int main(int argc, char *argv[], char *envp[]); static void usage(void) diff --git a/plugins/sudoers/regress/logging/check_wrap.c b/plugins/sudoers/regress/logging/check_wrap.c index 6007bb4bbf..87312742f0 100644 --- a/plugins/sudoers/regress/logging/check_wrap.c +++ b/plugins/sudoers/regress/logging/check_wrap.c @@ -32,7 +32,7 @@ extern void writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen); -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static void usage(void) diff --git a/plugins/sudoers/regress/parser/check_addr.c b/plugins/sudoers/regress/parser/check_addr.c index fd0515f1dc..cf50226acc 100644 --- a/plugins/sudoers/regress/parser/check_addr.c +++ b/plugins/sudoers/regress/parser/check_addr.c @@ -34,7 +34,7 @@ #include "sudoers.h" #include "interfaces.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static int check_addr(char *input) diff --git a/plugins/sudoers/regress/parser/check_base64.c b/plugins/sudoers/regress/parser/check_base64.c index 28234797aa..195ada1448 100644 --- a/plugins/sudoers/regress/parser/check_base64.c +++ b/plugins/sudoers/regress/parser/check_base64.c @@ -31,7 +31,7 @@ extern size_t base64_decode(const char *str, unsigned char *dst, size_t dsize); extern size_t base64_encode(const unsigned char *in, size_t in_len, char *out, size_t out_len); -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static unsigned char bstring1[] = { 0xea, 0xb8, 0xa2, 0x71, 0xef, 0x67, 0xc1, 0xcd, 0x0d, 0xd9, 0xa6, 0xaa, 0xa8, 0x24, 0x77, 0x2a, 0xfc, 0x6f, 0x76, 0x37, 0x1b, 0xed, 0x9e, 0x1a, 0x90, 0x5f, 0xcf, 0xbc, 0x00 }; diff --git a/plugins/sudoers/regress/parser/check_digest.c b/plugins/sudoers/regress/parser/check_digest.c index 147e9c2542..c784b2b049 100644 --- a/plugins/sudoers/regress/parser/check_digest.c +++ b/plugins/sudoers/regress/parser/check_digest.c @@ -30,7 +30,7 @@ #include "sudo_util.h" #include "parse.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); #define NUM_TESTS 8 static const char *test_strings[NUM_TESTS] = { diff --git a/plugins/sudoers/regress/parser/check_fill.c b/plugins/sudoers/regress/parser/check_fill.c index a51c333794..2ced0f1921 100644 --- a/plugins/sudoers/regress/parser/check_fill.c +++ b/plugins/sudoers/regress/parser/check_fill.c @@ -37,7 +37,7 @@ #include "sudo_util.h" #include -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); /* * TODO: test realloc diff --git a/plugins/sudoers/regress/parser/check_gentime.c b/plugins/sudoers/regress/parser/check_gentime.c index e3178fa084..899d7e417a 100644 --- a/plugins/sudoers/regress/parser/check_gentime.c +++ b/plugins/sudoers/regress/parser/check_gentime.c @@ -30,7 +30,7 @@ #include "sudoers_debug.h" #include "parse.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); const struct gentime_test { char *gentime; diff --git a/plugins/sudoers/regress/parser/check_hexchar.c b/plugins/sudoers/regress/parser/check_hexchar.c index 60305bf3c2..593ef72acf 100644 --- a/plugins/sudoers/regress/parser/check_hexchar.c +++ b/plugins/sudoers/regress/parser/check_hexchar.c @@ -29,7 +29,7 @@ int hexchar(const char *s); -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); struct hexchar_test { char hex[3]; diff --git a/plugins/sudoers/regress/starttime/check_starttime.c b/plugins/sudoers/regress/starttime/check_starttime.c index bbd2eb4c10..8951443099 100644 --- a/plugins/sudoers/regress/starttime/check_starttime.c +++ b/plugins/sudoers/regress/starttime/check_starttime.c @@ -30,7 +30,7 @@ #include "sudo_fatal.h" #include "check.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); #ifdef __linux__ static int diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index df6d5b3766..46c72f1e8d 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -323,10 +323,10 @@ typedef struct cache_item * (*sudo_make_pwitem_t)(uid_t uid, const char *user); typedef struct cache_item * (*sudo_make_gritem_t)(gid_t gid, const char *group); typedef struct cache_item * (*sudo_make_gidlist_item_t)(const struct passwd *pw, char * const *gids, unsigned int type); typedef struct cache_item * (*sudo_make_grlist_item_t)(const struct passwd *pw, char * const *groups); -__dso_public struct group *sudo_getgrgid(gid_t); -__dso_public struct group *sudo_getgrnam(const char *); -__dso_public void sudo_gr_addref(struct group *); -__dso_public void sudo_gr_delref(struct group *); +sudo_dso_public struct group *sudo_getgrgid(gid_t); +sudo_dso_public struct group *sudo_getgrnam(const char *); +sudo_dso_public void sudo_gr_addref(struct group *); +sudo_dso_public void sudo_gr_delref(struct group *); bool user_in_group(const struct passwd *, const char *); struct group *sudo_fakegrnam(const char *); struct gid_list *sudo_get_gidlist(const struct passwd *pw, unsigned int type); diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index 45fe0afa22..782a075d1d 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -197,7 +197,7 @@ static void setup_terminal(struct iolog_info *li, bool interactive, bool resize) isalnum((unsigned char)(s)[6]) && isalnum((unsigned char)(s)[7]) && \ (s)[8] == '\0') -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index 5acc804158..f0347b170c 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -99,7 +99,7 @@ extern char *malloc_options; extern int sudoersdebug; #endif -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/plugins/sudoers/tsdump.c b/plugins/sudoers/tsdump.c index 4060ab3029..4267c4e50b 100644 --- a/plugins/sudoers/tsdump.c +++ b/plugins/sudoers/tsdump.c @@ -48,7 +48,7 @@ union timestamp_entry_storage { struct timestamp_entry v2; }; -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); static void usage(void) __attribute__((__noreturn__)); static void dump_entry(struct timestamp_entry *entry, off_t pos); diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 1982c8cd66..d73add09e2 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -122,7 +122,7 @@ static struct option long_opts[] = { { NULL, no_argument, NULL, '\0' }, }; -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int main(int argc, char *argv[]) diff --git a/plugins/system_group/system_group.c b/plugins/system_group/system_group.c index 442b7d6c0a..a41cdbc61a 100644 --- a/plugins/system_group/system_group.c +++ b/plugins/system_group/system_group.c @@ -140,7 +140,7 @@ sysgroup_query(const char *user, const char *group, const struct passwd *pwd) return false; } -__dso_public struct sudoers_group_plugin group_plugin = { +sudo_dso_public struct sudoers_group_plugin group_plugin = { GROUP_API_VERSION, sysgroup_init, sysgroup_cleanup, diff --git a/src/env_hooks.c b/src/env_hooks.c index 0dd031454b..5f9a61c751 100644 --- a/src/env_hooks.c +++ b/src/env_hooks.c @@ -57,7 +57,7 @@ getenv_unhooked(const char *name) return val; } -__dso_public char * +sudo_dso_public char * getenv(const char *name) { char *val = NULL; @@ -129,7 +129,7 @@ putenv_unhooked(PUTENV_CONST char *string) return rpl_putenv(string); } -__dso_public int +sudo_dso_public int putenv(PUTENV_CONST char *string) { switch (process_hooks_putenv((char *)string)) { @@ -201,7 +201,7 @@ setenv_unhooked(const char *var, const char *val, int overwrite) return rpl_setenv(var, val, overwrite); } -__dso_public int +sudo_dso_public int setenv(const char *var, const char *val, int overwrite) { switch (process_hooks_setenv(var, val, overwrite)) { @@ -266,9 +266,9 @@ unsetenv_unhooked(const char *var) } #ifdef UNSETENV_VOID -__dso_public void +sudo_dso_public void #else -__dso_public int +sudo_dso_public int #endif unsetenv(const char *var) { diff --git a/src/regress/noexec/check_noexec.c b/src/regress/noexec/check_noexec.c index db51a74f97..1e4eb59727 100644 --- a/src/regress/noexec/check_noexec.c +++ b/src/regress/noexec/check_noexec.c @@ -41,7 +41,7 @@ #include "sudo_util.h" #include "sudo_exec.h" -__dso_public int main(int argc, char *argv[], char *envp[]); +sudo_dso_public int main(int argc, char *argv[], char *envp[]); static bool report_status(int status, const char *what) diff --git a/src/regress/ttyname/check_ttyname.c b/src/regress/ttyname/check_ttyname.c index f4a5701e50..c43ea2188e 100644 --- a/src/regress/ttyname/check_ttyname.c +++ b/src/regress/ttyname/check_ttyname.c @@ -31,7 +31,7 @@ #include "sudo_util.h" #include "sudo_debug.h" -__dso_public int main(int argc, char *argv[]); +sudo_dso_public int main(int argc, char *argv[]); int sudo_debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER; extern char *get_process_ttyname(char *name, size_t namelen); diff --git a/src/sesh.c b/src/sesh.c index 55f409c292..5edff5a535 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -48,7 +48,7 @@ #include "sudo_plugin.h" #include "sudo_util.h" -__dso_public int main(int argc, char *argv[], char *envp[]); +sudo_dso_public int main(int argc, char *argv[], char *envp[]); static int sesh_sudoedit(int argc, char *argv[]); diff --git a/src/sudo.c b/src/sudo.c index c16a5aabbd..d43fd0698e 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -143,7 +143,7 @@ static void approval_show_version(int verbose, struct sudo_settings *settings, char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[]); -__dso_public int main(int argc, char *argv[], char *envp[]); +sudo_dso_public int main(int argc, char *argv[], char *envp[]); int main(int argc, char *argv[], char *envp[]) diff --git a/src/sudo_noexec.c b/src/sudo_noexec.c index 57813ad42c..c3e9cfb80d 100644 --- a/src/sudo_noexec.c +++ b/src/sudo_noexec.c @@ -88,31 +88,31 @@ typedef struct interpose_s { } #define DUMMY1(fn, t1) \ -__dso_public int \ +sudo_dso_public int \ FN_NAME(fn)(t1 a1) \ DUMMY_BODY \ INTERPOSE(fn) #define DUMMY2(fn, t1, t2) \ -__dso_public int \ +sudo_dso_public int \ FN_NAME(fn)(t1 a1, t2 a2) \ DUMMY_BODY \ INTERPOSE(fn) #define DUMMY3(fn, t1, t2, t3) \ -__dso_public int \ +sudo_dso_public int \ FN_NAME(fn)(t1 a1, t2 a2, t3 a3) \ DUMMY_BODY \ INTERPOSE(fn) #define DUMMY6(fn, t1, t2, t3, t4, t5, t6) \ -__dso_public int \ +sudo_dso_public int \ FN_NAME(fn)(t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) \ DUMMY_BODY \ INTERPOSE(fn) #define DUMMY_VA(fn, t1, t2) \ -__dso_public int \ +sudo_dso_public int \ FN_NAME(fn)(t1 a1, t2 a2, ...) \ DUMMY_BODY \ INTERPOSE(fn) @@ -159,7 +159,7 @@ DUMMY6(posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, */ DUMMY1(system, const char *) -__dso_public FILE * +sudo_dso_public FILE * FN_NAME(popen)(const char *c, const char *t) { errno = EACCES; @@ -174,7 +174,7 @@ INTERPOSE(popen) */ typedef int (*sudo_fn_wordexp_t)(const char *, wordexp_t *, int); -__dso_public int +sudo_dso_public int FN_NAME(wordexp)(const char *words, wordexp_t *we, int flags) { #if defined(HAVE___INTERPOSE) From cbad17a99443dbcd9e53daf640d04eb95ab048d6 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 12 Aug 2020 10:07:07 -0600 Subject: [PATCH 031/113] Move inclusion of compat headers up with the system headers. Now that sudo_dso_public is defined in config.h we don't need sudo_compat.h before including the compat headers. --- lib/util/fatal.c | 7 +++---- lib/util/regress/fnmatch/fnm_test.c | 7 +++---- logsrvd/logsrvd.c | 11 +++++------ logsrvd/logsrvd_conf.c | 7 +++---- logsrvd/sendlog.c | 17 ++++++++--------- plugins/sudoers/cvtsudoers.c | 11 +++++------ plugins/sudoers/iolog_client.c | 7 +++---- plugins/sudoers/logging.c | 5 ++--- plugins/sudoers/match.c | 7 +++---- plugins/sudoers/match_command.c | 7 +++---- plugins/sudoers/sudoers.c | 7 +++---- plugins/sudoers/sudoreplay.c | 11 +++++------ plugins/sudoers/visudo.c | 11 +++++------ src/parse_args.c | 9 ++++----- 14 files changed, 55 insertions(+), 69 deletions(-) diff --git a/lib/util/fatal.c b/lib/util/fatal.c index e2c56328a5..dcccc3e3f9 100644 --- a/lib/util/fatal.c +++ b/lib/util/fatal.c @@ -35,6 +35,9 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ #include +#ifndef HAVE_GETADDRINFO +# include "compat/getaddrinfo.h" +#endif #include "sudo_compat.h" #include "sudo_fatal.h" @@ -43,10 +46,6 @@ #include "sudo_util.h" #include "sudo_plugin.h" -#ifndef HAVE_GETADDRINFO -# include "compat/getaddrinfo.h" -#endif - struct sudo_fatal_callback { SLIST_ENTRY(sudo_fatal_callback) entries; void (*func)(void); diff --git a/lib/util/regress/fnmatch/fnm_test.c b/lib/util/regress/fnmatch/fnm_test.c index 2d6a9d2c41..9f2f01c289 100644 --- a/lib/util/regress/fnmatch/fnm_test.c +++ b/lib/util/regress/fnmatch/fnm_test.c @@ -9,16 +9,15 @@ #include #include #include - -#include "sudo_compat.h" -#include "sudo_util.h" - #ifdef HAVE_FNMATCH # include #else # include "compat/fnmatch.h" #endif +#include "sudo_compat.h" +#include "sudo_util.h" + sudo_dso_public int main(int argc, char *argv[]); int diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index bf76bab162..e14e376c1d 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -43,6 +43,11 @@ #include #include #include +#ifdef HAVE_GETOPT_LONG +# include +# else +# include "compat/getopt.h" +#endif /* HAVE_GETOPT_LONG */ #if defined(HAVE_OPENSSL) # include @@ -67,12 +72,6 @@ #include "hostcheck.h" #include "logsrvd.h" -#ifdef HAVE_GETOPT_LONG -# include -# else -# include "compat/getopt.h" -#endif /* HAVE_GETOPT_LONG */ - #if defined(HAVE_OPENSSL) # define LOGSRVD_DEFAULT_CIPHER_LST12 "HIGH:!aNULL" # define LOGSRVD_DEFAULT_CIPHER_LST13 "TLS_AES_256_GCM_SHA384" diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index 37b65c5368..ed8c8a3e11 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -40,6 +40,9 @@ #include #include #include +#ifndef HAVE_GETADDRINFO +# include "compat/getaddrinfo.h" +#endif #include "pathnames.h" #include "sudo_compat.h" @@ -52,10 +55,6 @@ #include "log_server.pb-c.h" #include "logsrvd.h" -#ifndef HAVE_GETADDRINFO -# include "compat/getaddrinfo.h" -#endif - #if defined(HAVE_OPENSSL) # define DEFAULT_CA_CERT_PATH "/etc/ssl/sudo/cacert.pem" # define DEFAULT_SERVER_CERT_PATH "/etc/ssl/sudo/certs/logsrvd_cert.pem" diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index ea5151fc49..1770f96051 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -45,6 +45,14 @@ #include #include #include +#ifndef HAVE_GETADDRINFO +# include "compat/getaddrinfo.h" +#endif +#ifdef HAVE_GETOPT_LONG +# include +# else +# include "compat/getopt.h" +#endif /* HAVE_GETOPT_LONG */ #if defined(HAVE_OPENSSL) # include @@ -64,15 +72,6 @@ #include "log_server.pb-c.h" #include "sendlog.h" -#ifndef HAVE_GETADDRINFO -# include "compat/getaddrinfo.h" -#endif -#ifdef HAVE_GETOPT_LONG -# include -# else -# include "compat/getopt.h" -#endif /* HAVE_GETOPT_LONG */ - #if defined(HAVE_OPENSSL) # define TLS_HANDSHAKE_TIMEO_SEC 10 #endif diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index 83621274ef..c339556ea9 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -37,6 +37,11 @@ #include #include #include +#ifdef HAVE_GETOPT_LONG +# include +# else +# include "compat/getopt.h" +#endif /* HAVE_GETOPT_LONG */ #include "sudoers.h" #include "sudoers_version.h" @@ -45,12 +50,6 @@ #include "cvtsudoers.h" #include -#ifdef HAVE_GETOPT_LONG -# include -# else -# include "compat/getopt.h" -#endif /* HAVE_GETOPT_LONG */ - /* * Globals */ diff --git a/plugins/sudoers/iolog_client.c b/plugins/sudoers/iolog_client.c index 9a1526a546..eb73bd832f 100644 --- a/plugins/sudoers/iolog_client.c +++ b/plugins/sudoers/iolog_client.c @@ -44,6 +44,9 @@ #include #include #include +#ifndef HAVE_GETADDRINFO +# include "compat/getaddrinfo.h" +#endif #if defined(HAVE_OPENSSL) # include @@ -59,10 +62,6 @@ #include "iolog_plugin.h" #include "hostcheck.h" -#ifndef HAVE_GETADDRINFO -# include "compat/getaddrinfo.h" -#endif - /* Server callback may redirect to client callback for TLS. */ static void client_msg_cb(int fd, int what, void *v); static void server_msg_cb(int fd, int what, void *v); diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 81da0f7887..5be2195b58 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -48,13 +48,12 @@ #include #include #include - -#include "sudoers.h" - #ifndef HAVE_GETADDRINFO # include "compat/getaddrinfo.h" #endif +#include "sudoers.h" + /* Special message for log_warning() so we know to use ngettext() */ #define INCORRECT_PASSWORD_ATTEMPT ((char *)0x01) diff --git a/plugins/sudoers/match.c b/plugins/sudoers/match.c index 70d6b3e643..bc6f69605d 100644 --- a/plugins/sudoers/match.c +++ b/plugins/sudoers/match.c @@ -49,16 +49,15 @@ #include #include #include - -#include "sudoers.h" -#include - #ifdef HAVE_FNMATCH # include #else # include "compat/fnmatch.h" #endif /* HAVE_FNMATCH */ +#include "sudoers.h" +#include + static struct member_list empty = TAILQ_HEAD_INITIALIZER(empty); /* diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index ac942f40df..c7094b1c41 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -41,16 +41,15 @@ #include #include #include - -#include "sudoers.h" -#include - #ifdef HAVE_FNMATCH # include #else # include "compat/fnmatch.h" #endif /* HAVE_FNMATCH */ +#include "sudoers.h" +#include + #if !defined(O_EXEC) && defined(O_PATH) # define O_EXEC O_PATH #endif diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index bf6c9fc33b..b74549b654 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -57,16 +57,15 @@ # include #endif #include +#ifndef HAVE_GETADDRINFO +# include "compat/getaddrinfo.h" +#endif #include "sudoers.h" #include "parse.h" #include "auth/sudo_auth.h" #include "sudo_iolog.h" -#ifndef HAVE_GETADDRINFO -# include "compat/getaddrinfo.h" -#endif - /* * Prototypes */ diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index 782a075d1d..a37c30df93 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -50,6 +50,11 @@ #endif /* HAVE_STDBOOL_H */ #include #include +#ifdef HAVE_GETOPT_LONG +# include +# else +# include "compat/getopt.h" +#endif /* HAVE_GETOPT_LONG */ #include "pathnames.h" #include "sudo_compat.h" @@ -65,12 +70,6 @@ #include "logging.h" -#ifdef HAVE_GETOPT_LONG -# include -# else -# include "compat/getopt.h" -#endif /* HAVE_GETOPT_LONG */ - struct replay_closure { const char *iolog_dir; struct sudo_event_base *evbase; diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index d73add09e2..01aaab8ec7 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -57,6 +57,11 @@ #include #include #include +#ifdef HAVE_GETOPT_LONG +# include +# else +# include "compat/getopt.h" +#endif /* HAVE_GETOPT_LONG */ #include "sudoers.h" #include "interfaces.h" @@ -65,12 +70,6 @@ #include "sudo_conf.h" #include -#ifdef HAVE_GETOPT_LONG -# include -# else -# include "compat/getopt.h" -#endif /* HAVE_GETOPT_LONG */ - struct sudoersfile { TAILQ_ENTRY(sudoersfile) entries; char *path; diff --git a/src/parse_args.c b/src/parse_args.c index d37a2839ea..d40eacb0bd 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -32,17 +32,16 @@ #include #include #include - -#include -#include "sudo.h" -#include "sudo_lbuf.h" - #ifdef HAVE_GETOPT_LONG # include # else # include "compat/getopt.h" #endif /* HAVE_GETOPT_LONG */ +#include +#include "sudo.h" +#include "sudo_lbuf.h" + int tgetpass_flags; /* From fb8ed8ba6633b028560444c6e0e56b1b8a397f84 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 12 Aug 2020 10:28:33 -0600 Subject: [PATCH 032/113] Use angle quotes when including gram.h and def_data.c. Otherwise, we can include the wrong file when doing an out-of-source build when configured using --with-devel. --- plugins/sudoers/ldap.c | 2 +- plugins/sudoers/ldap_util.c | 2 +- plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c | 3 ++- plugins/sudoers/sssd.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/sudoers/ldap.c b/plugins/sudoers/ldap.c index e52d026ec8..448a30d072 100644 --- a/plugins/sudoers/ldap.c +++ b/plugins/sudoers/ldap.c @@ -60,11 +60,11 @@ #endif /* HAVE_LDAP_SASL_INTERACTIVE_BIND_S */ #include "sudoers.h" -#include "gram.h" #include "sudo_lbuf.h" #include "sudo_ldap.h" #include "sudo_ldap_conf.h" #include "sudo_dso.h" +#include #ifndef LDAP_OPT_RESULT_CODE # define LDAP_OPT_RESULT_CODE LDAP_OPT_ERROR_NUMBER diff --git a/plugins/sudoers/ldap_util.c b/plugins/sudoers/ldap_util.c index 476caf73ca..62163905d7 100644 --- a/plugins/sudoers/ldap_util.c +++ b/plugins/sudoers/ldap_util.c @@ -36,10 +36,10 @@ #include "sudoers.h" #include "interfaces.h" -#include "gram.h" #include "sudo_lbuf.h" #include "sudo_ldap.h" #include "sudo_digest.h" +#include /* * Returns true if the string pointed to by valp begins with an diff --git a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c index 14794e2049..492b845ba7 100644 --- a/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c +++ b/plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c @@ -28,10 +28,11 @@ #define SUDO_ERROR_WRAP 0 #include "sudoers.h" -#include "def_data.c" /* for iolog_path.c */ #include "sudo_plugin.h" #include "sudo_iolog.h" +#include /* for iolog_path.c */ + extern struct io_plugin sudoers_io; struct sudo_user sudo_user; diff --git a/plugins/sudoers/sssd.c b/plugins/sudoers/sssd.c index 4ab55c8412..605ab40600 100644 --- a/plugins/sudoers/sssd.c +++ b/plugins/sudoers/sssd.c @@ -40,10 +40,10 @@ #include #include "sudoers.h" -#include "gram.h" #include "sudo_lbuf.h" #include "sudo_ldap.h" #include "sudo_dso.h" +#include /* SSSD <--> SUDO interface - do not change */ struct sss_sudo_attr { From 961a4afe67c04c86d700695b188809cd984152b2 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 12 Aug 2020 13:45:09 -0600 Subject: [PATCH 033/113] Fix some warnings from pvs-studio --- Makefile.in | 2 +- lib/iolog/iolog_fileio.c | 46 +++++++++++------------- lib/iolog/iolog_json.c | 26 +++++++------- lib/util/aix.c | 6 ++-- lib/util/sudo_debug.c | 1 - logsrvd/logsrvd.c | 14 ++++---- logsrvd/sendlog.c | 20 +++++------ plugins/audit_json/audit_json.c | 4 +-- plugins/sudoers/auth/aix_auth.c | 2 +- plugins/sudoers/auth/fwtk.c | 10 +++--- plugins/sudoers/auth/securid5.c | 22 ++++++------ plugins/sudoers/bsm_audit.c | 8 ++--- plugins/sudoers/cvtsudoers.c | 2 +- plugins/sudoers/cvtsudoers_json.c | 8 ++--- plugins/sudoers/cvtsudoers_ldif.c | 10 +++--- plugins/sudoers/env.c | 8 +++-- plugins/sudoers/iolog.c | 8 ++--- plugins/sudoers/iolog_client.c | 38 ++++++++++---------- plugins/sudoers/ldap.c | 9 ++--- plugins/sudoers/ldap_conf.c | 6 ++-- plugins/sudoers/linux_audit.c | 4 +-- plugins/sudoers/logging.c | 2 +- plugins/sudoers/parse.c | 10 +++--- plugins/sudoers/policy.c | 10 +++--- plugins/sudoers/set_perms.c | 10 +++--- plugins/sudoers/sssd.c | 3 +- plugins/sudoers/sudoers.c | 19 +++++----- plugins/sudoers/sudoreplay.c | 32 ++++++++--------- plugins/sudoers/testsudoers.c | 4 +-- plugins/sudoers/visudo.c | 20 ++++++----- src/copy_file.c | 34 +++++++++--------- src/exec.c | 4 +-- src/exec_common.c | 2 +- src/exec_monitor.c | 34 +++++++++--------- src/exec_nopty.c | 36 +++++++++---------- src/exec_pty.c | 60 +++++++++++++++---------------- src/load_plugins.c | 3 +- src/parse_args.c | 26 ++++++++------ src/selinux.c | 16 ++++----- src/sesh.c | 2 +- src/solaris.c | 4 +-- src/sudo.c | 11 +++--- src/sudo_edit.c | 26 +++++++------- src/tgetpass.c | 16 +++++---- src/utmp.c | 6 ++-- 45 files changed, 330 insertions(+), 314 deletions(-) diff --git a/Makefile.in b/Makefile.in index 89d4ab87c9..3bf13a6aa6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -101,7 +101,7 @@ SPLINT_OPTS = -D__restrict= -checks # Default PVS-studio options when run from the top-level Makefile PVS_CFG = $(top_builddir)/PVS-Studio.cfg -PVS_IGNORE = 'V707,V011,V002,V536' +PVS_IGNORE = 'V707,V011,V002,V536,V568' PVS_LOG_OPTS = -a 'GA:1,2' -e -t errorfile -d $(PVS_IGNORE) all: config.status diff --git a/lib/iolog/iolog_fileio.c b/lib/iolog/iolog_fileio.c index fa59b21a23..2fa61cbc15 100644 --- a/lib/iolog/iolog_fileio.c +++ b/lib/iolog/iolog_fileio.c @@ -121,23 +121,21 @@ iolog_mkdirs(char *path) mode_t omask; struct stat sb; int dfd; - bool ok = false, uid_changed = false; + bool ok = true, uid_changed = false; debug_decl(iolog_mkdirs, SUDO_DEBUG_UTIL); - if ((dfd = open(path, O_RDONLY|O_NONBLOCK)) != -1) - ok = true; - if (!ok && errno == EACCES) { + dfd = open(path, O_RDONLY|O_NONBLOCK); + if (dfd == -1 && errno == EACCES) { /* Try again as the I/O log owner (for NFS). */ if (io_swapids(false)) { - if ((dfd = open(path, O_RDONLY|O_NONBLOCK)) != -1) - ok = true; - if (!io_swapids(true)) + dfd = open(path, O_RDONLY|O_NONBLOCK); + if (!io_swapids(true)) { ok = false; + goto done; + } } } - if (ok && fstat(dfd, &sb) == -1) - ok = false; - if (ok) { + if (dfd != -1 && fstat(dfd, &sb) != -1) { if (S_ISDIR(sb.st_mode)) { if (sb.st_uid != iolog_uid || sb.st_gid != iolog_gid) { if (fchown(dfd, iolog_uid, iolog_gid) != 0) { @@ -473,21 +471,19 @@ iolog_nextid(char *iolog_dir, char sessid[7]) } /* Read current seq number (base 36). */ - if (id == 0) { - nread = read(fd, buf, sizeof(buf) - 1); - if (nread != 0) { - if (nread == -1) { - goto done; - } - if (buf[nread - 1] == '\n') - nread--; - buf[nread] = '\0'; - id = strtoul(buf, &ep, 36); - if (ep == buf || *ep != '\0' || id >= sessid_max) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "%s: bad sequence number: %s", pathbuf, buf); - id = 0; - } + nread = read(fd, buf, sizeof(buf) - 1); + if (nread != 0) { + if (nread == -1) { + goto done; + } + if (buf[nread - 1] == '\n') + nread--; + buf[nread] = '\0'; + id = strtoul(buf, &ep, 36); + if (ep == buf || *ep != '\0' || id >= sessid_max) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: bad sequence number: %s", pathbuf, buf); + id = 0; } } id++; diff --git a/lib/iolog/iolog_json.c b/lib/iolog/iolog_json.c index 1c52e2c6cd..2a8b8d2f1d 100644 --- a/lib/iolog/iolog_json.c +++ b/lib/iolog/iolog_json.c @@ -301,14 +301,14 @@ json_parse_string(char **strp) end++; } if (*end != '"') { - sudo_warnx(U_("missing double quote in name")); + sudo_warnx("%s", U_("missing double quote in name")); debug_return_str(NULL); } len = (size_t)(end - src); /* Copy string, flattening escaped chars. */ dst = ret = malloc(len + 1); - if (ret == NULL) + if (dst == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); while (src < end) { char ch = *src++; @@ -603,7 +603,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) cp++; if (stack.depth == 0 || frame->parent == NULL || frame->parent->type != JSON_OBJECT) { - sudo_warnx(U_("unmatched close brace")); + sudo_warnx("%s", U_("unmatched close brace")); goto parse_error; } frame = stack.frames[--stack.depth]; @@ -612,7 +612,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) cp++; if (frame->parent == NULL) { /* Must have an enclosing object. */ - sudo_warnx(U_("unexpected array")); + sudo_warnx("%s", U_("unexpected array")); goto parse_error; } frame = json_stack_push(&stack, &frame->items, frame, @@ -625,7 +625,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) cp++; if (stack.depth == 0 || frame->parent == NULL || frame->parent->type != JSON_ARRAY) { - sudo_warnx(U_("unmatched close bracket")); + sudo_warnx("%s", U_("unmatched close bracket")); goto parse_error; } frame = stack.frames[--stack.depth]; @@ -633,7 +633,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) case '"': if (frame->parent == NULL) { /* Must have an enclosing object. */ - sudo_warnx(U_("unexpected string")); + sudo_warnx("%s", U_("unexpected string")); goto parse_error; } @@ -643,7 +643,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) goto parse_error; /* TODO: allow colon on next line? */ if (*cp++ != ':') { - sudo_warnx(U_("missing colon after name")); + sudo_warnx("%s", U_("missing colon after name")); goto parse_error; } } else { @@ -654,7 +654,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) break; case 't': if (!expect_value) { - sudo_warnx(U_("unexpected boolean")); + sudo_warnx("%s", U_("unexpected boolean")); goto parse_error; } if (strncmp(cp, "true", sizeof("true") - 1) != 0) @@ -669,7 +669,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) break; case 'f': if (!expect_value) { - sudo_warnx(U_("unexpected boolean")); + sudo_warnx("%s", U_("unexpected boolean")); goto parse_error; } if (strncmp(cp, "false", sizeof("false") - 1) != 0) @@ -684,7 +684,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) break; case 'n': if (!expect_value) { - sudo_warnx(U_("unexpected boolean")); + sudo_warnx("%s", U_("unexpected boolean")); goto parse_error; } if (strncmp(cp, "null", sizeof("null") - 1) != 0) @@ -700,7 +700,7 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) case '+': case '-': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!expect_value) { - sudo_warnx(U_("unexpected number")); + sudo_warnx("%s", U_("unexpected number")); goto parse_error; } /* XXX - strtonumx() would be simpler here. */ @@ -727,9 +727,9 @@ iolog_parse_json(FILE *fp, const char *filename, struct json_object *root) if (stack.depth != 0) { frame = stack.frames[stack.depth - 1]; if (frame->parent == NULL || frame->parent->type == JSON_OBJECT) - sudo_warnx(U_("unmatched close brace")); + sudo_warnx("%s", U_("unmatched close brace")); else - sudo_warnx(U_("unmatched close bracket")); + sudo_warnx("%s", U_("unmatched close bracket")); goto parse_error; } diff --git a/lib/util/aix.c b/lib/util/aix.c index 8d80b512f0..4956373157 100644 --- a/lib/util/aix.c +++ b/lib/util/aix.c @@ -86,7 +86,7 @@ aix_setlimits(char *user) debug_decl(aix_setlimits, SUDO_DEBUG_UTIL); if (setuserdb(S_READ) != 0) { - sudo_warn(U_("unable to open userdb")); + sudo_warn("%s", U_("unable to open userdb")); debug_return_int(-1); } @@ -166,7 +166,7 @@ aix_getauthregistry_v1(char *user, char *saved_registry) char *registry; if (setuserdb(S_READ) != 0) { - sudo_warn(U_("unable to open userdb")); + sudo_warn("%s", U_("unable to open userdb")); goto done; } ret = getuserattr(user, S_REGISTRY, ®istry, SEC_CHAR); @@ -246,7 +246,7 @@ aix_restoreauthdb_v1(void) debug_decl(aix_setauthdb, SUDO_DEBUG_UTIL); if (setauthdb(old_registry, NULL) != 0) { - sudo_warn(U_("unable to restore registry")); + sudo_warn("%s", U_("unable to restore registry")); ret = -1; } else { sudo_debug_printf(SUDO_DEBUG_INFO, diff --git a/lib/util/sudo_debug.c b/lib/util/sudo_debug.c index f6a0676e3a..deedadfaa4 100644 --- a/lib/util/sudo_debug.c +++ b/lib/util/sudo_debug.c @@ -160,7 +160,6 @@ sudo_debug_new_output(struct sudo_debug_instance *instance, output->filename = strdup(debug_file->debug_file); if (output->filename == NULL) goto oom; - output->fd = -1; /* Init per-subsystems settings to -1 since 0 is a valid priority. */ for (j = 0; j <= instance->max_subsystem; j++) diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index e14e376c1d..dcce1dd865 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -1488,7 +1488,7 @@ new_connection(int sock, bool tls, const struct sockaddr *sa, sizeof(closure->ipaddr)); #endif /* HAVE_STRUCT_IN6_ADDR */ } else { - sudo_fatal(U_("unable to get remote IP addr")); + sudo_fatal("%s", U_("unable to get remote IP addr")); goto bad; } sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, @@ -1524,7 +1524,7 @@ new_connection(int sock, bool tls, const struct sockaddr *sa, /* Enable SSL_accept to begin handshake with client. */ if (sudo_ev_add(evbase, closure->ssl_accept_ev, logsrvd_conf_get_sock_timeout(), false) == -1) { - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); goto bad; } } @@ -1646,7 +1646,7 @@ register_listener(struct listen_address *addr, struct sudo_event_base *evbase) if (l->ev == NULL) sudo_fatal(NULL); if (sudo_ev_add(evbase, l->ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); TAILQ_INSERT_TAIL(&listeners, l, entries); debug_return_bool(true); @@ -1700,7 +1700,7 @@ server_reload(struct sudo_event_base *base) if (logsrvd_conf_read(conf_file)) { /* Re-initialize listeners and TLS context. */ if (!server_setup(base)) - sudo_fatalx(U_("unable setup listen socket")); + sudo_fatalx("%s", U_("unable setup listen socket")); /* Re-initialize debugging. */ if (sudo_conf_read(NULL, SUDO_CONF_DEBUG) != -1) { @@ -1746,7 +1746,7 @@ register_signal(int signo, struct sudo_event_base *base) if (ev == NULL) sudo_fatal(NULL); if (sudo_ev_add(base, ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); debug_return; } @@ -1895,7 +1895,7 @@ main(int argc, char *argv[]) sudo_conf_debug_files(getprogname())); if (protobuf_c_version_number() < 1003000) - sudo_fatalx(U_("Protobuf-C version 1.3 or higher required")); + sudo_fatalx("%s", U_("Protobuf-C version 1.3 or higher required")); while ((ch = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) { switch (ch) { @@ -1934,7 +1934,7 @@ main(int argc, char *argv[]) /* Initialize listeners and TLS context. */ if (!server_setup(evbase)) - sudo_fatalx(U_("unable setup listen socket")); + sudo_fatalx("%s", U_("unable setup listen socket")); register_signal(SIGHUP, evbase); register_signal(SIGINT, evbase); diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 1770f96051..8db72c6957 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -183,7 +183,7 @@ connect_server(const char *host, const char *port) if (*server_ip == '\0') { if (inet_ntop(res->ai_family, res->ai_addr, server_ip, sizeof(server_ip)) == NULL) { - sudo_warnx(U_("unable to get server IP addr")); + sudo_warnx("%s", U_("unable to get server IP addr")); } } break; /* success */ @@ -1077,7 +1077,7 @@ server_msg_cb(int fd, int what, void *v) } if (what == SUDO_EV_TIMEOUT) { - sudo_warnx(U_("timeout reading from server")); + sudo_warnx("%s", U_("timeout reading from server")); goto bad; } @@ -1106,7 +1106,7 @@ server_msg_cb(int fd, int what, void *v) if (!sudo_ev_pending(closure->write_ev, SUDO_EV_WRITE, NULL)) { /* Enable a temporary write event. */ if (sudo_ev_add(closure->evbase, closure->write_ev, NULL, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto bad; } closure->temporary_write_event = true; @@ -1219,7 +1219,7 @@ client_msg_cb(int fd, int what, void *v) } if (what == SUDO_EV_TIMEOUT) { - sudo_warnx(U_("timeout writing to server")); + sudo_warnx("%s", U_("timeout writing to server")); goto bad; } @@ -1438,7 +1438,7 @@ tls_connect_cb(int sock, int what, void *v) debug_decl(tls_connect_cb, SUDO_DEBUG_UTIL); if (what == SUDO_EV_TIMEOUT) { - sudo_warnx(U_("TLS handshake timeout occurred")); + sudo_warnx("%s", U_("TLS handshake timeout occurred")); goto bad; } @@ -1457,12 +1457,12 @@ tls_connect_cb(int sock, int what, void *v) if (what != SUDO_EV_READ) { if (sudo_ev_set(closure->tls_connect_ev, closure->sock, SUDO_EV_READ, tls_connect_cb, closure) == -1) { - sudo_warnx(U_("unable to set event")); + sudo_warnx("%s", U_("unable to set event")); goto bad; } } if (sudo_ev_add(evbase, closure->tls_connect_ev, &timeo, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto bad; } break; @@ -1472,12 +1472,12 @@ tls_connect_cb(int sock, int what, void *v) if (what != SUDO_EV_WRITE) { if (sudo_ev_set(closure->tls_connect_ev, closure->sock, SUDO_EV_WRITE, tls_connect_cb, closure) == -1) { - sudo_warnx(U_("unable to set event")); + sudo_warnx("%s", U_("unable to set event")); goto bad; } } if (sudo_ev_add(evbase, closure->tls_connect_ev, &timeo, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto bad; } break; @@ -1535,7 +1535,7 @@ tls_setup(struct client_closure *closure) } if (sudo_ev_add(closure->evbase, closure->tls_connect_ev, NULL, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto bad; } diff --git a/plugins/audit_json/audit_json.c b/plugins/audit_json/audit_json.c index ea8921bec9..64adcb7382 100644 --- a/plugins/audit_json/audit_json.c +++ b/plugins/audit_json/audit_json.c @@ -413,7 +413,7 @@ audit_write_exit_record(int exit_status, int error) debug_decl(audit_write_exit_record, SUDO_DEBUG_PLUGIN); if (sudo_gettime_real(&now) == -1) { - sudo_warn(U_("unable to read the clock")); + sudo_warn("%s", U_("unable to read the clock")); goto done; } @@ -498,7 +498,7 @@ audit_write_record(const char *audit_str, const char *plugin_name, debug_decl(audit_write_record, SUDO_DEBUG_PLUGIN); if (sudo_gettime_real(&now) == -1) { - sudo_warn(U_("unable to read the clock")); + sudo_warn("%s", U_("unable to read the clock")); goto done; } diff --git a/plugins/sudoers/auth/aix_auth.c b/plugins/sudoers/auth/aix_auth.c index fed2c46fae..627281160e 100644 --- a/plugins/sudoers/auth/aix_auth.c +++ b/plugins/sudoers/auth/aix_auth.c @@ -195,7 +195,7 @@ sudo_aix_change_password(const char *user) switch (child = sudo_debug_fork()) { case -1: /* error */ - sudo_warn(U_("unable to fork")); + sudo_warn("%s", U_("unable to fork")); break; case 0: /* child, run passwd(1) */ diff --git a/plugins/sudoers/auth/fwtk.c b/plugins/sudoers/auth/fwtk.c index c9ab06b7f9..fa61205814 100644 --- a/plugins/sudoers/auth/fwtk.c +++ b/plugins/sudoers/auth/fwtk.c @@ -51,18 +51,18 @@ sudo_fwtk_init(struct passwd *pw, sudo_auth *auth) debug_decl(sudo_fwtk_init, SUDOERS_DEBUG_AUTH); if ((confp = cfg_read("sudo")) == (Cfg *)-1) { - sudo_warnx(U_("unable to read fwtk config")); + sudo_warnx("%s", U_("unable to read fwtk config")); debug_return_int(AUTH_FATAL); } if (auth_open(confp)) { - sudo_warnx(U_("unable to connect to authentication server")); + sudo_warnx("%s", U_("unable to connect to authentication server")); debug_return_int(AUTH_FATAL); } /* Get welcome message from auth server */ if (auth_recv(resp, sizeof(resp))) { - sudo_warnx(U_("lost connection to authentication server")); + sudo_warnx("%s", U_("lost connection to authentication server")); debug_return_int(AUTH_FATAL); } if (strncmp(resp, "Authsrv ready", 13) != 0) { @@ -86,7 +86,7 @@ sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_c (void) snprintf(buf, sizeof(buf), "authorize %s 'sudo'", pw->pw_name); restart: if (auth_send(buf) || auth_recv(resp, sizeof(resp))) { - sudo_warnx(U_("lost connection to authentication server")); + sudo_warnx("%s", U_("lost connection to authentication server")); debug_return_int(AUTH_FATAL); } @@ -118,7 +118,7 @@ sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_c /* Send the user's response to the server */ (void) snprintf(buf, sizeof(buf), "response '%s'", pass); if (auth_send(buf) || auth_recv(resp, sizeof(resp))) { - sudo_warnx(U_("lost connection to authentication server")); + sudo_warnx("%s", U_("lost connection to authentication server")); error = AUTH_FATAL; goto done; } diff --git a/plugins/sudoers/auth/securid5.c b/plugins/sudoers/auth/securid5.c index d5804011bd..698953fc27 100644 --- a/plugins/sudoers/auth/securid5.c +++ b/plugins/sudoers/auth/securid5.c @@ -69,7 +69,7 @@ sudo_securid_init(struct passwd *pw, sudo_auth *auth) if (AceInitialize() != SD_FALSE) debug_return_int(AUTH_SUCCESS); - sudo_warnx(U_("failed to initialise the ACE API library")); + sudo_warnx("%s", U_("failed to initialise the ACE API library")); debug_return_int(AUTH_FATAL); } @@ -95,7 +95,7 @@ sudo_securid_setup(struct passwd *pw, char **promptp, sudo_auth *auth) /* Re-initialize SecurID every time. */ if (SD_Init(sd) != ACM_OK) { - sudo_warnx(U_("unable to contact the SecurID server")); + sudo_warnx("%s", U_("unable to contact the SecurID server")); debug_return_int(AUTH_FATAL); } @@ -104,23 +104,23 @@ sudo_securid_setup(struct passwd *pw, char **promptp, sudo_auth *auth) switch (retval) { case ACM_OK: - sudo_warnx(U_("User ID locked for SecurID Authentication")); + sudo_warnx("%s", U_("User ID locked for SecurID Authentication")); debug_return_int(AUTH_SUCCESS); case ACE_UNDEFINED_USERNAME: - sudo_warnx(U_("invalid username length for SecurID")); + sudo_warnx("%s", U_("invalid username length for SecurID")); debug_return_int(AUTH_FATAL); case ACE_ERR_INVALID_HANDLE: - sudo_warnx(U_("invalid Authentication Handle for SecurID")); + sudo_warnx("%s", U_("invalid Authentication Handle for SecurID")); debug_return_int(AUTH_FATAL); case ACM_ACCESS_DENIED: - sudo_warnx(U_("SecurID communication failed")); + sudo_warnx("%s", U_("SecurID communication failed")); debug_return_int(AUTH_FATAL); default: - sudo_warnx(U_("unknown SecurID error")); + sudo_warnx("%s", U_("unknown SecurID error")); debug_return_int(AUTH_FATAL); } } @@ -154,17 +154,17 @@ sudo_securid_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_ break; case ACE_UNDEFINED_PASSCODE: - sudo_warnx(U_("invalid passcode length for SecurID")); + sudo_warnx("%s", U_("invalid passcode length for SecurID")); ret = AUTH_FATAL; break; case ACE_UNDEFINED_USERNAME: - sudo_warnx(U_("invalid username length for SecurID")); + sudo_warnx("%s", U_("invalid username length for SecurID")); ret = AUTH_FATAL; break; case ACE_ERR_INVALID_HANDLE: - sudo_warnx(U_("invalid Authentication Handle for SecurID")); + sudo_warnx("%s", U_("invalid Authentication Handle for SecurID")); ret = AUTH_FATAL; break; @@ -207,7 +207,7 @@ then enter the new token code.\n", \ break; default: - sudo_warnx(U_("unknown SecurID error")); + sudo_warnx("%s", U_("unknown SecurID error")); ret = AUTH_FATAL; break; } diff --git a/plugins/sudoers/bsm_audit.c b/plugins/sudoers/bsm_audit.c index 60782698f0..2867c5f5f0 100644 --- a/plugins/sudoers/bsm_audit.c +++ b/plugins/sudoers/bsm_audit.c @@ -120,7 +120,7 @@ bsm_audit_success(char *const exec_args[]) if (auditon(A_GETCOND, (caddr_t)&au_cond, sizeof(long)) < 0) { if (errno == AUDIT_NOT_CONFIGURED) debug_return_int(0); - sudo_warn(U_("Could not determine audit condition")); + sudo_warn("%s", U_("Could not determine audit condition")); debug_return_int(-1); } if (au_cond == AUC_NOAUDIT) @@ -185,7 +185,7 @@ bsm_audit_success(char *const exec_args[]) if (au_close(aufd, 1, sudo_audit_event) == -1) #endif { - sudo_warn(U_("unable to commit audit record")); + sudo_warn("%s", U_("unable to commit audit record")); debug_return_int(-1); } debug_return_int(0); @@ -211,7 +211,7 @@ bsm_audit_failure(char *const exec_args[], const char *errmsg) if (auditon(A_GETCOND, (caddr_t)&au_cond, sizeof(long)) < 0) { if (errno == AUDIT_NOT_CONFIGURED) debug_return_int(0); - sudo_warn(U_("Could not determine audit condition")); + sudo_warn("%s", U_("Could not determine audit condition")); debug_return_int(-1); } if (au_cond == AUC_NOAUDIT) @@ -274,7 +274,7 @@ bsm_audit_failure(char *const exec_args[], const char *errmsg) if (au_close(aufd, 1, sudo_audit_event) == -1) #endif { - sudo_warn(U_("unable to commit audit record")); + sudo_warn("%s", U_("unable to commit audit record")); debug_return_int(-1); } debug_return_int(0); diff --git a/plugins/sudoers/cvtsudoers.c b/plugins/sudoers/cvtsudoers.c index c339556ea9..79358121c5 100644 --- a/plugins/sudoers/cvtsudoers.c +++ b/plugins/sudoers/cvtsudoers.c @@ -327,7 +327,7 @@ main(int argc, char *argv[]) /* Setup defaults data structures. */ if (!init_defaults()) - sudo_fatalx(U_("unable to initialize sudoers default values")); + sudo_fatalx("%s", U_("unable to initialize sudoers default values")); switch (input_format) { case format_ldif: diff --git a/plugins/sudoers/cvtsudoers_json.c b/plugins/sudoers/cvtsudoers_json.c index a846a65cc8..93224e7fd3 100644 --- a/plugins/sudoers/cvtsudoers_json.c +++ b/plugins/sudoers/cvtsudoers_json.c @@ -637,10 +637,10 @@ print_cmndspec_json(struct json_container *json, } if (cs->notbefore != UNSPEC) { if ((tp = gmtime(&cs->notbefore)) == NULL) { - sudo_warn(U_("unable to get GMT time")); + sudo_warn("%s", U_("unable to get GMT time")); } else { if (strftime(timebuf, sizeof(timebuf), "%Y%m%d%H%M%SZ", tp) == 0) { - sudo_warnx(U_("unable to format timestamp")); + sudo_warnx("%s", U_("unable to format timestamp")); } else { value.type = JSON_STRING; value.u.string = timebuf; @@ -650,10 +650,10 @@ print_cmndspec_json(struct json_container *json, } if (cs->notafter != UNSPEC) { if ((tp = gmtime(&cs->notafter)) == NULL) { - sudo_warn(U_("unable to get GMT time")); + sudo_warn("%s", U_("unable to get GMT time")); } else { if (strftime(timebuf, sizeof(timebuf), "%Y%m%d%H%M%SZ", tp) == 0) { - sudo_warnx(U_("unable to format timestamp")); + sudo_warnx("%s", U_("unable to format timestamp")); } else { value.type = JSON_STRING; value.u.string = timebuf; diff --git a/plugins/sudoers/cvtsudoers_ldif.c b/plugins/sudoers/cvtsudoers_ldif.c index f61f5ff7bc..dfab73ad48 100644 --- a/plugins/sudoers/cvtsudoers_ldif.c +++ b/plugins/sudoers/cvtsudoers_ldif.c @@ -342,10 +342,10 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, /* Print sudoNotBefore and sudoNotAfter attributes */ if (cs->notbefore != UNSPEC) { if ((tp = gmtime(&cs->notbefore)) == NULL) { - sudo_warn(U_("unable to get GMT time")); + sudo_warn("%s", U_("unable to get GMT time")); } else { if (strftime(timebuf, sizeof(timebuf), "%Y%m%d%H%M%SZ", tp) == 0) { - sudo_warnx(U_("unable to format timestamp")); + sudo_warnx("%s", U_("unable to format timestamp")); } else { print_attribute_ldif(fp, "sudoNotBefore", timebuf); } @@ -353,10 +353,10 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, } if (cs->notafter != UNSPEC) { if ((tp = gmtime(&cs->notafter)) == NULL) { - sudo_warn(U_("unable to get GMT time")); + sudo_warn("%s", U_("unable to get GMT time")); } else { if (strftime(timebuf, sizeof(timebuf), "%Y%m%d%H%M%SZ", tp) == 0) { - sudo_warnx(U_("unable to format timestamp")); + sudo_warnx("%s", U_("unable to format timestamp")); } else { print_attribute_ldif(fp, "sudoNotAfter", timebuf); } @@ -672,7 +672,7 @@ convert_sudoers_ldif(struct sudoers_parse_tree *parse_tree, debug_decl(convert_sudoers_ldif, SUDOERS_DEBUG_UTIL); if (conf->sudoers_base == NULL) { - sudo_fatalx(U_("the SUDOERS_BASE environment variable is not set and the -b option was not specified.")); + sudo_fatalx("%s", U_("the SUDOERS_BASE environment variable is not set and the -b option was not specified.")); } if (output_file != NULL && strcmp(output_file, "-") != 0) { diff --git a/plugins/sudoers/env.c b/plugins/sudoers/env.c index 44589d2f13..2cb92a50dd 100644 --- a/plugins/sudoers/env.c +++ b/plugins/sudoers/env.c @@ -400,8 +400,10 @@ sudo_putenv(char *str, bool dupcheck, bool overwrite) ret = sudo_putenv_nodebug(str, dupcheck, overwrite); if (ret == -1) { #ifdef ENV_DEBUG - if (env.envp[env.env_len] != NULL) - sudo_warnx(U_("sudo_putenv: corrupted envp, length mismatch")); + if (env.envp[env.env_len] != NULL) { + sudo_warnx("%s", + U_("sudo_putenv: corrupted envp, length mismatch")); + } #endif } debug_return_int(ret); @@ -1128,7 +1130,7 @@ rebuild_env(void) debug_return_bool(true); bad: - sudo_warn(U_("unable to rebuild the environment")); + sudo_warn("%s", U_("unable to rebuild the environment")); debug_return_bool(false); } diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index 6e58d39ca2..fa8896521b 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -628,7 +628,7 @@ sudoers_io_open_remote(struct timespec *now) /* Connect to log server. */ if (!log_server_connect(client_closure)) { /* TODO: support offline logs if server unreachable */ - sudo_warnx(U_("unable to connect to log server")); + sudo_warnx("%s", U_("unable to connect to log server")); goto done; } @@ -918,7 +918,7 @@ sudoers_io_log_remote(int event, const char *buf, unsigned int len, ret = client_closure->write_ev->add(client_closure->write_ev, &iolog_details.server_timeout); if (ret == -1) - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); } done: @@ -1051,7 +1051,7 @@ sudoers_io_change_winsize_remote(unsigned int lines, unsigned int cols, ret = client_closure->write_ev->add(client_closure->write_ev, &iolog_details.server_timeout); if (ret == -1) - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); } debug_return_int(ret); @@ -1149,7 +1149,7 @@ sudoers_io_suspend_remote(const char *signame, struct timespec *delay, ret = client_closure->write_ev->add(client_closure->write_ev, &iolog_details.server_timeout); if (ret == -1) - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); } debug_return_int(ret); diff --git a/plugins/sudoers/iolog_client.c b/plugins/sudoers/iolog_client.c index eb73bd832f..7cc54f0f4b 100644 --- a/plugins/sudoers/iolog_client.c +++ b/plugins/sudoers/iolog_client.c @@ -105,11 +105,11 @@ timed_connect(int sock, const struct sockaddr *addr, socklen_t addrlen, goto done; } if (sudo_ev_add(evbase, connect_event, timo, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto done; } if (sudo_ev_dispatch(evbase) == -1) { - sudo_warn(U_("error in event loop")); + sudo_warn("%s", U_("error in event loop")); goto done; } if (errnum == 0) @@ -293,7 +293,7 @@ tls_connect_cb(int sock, int what, void *v) debug_decl(tls_connect_cb, SUDOERS_DEBUG_UTIL); if (what == SUDO_PLUGIN_EV_TIMEOUT) { - sudo_warnx(U_("TLS handshake timeout occurred")); + sudo_warnx("%s", U_("TLS handshake timeout occurred")); goto bad; } @@ -315,13 +315,13 @@ tls_connect_cb(int sock, int what, void *v) if (what != SUDO_EV_READ) { if (sudo_ev_set(closure->tls_connect_ev, sock, SUDO_EV_READ, tls_connect_cb, closure) == -1) { - sudo_warnx(U_("unable to set event")); + sudo_warnx("%s", U_("unable to set event")); goto bad; } } if (sudo_ev_add(closure->evbase, closure->tls_connect_ev, &timeo, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto bad; } break; @@ -331,13 +331,13 @@ tls_connect_cb(int sock, int what, void *v) if (what != SUDO_EV_WRITE) { if (sudo_ev_set(closure->tls_connect_ev, sock, SUDO_EV_WRITE, tls_connect_cb, closure) == -1) { - sudo_warnx(U_("unable to set event")); + sudo_warnx("%s", U_("unable to set event")); goto bad; } } if (sudo_ev_add(closure->evbase, closure->tls_connect_ev, &timeo, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto bad; } break; @@ -383,12 +383,12 @@ tls_timed_connect(SSL *ssl, const char *host, const char *port, } if (sudo_ev_add(closure.evbase, closure.tls_connect_ev, timo, false) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto done; } if (sudo_ev_dispatch(closure.evbase) == -1) { - sudo_warnx(U_("error in event loop")); + sudo_warnx("%s", U_("error in event loop")); goto done; } @@ -1146,7 +1146,7 @@ client_message_completion(struct client_closure *closure) /* Enable timeout while waiting for final commit point. */ if (closure->read_ev->add(closure->read_ev, &closure->log_details->server_timeout) == -1) { - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); debug_return_bool(false); } break; @@ -1182,7 +1182,7 @@ read_server_hello(struct client_closure *closure) closure->write_ev->setbase(closure->write_ev, evbase); if (closure->write_ev->add(closure->write_ev, &closure->log_details->server_timeout) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto done; } @@ -1190,13 +1190,13 @@ read_server_hello(struct client_closure *closure) closure->read_ev->setbase(closure->read_ev, evbase); if (closure->read_ev->add(closure->read_ev, &closure->log_details->server_timeout) == -1) { - sudo_warnx(U_("unable to add event to queue")); + sudo_warnx("%s", U_("unable to add event to queue")); goto done; } /* Read/write hello messages synchronously. */ if (sudo_ev_dispatch(evbase) == -1) { - sudo_warnx(U_("error in event loop")); + sudo_warnx("%s", U_("error in event loop")); goto done; } @@ -1250,7 +1250,7 @@ handle_server_hello(ServerHello *msg, struct client_closure *closure) */ closure->read_ev->setbase(closure->read_ev, NULL); if (closure->read_ev->add(closure->read_ev, NULL) == -1) { - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); debug_return_bool(false); } closure->write_ev->setbase(closure->write_ev, NULL); @@ -1357,7 +1357,7 @@ handle_server_message(uint8_t *buf, size_t len, if ((ret = fmt_accept_message(closure))) { if (closure->write_ev->add(closure->write_ev, &closure->log_details->server_timeout) == -1) { - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); ret = false; } } @@ -1473,7 +1473,7 @@ server_msg_cb(int fd, int what, void *v) SUDO_PLUGIN_EV_WRITE, NULL)) { /* Enable a temporary write event. */ if (closure->write_ev->add(closure->write_ev, NULL) == -1) { - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); goto bad; } closure->temporary_write_event = true; @@ -1755,7 +1755,7 @@ client_close(struct client_closure *closure, int exit_status, int error) closure->read_ev->setbase(closure->read_ev, evbase); if (closure->read_ev->add(closure->read_ev, &closure->log_details->server_timeout) == -1) { - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); goto done; } @@ -1763,7 +1763,7 @@ client_close(struct client_closure *closure, int exit_status, int error) closure->write_ev->setbase(closure->write_ev, evbase); if (closure->write_ev->add(closure->write_ev, &closure->log_details->server_timeout) == -1) { - sudo_warn(U_("unable to add event to queue")); + sudo_warn("%s", U_("unable to add event to queue")); goto done; } @@ -1771,7 +1771,7 @@ client_close(struct client_closure *closure, int exit_status, int error) sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "flushing buffers and waiting for final commit point"); if (sudo_ev_dispatch(evbase) == -1 || sudo_ev_got_break(evbase)) { - sudo_warnx(U_("error in event loop")); + sudo_warnx("%s", U_("error in event loop")); goto done; } diff --git a/plugins/sudoers/ldap.c b/plugins/sudoers/ldap.c index 448a30d072..d5a647ab43 100644 --- a/plugins/sudoers/ldap.c +++ b/plugins/sudoers/ldap.c @@ -173,7 +173,7 @@ sudo_ldap_join_uri(struct ldap_config_str_list *uri_list) STAILQ_FOREACH(uri, uri_list, entries) { if (ldap_conf.ssl_mode == SUDO_LDAP_STARTTLS) { if (strncasecmp(uri->val, "ldaps://", 8) == 0) { - sudo_warnx(U_("starttls not supported when using ldaps")); + sudo_warnx("%s", U_("starttls not supported when using ldaps")); ldap_conf.ssl_mode = SUDO_LDAP_SSL; } } @@ -499,13 +499,13 @@ sudo_ldap_timefilter(char *buffer, size_t buffersize) /* Make sure we have a formatted timestamp for __now__. */ time(&now); if ((tp = gmtime(&now)) == NULL) { - sudo_warn(U_("unable to get GMT time")); + sudo_warn("%s", U_("unable to get GMT time")); goto done; } /* Format the timestamp according to the RFC. */ if (strftime(timebuffer, sizeof(timebuffer), "%Y%m%d%H%M%S.0Z", tp) == 0) { - sudo_warnx(U_("unable to format timestamp")); + sudo_warnx("%s", U_("unable to format timestamp")); goto done; } @@ -1691,7 +1691,8 @@ sudo_ldap_open(struct sudo_nss *nss) } DPRINTF1("ldap_start_tls_s_np() ok"); #else - sudo_warnx(U_("start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()")); + sudo_warnx("%s", + U_("start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()")); #endif /* !HAVE_LDAP_START_TLS_S && !HAVE_LDAP_START_TLS_S_NP */ } diff --git a/plugins/sudoers/ldap_conf.c b/plugins/sudoers/ldap_conf.c index 5a3bcd1b70..14584d74d0 100644 --- a/plugins/sudoers/ldap_conf.c +++ b/plugins/sudoers/ldap_conf.c @@ -197,7 +197,7 @@ sudo_ldap_conf_add_ports(void) hostbuf[0] = '\0'; len = snprintf(defport, sizeof(defport), ":%d", ldap_conf.port); if (len < 0 || len >= ssizeof(defport)) { - sudo_warnx(U_("sudo_ldap_conf_add_ports: port too large")); + sudo_warnx(U_("%s: port too large"), __func__); debug_return_bool(false); } @@ -284,11 +284,11 @@ sudo_ldap_parse_uri(const struct ldap_config_str_list *uri_list) if (nldaps != 0) { if (nldap != 0) { - sudo_warnx(U_("unable to mix ldap and ldaps URIs")); + sudo_warnx("%s", U_("unable to mix ldap and ldaps URIs")); goto done; } if (ldap_conf.ssl_mode == SUDO_LDAP_STARTTLS) - sudo_warnx(U_("starttls not supported when using ldaps")); + sudo_warnx("%s", U_("starttls not supported when using ldaps")); ldap_conf.ssl_mode = SUDO_LDAP_SSL; } free(buf); diff --git a/plugins/sudoers/linux_audit.c b/plugins/sudoers/linux_audit.c index 89e5e1021d..4f57f45610 100644 --- a/plugins/sudoers/linux_audit.c +++ b/plugins/sudoers/linux_audit.c @@ -55,7 +55,7 @@ linux_audit_open(void) if (errno == EINVAL || errno == EPROTONOSUPPORT || errno == EAFNOSUPPORT) au_fd = AUDIT_NOT_CONFIGURED; else - sudo_warn(U_("unable to open audit system")); + sudo_warn("%s", U_("unable to open audit system")); } else { (void)fcntl(au_fd, F_SETFD, FD_CLOEXEC); } @@ -98,7 +98,7 @@ linux_audit_command(char *const argv[], int result) /* Log command, ignoring ECONNREFUSED on error. */ if (audit_log_user_command(au_fd, AUDIT_USER_CMD, command, NULL, result) <= 0) { if (errno != ECONNREFUSED) { - sudo_warn(U_("unable to send audit message")); + sudo_warn("%s", U_("unable to send audit message")); goto done; } } diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 5be2195b58..4a04be0b9c 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -780,7 +780,7 @@ send_mail(const char *fmt, ...) switch (pid = sudo_debug_fork()) { case -1: /* Error. */ - sudo_warn(U_("unable to fork")); + sudo_warn("%s", U_("unable to fork")); debug_return_bool(false); break; case 0: diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index d4f9ca4357..e63ac8547b 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -442,9 +442,9 @@ display_priv_long(struct sudoers_parse_tree *parse_tree, struct passwd *pw, sudo_lbuf_append(lbuf, _("\nLDAP Role: %s\n"), priv->ldap_role); } else { - sudo_lbuf_append(lbuf, _("\nSudoers entry:\n")); + sudo_lbuf_append(lbuf, "%s", _("\nSudoers entry:\n")); } - sudo_lbuf_append(lbuf, _(" RunAsUsers: ")); + sudo_lbuf_append(lbuf, "%s", _(" RunAsUsers: ")); if (cs->runasuserlist != NULL) { TAILQ_FOREACH(m, cs->runasuserlist, entries) { if (m != TAILQ_FIRST(cs->runasuserlist)) @@ -459,7 +459,7 @@ display_priv_long(struct sudoers_parse_tree *parse_tree, struct passwd *pw, } sudo_lbuf_append(lbuf, "\n"); if (cs->runasgrouplist != NULL) { - sudo_lbuf_append(lbuf, _(" RunAsGroups: ")); + sudo_lbuf_append(lbuf, "%s", _(" RunAsGroups: ")); TAILQ_FOREACH(m, cs->runasgrouplist, entries) { if (m != TAILQ_FIRST(cs->runasgrouplist)) sudo_lbuf_append(lbuf, ", "); @@ -469,7 +469,7 @@ display_priv_long(struct sudoers_parse_tree *parse_tree, struct passwd *pw, sudo_lbuf_append(lbuf, "\n"); } olen = lbuf->len; - sudo_lbuf_append(lbuf, _(" Options: ")); + sudo_lbuf_append(lbuf, "%s", _(" Options: ")); TAILQ_FOREACH(d, &priv->defaults, entries) { sudoers_format_default(lbuf, d); sudo_lbuf_append(lbuf, ", "); @@ -519,7 +519,7 @@ display_priv_long(struct sudoers_parse_tree *parse_tree, struct passwd *pw, if (strftime(buf, sizeof(buf), "%Y%m%d%H%M%SZ", tm) != 0) sudo_lbuf_append(lbuf, " NotAfter: %s\n", buf); } - sudo_lbuf_append(lbuf, _(" Commands:\n")); + sudo_lbuf_append(lbuf, "%s", _(" Commands:\n")); } sudo_lbuf_append(lbuf, "\t"); sudoers_format_member(lbuf, parse_tree, cs->cmnd, "\n\t", diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 0dd9083b76..b2d28afc27 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -278,7 +278,7 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group) if (MATCHES(*cur, "network_addrs=")) { interfaces_string = *cur + sizeof("network_addrs=") - 1; if (!set_interfaces(interfaces_string)) { - sudo_warn(U_("unable to parse network address list")); + sudo_warn("%s", U_("unable to parse network address list")); goto bad; } continue; @@ -423,19 +423,19 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group) /* User name, user-ID, group-ID and host name must be specified. */ if (user_name == NULL) { - sudo_warnx(U_("user name not set by sudo front-end")); + sudo_warnx("%s", U_("user name not set by sudo front-end")); goto bad; } if (user_uid == (uid_t)-1) { - sudo_warnx(U_("user-ID not set by sudo front-end")); + sudo_warnx("%s", U_("user-ID not set by sudo front-end")); goto bad; } if (user_gid == (gid_t)-1) { - sudo_warnx(U_("group-ID not set by sudo front-end")); + sudo_warnx("%s", U_("group-ID not set by sudo front-end")); goto bad; } if (user_host == NULL) { - sudo_warnx(U_("host name not set by sudo front-end")); + sudo_warnx("%s", U_("host name not set by sudo front-end")); goto bad; } diff --git a/plugins/sudoers/set_perms.c b/plugins/sudoers/set_perms.c index 309f89eea1..119ed62b5f 100644 --- a/plugins/sudoers/set_perms.c +++ b/plugins/sudoers/set_perms.c @@ -369,7 +369,7 @@ restore_perms(void) debug_decl(restore_perms, SUDOERS_DEBUG_PERMS); if (perm_stack_depth < 2) { - sudo_warnx(U_("perm stack underflow")); + sudo_warnx("%s", U_("perm stack underflow")); debug_return_bool(true); } @@ -708,7 +708,7 @@ restore_perms(void) debug_decl(restore_perms, SUDOERS_DEBUG_PERMS); if (perm_stack_depth < 2) { - sudo_warnx(U_("perm stack underflow")); + sudo_warnx("%s", U_("perm stack underflow")); debug_return_bool(true); } @@ -1071,7 +1071,7 @@ restore_perms(void) debug_decl(restore_perms, SUDOERS_DEBUG_PERMS); if (perm_stack_depth < 2) { - sudo_warnx(U_("perm stack underflow")); + sudo_warnx("%s", U_("perm stack underflow")); debug_return_bool(true); } @@ -1374,7 +1374,7 @@ restore_perms(void) debug_decl(restore_perms, SUDOERS_DEBUG_PERMS); if (perm_stack_depth < 2) { - sudo_warnx(U_("perm stack underflow")); + sudo_warnx("%s", U_("perm stack underflow")); debug_return_bool(true); } @@ -1539,7 +1539,7 @@ restore_perms(void) debug_decl(restore_perms, SUDOERS_DEBUG_PERMS); if (perm_stack_depth < 2) { - sudo_warnx(U_("perm stack underflow")); + sudo_warnx("%s", U_("perm stack underflow")); debug_return_bool(true); } diff --git a/plugins/sudoers/sssd.c b/plugins/sudoers/sssd.c index 605ab40600..dcc80b96ee 100644 --- a/plugins/sudoers/sssd.c +++ b/plugins/sudoers/sssd.c @@ -570,7 +570,8 @@ sudo_sss_open(struct sudo_nss *nss) const char *errstr = sudo_dso_strerror(); sudo_warnx(U_("unable to load %s: %s"), path, errstr ? errstr : "unknown error"); - sudo_warnx(U_("unable to initialize SSS source. Is SSSD installed on your machine?")); + sudo_warnx("%s", + U_("unable to initialize SSS source. Is SSSD installed on your machine?")); free(handle); debug_return_int(EFAULT); } diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index b74549b654..786c013132 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -177,7 +177,7 @@ sudoers_init(void *info, char * const envp[]) /* Setup defaults data structures. */ if (!init_defaults()) { - sudo_warnx(U_("unable to initialize sudoers default values")); + sudo_warnx("%s", U_("unable to initialize sudoers default values")); debug_return_int(-1); } @@ -217,7 +217,7 @@ sudoers_init(void *info, char * const envp[]) } } if (sources == 0) { - sudo_warnx(U_("no valid sudoers sources found, quitting")); + sudo_warnx("%s", U_("no valid sudoers sources found, quitting")); goto cleanup; } @@ -293,7 +293,8 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], /* Is root even allowed to run sudo? */ if (user_uid == 0 && !def_root_sudo) { /* Not an audit event (should it be?). */ - sudo_warnx(U_("sudoers specifies that root is not allowed to sudo")); + sudo_warnx("%s", + U_("sudoers specifies that root is not allowed to sudo")); goto bad; } @@ -354,7 +355,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], if (!def_closefrom_override) { audit_failure(NewArgv, N_("user not allowed to override closefrom limit")); - sudo_warnx(U_("you are not permitted to use the -C option")); + sudo_warnx("%s", U_("you are not permitted to use the -C option")); goto bad; } def_closefrom = user_closefrom; @@ -432,7 +433,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], /* Bail if a tty is required and we don't have one. */ if (def_requiretty && !tty_present()) { audit_failure(NewArgv, N_("no tty")); - sudo_warnx(U_("sorry, you must have a tty to run sudo")); + sudo_warnx("%s", U_("sorry, you must have a tty to run sudo")); goto bad; } @@ -522,7 +523,8 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], /* If user specified a timeout make sure sudoers allows it. */ if (!def_user_command_timeouts && user_timeout > 0) { audit_failure(NewArgv, N_("user not allowed to set a command timeout")); - sudo_warnx(U_("sorry, you are not allowed set a command timeout")); + sudo_warnx("%s", + U_("sorry, you are not allowed set a command timeout")); goto bad; } @@ -531,7 +533,8 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], if (ISSET(sudo_mode, MODE_PRESERVE_ENV)) { audit_failure(NewArgv, N_("user not allowed to preserve the environment")); - sudo_warnx(U_("sorry, you are not allowed to preserve the environment")); + sudo_warnx("%s", + U_("sorry, you are not allowed to preserve the environment")); goto bad; } else { if (!validate_env_vars(sudo_user.env_vars)) @@ -932,7 +935,7 @@ set_cmnd(void) if (ISSET(sudo_mode, MODE_RUN) && strcmp(user_base, "sudoedit") == 0) { CLR(sudo_mode, MODE_RUN); SET(sudo_mode, MODE_EDIT); - sudo_warnx(U_("sudoedit doesn't need to be run via sudo")); + sudo_warnx("%s", U_("sudoedit doesn't need to be run via sudo")); user_base = user_cmnd = "sudoedit"; } diff --git a/plugins/sudoers/sudoreplay.c b/plugins/sudoers/sudoreplay.c index a37c30df93..f83a33d5b7 100644 --- a/plugins/sudoers/sudoreplay.c +++ b/plugins/sudoers/sudoreplay.c @@ -508,7 +508,7 @@ getsize_cb(int fd, int what, void *v) another: if (sudo_ev_add(NULL, gc->ev, &gc->timeout, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); done: debug_return; } @@ -555,7 +555,7 @@ xterm_get_size(int *new_lines, int *new_cols) /* Read back terminal size response */ if (sudo_ev_add(evbase, gc.ev, &gc.timeout, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); sudo_ev_dispatch(evbase); if (gc.state == GOTSIZE) { @@ -623,7 +623,7 @@ setup_terminal(struct iolog_info *li, bool interactive, bool resize) ttyfd = open(_PATH_TTY, O_RDWR); while (!sudo_term_raw(ttyfd, 1)) { if (errno != EINTR) - sudo_fatal(U_("unable to set tty to raw mode")); + sudo_fatal("%s", U_("unable to set tty to raw mode")); kill(getpid(), SIGTTOU); } } @@ -787,7 +787,7 @@ get_timing_record(struct replay_closure *closure) /* Schedule the delay event. */ if (sudo_ev_add(closure->evbase, closure->delay_ev, &timing->delay, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); debug_return_int(0); } @@ -899,7 +899,7 @@ delay_cb(int fd, int what, void *v) if (timing->iol != NULL) { /* If the stream is open, enable the write event. */ if (sudo_ev_add(closure->evbase, closure->output_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } else { /* Not replaying, get the next timing record and continue. */ next_timing_record(closure); @@ -989,7 +989,7 @@ replay_closure_alloc(int iolog_dir_fd, const char *iolog_dir, if (closure->keyboard_ev == NULL) goto bad; if (sudo_ev_add(closure->evbase, closure->keyboard_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } closure->output_ev = sudo_ev_alloc(interactive ? ttyfd : STDOUT_FILENO, SUDO_EV_WRITE, write_output, closure); @@ -1004,35 +1004,35 @@ replay_closure_alloc(int iolog_dir_fd, const char *iolog_dir, if (closure->sighup_ev == NULL) goto bad; if (sudo_ev_add(closure->evbase, closure->sighup_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); closure->sigint_ev = sudo_ev_alloc(SIGINT, SUDO_EV_SIGNAL, signal_cb, closure); if (closure->sigint_ev == NULL) goto bad; if (sudo_ev_add(closure->evbase, closure->sigint_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); closure->sigquit_ev = sudo_ev_alloc(SIGQUIT, SUDO_EV_SIGNAL, signal_cb, closure); if (closure->sigquit_ev == NULL) goto bad; if (sudo_ev_add(closure->evbase, closure->sigquit_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); closure->sigterm_ev = sudo_ev_alloc(SIGTERM, SUDO_EV_SIGNAL, signal_cb, closure); if (closure->sigterm_ev == NULL) goto bad; if (sudo_ev_add(closure->evbase, closure->sigterm_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); closure->sigtstp_ev = sudo_ev_alloc(SIGTSTP, SUDO_EV_SIGNAL, signal_cb, closure); if (closure->sigtstp_ev == NULL) goto bad; if (sudo_ev_add(closure->evbase, closure->sigtstp_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); debug_return_ptr(closure); bad: @@ -1159,7 +1159,7 @@ write_output(int fd, int what, void *v) } else { /* Reschedule event to write remainder. */ if (sudo_ev_add(NULL, closure->output_ev, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } debug_return; } @@ -1245,7 +1245,7 @@ parse_expr(struct search_node_list *head, char *argv[], bool sub_expr) if (av[0][1] != '\0') goto bad; if (!sub_expr) - sudo_fatalx(U_("unmatched ')' in expression")); + sudo_fatalx("%s", U_("unmatched ')' in expression")); debug_return_int(av - argv + 1); default: bad: @@ -1281,11 +1281,11 @@ parse_expr(struct search_node_list *head, char *argv[], bool sub_expr) STAILQ_INSERT_TAIL(head, sn, entries); } if (sub_expr) - sudo_fatalx(U_("unmatched '(' in expression")); + sudo_fatalx("%s", U_("unmatched '(' in expression")); if (or) - sudo_fatalx(U_("illegal trailing \"or\"")); + sudo_fatalx("%s", U_("illegal trailing \"or\"")); if (not) - sudo_fatalx(U_("illegal trailing \"!\"")); + sudo_fatalx("%s", U_("illegal trailing \"!\"")); debug_return_int(av - argv); } diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index f0347b170c..effbd60f77 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -255,7 +255,7 @@ main(int argc, char *argv[]) /* Initialize default values. */ if (!init_defaults()) - sudo_fatalx(U_("unable to initialize sudoers default values")); + sudo_fatalx("%s", U_("unable to initialize sudoers default values")); /* Set group_plugin callback. */ sudo_defs_table[I_GROUP_PLUGIN].callback = cb_group_plugin; @@ -269,7 +269,7 @@ main(int argc, char *argv[]) /* Load ip addr/mask for each interface. */ if (get_net_ifs(&p) > 0) { if (!set_interfaces(p)) - sudo_fatal(U_("unable to parse network address list")); + sudo_fatal("%s", U_("unable to parse network address list")); } /* Allocate space for data structures in the parser. */ diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 01aaab8ec7..4a1ba6e2ab 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -222,8 +222,10 @@ main(int argc, char *argv[]) if (export_path != NULL) { /* Backwards compatibility for the time being. */ - sudo_warnx(U_("the -x option will be removed in a future release")); - sudo_warnx(U_("please consider using the cvtsudoers utility instead")); + sudo_warnx("%s", + U_("the -x option will be removed in a future release")); + sudo_warnx("%s", + U_("please consider using the cvtsudoers utility instead")); execlp("cvtsudoers", "cvtsudoers", "-f", "json", "-o", export_path, sudoers_file, (char *)0); sudo_fatal(U_("unable to execute %s"), "cvtsudoers"); @@ -244,7 +246,7 @@ main(int argc, char *argv[]) /* Setup defaults data structures. */ if (!init_defaults()) - sudo_fatalx(U_("unable to initialize sudoers default values")); + sudo_fatalx("%s", U_("unable to initialize sudoers default values")); if (checkonly) { exitcode = check_syntax(sudoers_file, quiet, strict, fflag) ? 0 : 1; @@ -447,7 +449,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, int editor_argc, (void) lseek(sp->fd, (off_t)0, SEEK_SET); while ((nread = read(sp->fd, buf, sizeof(buf))) > 0) { if (write(tfd, buf, nread) != nread) - sudo_fatal(U_("write error")); + sudo_fatal("%s", U_("write error")); lastch = buf[nread - 1]; } @@ -455,7 +457,7 @@ edit_sudoers(struct sudoersfile *sp, char *editor, int editor_argc, if (lastch != '\n') { lastch = '\n'; if (write(tfd, &lastch, 1) != 1) - sudo_fatal(U_("write error")); + sudo_fatal("%s", U_("write error")); } } (void) close(tfd); @@ -488,13 +490,13 @@ edit_sudoers(struct sudoersfile *sp, char *editor, int editor_argc, * number of errors during editing (?!?!). */ if (sudo_gettime_real(×[0]) == -1) { - sudo_warn(U_("unable to read the clock")); + sudo_warn("%s", U_("unable to read the clock")); goto done; } if (run_command(editor, editor_argv) != -1) { if (sudo_gettime_real(×[1]) == -1) { - sudo_warn(U_("unable to read the clock")); + sudo_warn("%s", U_("unable to read the clock")); goto done; } /* @@ -600,7 +602,7 @@ reparse_sudoers(char *editor, int editor_argc, char **editor_argv, /* Clean slate for each parse */ if (!init_defaults()) - sudo_fatalx(U_("unable to initialize sudoers default values")); + sudo_fatalx("%s", U_("unable to initialize sudoers default values")); init_parser(sp->path, quiet, true); /* Parse the sudoers temp file(s) */ @@ -923,7 +925,7 @@ check_syntax(const char *sudoers_file, bool quiet, bool strict, bool oldperms) goto done; } if (!init_defaults()) - sudo_fatalx(U_("unable to initialize sudoers default values")); + sudo_fatalx("%s", U_("unable to initialize sudoers default values")); init_parser(sudoers_file, quiet, true); sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale); if (sudoersparse() && !parse_error) { diff --git a/src/copy_file.c b/src/copy_file.c index 9aeb1f92af..a90a3743cd 100644 --- a/src/copy_file.c +++ b/src/copy_file.c @@ -113,24 +113,24 @@ sudo_copy_file(const char *src, int src_fd, off_t src_len, const char *dst, off += nwritten; } while (nread > off); } - if (nread == 0) { - /* success, read to EOF */ - if (src_len < dst_len) { - /* We don't open with O_TRUNC so must truncate manually. */ - if (ftruncate(dst_fd, src_len) == -1) { - sudo_debug_printf( - SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, - "unable to truncate %s to %lld", dst, (long long)src_len); - goto write_error; - } - } - debug_return_int(0); - } else if (nread < 0) { + if (nread == -1) { sudo_warn(U_("unable to read from %s"), src); debug_return_int(-1); - } else { -write_error: - sudo_warn(U_("unable to write to %s"), dst); - debug_return_int(-1); } + + /* Did the file shrink? */ + if (src_len < dst_len) { + /* We don't open with O_TRUNC so must truncate manually. */ + if (ftruncate(dst_fd, src_len) == -1) { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to truncate %s to %lld", dst, (long long)src_len); + goto write_error; + } + } + + debug_return_int(0); +write_error: + sudo_warn(U_("unable to write to %s"), dst); + debug_return_int(-1); } diff --git a/src/exec.c b/src/exec.c index 606a983962..9c830fd630 100644 --- a/src/exec.c +++ b/src/exec.c @@ -137,7 +137,7 @@ exec_setup(struct command_details *details, int errfd) flags = LOGIN_SETRESOURCES|LOGIN_SETPRIORITY|LOGIN_SETUMASK; } if (setusercontext(lc, details->pw, details->pw->pw_uid, flags)) { - sudo_warn(U_("unable to set user context")); + sudo_warn("%s", U_("unable to set user context")); if (details->pw->pw_uid != ROOT_UID) goto done; } @@ -153,7 +153,7 @@ exec_setup(struct command_details *details, int errfd) if (ISSET(details->flags, CD_SET_PRIORITY)) { if (setpriority(PRIO_PROCESS, 0, details->priority) != 0) { - sudo_warn(U_("unable to set process priority")); + sudo_warn("%s", U_("unable to set process priority")); goto done; } } diff --git a/src/exec_common.c b/src/exec_common.c index db21d6ed05..909d364ace 100644 --- a/src/exec_common.c +++ b/src/exec_common.c @@ -162,7 +162,7 @@ disable_execute(char *envp[], const char *dso) (void)priv_set(PRIV_ON, PRIV_INHERITABLE, "PRIV_FILE_DAC_SEARCH", NULL); if (priv_set(PRIV_OFF, PRIV_LIMIT, "PRIV_PROC_EXEC", NULL) == 0) debug_return_ptr(envp); - sudo_warn(U_("unable to remove PRIV_PROC_EXEC from PRIV_LIMIT")); + sudo_warn("%s", U_("unable to remove PRIV_PROC_EXEC from PRIV_LIMIT")); #endif /* HAVE_PRIV_SET */ #ifdef RTLD_PRELOAD_VAR diff --git a/src/exec_monitor.c b/src/exec_monitor.c index 3c6d10240a..f8a013be40 100644 --- a/src/exec_monitor.c +++ b/src/exec_monitor.c @@ -357,7 +357,7 @@ mon_backchannel_cb(int fd, int what, void *v) if (n == -1) { if (errno == EINTR || errno == EAGAIN) debug_return; - sudo_warn(U_("error reading from socketpair")); + sudo_warn("%s", U_("error reading from socketpair")); } else { /* short read or EOF, parent process died? */ } @@ -460,7 +460,7 @@ fill_exec_closure_monitor(struct monitor_closure *mc, if (mc->errpipe_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->errpipe_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); /* Event for forwarded signals via backchannel. */ mc->backchannel_event = sudo_ev_alloc(backchannel, @@ -468,7 +468,7 @@ fill_exec_closure_monitor(struct monitor_closure *mc, if (mc->backchannel_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->backchannel_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); /* Events for local signals. */ mc->sigint_event = sudo_ev_alloc(SIGINT, @@ -476,56 +476,56 @@ fill_exec_closure_monitor(struct monitor_closure *mc, if (mc->sigint_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sigint_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); mc->sigquit_event = sudo_ev_alloc(SIGQUIT, SUDO_EV_SIGINFO, mon_signal_cb, mc); if (mc->sigquit_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sigquit_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); mc->sigtstp_event = sudo_ev_alloc(SIGTSTP, SUDO_EV_SIGINFO, mon_signal_cb, mc); if (mc->sigtstp_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sigtstp_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); mc->sigterm_event = sudo_ev_alloc(SIGTERM, SUDO_EV_SIGINFO, mon_signal_cb, mc); if (mc->sigterm_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sigterm_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); mc->sighup_event = sudo_ev_alloc(SIGHUP, SUDO_EV_SIGINFO, mon_signal_cb, mc); if (mc->sighup_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sighup_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); mc->sigusr1_event = sudo_ev_alloc(SIGUSR1, SUDO_EV_SIGINFO, mon_signal_cb, mc); if (mc->sigusr1_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sigusr1_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); mc->sigusr2_event = sudo_ev_alloc(SIGUSR2, SUDO_EV_SIGINFO, mon_signal_cb, mc); if (mc->sigusr2_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sigusr2_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); mc->sigchld_event = sudo_ev_alloc(SIGCHLD, SUDO_EV_SIGINFO, mon_signal_cb, mc); if (mc->sigchld_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(mc->evbase, mc->sigchld_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); /* Clear the default event base. */ sudo_ev_base_setdef(NULL); @@ -579,7 +579,7 @@ exec_monitor(struct command_details *details, sigset_t *oset, goto bad; } if (pty_make_controlling() == -1) { - sudo_warn(U_("unable to set controlling tty")); + sudo_warn("%s", U_("unable to set controlling tty")); goto bad; } @@ -587,7 +587,7 @@ exec_monitor(struct command_details *details, sigset_t *oset, * We use a pipe to get errno if execve(2) fails in the child. */ if (pipe2(errpipe, O_CLOEXEC) != 0) - sudo_fatal(U_("unable to create pipe")); + sudo_fatal("%s", U_("unable to create pipe")); /* * Before forking, wait for the main sudo process to tell us to go. @@ -595,7 +595,7 @@ exec_monitor(struct command_details *details, sigset_t *oset, */ while (recv(backchannel, &cstat, sizeof(cstat), MSG_WAITALL) == -1) { if (errno != EINTR && errno != EAGAIN) - sudo_fatal(U_("unable to receive message from parent")); + sudo_fatal("%s", U_("unable to receive message from parent")); } #ifdef HAVE_SELINUX @@ -609,11 +609,11 @@ exec_monitor(struct command_details *details, sigset_t *oset, mc.cmnd_pid = sudo_debug_fork(); switch (mc.cmnd_pid) { case -1: - sudo_warn(U_("unable to fork")); + sudo_warn("%s", U_("unable to fork")); #ifdef HAVE_SELINUX if (ISSET(details->flags, CD_RBAC_ENABLED)) { if (selinux_restore_tty() != 0) - sudo_warnx(U_("unable to restore tty label")); + sudo_warnx("%s", U_("unable to restore tty label")); } #endif goto bad; @@ -712,7 +712,7 @@ exec_monitor(struct command_details *details, sigset_t *oset, #ifdef HAVE_SELINUX if (ISSET(details->flags, CD_RBAC_ENABLED)) { if (selinux_restore_tty() != 0) - sudo_warnx(U_("unable to restore tty label")); + sudo_warnx("%s", U_("unable to restore tty label")); } #endif sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, 1); diff --git a/src/exec_nopty.c b/src/exec_nopty.c index b03e61e4b5..709a1a56f6 100644 --- a/src/exec_nopty.c +++ b/src/exec_nopty.c @@ -211,7 +211,7 @@ fill_exec_closure_nopty(struct exec_closure_nopty *ec, if (ec->errpipe_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) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); sudo_debug_printf(SUDO_DEBUG_INFO, "error pipe fd %d\n", errfd); /* Events for local signals. */ @@ -220,77 +220,77 @@ fill_exec_closure_nopty(struct exec_closure_nopty *ec, if (ec->sigint_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigint_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigquit_event = sudo_ev_alloc(SIGQUIT, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigquit_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigquit_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigtstp_event = sudo_ev_alloc(SIGTSTP, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigtstp_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigtstp_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigterm_event = sudo_ev_alloc(SIGTERM, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigterm_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigterm_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sighup_event = sudo_ev_alloc(SIGHUP, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sighup_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sighup_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigalrm_event = sudo_ev_alloc(SIGALRM, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigalrm_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigalrm_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigpipe_event = sudo_ev_alloc(SIGPIPE, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigpipe_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigpipe_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigusr1_event = sudo_ev_alloc(SIGUSR1, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigusr1_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigusr1_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigusr2_event = sudo_ev_alloc(SIGUSR2, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigusr2_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigusr2_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigchld_event = sudo_ev_alloc(SIGCHLD, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigchld_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigchld_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigcont_event = sudo_ev_alloc(SIGCONT, SUDO_EV_SIGINFO, signal_cb_nopty, ec); if (ec->sigcont_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigcont_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); #ifdef SIGINFO ec->siginfo_event = sudo_ev_alloc(SIGINFO, @@ -298,7 +298,7 @@ fill_exec_closure_nopty(struct exec_closure_nopty *ec, if (ec->siginfo_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->siginfo_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); #endif /* Set the default event base. */ @@ -349,13 +349,13 @@ exec_nopty(struct command_details *details, struct command_status *cstat) * or certain pam modules won't be able to track their state. */ if (policy_init_session(details) != true) - sudo_fatalx(U_("policy plugin failed session initialization")); + sudo_fatalx("%s", U_("policy plugin failed session initialization")); /* * We use a pipe to get errno if execve(2) fails in the child. */ if (pipe2(errpipe, O_CLOEXEC) != 0) - sudo_fatal(U_("unable to create pipe")); + sudo_fatal("%s", U_("unable to create pipe")); /* * Block signals until we have our handlers setup in the parent so @@ -384,7 +384,7 @@ exec_nopty(struct command_details *details, struct command_status *cstat) ec.cmnd_pid = sudo_debug_fork(); switch (ec.cmnd_pid) { case -1: - sudo_fatal(U_("unable to fork")); + sudo_fatal("%s", U_("unable to fork")); break; case 0: /* child */ @@ -426,7 +426,7 @@ exec_nopty(struct command_details *details, struct command_status *cstat) * Wait for command to exit, handles signals and the error pipe. */ if (sudo_ev_dispatch(ec.evbase) == -1) - sudo_warn(U_("error in event loop")); + sudo_warn("%s", U_("error in event loop")); if (sudo_ev_got_break(ec.evbase)) { /* error from callback */ sudo_debug_printf(SUDO_DEBUG_ERROR, "event loop exited prematurely"); @@ -438,7 +438,7 @@ exec_nopty(struct command_details *details, struct command_status *cstat) #ifdef HAVE_SELINUX if (ISSET(details->flags, CD_RBAC_ENABLED)) { if (selinux_restore_tty() != 0) - sudo_warnx(U_("unable to restore tty label")); + sudo_warnx("%s", U_("unable to restore tty label")); } #endif diff --git a/src/exec_pty.c b/src/exec_pty.c index 1b0863938f..fec0b47f4c 100644 --- a/src/exec_pty.c +++ b/src/exec_pty.c @@ -149,7 +149,7 @@ pty_setup(struct command_details *details, const char *tty) if (!get_pty(&io_fds[SFD_LEADER], &io_fds[SFD_FOLLOWER], ptyname, sizeof(ptyname), details->euid)) - sudo_fatal(U_("unable to allocate pty")); + sudo_fatal("%s", U_("unable to allocate pty")); /* Update tty name in command details (used by SELinux and AIX). */ details->tty = ptyname; @@ -690,12 +690,12 @@ read_callback(int fd, int what, void *v) /* Enable writer now that there is data in the buffer. */ if (iob->wevent != NULL) { if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } /* Re-enable reader if buffer is not full. */ if (iob->len != sizeof(iob->buf)) { if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } break; } @@ -792,14 +792,14 @@ write_callback(int fd, int what, void *v) /* Re-enable writer if buffer is not empty. */ if (iob->len > iob->off) { if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } /* Enable reader if buffer is not full. */ if (iob->revent != NULL && (ttymode == TERM_RAW || !USERTTY_EVENT(iob->revent))) { if (iob->len != sizeof(iob->buf)) { if (sudo_ev_add(evbase, iob->revent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } } } @@ -896,7 +896,7 @@ send_command_status(struct exec_closure_pty *ec, int type, int val) TAILQ_INSERT_TAIL(&ec->monitor_messages, msg, entries); if (sudo_ev_add(ec->evbase, ec->fwdchannel_event, NULL, true) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); /* Restart event loop to send the command immediately. */ sudo_ev_loopcontinue(ec->evbase); @@ -1217,7 +1217,7 @@ fill_exec_closure_pty(struct exec_closure_pty *ec, struct command_status *cstat, if (ec->backchannel_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->backchannel_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); sudo_debug_printf(SUDO_DEBUG_INFO, "backchannel fd %d\n", backchannel); /* Events for local signals. */ @@ -1226,70 +1226,70 @@ fill_exec_closure_pty(struct exec_closure_pty *ec, struct command_status *cstat, if (ec->sigint_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigint_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigquit_event = sudo_ev_alloc(SIGQUIT, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sigquit_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigquit_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigtstp_event = sudo_ev_alloc(SIGTSTP, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sigtstp_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigtstp_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigterm_event = sudo_ev_alloc(SIGTERM, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sigterm_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigterm_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sighup_event = sudo_ev_alloc(SIGHUP, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sighup_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sighup_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigalrm_event = sudo_ev_alloc(SIGALRM, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sigalrm_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigalrm_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigusr1_event = sudo_ev_alloc(SIGUSR1, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sigusr1_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigusr1_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigusr2_event = sudo_ev_alloc(SIGUSR2, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sigusr2_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigusr2_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigchld_event = sudo_ev_alloc(SIGCHLD, SUDO_EV_SIGINFO, signal_cb_pty, ec); if (ec->sigchld_event == NULL) sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (sudo_ev_add(ec->evbase, ec->sigchld_event, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); ec->sigwinch_event = sudo_ev_alloc(SIGWINCH, SUDO_EV_SIGINFO, signal_cb_pty, 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(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); /* The signal forwarding event gets added on demand. */ ec->fwdchannel_event = sudo_ev_alloc(backchannel, @@ -1372,7 +1372,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) if (socketpair(PF_UNIX, SOCK_STREAM, 0, sv) == -1 || fcntl(sv[0], F_SETFD, FD_CLOEXEC) == -1 || fcntl(sv[1], F_SETFD, FD_CLOEXEC) == -1) - sudo_fatal(U_("unable to create sockets")); + sudo_fatal("%s", U_("unable to create sockets")); /* * We don't want to receive SIGTTIN/SIGTTOU. @@ -1392,7 +1392,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) * or certain pam modules won't be able to track their state. */ if (policy_init_session(details) != true) - sudo_fatalx(U_("policy plugin failed session initialization")); + sudo_fatalx("%s", U_("policy plugin failed session initialization")); /* * Child will run the command in the pty, parent will pass data @@ -1462,7 +1462,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) "stdin not a tty, creating a pipe"); pipeline = true; if (pipe2(io_pipe[STDIN_FILENO], O_CLOEXEC) != 0) - sudo_fatal(U_("unable to create pipe")); + sudo_fatal("%s", U_("unable to create pipe")); io_buf_new(STDIN_FILENO, io_pipe[STDIN_FILENO][1], log_stdin, &ec, &iobufs); io_fds[SFD_STDIN] = io_pipe[STDIN_FILENO][0]; @@ -1483,7 +1483,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) "stdout not a tty, creating a pipe"); pipeline = true; if (pipe2(io_pipe[STDOUT_FILENO], O_CLOEXEC) != 0) - sudo_fatal(U_("unable to create pipe")); + sudo_fatal("%s", U_("unable to create pipe")); io_buf_new(io_pipe[STDOUT_FILENO][0], STDOUT_FILENO, log_stdout, &ec, &iobufs); io_fds[SFD_STDOUT] = io_pipe[STDOUT_FILENO][1]; @@ -1503,7 +1503,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) sudo_debug_printf(SUDO_DEBUG_INFO, "stderr not a tty, creating a pipe"); if (pipe2(io_pipe[STDERR_FILENO], O_CLOEXEC) != 0) - sudo_fatal(U_("unable to create pipe")); + sudo_fatal("%s", U_("unable to create pipe")); io_buf_new(io_pipe[STDERR_FILENO][0], STDERR_FILENO, log_stderr, &ec, &iobufs); io_fds[SFD_STDERR] = io_pipe[STDERR_FILENO][1]; @@ -1541,7 +1541,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) ec.monitor_pid = sudo_debug_fork(); switch (ec.monitor_pid) { case -1: - sudo_fatal(U_("unable to fork")); + sudo_fatal("%s", U_("unable to fork")); break; case 0: /* child */ @@ -1584,7 +1584,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) cstat->val = 0; while (send(sv[0], cstat, sizeof(*cstat), 0) == -1) { if (errno != EINTR && errno != EAGAIN) - sudo_fatal(U_("unable to send message to monitor process")); + sudo_fatal("%s", U_("unable to send message to monitor process")); } /* Close the other end of the stdin/stdout/stderr pipes and socketpair. */ @@ -1629,7 +1629,7 @@ exec_pty(struct command_details *details, struct command_status *cstat) add_io_events(ec.evbase); do { if (sudo_ev_dispatch(ec.evbase) == -1) - sudo_warn(U_("error in event loop")); + sudo_warn("%s", U_("error in event loop")); if (sudo_ev_got_break(ec.evbase)) { /* error from callback or monitor died */ sudo_debug_printf(SUDO_DEBUG_ERROR, "event loop exited prematurely"); @@ -1690,7 +1690,7 @@ add_io_events(struct sudo_event_base *evbase) "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(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } } if (iob->wevent != NULL) { @@ -1700,7 +1700,7 @@ add_io_events(struct sudo_event_base *evbase) "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(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } } } @@ -1745,14 +1745,14 @@ del_io_events(bool nonblocking) 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(U_("unable to add event to queue")); + 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(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } } } @@ -1779,7 +1779,7 @@ del_io_events(bool nonblocking) if (iob->wevent != NULL) { if (iob->len > iob->off) { if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal(U_("unable to add event to queue")); + sudo_fatal("%s", U_("unable to add event to queue")); } } } diff --git a/src/load_plugins.c b/src/load_plugins.c index c636c6abea..578524088b 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -326,7 +326,8 @@ sudo_load_plugin(struct plugin_container *policy_plugin, if (!quiet) { sudo_warnx(U_("ignoring policy plugin \"%s\" in %s, line %d"), info->symbol_name, _PATH_SUDO_CONF, info->lineno); - sudo_warnx(U_("only a single policy plugin may be specified")); + sudo_warnx("%s", + U_("only a single policy plugin may be specified")); } goto done; } diff --git a/src/parse_args.c b/src/parse_args.c index d40eacb0bd..119cea8e15 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -315,7 +315,8 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, case 'C': assert(optarg != NULL); if (sudo_strtonum(optarg, 3, INT_MAX, NULL) == 0) { - sudo_warnx(U_("the argument to -C must be a number greater than or equal to 3")); + sudo_warnx("%s", + U_("the argument to -C must be a number greater than or equal to 3")); usage(); } if (sudo_settings[ARG_CLOSEFROM].value != NULL) @@ -528,11 +529,13 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, if (ISSET(flags, MODE_LOGIN_SHELL)) { if (ISSET(flags, MODE_SHELL)) { - sudo_warnx(U_("you may not specify both the -i and -s options")); + sudo_warnx("%s", + U_("you may not specify both the -i and -s options")); usage(); } if (ISSET(flags, MODE_PRESERVE_ENV)) { - sudo_warnx(U_("you may not specify both the -i and -E options")); + sudo_warnx("%s", + U_("you may not specify both the -i and -E options")); usage(); } SET(flags, MODE_SHELL); @@ -542,9 +545,10 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, if (mode == MODE_EDIT && (ISSET(flags, MODE_PRESERVE_ENV) || extra_env.env_len != 0)) { if (ISSET(mode, MODE_PRESERVE_ENV)) - sudo_warnx(U_("the -E option is not valid in edit mode")); + sudo_warnx("%s", U_("the -E option is not valid in edit mode")); if (extra_env.env_len != 0) - sudo_warnx(U_("you may not specify environment variables in edit mode")); + sudo_warnx("%s", + U_("you may not specify environment variables in edit mode")); usage(); } if ((sudo_settings[ARG_RUNAS_USER].value != NULL || @@ -553,11 +557,12 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, usage(); } if (list_user != NULL && mode != MODE_LIST && mode != MODE_CHECK) { - sudo_warnx(U_("the -U option may only be used with the -l option")); + sudo_warnx("%s", + U_("the -U option may only be used with the -l option")); usage(); } if (ISSET(tgetpass_flags, TGP_STDIN) && ISSET(tgetpass_flags, TGP_ASKPASS)) { - sudo_warnx(U_("the -A and -S options may not be used together")); + sudo_warnx("%s", U_("the -A and -S options may not be used together")); usage(); } if ((argc == 0 && mode == MODE_EDIT) || @@ -650,7 +655,7 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, argv = av; argc = ac; #else - sudo_fatalx(U_("sudoedit is not supported on this platform")); + sudo_fatalx("%s", U_("sudoedit is not supported on this platform")); #endif } @@ -731,7 +736,8 @@ usage_excl(void) { debug_decl(usage_excl, SUDO_DEBUG_ARGS); - sudo_warnx(U_("Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified")); + sudo_warnx("%s", + U_("Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified")); usage(); } @@ -752,7 +758,7 @@ help(void) display_usage(usage_out); - sudo_lbuf_append(&lbuf, _("\nOptions:\n")); + sudo_lbuf_append(&lbuf, "%s", _("\nOptions:\n")); sudo_lbuf_append(&lbuf, " -A, --askpass %s\n", _("use a helper program for password prompting")); #ifdef HAVE_BSD_AUTH_H diff --git a/src/selinux.c b/src/selinux.c index 5f74c81cc0..69d2db6069 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -81,7 +81,7 @@ audit_role_change(const security_context_t old_context, /* Kernel may not have audit support. */ if (errno != EINVAL && errno != EPROTONOSUPPORT && errno != EAFNOSUPPORT ) - sudo_fatal(U_("unable to open audit system")); + sudo_fatal("%s", U_("unable to open audit system")); } else { /* audit role change using the same format as newrole(1) */ rc = asprintf(&message, "newrole: old-context=%s new-context=%s", @@ -91,7 +91,7 @@ audit_role_change(const security_context_t old_context, rc = audit_log_user_message(au_fd, AUDIT_USER_ROLE_CHANGE, message, NULL, NULL, ttyn, result); if (rc <= 0) - sudo_warn(U_("unable to send audit message")); + sudo_warn("%s", U_("unable to send audit message")); free(message); close(au_fd); } @@ -199,7 +199,7 @@ relabel_tty(const char *ttyn, int ptyfd) } if (fgetfilecon(se_state.ttyfd, &tty_con) == -1) { - sudo_warn(U_("unable to get current tty context, not relabeling tty")); + sudo_warn("%s", U_("unable to get current tty context, not relabeling tty")); goto bad; } @@ -211,7 +211,7 @@ relabel_tty(const char *ttyn, int ptyfd) } if (security_compute_relabel(se_state.new_context, tty_con, tclass, &new_tty_con) == -1) { - sudo_warn(U_("unable to get new tty context, not relabeling tty")); + sudo_warn("%s", U_("unable to get new tty context, not relabeling tty")); goto bad; } } @@ -220,7 +220,7 @@ relabel_tty(const char *ttyn, int ptyfd) sudo_debug_printf(SUDO_DEBUG_INFO, "%s: tty context %s -> %s", __func__, tty_con, new_tty_con); if (fsetfilecon(se_state.ttyfd, new_tty_con) == -1) { - sudo_warn(U_("unable to set new tty context")); + sudo_warn("%s", U_("unable to set new tty context")); goto bad; } } @@ -336,7 +336,7 @@ get_exec_context(security_context_t old_context, const char *role, const char *t * its components easily. */ if ((context = context_new(old_context)) == NULL) { - sudo_warn(U_("failed to get new context")); + sudo_warn("%s", U_("failed to get new context")); goto bad; } @@ -393,13 +393,13 @@ selinux_setup(const char *role, const char *type, const char *ttyn, /* Store the caller's SID in old_context. */ if (getprevcon(&se_state.old_context)) { - sudo_warn(U_("failed to get old context")); + sudo_warn("%s", U_("failed to get old context")); goto done; } se_state.enforcing = security_getenforce(); if (se_state.enforcing == -1) { - sudo_warn(U_("unable to determine enforcing mode.")); + sudo_warn("%s", U_("unable to determine enforcing mode.")); goto done; } diff --git a/src/sesh.c b/src/sesh.c index 5edff5a535..8241f13f1b 100644 --- a/src/sesh.c +++ b/src/sesh.c @@ -74,7 +74,7 @@ main(int argc, char *argv[], char *envp[]) textdomain(PACKAGE_NAME); if (argc < 2) - sudo_fatalx(U_("requires at least one argument")); + sudo_fatalx("%s", U_("requires at least one argument")); /* Read sudo.conf and initialize the debug subsystem. */ if (sudo_conf_read(NULL, SUDO_CONF_DEBUG) == -1) diff --git a/src/solaris.c b/src/solaris.c index 54b9fbc30c..754664f7ff 100644 --- a/src/solaris.c +++ b/src/solaris.c @@ -69,14 +69,14 @@ set_project(struct passwd *pw) case SETPROJ_ERR_TASK: switch (errno) { case EAGAIN: - sudo_warnx(U_("resource control limit has been reached")); + sudo_warnx("%s", U_("resource control limit has been reached")); break; case ESRCH: sudo_warnx(U_("user \"%s\" is not a member of project \"%s\""), pw->pw_name, proj.pj_name); break; case EACCES: - sudo_warnx(U_("the invoking task is final")); + sudo_warnx("%s", U_("the invoking task is final")); break; default: sudo_warnx(U_("could not join project \"%s\""), proj.pj_name); diff --git a/src/sudo.c b/src/sudo.c index d43fd0698e..62096c57c3 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -227,7 +227,7 @@ main(int argc, char *argv[], char *envp[]) /* Load plugins. */ if (!sudo_load_plugins(&policy_plugin, &io_plugins, &audit_plugins, &approval_plugins)) - sudo_fatalx(U_("fatal error, unable to load plugins")); + sudo_fatalx("%s", U_("fatal error, unable to load plugins")); /* Allocate event base so plugin can use it. */ if ((sudo_event_base = sudo_ev_base_alloc()) == NULL) @@ -272,7 +272,8 @@ main(int argc, char *argv[], char *envp[]) for (nargv = argv_out, nargc = 0; nargv[nargc] != NULL; nargc++) continue; if (nargc == 0) - sudo_fatalx(U_("plugin did not return a command to execute")); + sudo_fatalx("%s", + U_("plugin did not return a command to execute")); /* Approval plugins run after policy plugin accepts the command. */ approval_check(settings, user_info, submit_optind, argv, envp, @@ -597,7 +598,7 @@ get_user_info(struct user_details *ud) } else { /* tty may not always be present */ if (errno != ENOENT) - sudo_warn(U_("unable to determine tty")); + sudo_warn("%s", U_("unable to determine tty")); } cp = sudo_gethostname(); @@ -927,7 +928,7 @@ set_user_groups(struct command_details *details) if (!ISSET(details->flags, CD_PRESERVE_GROUPS)) { if (details->ngroups >= 0) { if (sudo_setgroups(details->ngroups, details->groups) < 0) { - sudo_warn(U_("unable to set supplementary group IDs")); + sudo_warn("%s", U_("unable to set supplementary group IDs")); goto done; } } @@ -1092,7 +1093,7 @@ policy_open(struct sudo_settings *settings, char * const user_info[], usage(); else { /* XXX - audit */ - sudo_fatalx(U_("unable to initialize policy plugin")); + sudo_fatalx("%s", U_("unable to initialize policy plugin")); } } diff --git a/src/sudo_edit.c b/src/sudo_edit.c index a12870d094..78c407f43e 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -223,7 +223,7 @@ set_tmpdir(struct command_details *command_details) } } if (tdir == NULL) - sudo_fatalx(U_("no writable temporary directory found")); + sudo_fatalx("%s", U_("no writable temporary directory found")); len = strlcpy(edit_tmpdir, tdir, sizeof(edit_tmpdir)); if (len >= sizeof(edit_tmpdir)) { @@ -348,7 +348,7 @@ sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) /* Restore cwd */ if (odfd != -1) { if (fchdir(odfd) == -1) - sudo_fatal(U_("unable to restore current working directory")); + sudo_fatal("%s", U_("unable to restore current working directory")); close(odfd); } @@ -732,7 +732,7 @@ selinux_run_helper(char *argv[], char *envp[]) child = sudo_debug_fork(); switch (child) { case -1: - sudo_warn(U_("unable to fork")); + sudo_warn("%s", U_("unable to fork")); break; case 0: /* child runs sesh in new context */ @@ -811,11 +811,11 @@ selinux_edit_create_tfiles(struct command_details *command_details, case SESH_SUCCESS: break; case SESH_ERR_BAD_PATHS: - sudo_fatalx(U_("sesh: internal error: odd number of paths")); + sudo_fatalx("%s", U_("sesh: internal error: odd number of paths")); case SESH_ERR_NO_FILES: - sudo_fatalx(U_("sesh: unable to create temporary files")); + sudo_fatalx("%s", U_("sesh: unable to create temporary files")); case SESH_ERR_KILLED: - sudo_fatalx(U_("sesh: killed by a signal")); + sudo_fatalx("%s", U_("sesh: killed by a signal")); default: sudo_fatalx(U_("sesh: unknown error %d"), rc); } @@ -891,13 +891,15 @@ selinux_edit_copy_tfiles(struct command_details *command_details, ret = 0; break; case SESH_ERR_NO_FILES: - sudo_warnx(U_("unable to copy temporary files back to their original location")); + sudo_warnx("%s", + U_("unable to copy temporary files back to their original location")); break; case SESH_ERR_SOME_FILES: - sudo_warnx(U_("unable to copy some of the temporary files back to their original location")); + sudo_warnx("%s", + U_("unable to copy some of the temporary files back to their original location")); break; case SESH_ERR_KILLED: - sudo_warnx(U_("sesh: killed by a signal")); + sudo_warnx("%s", U_("sesh: killed by a signal")); break; default: sudo_warnx(U_("sesh: unknown error %d"), rc); @@ -955,7 +957,7 @@ sudo_edit(struct command_details *command_details) editor_argc++; } if (nfiles == 0) { - sudo_warnx(U_("plugin error: missing file list for sudoedit")); + sudo_warnx("%s", U_("plugin error: missing file list for sudoedit")); goto cleanup; } @@ -1006,7 +1008,7 @@ sudo_edit(struct command_details *command_details) * XXX - should run editor with user's context */ if (sudo_gettime_real(×[0]) == -1) { - sudo_warn(U_("unable to read the clock")); + sudo_warn("%s", U_("unable to read the clock")); goto cleanup; } memcpy(&saved_command_details, command_details, sizeof(struct command_details)); @@ -1019,7 +1021,7 @@ sudo_edit(struct command_details *command_details) command_details->argv = nargv; rc = run_command(command_details); if (sudo_gettime_real(×[1]) == -1) { - sudo_warn(U_("unable to read the clock")); + sudo_warn("%s", U_("unable to read the clock")); goto cleanup; } diff --git a/src/tgetpass.c b/src/tgetpass.c index ad5c94d605..fc4399ef6d 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -92,13 +92,13 @@ tgetpass_display_error(enum tgetpass_errval errval) case TGP_ERRVAL_NOERROR: break; case TGP_ERRVAL_TIMEOUT: - sudo_warnx(U_("timed out reading password")); + sudo_warnx("%s", U_("timed out reading password")); break; case TGP_ERRVAL_NOPASSWORD: - sudo_warnx(U_("no password was provided")); + sudo_warnx("%s", U_("no password was provided")); break; case TGP_ERRVAL_READERROR: - sudo_warn(U_("unable to read password")); + sudo_warn("%s", U_("unable to read password")); break; } debug_return; @@ -137,7 +137,8 @@ tgetpass(const char *prompt, int timeout, int flags, ttyfd = open(_PATH_TTY, O_RDWR); if (ttyfd == -1 && !ISSET(flags, TGP_ECHO|TGP_NOECHO_TRY)) { if (askpass == NULL || getenv_unhooked("DISPLAY") == NULL) { - sudo_warnx(U_("a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper")); + sudo_warnx("%s", + U_("a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper")); debug_return_str(NULL); } SET(flags, TGP_ASKPASS); @@ -147,7 +148,8 @@ tgetpass(const char *prompt, int timeout, int flags, /* If using a helper program to get the password, run it instead. */ if (ISSET(flags, TGP_ASKPASS)) { if (askpass == NULL || *askpass == '\0') - sudo_fatalx(U_("no askpass program specified, try setting SUDO_ASKPASS")); + sudo_fatalx("%s", + U_("no askpass program specified, try setting SUDO_ASKPASS")); debug_return_str_masked(sudo_askpass(askpass, prompt)); } @@ -301,11 +303,11 @@ sudo_askpass(const char *askpass, const char *prompt) (void) sigaction(SIGCHLD, &sa, &savechld); if (pipe2(pfd, O_CLOEXEC) == -1) - sudo_fatal(U_("unable to create pipe")); + sudo_fatal("%s", U_("unable to create pipe")); child = sudo_debug_fork(); if (child == -1) - sudo_fatal(U_("unable to fork")); + sudo_fatal("%s", U_("unable to fork")); if (child == 0) { /* child, set stdout to write side of the pipe */ diff --git a/src/utmp.c b/src/utmp.c index 4a358f81b4..5c3ddbec6b 100644 --- a/src/utmp.c +++ b/src/utmp.c @@ -284,12 +284,12 @@ utmp_slot(const char *line, int ttyfd) * doesn't take an argument. */ if ((sfd = dup(STDIN_FILENO)) == -1) - sudo_fatal(U_("unable to save stdin")); + sudo_fatal("%s", U_("unable to save stdin")); if (dup2(ttyfd, STDIN_FILENO) == -1) - sudo_fatal(U_("unable to dup2 stdin")); + sudo_fatal("%s", U_("unable to dup2 stdin")); slot = ttyslot(); if (dup2(sfd, STDIN_FILENO) == -1) - sudo_fatal(U_("unable to restore stdin")); + sudo_fatal("%s", U_("unable to restore stdin")); close(sfd); debug_return_int(slot); From a940a2c78ec58871e51be99f1c9c7dca1e5a96c6 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 12 Aug 2020 20:01:39 -0600 Subject: [PATCH 034/113] Fix some warnings from pvs-studio --- plugins/python/pyhelpers.c | 17 +++++++---------- plugins/python/python_plugin_common.h | 2 +- plugins/python/sudo_python_module.c | 2 ++ src/parse_args.c | 4 ++-- src/selinux.c | 2 +- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/plugins/python/pyhelpers.c b/plugins/python/pyhelpers.c index d20e459cf7..27e9ffb3bc 100644 --- a/plugins/python/pyhelpers.c +++ b/plugins/python/pyhelpers.c @@ -143,15 +143,13 @@ py_log_last_error(const char *context_message) PyObject *py_type = NULL, *py_message = NULL, *py_traceback = NULL; PyErr_Fetch(&py_type, &py_message, &py_traceback); - char *message = py_message ? py_create_string_rep(py_message) : strdup("(NULL)"); - if (message == NULL) - message = strdup("?"); + char *message = py_message ? py_create_string_rep(py_message) : NULL; py_sudo_log(SUDO_CONV_ERROR_MSG, "%s%s(%s) %s\n", context_message ? context_message : "", context_message && *context_message ? ": " : "", py_type ? ((PyTypeObject *)py_type)->tp_name : "None", - message); + message ? message : "(NULL)"); free(message); if (py_traceback != NULL) { @@ -216,6 +214,9 @@ py_str_array_from_tuple(PyObject *py_tuple) // we need an extra 0 at the end char **result = calloc(Py_SSIZE2SIZE(tuple_size) + 1, sizeof(char*)); + if (result == NULL) { + debug_return_ptr(NULL); + } for (int i = 0; i < tuple_size; ++i) { PyObject *py_value = PyTuple_GetItem(py_tuple, i); @@ -343,13 +344,9 @@ _py_debug_python_function(const char *class_name, const char *function_name, con Py_DECREF(py_kwargs_sorted); } - if (args_str == NULL) - args_str = strdup("()"); - if (kwargs_str == NULL) - kwargs_str = strdup(""); - sudo_debug_printf(SUDO_DEBUG_DIAG, "%s.%s %s: %s %s\n", class_name, - function_name, message, args_str, kwargs_str); + function_name, message, args_str ? args_str : "()", + kwargs_str ? kwargs_str : ""); free(args_str); free(kwargs_str); } diff --git a/plugins/python/python_plugin_common.h b/plugins/python/python_plugin_common.h index 4b986a6f5b..b7481a1ace 100644 --- a/plugins/python/python_plugin_common.h +++ b/plugins/python/python_plugin_common.h @@ -76,7 +76,7 @@ const char *python_plugin_name(struct PluginContext *plugin_ctx); // version is enough and "errstr" is valid #define CALLBACK_SET_ERROR(plugin_ctx, errstr) \ do { \ - if ((plugin_ctx)->sudo_api_version >= SUDO_API_MKVERSION(1, 15) && errstr != NULL) { \ + if ((plugin_ctx)->sudo_api_version >= SUDO_API_MKVERSION(1, 15)) { \ if (errstr != NULL) \ *errstr = (plugin_ctx)->callback_error; \ } \ diff --git a/plugins/python/sudo_python_module.c b/plugins/python/sudo_python_module.c index 116b9e3d20..cb4b20186f 100644 --- a/plugins/python/sudo_python_module.c +++ b/plugins/python/sudo_python_module.c @@ -351,6 +351,8 @@ python_sudo_conversation(PyObject *Py_UNUSED(self), PyObject *py_args, PyObject } replies = calloc(Py_SSIZE2SIZE(num_msgs), sizeof(struct sudo_conv_reply)); + if (replies == NULL) + goto cleanup; py_result = PyTuple_New(num_msgs); if (py_result == NULL) goto cleanup; diff --git a/src/parse_args.c b/src/parse_args.c index 119cea8e15..ebdcc4e7b9 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -374,8 +374,8 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, * If we see a non-option after the -h flag, treat as * remote host and bump optind to skip over it. */ - if (got_host_flag && !is_envar && - argv[optind] != NULL && argv[optind][0] != '-') { + if (got_host_flag && argv[optind] != NULL && + argv[optind][0] != '-' && !is_envar) { if (sudo_settings[ARG_REMOTE_HOST].value != NULL) usage(); sudo_settings[ARG_REMOTE_HOST].value = argv[optind++]; diff --git a/src/selinux.c b/src/selinux.c index 69d2db6069..a2f73f8d03 100644 --- a/src/selinux.c +++ b/src/selinux.c @@ -206,7 +206,7 @@ relabel_tty(const char *ttyn, int ptyfd) if (tty_con != NULL) { security_class_t tclass = string_to_security_class("chr_file"); if (tclass == 0) { - sudo_warn(U_("unknown security class \"chr_file\", not relabeling tty")); + sudo_warn("%s", U_("unknown security class \"chr_file\", not relabeling tty")); goto bad; } if (security_compute_relabel(se_state.new_context, tty_con, From d12f7ccf252482c56bde5a3def847f2c2c356fda Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 13 Aug 2020 20:40:33 -0600 Subject: [PATCH 035/113] Fix probe for macOS Big Sur "sw_vers -productName" now returns "macOS", not "Mac OS X" --- scripts/pp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/pp b/scripts/pp index 2fece7068b..32bd7ef6c9 100755 --- a/scripts/pp +++ b/scripts/pp @@ -1,6 +1,6 @@ #!/bin/sh # Copyright 2020 One Identity LLC. ALL RIGHTS RESERVED -pp_revision="20200624" +pp_revision="20200813" # Copyright 2018 One Identity LLC. ALL RIGHTS RESERVED. # # Redistribution and use in source and binary forms, with or without @@ -7486,7 +7486,7 @@ pp_backend_macos_flat () { test -d $pp_wrkdir/bom_stage && $pp_macos_sudo rm -rf $pp_wrkdir/bom_stage # Create the flat package with xar (like pkgutil --flatten does) - # Note that --distribution is only supported by Mac OS X 10.6 and above + # Note that --distribution is only supported by macOS 10.6 and above xar_flags="--compression=bzip2 --no-compress Scripts --no-compress Payload" case $mac_version in "10.5"*) ;; @@ -7682,6 +7682,7 @@ pp_macos_add_service () { pp_backend_macos_probe () { typeset name vers arch case `sw_vers -productName` in + "macOS") name="macos";; "Mac OS X") name="macos";; *) name="unknown";; esac From cb2eb8ea9486c1897f8877a46b82606c39a53026 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 13 Aug 2020 21:10:08 -0600 Subject: [PATCH 036/113] Add missing ZFALLTHROUGH and use spaces not tabs. --- lib/zlib/infback.c | 2 +- lib/zlib/inflate.c | 40 ++++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/lib/zlib/infback.c b/lib/zlib/infback.c index fac20afa12..d41c2023f1 100644 --- a/lib/zlib/infback.c +++ b/lib/zlib/infback.c @@ -477,7 +477,7 @@ void FAR *out_desc; } Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN; - ZFALLTHROUGH; + ZFALLTHROUGH; case LEN: /* use inflate_fast() if we have enough input and output */ diff --git a/lib/zlib/inflate.c b/lib/zlib/inflate.c index 86a0f3d79c..57ad93148d 100644 --- a/lib/zlib/inflate.c +++ b/lib/zlib/inflate.c @@ -722,6 +722,7 @@ int flush; CRC2(state->check, hold); INITBITS(); state->mode = TIME; + ZFALLTHROUGH; case TIME: NEEDBITS(32); if (state->head != Z_NULL) @@ -730,6 +731,7 @@ int flush; CRC4(state->check, hold); INITBITS(); state->mode = OS; + ZFALLTHROUGH; case OS: NEEDBITS(16); if (state->head != Z_NULL) { @@ -740,7 +742,7 @@ int flush; CRC2(state->check, hold); INITBITS(); state->mode = EXLEN; - ZFALLTHROUGH; + ZFALLTHROUGH; case EXLEN: if (state->flags & 0x0400) { NEEDBITS(16); @@ -754,7 +756,7 @@ int flush; else if (state->head != Z_NULL) state->head->extra = Z_NULL; state->mode = EXTRA; - ZFALLTHROUGH; + ZFALLTHROUGH; case EXTRA: if (state->flags & 0x0400) { copy = state->length; @@ -777,7 +779,7 @@ int flush; } state->length = 0; state->mode = NAME; - ZFALLTHROUGH; + ZFALLTHROUGH; case NAME: if (state->flags & 0x0800) { if (have == 0) goto inf_leave; @@ -799,7 +801,7 @@ int flush; state->head->name = Z_NULL; state->length = 0; state->mode = COMMENT; - ZFALLTHROUGH; + ZFALLTHROUGH; case COMMENT: if (state->flags & 0x1000) { if (have == 0) goto inf_leave; @@ -820,7 +822,7 @@ int flush; else if (state->head != Z_NULL) state->head->comment = Z_NULL; state->mode = HCRC; - ZFALLTHROUGH; + ZFALLTHROUGH; case HCRC: if (state->flags & 0x0200) { NEEDBITS(16); @@ -844,7 +846,7 @@ int flush; strm->adler = state->check = ZSWAP32(hold); INITBITS(); state->mode = DICT; - ZFALLTHROUGH; + ZFALLTHROUGH; case DICT: if (state->havedict == 0) { RESTORE(); @@ -852,10 +854,10 @@ int flush; } strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = TYPE; - ZFALLTHROUGH; + ZFALLTHROUGH; case TYPE: if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; - ZFALLTHROUGH; + ZFALLTHROUGH; case TYPEDO: if (state->last) { BYTEBITS(); @@ -906,10 +908,10 @@ int flush; INITBITS(); state->mode = COPY_; if (flush == Z_TREES) goto inf_leave; - ZFALLTHROUGH; + ZFALLTHROUGH; case COPY_: state->mode = COPY; - ZFALLTHROUGH; + ZFALLTHROUGH; case COPY: copy = state->length; if (copy) { @@ -945,6 +947,7 @@ int flush; Tracev((stderr, "inflate: table sizes ok\n")); state->have = 0; state->mode = LENLENS; + ZFALLTHROUGH; case LENLENS: while (state->have < state->ncode) { NEEDBITS(3); @@ -966,6 +969,7 @@ int flush; Tracev((stderr, "inflate: code lengths ok\n")); state->have = 0; state->mode = CODELENS; + ZFALLTHROUGH; case CODELENS: while (state->have < state->nlen + state->ndist) { for (;;) { @@ -1049,10 +1053,10 @@ int flush; Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN_; if (flush == Z_TREES) goto inf_leave; - ZFALLTHROUGH; + ZFALLTHROUGH; case LEN_: state->mode = LEN; - ZFALLTHROUGH; + ZFALLTHROUGH; case LEN: if (have >= 6 && left >= 258) { RESTORE(); @@ -1102,7 +1106,7 @@ int flush; } state->extra = (unsigned)(here.op) & 15; state->mode = LENEXT; - ZFALLTHROUGH; + ZFALLTHROUGH; case LENEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1113,7 +1117,7 @@ int flush; Tracevv((stderr, "inflate: length %u\n", state->length)); state->was = state->length; state->mode = DIST; - ZFALLTHROUGH; + ZFALLTHROUGH; case DIST: for (;;) { here = state->distcode[BITS(state->distbits)]; @@ -1141,7 +1145,7 @@ int flush; state->offset = (unsigned)here.val; state->extra = (unsigned)(here.op) & 15; state->mode = DISTEXT; - ZFALLTHROUGH; + ZFALLTHROUGH; case DISTEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1158,7 +1162,7 @@ int flush; #endif Tracevv((stderr, "inflate: distance %u\n", state->offset)); state->mode = MATCH; - ZFALLTHROUGH; + ZFALLTHROUGH; case MATCH: if (left == 0) goto inf_leave; copy = out - left; @@ -1234,7 +1238,7 @@ int flush; } #ifdef GUNZIP state->mode = LENGTH; - ZFALLTHROUGH; + ZFALLTHROUGH; case LENGTH: if (state->wrap && state->flags) { NEEDBITS(32); @@ -1248,7 +1252,7 @@ int flush; } #endif state->mode = DONE; - ZFALLTHROUGH; + ZFALLTHROUGH; case DONE: ret = Z_STREAM_END; goto inf_leave; From 086aaeb446b224987844679774a7bdab6b89832c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 14 Aug 2020 14:53:27 -0600 Subject: [PATCH 037/113] Format the macOS minor version number with two digits. This way we get consistent 4-digit version numbers even for macOS verions like 10.3 or 11.0 where the minor number is a single digit. For example. 10.3 will be formatted as 1003 and 11.0 will be 1100. --- scripts/pp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/pp b/scripts/pp index 32bd7ef6c9..c1e94731dd 100755 --- a/scripts/pp +++ b/scripts/pp @@ -1,6 +1,6 @@ #!/bin/sh # Copyright 2020 One Identity LLC. ALL RIGHTS RESERVED -pp_revision="20200813" +pp_revision="20200814" # Copyright 2018 One Identity LLC. ALL RIGHTS RESERVED. # # Redistribution and use in source and binary forms, with or without @@ -7686,7 +7686,7 @@ pp_backend_macos_probe () { "Mac OS X") name="macos";; *) name="unknown";; esac - vers=`sw_vers -productVersion | sed -e 's/^\([^.]*\)\.\([^.]*\).*/\1\2/'` + vers=`sw_vers -productVersion | awk -F. '{ printf "%d%02d\n", $1, $2 }'` arch=`arch` echo "$name$vers-$arch" } From 31d41853b674ebbd11e34c1558d2603e986d331d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 15 Aug 2020 09:03:20 -0600 Subject: [PATCH 038/113] sudo 1.9.3 --- configure | 18 +++++++++--------- configure.ac | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/configure b/configure index aca575a724..6a2097a40a 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sudo 1.9.2. +# Generated by GNU Autoconf 2.69 for sudo 1.9.3. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.9.2' -PACKAGE_STRING='sudo 1.9.2' +PACKAGE_VERSION='1.9.3' +PACKAGE_STRING='sudo 1.9.3' PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/' PACKAGE_URL='' @@ -1583,7 +1583,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.2 to adapt to many kinds of systems. +\`configure' configures sudo 1.9.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1649,7 +1649,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.9.2:";; + short | recursive ) echo "Configuration of sudo 1.9.3:";; esac cat <<\_ACEOF @@ -1923,7 +1923,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.9.2 +sudo configure 1.9.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2632,7 +2632,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.2, which was +It was created by sudo $as_me 1.9.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -28543,7 +28543,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.2, which was +This file was extended by sudo $as_me 1.9.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -28609,7 +28609,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sudo config.status 1.9.2 +sudo config.status 1.9.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index bf9f321968..39eedbc211 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.59]) -AC_INIT([sudo], [1.9.2], [https://bugzilla.sudo.ws/], [sudo]) +AC_INIT([sudo], [1.9.3], [https://bugzilla.sudo.ws/], [sudo]) AC_CONFIG_HEADERS([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) dnl From 9c258de89ea545e3b0f4b59bf9ec56a0634a0de8 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 15 Aug 2020 09:16:59 -0600 Subject: [PATCH 039/113] Sudo 1.9.3 changes so far. --- NEWS | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/NEWS b/NEWS index 197b18466f..ee35ad5dba 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,33 @@ +What's new in Sudo 1.9.3 + + * sudoedit will now prompt the user before overwriting an existing + file with one that is zero-length after editing. Bug #922. + + * Fixed building the Python plugin on systems with a compiler that + doesn't support symbol hiding. + + * Sudo now uses a linker script to hide symbols even when the + compiler has native symbol hiding support. This should make is + easier to detect omissions in the symbol exports file, regardless + of the platform. + + * Fixed the libssl dependency in Debian packages on older releases + that use libssl1.0.0. + + * Sudo (and visudo) now provide more detailed messages when there + is a syntax error in sudoers. The offending line and token + is now displayed. If bison is used to generate the parser, + information about what token was expected is also displayed. + + * Sudo no longer refuses to run if a syntax error in the sudoers + file is encountered. The entry with the syntax error will be + discarded and sudo will continue to parse the file. This makes + recovery from a syntax error less painful on systems where sudo + is the primary method of superuser access. + + * Fixed the sample_approval plugin's symbol exports file for systems + where the compiler doesn't support symbol hiding. + What's new in Sudo 1.9.2 * Fixed package builds on RedHat Enterprise Linux 8. From 94eb14c2147e94ead34acc9ce8283c340348f0c5 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 15 Aug 2020 11:29:46 -0600 Subject: [PATCH 040/113] Add error recovery for unexpected tokens after include/includedir. --- plugins/sudoers/gram.c | 771 +++++++++--------- plugins/sudoers/gram.y | 16 + .../sudoers/regress/testsudoers/test11.out.ok | 2 + 3 files changed, 399 insertions(+), 390 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 75ca1799f5..065ba56bee 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -182,203 +182,174 @@ typedef union { #define SHA384_TOK 302 #define SHA512_TOK 303 #define YYERRCODE 256 -#if defined(__cplusplus) || defined(__STDC__) const short sudoerslhs[] = -#else -short sudoerslhs[] = -#endif { -1, 0, 0, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 31, 31, - 32, 32, 4, 4, 3, 3, 3, 3, 3, 21, - 21, 20, 11, 11, 9, 9, 9, 9, 9, 2, - 2, 1, 33, 33, 33, 33, 34, 34, 7, 7, - 6, 6, 28, 29, 30, 24, 25, 26, 27, 18, - 18, 19, 19, 19, 19, 19, 23, 23, 23, 23, - 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 5, - 5, 5, 38, 38, 41, 10, 10, 39, 39, 42, - 8, 8, 40, 40, 43, 37, 37, 44, 14, 14, - 12, 12, 13, 13, 13, 13, 13, 17, 17, 15, - 15, 16, 16, 16, + 31, 31, 32, 32, 32, 32, 4, 4, 3, 3, + 3, 3, 3, 21, 21, 20, 11, 11, 9, 9, + 9, 9, 9, 2, 2, 1, 33, 33, 33, 33, + 34, 34, 7, 7, 6, 6, 28, 29, 30, 24, + 25, 26, 27, 18, 18, 19, 19, 19, 19, 19, + 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 5, 5, 5, 38, 38, 41, 10, + 10, 39, 39, 42, 8, 8, 40, 40, 43, 37, + 37, 44, 14, 14, 12, 12, 13, 13, 13, 13, + 13, 17, 17, 15, 15, 16, 16, 16, }; -#if defined(__cplusplus) || defined(__STDC__) const short sudoerslen[] = -#else -short sudoerslen[] = -#endif { 2, 0, 1, 1, 2, 1, 2, 1, 1, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 1, 3, 1, 2, 3, 3, 3, 1, - 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, - 3, 4, 3, 3, 3, 3, 1, 3, 1, 2, - 1, 2, 3, 3, 3, 3, 3, 3, 3, 0, - 3, 0, 1, 3, 2, 1, 0, 2, 2, 2, - 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 3, 3, 1, 3, 1, 3, 3, - 1, 3, 1, 3, 3, 1, 3, 3, 1, 3, - 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, - 2, 1, 1, 1, + 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, + 3, 4, 3, 4, 3, 4, 1, 3, 1, 2, + 3, 3, 3, 1, 3, 3, 1, 2, 1, 1, + 1, 1, 1, 1, 3, 4, 3, 3, 3, 3, + 1, 3, 1, 2, 1, 2, 3, 3, 3, 3, + 3, 3, 3, 0, 3, 0, 1, 3, 2, 1, + 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 1, 1, 1, 1, 3, 3, 1, + 3, 1, 3, 3, 1, 3, 1, 3, 3, 1, + 3, 3, 1, 3, 1, 2, 1, 1, 1, 1, + 1, 1, 3, 1, 2, 1, 1, 1, }; -#if defined(__cplusplus) || defined(__STDC__) const short sudoersdefred[] = -#else -short sudoersdefred[] = -#endif { 0, - 0, 113, 115, 116, 117, 0, 0, 0, 0, 0, - 0, 0, 114, 0, 0, 0, 0, 0, 5, 0, - 109, 111, 0, 7, 8, 0, 3, 6, 0, 0, - 0, 0, 23, 0, 35, 38, 37, 39, 36, 0, - 33, 0, 96, 0, 0, 92, 91, 90, 0, 0, - 0, 0, 0, 51, 49, 101, 0, 47, 0, 0, - 0, 93, 0, 0, 98, 0, 0, 106, 0, 0, - 103, 112, 0, 0, 30, 0, 4, 20, 19, 22, - 21, 0, 0, 0, 26, 0, 34, 0, 0, 0, - 0, 52, 0, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, - 0, 27, 28, 29, 24, 97, 43, 44, 45, 46, - 102, 48, 0, 94, 0, 99, 0, 107, 0, 104, - 0, 40, 0, 67, 31, 0, 0, 0, 0, 0, - 122, 124, 123, 0, 118, 120, 0, 0, 61, 41, - 0, 0, 0, 0, 0, 0, 0, 0, 71, 72, - 73, 74, 70, 68, 69, 121, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 88, 89, 86, 87, 42, - 119, 57, 56, 58, 59, 53, 54, 55, + 0, 117, 119, 120, 121, 0, 0, 0, 0, 0, + 0, 0, 118, 0, 0, 0, 0, 0, 5, 0, + 113, 115, 0, 7, 8, 0, 3, 6, 0, 0, + 0, 0, 27, 0, 39, 42, 41, 43, 40, 0, + 37, 0, 100, 0, 0, 96, 95, 94, 0, 0, + 0, 0, 0, 55, 53, 105, 0, 51, 0, 0, + 0, 97, 0, 0, 102, 0, 0, 110, 0, 0, + 107, 116, 0, 0, 34, 0, 4, 0, 21, 19, + 0, 25, 23, 0, 0, 0, 30, 0, 38, 0, + 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, + 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 114, 0, 0, 22, 20, 26, 24, 31, 32, 33, + 28, 101, 47, 48, 49, 50, 106, 52, 0, 98, + 0, 103, 0, 111, 0, 108, 0, 44, 0, 71, + 35, 0, 0, 0, 0, 0, 126, 128, 127, 0, + 122, 124, 0, 0, 65, 45, 0, 0, 0, 0, + 0, 0, 0, 0, 75, 76, 77, 78, 74, 72, + 73, 125, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 92, 93, 90, 91, 46, 123, 61, 60, 62, + 63, 57, 58, 59, }; -#if defined(__cplusplus) || defined(__STDC__) const short sudoersdgoto[] = -#else -short sudoersdgoto[] = -#endif { 20, - 132, 133, 33, 34, 54, 55, 56, 57, 41, 74, - 43, 21, 22, 23, 145, 146, 147, 134, 138, 75, - 76, 158, 140, 159, 160, 161, 162, 163, 164, 165, + 138, 139, 33, 34, 54, 55, 56, 57, 41, 74, + 43, 21, 22, 23, 151, 152, 153, 140, 144, 75, + 76, 164, 146, 165, 166, 167, 168, 169, 170, 171, 24, 25, 58, 59, 26, 27, 67, 61, 64, 70, 62, 65, 71, 68, }; -#if defined(__cplusplus) || defined(__STDC__) const short sudoerssindex[] = -#else -short sudoerssindex[] = -#endif { 565, - 8, 0, 0, 0, 0, -241, -240, 19, -21, -13, - -13, -26, 0, -231, -219, -215, -202, -221, 0, 0, - 0, 0, -25, 0, 0, 565, 0, 0, 14, 44, - -14, -198, 0, 18, 0, 0, 0, 0, 0, -210, - 0, -18, 0, -16, -16, 0, 0, 0, -248, 6, - 10, 12, 16, 0, 0, 0, -12, 0, -31, 21, - 17, 0, 29, 33, 0, 31, 35, 0, 34, 38, - 0, 0, -13, -28, 0, 41, 0, 0, 0, 0, - 0, -197, -190, -162, 0, 19, 0, -21, 18, 18, - 18, 0, -161, -159, -157, -156, -26, 18, -223, 0, - -21, -231, -26, -219, -13, -215, -13, -202, 0, 62, - -21, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65, 0, 66, 0, 67, 0, 67, 0, - -33, 0, 68, 0, 0, 22, 5, 72, 62, -209, - 0, 0, 0, -228, 0, 0, 70, 22, 0, 0, - 54, 56, 57, 58, 59, 60, 61, 631, 0, 0, - 0, 0, 0, 0, 0, 0, 22, 70, -140, -138, - -137, -136, -135, -133, -132, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, -241, -237, -24, 514, 23, + 23, -26, 0, -205, -203, -201, -198, -221, 0, 0, + 0, 0, -13, 0, 0, 565, 0, 0, 2, 5, + 9, -195, 0, 17, 0, 0, 0, 0, 0, -228, + 0, -23, 0, -20, -20, 0, 0, 0, -239, 8, + 10, 24, 29, 0, 0, 0, -16, 0, -6, 27, + 31, 0, 30, 34, 0, 32, 37, 0, 35, 39, + 0, 0, 23, -38, 0, 40, 0, 49, 0, 0, + 62, 0, 0, -164, -162, -160, 0, -24, 0, 514, + 17, 17, 17, 0, -159, -157, -156, -155, -26, 17, + -217, 0, 514, -205, -26, -203, 23, -201, 23, -198, + 0, 72, 514, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, + 69, 0, 70, 0, 70, 0, -33, 0, 73, 0, + 0, 57, -15, 74, 72, -218, 0, 0, 0, -219, + 0, 0, 75, 57, 0, 0, 59, 60, 61, 63, + 64, 65, 66, 631, 0, 0, 0, 0, 0, 0, + 0, 0, 57, 75, -145, -140, -135, -132, -131, -130, + -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,}; -#if defined(__cplusplus) || defined(__STDC__) + 0, 0, 0, 0,}; const short sudoersrindex[] = -#else -short sudoersrindex[] = -#endif - { 132, + { 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 1, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 283, 0, 0, 318, 0, 0, 353, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 423, 458, - 493, 0, 0, 0, 0, 0, 0, 528, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 36, 0, 71, 0, 106, 0, 141, 0, - 93, 0, 176, 0, 0, 94, 95, 0, 584, 663, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 423, 458, 493, 0, 0, 0, 0, 0, 0, 528, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 71, 0, 106, 0, 141, 0, 96, 0, 176, 0, + 0, 97, 99, 0, 584, 663, 0, 0, 0, 0, + 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, + 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0,}; -#if defined(__cplusplus) || defined(__STDC__) + 0, 0, 0, 0,}; const short sudoersgindex[] = -#else -short sudoersgindex[] = -#endif { 0, - 3, 0, 63, 15, 91, 84, -91, 42, 104, -4, - 64, 73, 129, -7, -19, 9, 2, 0, 0, 43, + -1, 0, 58, 6, 98, 86, -91, 43, 109, 7, + 68, 77, 134, -7, -19, 3, 11, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 69, 0, 0, 130, 0, 0, 0, 0, - 53, 55, 49, 52, + 0, 0, 55, 0, 0, 131, 0, 0, 0, 0, + 56, 53, 51, 54, }; #define YYTABLESIZE 966 -#if defined(__cplusplus) || defined(__STDC__) const short sudoerstable[] = -#else -short sudoerstable[] = -#endif { 18, - 25, 49, 44, 45, 42, 121, 49, 40, 46, 47, - 25, 40, 99, 78, 32, 88, 32, 28, 73, 18, - 32, 29, 30, 79, 136, 88, 60, 73, 83, 141, - 84, 97, 110, 25, 142, 95, 2, 48, 63, 3, - 4, 5, 66, 80, 25, 95, 82, 35, 73, 36, - 37, 32, 38, 81, 144, 69, 89, 143, 90, 91, - 85, 86, 148, 93, 13, 112, 190, 94, 95, 95, - 100, 98, 113, 96, 102, 39, 50, 51, 52, 53, - 100, 101, 151, 152, 153, 154, 155, 156, 157, 103, - 104, 105, 106, 95, 107, 108, 123, 127, 111, 129, - 114, 131, 117, 100, 118, 108, 119, 120, 88, 97, - 73, 139, 149, 167, 169, 108, 170, 171, 172, 173, - 174, 175, 192, 137, 193, 194, 195, 196, 100, 197, - 198, 1, 2, 62, 66, 63, 65, 64, 108, 92, - 105, 150, 100, 87, 125, 109, 72, 191, 115, 168, - 105, 116, 166, 135, 124, 77, 130, 128, 126, 0, - 0, 0, 0, 108, 0, 0, 0, 122, 0, 0, - 0, 0, 0, 105, 0, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, + 29, 79, 44, 45, 82, 90, 49, 127, 32, 32, + 29, 80, 32, 28, 83, 42, 32, 46, 47, 40, + 90, 29, 112, 73, 142, 30, 49, 99, 73, 35, + 73, 36, 37, 29, 38, 99, 2, 101, 147, 3, + 4, 5, 154, 148, 29, 99, 48, 91, 114, 92, + 93, 85, 60, 86, 63, 18, 66, 39, 115, 69, + 88, 116, 100, 87, 13, 95, 149, 96, 99, 84, + 104, 117, 196, 157, 158, 159, 160, 161, 162, 163, + 104, 97, 50, 51, 52, 53, 98, 103, 104, 150, + 105, 106, 107, 99, 108, 109, 110, 113, 118, 133, + 119, 135, 120, 104, 123, 112, 124, 125, 126, 129, + 90, 137, 99, 73, 155, 112, 145, 198, 173, 175, + 176, 177, 199, 178, 179, 180, 181, 200, 104, 143, + 201, 202, 203, 204, 1, 2, 66, 70, 112, 67, + 109, 69, 68, 156, 102, 121, 94, 131, 89, 111, + 109, 72, 172, 197, 141, 128, 77, 122, 132, 130, + 136, 134, 0, 112, 174, 0, 0, 0, 0, 0, + 0, 0, 0, 109, 0, 36, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 2, 46, 47, 3, 4, 5, - 46, 47, 35, 32, 36, 37, 35, 38, 36, 37, - 31, 38, 31, 14, 2, 11, 31, 3, 4, 5, - 0, 0, 13, 0, 48, 11, 25, 0, 25, 48, - 39, 25, 25, 25, 39, 25, 25, 25, 25, 25, - 25, 25, 13, 50, 51, 52, 53, 31, 11, 141, - 0, 0, 12, 0, 142, 0, 25, 25, 25, 25, - 25, 95, 12, 95, 0, 0, 95, 95, 95, 0, - 95, 95, 95, 95, 95, 95, 95, 143, 0, 0, - 0, 0, 0, 0, 0, 12, 0, 10, 0, 0, - 0, 95, 95, 95, 95, 95, 100, 10, 100, 0, - 0, 100, 100, 100, 0, 100, 100, 100, 100, 100, - 100, 100, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 13, 0, 0, 0, 100, 100, 100, 100, - 100, 108, 13, 108, 0, 0, 108, 108, 108, 0, - 108, 108, 108, 108, 108, 108, 108, 0, 0, 0, + 14, 0, 0, 0, 2, 0, 0, 3, 4, 5, + 46, 47, 0, 36, 31, 31, 0, 0, 31, 0, + 0, 0, 31, 14, 35, 11, 36, 37, 0, 38, + 46, 47, 13, 0, 0, 11, 29, 78, 29, 48, + 81, 29, 29, 29, 0, 29, 29, 29, 29, 29, + 29, 29, 39, 50, 51, 52, 53, 0, 11, 48, + 2, 0, 12, 3, 4, 5, 29, 29, 29, 29, + 29, 99, 12, 99, 0, 0, 99, 99, 99, 0, + 99, 99, 99, 99, 99, 99, 99, 0, 13, 0, + 0, 0, 0, 0, 147, 12, 0, 10, 0, 148, + 0, 99, 99, 99, 99, 99, 104, 10, 104, 0, + 0, 104, 104, 104, 0, 104, 104, 104, 104, 104, + 104, 104, 149, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 13, 0, 0, 0, 104, 104, 104, 104, + 104, 112, 13, 112, 0, 0, 112, 112, 112, 0, + 112, 112, 112, 112, 112, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 9, 0, 0, - 0, 108, 108, 108, 108, 108, 105, 9, 105, 0, - 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, - 105, 105, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 17, 0, 0, 0, 105, 105, 105, 105, - 105, 32, 17, 32, 0, 0, 32, 32, 32, 0, - 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, + 0, 112, 112, 112, 112, 112, 109, 9, 109, 0, + 0, 109, 109, 109, 0, 109, 109, 109, 109, 109, + 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 17, 0, 0, 0, 109, 109, 109, 109, + 109, 36, 17, 36, 0, 0, 36, 36, 36, 0, + 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 15, 0, 0, - 0, 32, 32, 32, 32, 32, 14, 15, 14, 0, + 0, 36, 36, 36, 36, 36, 14, 15, 14, 0, 0, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 16, 0, 0, 0, 14, 14, 14, 14, @@ -386,14 +357,14 @@ short sudoerstable[] = 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 18, 0, 0, 0, 11, 11, 11, 11, 11, 0, 18, 12, 0, - 12, 0, 0, 12, 12, 12, 0, 12, 12, 12, + 12, 0, 0, 12, 12, 12, 40, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12, 12, 10, 19, 10, 0, 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 13, 0, - 13, 0, 0, 13, 13, 13, 60, 13, 13, 13, + 13, 0, 0, 13, 13, 13, 64, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, 9, 0, 9, 0, 0, 9, 9, @@ -401,7 +372,7 @@ short sudoerstable[] = 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 17, 0, 17, 0, 0, 17, 17, 17, 0, 17, 17, 17, - 17, 17, 17, 17, 0, 75, 0, 0, 0, 0, + 17, 17, 17, 17, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 17, 17, 15, 0, 15, 0, 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, @@ -409,68 +380,64 @@ short sudoerstable[] = 0, 0, 0, 15, 15, 15, 15, 15, 16, 0, 16, 0, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, + 0, 35, 0, 36, 37, 0, 38, 0, 16, 16, 16, 16, 16, 18, 0, 18, 0, 0, 18, 18, - 18, 0, 18, 18, 18, 18, 18, 18, 18, 0, + 18, 0, 18, 18, 18, 18, 18, 18, 18, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 0, 0, 1, 0, 2, 0, 0, 3, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, - 60, 60, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 14, 15, 16, 17, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 0, 0, 0, 0, 0, 60, 60, 60, 60, 60, - 60, 60, 0, 60, 60, 60, 60, 46, 47, 0, + 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 14, 15, 16, 17, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, + 64, 64, 0, 64, 64, 64, 64, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 48, 0, 0, 75, - 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 51, 52, 53, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 0, + 0, 0, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 48, 0, 0, 79, + 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 51, 52, 53, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 75, 75, 75, 75, + 0, 0, 79, 79, 79, 79, }; -#if defined(__cplusplus) || defined(__STDC__) const short sudoerscheck[] = -#else -short sudoerscheck[] = -#endif { 33, - 0, 33, 10, 11, 9, 97, 33, 33, 257, 258, - 10, 33, 44, 0, 33, 44, 33, 10, 44, 33, - 33, 263, 263, 10, 58, 44, 258, 44, 43, 258, - 45, 44, 61, 33, 263, 0, 258, 286, 258, 261, - 262, 263, 258, 0, 44, 10, 61, 258, 44, 260, - 261, 33, 263, 10, 33, 258, 42, 286, 44, 45, - 259, 44, 58, 58, 286, 263, 158, 58, 33, 58, - 0, 57, 263, 58, 58, 286, 300, 301, 302, 303, - 10, 61, 292, 293, 294, 295, 296, 297, 298, 61, - 58, 61, 58, 58, 61, 58, 101, 105, 58, 107, - 263, 40, 264, 33, 264, 0, 264, 264, 44, 44, - 44, 44, 41, 44, 61, 10, 61, 61, 61, 61, - 61, 61, 263, 131, 263, 263, 263, 263, 58, 263, - 263, 0, 0, 41, 41, 41, 41, 41, 33, 49, - 0, 139, 59, 40, 103, 73, 18, 167, 86, 148, - 10, 88, 144, 111, 102, 26, 108, 106, 104, -1, - -1, -1, -1, 58, -1, -1, -1, 99, -1, -1, + 0, 0, 10, 11, 0, 44, 33, 99, 33, 33, + 10, 10, 33, 10, 10, 9, 33, 257, 258, 33, + 44, 263, 61, 44, 58, 263, 33, 44, 44, 258, + 44, 260, 261, 33, 263, 0, 258, 44, 258, 261, + 262, 263, 58, 263, 44, 10, 286, 42, 0, 44, + 45, 43, 258, 45, 258, 33, 258, 286, 10, 258, + 44, 0, 57, 259, 286, 58, 286, 58, 33, 61, + 0, 10, 164, 292, 293, 294, 295, 296, 297, 298, + 10, 58, 300, 301, 302, 303, 58, 61, 58, 33, + 61, 58, 61, 58, 58, 61, 58, 58, 263, 107, + 263, 109, 263, 33, 264, 0, 264, 264, 264, 103, + 44, 40, 44, 44, 41, 10, 44, 263, 44, 61, + 61, 61, 263, 61, 61, 61, 61, 263, 58, 137, + 263, 263, 263, 263, 0, 0, 41, 41, 33, 41, + 0, 41, 41, 145, 59, 88, 49, 105, 40, 73, + 10, 18, 150, 173, 113, 101, 26, 90, 106, 104, + 110, 108, -1, 58, 154, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, -1, -1, -1, 258, 257, 258, 261, 262, 263, - 257, 258, 258, 58, 260, 261, 258, 263, 260, 261, - 259, 263, 259, 33, 258, 0, 259, 261, 262, 263, - -1, -1, 286, -1, 286, 10, 256, -1, 258, 286, - 286, 261, 262, 263, 286, 265, 266, 267, 268, 269, - 270, 271, 286, 300, 301, 302, 303, 259, 33, 258, - -1, -1, 0, -1, 263, -1, 286, 287, 288, 289, + 10, -1, -1, -1, 258, -1, -1, 261, 262, 263, + 257, 258, -1, 58, 259, 259, -1, -1, 259, -1, + -1, -1, 259, 33, 258, 0, 260, 261, -1, 263, + 257, 258, 286, -1, -1, 10, 256, 256, 258, 286, + 256, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 286, 300, 301, 302, 303, -1, 33, 286, + 258, -1, 0, 261, 262, 263, 286, 287, 288, 289, 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, - 265, 266, 267, 268, 269, 270, 271, 286, -1, -1, - -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, + 265, 266, 267, 268, 269, 270, 271, -1, 286, -1, + -1, -1, -1, -1, 258, 33, -1, 0, -1, 263, -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, + 270, 271, 286, -1, -1, -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, @@ -490,7 +457,7 @@ short sudoerscheck[] = 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, 290, -1, 10, 256, -1, - 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, + 258, -1, -1, 261, 262, 263, 33, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, -1, 261, 262, @@ -513,9 +480,9 @@ short sudoerscheck[] = -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, + -1, 258, -1, 260, 261, -1, 263, -1, 286, 287, 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, - 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, + 263, -1, 265, 266, 267, 268, 269, 270, 271, 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, 290, -1, -1, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, @@ -540,11 +507,7 @@ short sudoerscheck[] = #endif #define YYMAXTOKEN 303 #if YYDEBUG -#if defined(__cplusplus) || defined(__STDC__) const char * const sudoersname[] = -#else -char *sudoersname[] = -#endif { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"'!'",0,0,0,0,0,0,"'('","')'",0,"'+'","','","'-'",0,0,0,0,0,0,0,0,0,0,0,0, @@ -562,11 +525,7 @@ char *sudoersname[] = "NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK","SHA256_TOK","SHA384_TOK", "SHA512_TOK", }; -#if defined(__cplusplus) || defined(__STDC__) const char * const sudoersrule[] = -#else -char *sudoersrule[] = -#endif {"$accept : file", "file :", "file : line", @@ -587,9 +546,13 @@ char *sudoersrule[] = "entry : DEFAULTS_HOST hostlist defaults_list", "entry : DEFAULTS_CMND cmndlist defaults_list", "include : INCLUDE WORD '\\n'", +"include : INCLUDE WORD error '\\n'", "include : INCLUDE WORD END", +"include : INCLUDE WORD error END", "includedir : INCLUDEDIR WORD '\\n'", +"includedir : INCLUDEDIR WORD error '\\n'", "includedir : INCLUDEDIR WORD END", +"includedir : INCLUDEDIR WORD error END", "defaults_list : defaults_entry", "defaults_list : defaults_list ',' defaults_entry", "defaults_entry : DEFVAR", @@ -720,7 +683,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 957 "gram.y" +#line 973 "gram.y" void sudoerserror(const char *s) { @@ -1197,7 +1160,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1143 "gram.c" +#line 1150 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1500,30 +1463,58 @@ break; case 20: #line 252 "gram.y" { - yyval.string = yyvsp[-1].string; + yyerrok; + yyval.string = yyvsp[-2].string; } break; case 21: -#line 257 "gram.y" +#line 256 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 22: -#line 260 "gram.y" +#line 259 "gram.y" +{ + yyerrok; + yyval.string = yyvsp[-2].string; + } +break; +case 23: +#line 265 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 24: -#line 266 "gram.y" +#line 268 "gram.y" { - HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); - yyval.defaults = yyvsp[-2].defaults; + yyerrok; + yyval.string = yyvsp[-2].string; } break; case 25: #line 272 "gram.y" +{ + yyval.string = yyvsp[-1].string; + } +break; +case 26: +#line 275 "gram.y" +{ + yyerrok; + yyval.string = yyvsp[-2].string; + } +break; +case 28: +#line 282 "gram.y" +{ + HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); + yyval.defaults = yyvsp[-2].defaults; + } +break; +case 29: +#line 288 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1532,8 +1523,8 @@ case 25: } } break; -case 26: -#line 279 "gram.y" +case 30: +#line 295 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1542,8 +1533,8 @@ case 26: } } break; -case 27: -#line 286 "gram.y" +case 31: +#line 302 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1552,8 +1543,8 @@ case 27: } } break; -case 28: -#line 293 "gram.y" +case 32: +#line 309 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1562,8 +1553,8 @@ case 28: } } break; -case 29: -#line 300 "gram.y" +case 33: +#line 316 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1572,15 +1563,15 @@ case 29: } } break; -case 31: -#line 310 "gram.y" +case 35: +#line 326 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; -case 32: -#line 316 "gram.y" +case 36: +#line 332 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1594,22 +1585,22 @@ case 32: yyval.privilege = p; } break; -case 33: -#line 330 "gram.y" +case 37: +#line 346 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 34: -#line 334 "gram.y" +case 38: +#line 350 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 35: -#line 340 "gram.y" +case 39: +#line 356 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1618,8 +1609,8 @@ case 35: } } break; -case 36: -#line 347 "gram.y" +case 40: +#line 363 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1628,8 +1619,8 @@ case 36: } } break; -case 37: -#line 354 "gram.y" +case 41: +#line 370 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1638,8 +1629,8 @@ case 37: } } break; -case 38: -#line 361 "gram.y" +case 42: +#line 377 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1648,8 +1639,8 @@ case 38: } } break; -case 39: -#line 368 "gram.y" +case 43: +#line 384 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1658,8 +1649,8 @@ case 39: } } break; -case 41: -#line 378 "gram.y" +case 45: +#line 394 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1712,8 +1703,8 @@ case 41: yyval.cmndspec = yyvsp[-2].cmndspec; } break; -case 42: -#line 431 "gram.y" +case 46: +#line 447 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1766,8 +1757,8 @@ case 42: yyval.cmndspec = cs; } break; -case 43: -#line 484 "gram.y" +case 47: +#line 500 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1776,8 +1767,8 @@ case 43: } } break; -case 44: -#line 491 "gram.y" +case 48: +#line 507 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1786,8 +1777,8 @@ case 44: } } break; -case 45: -#line 498 "gram.y" +case 49: +#line 514 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1796,8 +1787,8 @@ case 45: } } break; -case 46: -#line 505 "gram.y" +case 50: +#line 521 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1806,21 +1797,21 @@ case 46: } } break; -case 48: -#line 515 "gram.y" +case 52: +#line 531 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; -case 49: -#line 521 "gram.y" +case 53: +#line 537 "gram.y" { yyval.member = yyvsp[0].member; } break; -case 50: -#line 524 "gram.y" +case 54: +#line 540 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1841,76 +1832,76 @@ case 50: yyval.member = yyvsp[0].member; } break; -case 51: -#line 545 "gram.y" +case 55: +#line 561 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 52: -#line 549 "gram.y" +case 56: +#line 565 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 53: -#line 555 "gram.y" +case 57: +#line 571 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 54: -#line 560 "gram.y" +case 58: +#line 576 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 55: -#line 564 "gram.y" +case 59: +#line 580 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 56: -#line 569 "gram.y" +case 60: +#line 585 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 57: -#line 574 "gram.y" +case 61: +#line 590 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 58: -#line 579 "gram.y" +case 62: +#line 595 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 59: -#line 583 "gram.y" +case 63: +#line 599 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 60: -#line 588 "gram.y" +case 64: +#line 604 "gram.y" { yyval.runas = NULL; } break; -case 61: -#line 591 "gram.y" +case 65: +#line 607 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; -case 62: -#line 596 "gram.y" +case 66: +#line 612 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1927,8 +1918,8 @@ case 62: } } break; -case 63: -#line 611 "gram.y" +case 67: +#line 627 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1939,8 +1930,8 @@ case 63: /* $$->runasgroups = NULL; */ } break; -case 64: -#line 620 "gram.y" +case 68: +#line 636 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1951,8 +1942,8 @@ case 64: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 65: -#line 629 "gram.y" +case 69: +#line 645 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1963,8 +1954,8 @@ case 65: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 66: -#line 638 "gram.y" +case 70: +#line 654 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1981,14 +1972,14 @@ case 66: } } break; -case 67: -#line 655 "gram.y" +case 71: +#line 671 "gram.y" { init_options(&yyval.options); } break; -case 68: -#line 658 "gram.y" +case 72: +#line 674 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1998,8 +1989,8 @@ case 68: } } break; -case 69: -#line 666 "gram.y" +case 73: +#line 682 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -2009,8 +2000,8 @@ case 69: } } break; -case 70: -#line 674 "gram.y" +case 74: +#line 690 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -2023,8 +2014,8 @@ case 70: } } break; -case 71: -#line 685 "gram.y" +case 75: +#line 701 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -2032,8 +2023,8 @@ case 71: #endif } break; -case 72: -#line 691 "gram.y" +case 76: +#line 707 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -2041,8 +2032,8 @@ case 72: #endif } break; -case 73: -#line 697 "gram.y" +case 77: +#line 713 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -2050,8 +2041,8 @@ case 73: #endif } break; -case 74: -#line 703 "gram.y" +case 78: +#line 719 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -2059,98 +2050,98 @@ case 74: #endif } break; -case 75: -#line 711 "gram.y" +case 79: +#line 727 "gram.y" { TAGS_INIT(yyval.tag); } break; -case 76: -#line 714 "gram.y" +case 80: +#line 730 "gram.y" { yyval.tag.nopasswd = true; } break; -case 77: -#line 717 "gram.y" +case 81: +#line 733 "gram.y" { yyval.tag.nopasswd = false; } break; -case 78: -#line 720 "gram.y" +case 82: +#line 736 "gram.y" { yyval.tag.noexec = true; } break; -case 79: -#line 723 "gram.y" +case 83: +#line 739 "gram.y" { yyval.tag.noexec = false; } break; -case 80: -#line 726 "gram.y" +case 84: +#line 742 "gram.y" { yyval.tag.setenv = true; } break; -case 81: -#line 729 "gram.y" +case 85: +#line 745 "gram.y" { yyval.tag.setenv = false; } break; -case 82: -#line 732 "gram.y" +case 86: +#line 748 "gram.y" { yyval.tag.log_input = true; } break; -case 83: -#line 735 "gram.y" +case 87: +#line 751 "gram.y" { yyval.tag.log_input = false; } break; -case 84: -#line 738 "gram.y" +case 88: +#line 754 "gram.y" { yyval.tag.log_output = true; } break; -case 85: -#line 741 "gram.y" +case 89: +#line 757 "gram.y" { yyval.tag.log_output = false; } break; -case 86: -#line 744 "gram.y" +case 90: +#line 760 "gram.y" { yyval.tag.follow = true; } break; -case 87: -#line 747 "gram.y" +case 91: +#line 763 "gram.y" { yyval.tag.follow = false; } break; -case 88: -#line 750 "gram.y" +case 92: +#line 766 "gram.y" { yyval.tag.send_mail = true; } break; -case 89: -#line 753 "gram.y" +case 93: +#line 769 "gram.y" { yyval.tag.send_mail = false; } break; -case 90: -#line 758 "gram.y" +case 94: +#line 774 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2159,8 +2150,8 @@ case 90: } } break; -case 91: -#line 765 "gram.y" +case 95: +#line 781 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2169,8 +2160,8 @@ case 91: } } break; -case 92: -#line 772 "gram.y" +case 96: +#line 788 "gram.y" { struct sudo_command *c; @@ -2186,8 +2177,8 @@ case 92: } } break; -case 95: -#line 792 "gram.y" +case 99: +#line 808 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2198,15 +2189,15 @@ case 95: } } break; -case 97: -#line 804 "gram.y" +case 101: +#line 820 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 100: -#line 814 "gram.y" +case 104: +#line 830 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2217,15 +2208,15 @@ case 100: } } break; -case 102: -#line 826 "gram.y" +case 106: +#line 842 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 105: -#line 836 "gram.y" +case 109: +#line 852 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2236,8 +2227,8 @@ case 105: } } break; -case 108: -#line 851 "gram.y" +case 112: +#line 867 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2248,29 +2239,29 @@ case 108: } } break; -case 110: -#line 863 "gram.y" +case 114: +#line 879 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 111: -#line 869 "gram.y" +case 115: +#line 885 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 112: -#line 873 "gram.y" +case 116: +#line 889 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 113: -#line 879 "gram.y" +case 117: +#line 895 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2279,8 +2270,8 @@ case 113: } } break; -case 114: -#line 886 "gram.y" +case 118: +#line 902 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2289,8 +2280,8 @@ case 114: } } break; -case 115: -#line 893 "gram.y" +case 119: +#line 909 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2299,8 +2290,8 @@ case 115: } } break; -case 116: -#line 900 "gram.y" +case 120: +#line 916 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2309,8 +2300,8 @@ case 116: } } break; -case 117: -#line 907 "gram.y" +case 121: +#line 923 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2319,29 +2310,29 @@ case 117: } } break; -case 119: -#line 917 "gram.y" +case 123: +#line 933 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 120: -#line 923 "gram.y" +case 124: +#line 939 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 121: -#line 927 "gram.y" +case 125: +#line 943 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 122: -#line 933 "gram.y" +case 126: +#line 949 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2350,8 +2341,8 @@ case 122: } } break; -case 123: -#line 940 "gram.y" +case 127: +#line 956 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2360,8 +2351,8 @@ case 123: } } break; -case 124: -#line 947 "gram.y" +case 128: +#line 963 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2370,7 +2361,7 @@ case 124: } } break; -#line 2316 "gram.c" +#line 2351 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 7f023b0b88..81e77bdbd2 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -249,17 +249,33 @@ entry : '\n' { include : INCLUDE WORD '\n' { $$ = $2; } + | INCLUDE WORD error '\n' { + yyerrok; + $$ = $2; + } | INCLUDE WORD END { $$ = $2; } + | INCLUDE WORD error END { + yyerrok; + $$ = $2; + } ; includedir : INCLUDEDIR WORD '\n' { $$ = $2; } + | INCLUDEDIR WORD error '\n' { + yyerrok; + $$ = $2; + } | INCLUDEDIR WORD END { $$ = $2; } + | INCLUDEDIR WORD error END { + yyerrok; + $$ = $2; + } ; defaults_list : defaults_entry diff --git a/plugins/sudoers/regress/testsudoers/test11.out.ok b/plugins/sudoers/regress/testsudoers/test11.out.ok index acb525f2bd..8cf92ad22e 100644 --- a/plugins/sudoers/regress/testsudoers/test11.out.ok +++ b/plugins/sudoers/regress/testsudoers/test11.out.ok @@ -3,6 +3,7 @@ Testing @include with garbage after the path name sudoers:1: syntax error @include sudoers.local womp womp ^~~~ +testsudoers: unable to stat sudoers.local: No such file or directory Entries for user root: @@ -13,6 +14,7 @@ Testing #include with garbage after the path name sudoers:1: syntax error #include sudoers.local womp womp ^~~~ +testsudoers: unable to stat sudoers.local: No such file or directory Entries for user root: From de9c77ba7e4b2be2e781c55475b9b5b938ea93f4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 15 Aug 2020 11:38:56 -0600 Subject: [PATCH 041/113] Enable error recovery for syntax erorrs that don't end with a newline. A syntax error on the last line of a sudoers file with no trailing newline is now recoverable. --- plugins/sudoers/gram.c | 783 +++++++++++++++++++++-------------------- plugins/sudoers/gram.y | 3 + 2 files changed, 398 insertions(+), 388 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 065ba56bee..95deeb3373 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -185,242 +185,242 @@ typedef union { const short sudoerslhs[] = { -1, 0, 0, 35, 35, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 31, 31, - 31, 31, 32, 32, 32, 32, 4, 4, 3, 3, - 3, 3, 3, 21, 21, 20, 11, 11, 9, 9, - 9, 9, 9, 2, 2, 1, 33, 33, 33, 33, - 34, 34, 7, 7, 6, 6, 28, 29, 30, 24, - 25, 26, 27, 18, 18, 19, 19, 19, 19, 19, - 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, + 36, 36, 36, 36, 36, 36, 36, 36, 36, 31, + 31, 31, 31, 32, 32, 32, 32, 4, 4, 3, + 3, 3, 3, 3, 21, 21, 20, 11, 11, 9, + 9, 9, 9, 9, 2, 2, 1, 33, 33, 33, + 33, 34, 34, 7, 7, 6, 6, 28, 29, 30, + 24, 25, 26, 27, 18, 18, 19, 19, 19, 19, + 19, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 5, 5, 5, 38, 38, 41, 10, - 10, 39, 39, 42, 8, 8, 40, 40, 43, 37, - 37, 44, 14, 14, 12, 12, 13, 13, 13, 13, - 13, 17, 17, 15, 15, 16, 16, 16, + 22, 22, 22, 22, 5, 5, 5, 38, 38, 41, + 10, 10, 39, 39, 42, 8, 8, 40, 40, 43, + 37, 37, 44, 14, 14, 12, 12, 13, 13, 13, + 13, 13, 17, 17, 15, 15, 16, 16, 16, }; const short sudoerslen[] = { 2, - 0, 1, 1, 2, 1, 2, 1, 1, 2, 2, - 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, - 3, 4, 3, 4, 3, 4, 1, 3, 1, 2, - 3, 3, 3, 1, 3, 3, 1, 2, 1, 1, - 1, 1, 1, 1, 3, 4, 3, 3, 3, 3, - 1, 3, 1, 2, 1, 2, 3, 3, 3, 3, - 3, 3, 3, 0, 3, 0, 1, 3, 2, 1, - 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, + 0, 1, 1, 2, 1, 2, 2, 1, 1, 2, + 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, + 4, 3, 4, 3, 4, 3, 4, 1, 3, 1, + 2, 3, 3, 3, 1, 3, 3, 1, 2, 1, + 1, 1, 1, 1, 1, 3, 4, 3, 3, 3, + 3, 1, 3, 1, 2, 1, 2, 3, 3, 3, + 3, 3, 3, 3, 0, 3, 0, 1, 3, 2, + 1, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 3, 3, 1, - 3, 1, 3, 3, 1, 3, 1, 3, 3, 1, - 3, 3, 1, 3, 1, 2, 1, 1, 1, 1, - 1, 1, 3, 1, 2, 1, 1, 1, + 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, + 1, 3, 1, 3, 3, 1, 3, 1, 3, 3, + 1, 3, 3, 1, 3, 1, 2, 1, 1, 1, + 1, 1, 1, 3, 1, 2, 1, 1, 1, }; const short sudoersdefred[] = { 0, - 0, 117, 119, 120, 121, 0, 0, 0, 0, 0, - 0, 0, 118, 0, 0, 0, 0, 0, 5, 0, - 113, 115, 0, 7, 8, 0, 3, 6, 0, 0, - 0, 0, 27, 0, 39, 42, 41, 43, 40, 0, - 37, 0, 100, 0, 0, 96, 95, 94, 0, 0, - 0, 0, 0, 55, 53, 105, 0, 51, 0, 0, - 0, 97, 0, 0, 102, 0, 0, 110, 0, 0, - 107, 116, 0, 0, 34, 0, 4, 0, 21, 19, - 0, 25, 23, 0, 0, 0, 30, 0, 38, 0, - 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, - 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, - 114, 0, 0, 22, 20, 26, 24, 31, 32, 33, - 28, 101, 47, 48, 49, 50, 106, 52, 0, 98, - 0, 103, 0, 111, 0, 108, 0, 44, 0, 71, - 35, 0, 0, 0, 0, 0, 126, 128, 127, 0, - 122, 124, 0, 0, 65, 45, 0, 0, 0, 0, - 0, 0, 0, 0, 75, 76, 77, 78, 74, 72, - 73, 125, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 92, 93, 90, 91, 46, 123, 61, 60, 62, - 63, 57, 58, 59, + 0, 118, 120, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 119, 0, 0, 0, 0, 0, 5, 0, + 114, 116, 0, 8, 9, 0, 3, 7, 6, 0, + 0, 0, 0, 28, 0, 40, 43, 42, 44, 41, + 0, 38, 0, 101, 0, 0, 97, 96, 95, 0, + 0, 0, 0, 0, 56, 54, 106, 0, 52, 0, + 0, 0, 98, 0, 0, 103, 0, 0, 111, 0, + 0, 108, 117, 0, 0, 35, 0, 4, 0, 22, + 20, 0, 26, 24, 0, 0, 0, 31, 0, 39, + 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, + 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 115, 0, 0, 23, 21, 27, 25, 32, 33, + 34, 29, 102, 48, 49, 50, 51, 107, 53, 0, + 99, 0, 104, 0, 112, 0, 109, 0, 45, 0, + 72, 36, 0, 0, 0, 0, 0, 127, 129, 128, + 0, 123, 125, 0, 0, 66, 46, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 77, 78, 79, 75, + 73, 74, 126, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 93, 94, 91, 92, 47, 124, 62, 61, + 63, 64, 58, 59, 60, }; const short sudoersdgoto[] = { 20, - 138, 139, 33, 34, 54, 55, 56, 57, 41, 74, - 43, 21, 22, 23, 151, 152, 153, 140, 144, 75, - 76, 164, 146, 165, 166, 167, 168, 169, 170, 171, - 24, 25, 58, 59, 26, 27, 67, 61, 64, 70, - 62, 65, 71, 68, + 139, 140, 34, 35, 55, 56, 57, 58, 42, 75, + 44, 21, 22, 23, 152, 153, 154, 141, 145, 76, + 77, 165, 147, 166, 167, 168, 169, 170, 171, 172, + 24, 25, 59, 60, 26, 27, 68, 62, 65, 71, + 63, 66, 72, 69, }; const short sudoerssindex[] = { 565, - 4, 0, 0, 0, 0, -241, -237, -24, 514, 23, - 23, -26, 0, -205, -203, -201, -198, -221, 0, 0, - 0, 0, -13, 0, 0, 565, 0, 0, 2, 5, - 9, -195, 0, 17, 0, 0, 0, 0, 0, -228, - 0, -23, 0, -20, -20, 0, 0, 0, -239, 8, - 10, 24, 29, 0, 0, 0, -16, 0, -6, 27, - 31, 0, 30, 34, 0, 32, 37, 0, 35, 39, - 0, 0, 23, -38, 0, 40, 0, 49, 0, 0, - 62, 0, 0, -164, -162, -160, 0, -24, 0, 514, - 17, 17, 17, 0, -159, -157, -156, -155, -26, 17, - -217, 0, 514, -205, -26, -203, 23, -201, 23, -198, - 0, 72, 514, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, - 69, 0, 70, 0, 70, 0, -33, 0, 73, 0, - 0, 57, -15, 74, 72, -218, 0, 0, 0, -219, - 0, 0, 75, 57, 0, 0, 59, 60, 61, 63, - 64, 65, 66, 631, 0, 0, 0, 0, 0, 0, - 0, 0, 57, 75, -145, -140, -135, -132, -131, -130, - -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 0, 0, 0, 0, -249, -241, -24, 514, 23, + 23, -26, 0, -232, -209, -208, -203, -221, 0, 0, + 0, 0, -13, 0, 0, 565, 0, 0, 0, 2, + 5, 9, -211, 0, 18, 0, 0, 0, 0, 0, + -228, 0, -23, 0, -20, -20, 0, 0, 0, -239, + 8, 10, 21, 22, 0, 0, 0, -16, 0, -6, + 28, 33, 0, 31, 35, 0, 34, 38, 0, 37, + 39, 0, 0, 23, -38, 0, 41, 0, 53, 0, + 0, 64, 0, 0, -163, -161, -158, 0, -24, 0, + 514, 18, 18, 18, 0, -157, -156, -155, -154, -26, + 18, -225, 0, 514, -232, -26, -209, 23, -208, 23, + -203, 0, 72, 514, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, + 0, 70, 0, 73, 0, 73, 0, -33, 0, 74, + 0, 0, 57, -15, 78, 72, -210, 0, 0, 0, + -219, 0, 0, 76, 57, 0, 0, 54, 60, 61, + 62, 63, 65, 66, 631, 0, 0, 0, 0, 0, + 0, 0, 0, 57, 76, -138, -135, -133, -131, -130, + -129, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,}; + 0, 0, 0, 0, 0,}; const short sudoersrindex[] = - { 135, + { 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, - 1, 0, 0, 211, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, + 0, 1, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 283, 0, 0, 318, 0, 0, 353, - 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 423, 458, 493, 0, 0, 0, 0, 0, 0, 528, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 71, 0, 106, 0, 141, 0, 96, 0, 176, 0, - 0, 97, 99, 0, 584, 663, 0, 0, 0, 0, - 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 0, 246, 0, 0, 283, 0, 0, 318, 0, 0, + 353, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 423, 458, 493, 0, 0, 0, 0, 0, 0, + 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 71, 0, 106, 0, 141, 0, 97, 0, 176, + 0, 0, 99, 101, 0, 584, 663, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,}; + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,}; const short sudoersgindex[] = { 0, - -1, 0, 58, 6, 98, 86, -91, 43, 109, 7, - 68, 77, 134, -7, -19, 3, 11, 0, 0, 42, + -1, 0, 58, 14, 96, 88, -92, 43, 109, 7, + 67, 79, 134, -7, -19, 3, 4, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 0, 0, 131, 0, 0, 0, 0, - 56, 53, 51, 54, + 0, 0, 55, 0, 0, 135, 0, 0, 0, 0, + 68, 56, 49, 59, }; #define YYTABLESIZE 966 const short sudoerstable[] = { 18, - 29, 79, 44, 45, 82, 90, 49, 127, 32, 32, - 29, 80, 32, 28, 83, 42, 32, 46, 47, 40, - 90, 29, 112, 73, 142, 30, 49, 99, 73, 35, - 73, 36, 37, 29, 38, 99, 2, 101, 147, 3, - 4, 5, 154, 148, 29, 99, 48, 91, 114, 92, - 93, 85, 60, 86, 63, 18, 66, 39, 115, 69, - 88, 116, 100, 87, 13, 95, 149, 96, 99, 84, - 104, 117, 196, 157, 158, 159, 160, 161, 162, 163, - 104, 97, 50, 51, 52, 53, 98, 103, 104, 150, - 105, 106, 107, 99, 108, 109, 110, 113, 118, 133, - 119, 135, 120, 104, 123, 112, 124, 125, 126, 129, - 90, 137, 99, 73, 155, 112, 145, 198, 173, 175, - 176, 177, 199, 178, 179, 180, 181, 200, 104, 143, - 201, 202, 203, 204, 1, 2, 66, 70, 112, 67, - 109, 69, 68, 156, 102, 121, 94, 131, 89, 111, - 109, 72, 172, 197, 141, 128, 77, 122, 132, 130, - 136, 134, 0, 112, 174, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 36, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 2, 0, 0, 3, 4, 5, - 46, 47, 0, 36, 31, 31, 0, 0, 31, 0, - 0, 0, 31, 14, 35, 11, 36, 37, 0, 38, - 46, 47, 13, 0, 0, 11, 29, 78, 29, 48, - 81, 29, 29, 29, 0, 29, 29, 29, 29, 29, - 29, 29, 39, 50, 51, 52, 53, 0, 11, 48, - 2, 0, 12, 3, 4, 5, 29, 29, 29, 29, - 29, 99, 12, 99, 0, 0, 99, 99, 99, 0, - 99, 99, 99, 99, 99, 99, 99, 0, 13, 0, - 0, 0, 0, 0, 147, 12, 0, 10, 0, 148, - 0, 99, 99, 99, 99, 99, 104, 10, 104, 0, - 0, 104, 104, 104, 0, 104, 104, 104, 104, 104, - 104, 104, 149, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 13, 0, 0, 0, 104, 104, 104, 104, - 104, 112, 13, 112, 0, 0, 112, 112, 112, 0, - 112, 112, 112, 112, 112, 112, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 13, 0, 9, 0, 0, - 0, 112, 112, 112, 112, 112, 109, 9, 109, 0, - 0, 109, 109, 109, 0, 109, 109, 109, 109, 109, - 109, 109, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 17, 0, 0, 0, 109, 109, 109, 109, - 109, 36, 17, 36, 0, 0, 36, 36, 36, 0, - 36, 36, 36, 36, 36, 36, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 15, 0, 0, - 0, 36, 36, 36, 36, 36, 14, 15, 14, 0, - 0, 14, 14, 14, 0, 14, 14, 14, 14, 14, - 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 16, 0, 0, 0, 14, 14, 14, 14, - 14, 11, 16, 11, 0, 0, 11, 11, 11, 0, - 11, 11, 11, 11, 11, 11, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 0, 18, 0, 0, - 0, 11, 11, 11, 11, 11, 0, 18, 12, 0, - 12, 0, 0, 12, 12, 12, 40, 12, 12, 12, - 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 0, 0, 0, 0, 12, 12, - 12, 12, 12, 10, 19, 10, 0, 0, 10, 10, - 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 0, 0, 10, 10, 10, 10, 10, 13, 0, - 13, 0, 0, 13, 13, 13, 64, 13, 13, 13, + 30, 80, 45, 46, 83, 91, 50, 128, 33, 33, + 30, 81, 33, 30, 84, 43, 33, 47, 48, 41, + 91, 31, 113, 74, 143, 61, 50, 100, 74, 36, + 74, 37, 38, 30, 39, 100, 2, 102, 148, 3, + 4, 5, 155, 149, 30, 100, 49, 88, 64, 67, + 28, 86, 115, 87, 70, 18, 92, 40, 93, 94, + 29, 89, 116, 117, 13, 96, 150, 97, 100, 85, + 105, 101, 197, 118, 51, 52, 53, 54, 98, 99, + 105, 158, 159, 160, 161, 162, 163, 164, 104, 151, + 105, 106, 107, 100, 108, 109, 111, 110, 114, 119, + 134, 120, 136, 105, 121, 113, 124, 125, 126, 127, + 130, 138, 91, 100, 176, 113, 74, 146, 156, 174, + 177, 178, 179, 180, 199, 181, 182, 200, 105, 201, + 144, 202, 203, 204, 205, 1, 2, 67, 113, 71, + 110, 68, 70, 69, 157, 95, 122, 103, 132, 90, + 110, 73, 112, 173, 198, 142, 129, 123, 175, 137, + 78, 0, 133, 113, 0, 0, 0, 135, 0, 0, + 0, 0, 131, 110, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 2, 0, 0, 3, 4, 5, + 47, 48, 0, 37, 32, 32, 0, 0, 32, 0, + 0, 0, 32, 15, 36, 12, 37, 38, 0, 39, + 47, 48, 13, 0, 0, 12, 30, 79, 30, 49, + 82, 30, 30, 30, 0, 30, 30, 30, 30, 30, + 30, 30, 40, 51, 52, 53, 54, 0, 12, 49, + 2, 0, 13, 3, 4, 5, 30, 30, 30, 30, + 30, 100, 13, 100, 0, 0, 100, 100, 100, 0, + 100, 100, 100, 100, 100, 100, 100, 0, 13, 0, + 0, 0, 0, 0, 148, 13, 0, 11, 0, 149, + 0, 100, 100, 100, 100, 100, 105, 11, 105, 0, + 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, + 105, 105, 150, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 14, 0, 0, 0, 105, 105, 105, 105, + 105, 113, 14, 113, 0, 0, 113, 113, 113, 0, + 113, 113, 113, 113, 113, 113, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 14, 0, 10, 0, 0, + 0, 113, 113, 113, 113, 113, 110, 10, 110, 0, + 0, 110, 110, 110, 0, 110, 110, 110, 110, 110, + 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 18, 0, 0, 0, 110, 110, 110, 110, + 110, 37, 18, 37, 0, 0, 37, 37, 37, 0, + 37, 37, 37, 37, 37, 37, 37, 0, 0, 0, + 0, 0, 0, 0, 0, 18, 0, 16, 0, 0, + 0, 37, 37, 37, 37, 37, 15, 16, 15, 0, + 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, + 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 0, 17, 0, 0, 0, 15, 15, 15, 15, + 15, 12, 17, 12, 0, 0, 12, 12, 12, 0, + 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, + 0, 12, 12, 12, 12, 12, 0, 19, 13, 0, + 13, 0, 0, 13, 13, 13, 41, 13, 13, 13, 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, - 13, 13, 13, 9, 0, 9, 0, 0, 9, 9, - 9, 0, 9, 9, 9, 9, 9, 9, 9, 0, - 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, 17, 0, - 17, 0, 0, 17, 17, 17, 0, 17, 17, 17, - 17, 17, 17, 17, 0, 79, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, - 17, 17, 17, 15, 0, 15, 0, 0, 15, 15, - 15, 0, 15, 15, 15, 15, 15, 15, 15, 0, + 19, 0, 0, 0, 0, 0, 0, 0, 13, 13, + 13, 13, 13, 11, 19, 11, 0, 0, 11, 11, + 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, + 0, 0, 0, 11, 11, 11, 11, 11, 14, 0, + 14, 0, 0, 14, 14, 14, 65, 14, 14, 14, + 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, + 14, 14, 14, 10, 0, 10, 0, 0, 10, 10, + 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, + 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 10, 10, 10, 10, 18, 0, + 18, 0, 0, 18, 18, 18, 0, 18, 18, 18, + 18, 18, 18, 18, 0, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, + 18, 18, 18, 16, 0, 16, 0, 0, 16, 16, + 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 15, 15, 15, 15, 15, 16, 0, - 16, 0, 0, 16, 16, 16, 0, 16, 16, 16, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, - 0, 35, 0, 36, 37, 0, 38, 0, 16, 16, - 16, 16, 16, 18, 0, 18, 0, 0, 18, 18, - 18, 0, 18, 18, 18, 18, 18, 18, 18, 39, + 0, 0, 0, 16, 16, 16, 16, 16, 17, 0, + 17, 0, 0, 17, 17, 17, 0, 17, 17, 17, + 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 38, 0, 39, 0, 17, 17, + 17, 17, 17, 19, 0, 19, 0, 0, 19, 19, + 19, 0, 19, 19, 19, 19, 19, 19, 19, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 18, 18, 18, 18, 18, 0, 0, + 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, 1, 0, 2, 0, 0, 3, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, - 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 14, 15, 16, 17, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, - 64, 64, 0, 64, 64, 64, 64, 46, 47, 0, + 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 14, 15, 16, 17, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, + 65, 65, 0, 65, 65, 65, 65, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 48, 0, 0, 79, - 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 51, 52, 53, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, 79, 0, + 0, 0, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 49, 0, 0, 80, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 52, 53, 54, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 79, 79, 79, 79, + 0, 0, 80, 80, 80, 80, }; const short sudoerscheck[] = { 33, - 0, 0, 10, 11, 0, 44, 33, 99, 33, 33, - 10, 10, 33, 10, 10, 9, 33, 257, 258, 33, - 44, 263, 61, 44, 58, 263, 33, 44, 44, 258, + 0, 0, 10, 11, 0, 44, 33, 100, 33, 33, + 10, 10, 33, 263, 10, 9, 33, 257, 258, 33, + 44, 263, 61, 44, 58, 258, 33, 44, 44, 258, 44, 260, 261, 33, 263, 0, 258, 44, 258, 261, - 262, 263, 58, 263, 44, 10, 286, 42, 0, 44, - 45, 43, 258, 45, 258, 33, 258, 286, 10, 258, - 44, 0, 57, 259, 286, 58, 286, 58, 33, 61, - 0, 10, 164, 292, 293, 294, 295, 296, 297, 298, - 10, 58, 300, 301, 302, 303, 58, 61, 58, 33, - 61, 58, 61, 58, 58, 61, 58, 58, 263, 107, - 263, 109, 263, 33, 264, 0, 264, 264, 264, 103, - 44, 40, 44, 44, 41, 10, 44, 263, 44, 61, - 61, 61, 263, 61, 61, 61, 61, 263, 58, 137, - 263, 263, 263, 263, 0, 0, 41, 41, 33, 41, - 0, 41, 41, 145, 59, 88, 49, 105, 40, 73, - 10, 18, 150, 173, 113, 101, 26, 90, 106, 104, - 110, 108, -1, 58, 154, -1, -1, -1, -1, -1, - -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, + 262, 263, 58, 263, 44, 10, 286, 259, 258, 258, + 0, 43, 0, 45, 258, 33, 43, 286, 45, 46, + 10, 44, 10, 0, 286, 58, 286, 58, 33, 61, + 0, 58, 165, 10, 300, 301, 302, 303, 58, 58, + 10, 292, 293, 294, 295, 296, 297, 298, 61, 33, + 58, 61, 58, 58, 61, 58, 58, 61, 58, 263, + 108, 263, 110, 33, 263, 0, 264, 264, 264, 264, + 104, 40, 44, 44, 61, 10, 44, 44, 41, 44, + 61, 61, 61, 61, 263, 61, 61, 263, 58, 263, + 138, 263, 263, 263, 263, 0, 0, 41, 33, 41, + 0, 41, 41, 41, 146, 50, 89, 60, 106, 41, + 10, 18, 74, 151, 174, 114, 102, 91, 155, 111, + 26, -1, 107, 58, -1, -1, -1, 109, -1, -1, + -1, -1, 105, 33, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, @@ -533,6 +533,7 @@ const char * const sudoersrule[] = "line : line entry", "entry : '\\n'", "entry : error '\\n'", +"entry : error END", "entry : include", "entry : includedir", "entry : userlist privileges", @@ -683,7 +684,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 973 "gram.y" +#line 976 "gram.y" void sudoerserror(const char *s) { @@ -1160,7 +1161,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1150 "gram.c" +#line 1151 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1368,6 +1369,12 @@ case 6: break; case 7: #line 195 "gram.y" +{ + yyerrok; + } +break; +case 8: +#line 198 "gram.y" { if (!push_include(yyvsp[0].string, false)) { free(yyvsp[0].string); @@ -1376,8 +1383,8 @@ case 7: free(yyvsp[0].string); } break; -case 8: -#line 202 "gram.y" +case 9: +#line 205 "gram.y" { if (!push_include(yyvsp[0].string, true)) { free(yyvsp[0].string); @@ -1386,8 +1393,8 @@ case 8: free(yyvsp[0].string); } break; -case 9: -#line 209 "gram.y" +case 10: +#line 212 "gram.y" { if (!add_userspec(yyvsp[-1].member, yyvsp[0].privilege)) { sudoerserror(N_("unable to allocate memory")); @@ -1395,12 +1402,6 @@ case 9: } } break; -case 10: -#line 215 "gram.y" -{ - ; - } -break; case 11: #line 218 "gram.y" { @@ -1422,99 +1423,105 @@ break; case 14: #line 227 "gram.y" { - if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) - YYERROR; + ; } break; case 15: -#line 231 "gram.y" +#line 230 "gram.y" { - if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) YYERROR; } break; case 16: -#line 235 "gram.y" +#line 234 "gram.y" { - if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 17: -#line 239 "gram.y" +#line 238 "gram.y" { - if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 18: -#line 243 "gram.y" +#line 242 "gram.y" { - if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 19: -#line 249 "gram.y" +#line 246 "gram.y" { - yyval.string = yyvsp[-1].string; + if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) + YYERROR; } break; case 20: #line 252 "gram.y" { - yyerrok; - yyval.string = yyvsp[-2].string; + yyval.string = yyvsp[-1].string; } break; case 21: -#line 256 "gram.y" +#line 255 "gram.y" { - yyval.string = yyvsp[-1].string; + yyerrok; + yyval.string = yyvsp[-2].string; } break; case 22: #line 259 "gram.y" { - yyerrok; - yyval.string = yyvsp[-2].string; + yyval.string = yyvsp[-1].string; } break; case 23: -#line 265 "gram.y" +#line 262 "gram.y" { - yyval.string = yyvsp[-1].string; + yyerrok; + yyval.string = yyvsp[-2].string; } break; case 24: #line 268 "gram.y" { - yyerrok; - yyval.string = yyvsp[-2].string; + yyval.string = yyvsp[-1].string; } break; case 25: -#line 272 "gram.y" +#line 271 "gram.y" { - yyval.string = yyvsp[-1].string; + yyerrok; + yyval.string = yyvsp[-2].string; } break; case 26: #line 275 "gram.y" +{ + yyval.string = yyvsp[-1].string; + } +break; +case 27: +#line 278 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; -case 28: -#line 282 "gram.y" +case 29: +#line 285 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; -case 29: -#line 288 "gram.y" +case 30: +#line 291 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1523,8 +1530,8 @@ case 29: } } break; -case 30: -#line 295 "gram.y" +case 31: +#line 298 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1533,8 +1540,8 @@ case 30: } } break; -case 31: -#line 302 "gram.y" +case 32: +#line 305 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1543,8 +1550,8 @@ case 31: } } break; -case 32: -#line 309 "gram.y" +case 33: +#line 312 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1553,8 +1560,8 @@ case 32: } } break; -case 33: -#line 316 "gram.y" +case 34: +#line 319 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1563,15 +1570,15 @@ case 33: } } break; -case 35: -#line 326 "gram.y" +case 36: +#line 329 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; -case 36: -#line 332 "gram.y" +case 37: +#line 335 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1585,22 +1592,22 @@ case 36: yyval.privilege = p; } break; -case 37: -#line 346 "gram.y" +case 38: +#line 349 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 38: -#line 350 "gram.y" +case 39: +#line 353 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 39: -#line 356 "gram.y" +case 40: +#line 359 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1609,8 +1616,8 @@ case 39: } } break; -case 40: -#line 363 "gram.y" +case 41: +#line 366 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1619,8 +1626,8 @@ case 40: } } break; -case 41: -#line 370 "gram.y" +case 42: +#line 373 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1629,8 +1636,8 @@ case 41: } } break; -case 42: -#line 377 "gram.y" +case 43: +#line 380 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1639,8 +1646,8 @@ case 42: } } break; -case 43: -#line 384 "gram.y" +case 44: +#line 387 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1649,8 +1656,8 @@ case 43: } } break; -case 45: -#line 394 "gram.y" +case 46: +#line 397 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1703,8 +1710,8 @@ case 45: yyval.cmndspec = yyvsp[-2].cmndspec; } break; -case 46: -#line 447 "gram.y" +case 47: +#line 450 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1757,8 +1764,8 @@ case 46: yyval.cmndspec = cs; } break; -case 47: -#line 500 "gram.y" +case 48: +#line 503 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1767,8 +1774,8 @@ case 47: } } break; -case 48: -#line 507 "gram.y" +case 49: +#line 510 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1777,8 +1784,8 @@ case 48: } } break; -case 49: -#line 514 "gram.y" +case 50: +#line 517 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1787,8 +1794,8 @@ case 49: } } break; -case 50: -#line 521 "gram.y" +case 51: +#line 524 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1797,21 +1804,21 @@ case 50: } } break; -case 52: -#line 531 "gram.y" +case 53: +#line 534 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; -case 53: -#line 537 "gram.y" +case 54: +#line 540 "gram.y" { yyval.member = yyvsp[0].member; } break; -case 54: -#line 540 "gram.y" +case 55: +#line 543 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1832,76 +1839,76 @@ case 54: yyval.member = yyvsp[0].member; } break; -case 55: -#line 561 "gram.y" +case 56: +#line 564 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 56: -#line 565 "gram.y" +case 57: +#line 568 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 57: -#line 571 "gram.y" -{ - yyval.string = yyvsp[0].string; - } -break; case 58: -#line 576 "gram.y" +#line 574 "gram.y" { yyval.string = yyvsp[0].string; } break; case 59: -#line 580 "gram.y" +#line 579 "gram.y" { yyval.string = yyvsp[0].string; } break; case 60: -#line 585 "gram.y" +#line 583 "gram.y" { yyval.string = yyvsp[0].string; } break; case 61: -#line 590 "gram.y" +#line 588 "gram.y" { yyval.string = yyvsp[0].string; } break; case 62: -#line 595 "gram.y" +#line 593 "gram.y" { yyval.string = yyvsp[0].string; } break; case 63: -#line 599 "gram.y" +#line 598 "gram.y" { yyval.string = yyvsp[0].string; } break; case 64: -#line 604 "gram.y" +#line 602 "gram.y" { - yyval.runas = NULL; + yyval.string = yyvsp[0].string; } break; case 65: #line 607 "gram.y" { - yyval.runas = yyvsp[-1].runas; + yyval.runas = NULL; } break; case 66: -#line 612 "gram.y" +#line 610 "gram.y" +{ + yyval.runas = yyvsp[-1].runas; + } +break; +case 67: +#line 615 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1918,8 +1925,8 @@ case 66: } } break; -case 67: -#line 627 "gram.y" +case 68: +#line 630 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1930,8 +1937,8 @@ case 67: /* $$->runasgroups = NULL; */ } break; -case 68: -#line 636 "gram.y" +case 69: +#line 639 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1942,8 +1949,8 @@ case 68: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 69: -#line 645 "gram.y" +case 70: +#line 648 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1954,8 +1961,8 @@ case 69: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 70: -#line 654 "gram.y" +case 71: +#line 657 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1972,14 +1979,14 @@ case 70: } } break; -case 71: -#line 671 "gram.y" +case 72: +#line 674 "gram.y" { init_options(&yyval.options); } break; -case 72: -#line 674 "gram.y" +case 73: +#line 677 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1989,8 +1996,8 @@ case 72: } } break; -case 73: -#line 682 "gram.y" +case 74: +#line 685 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -2000,8 +2007,8 @@ case 73: } } break; -case 74: -#line 690 "gram.y" +case 75: +#line 693 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -2014,8 +2021,8 @@ case 74: } } break; -case 75: -#line 701 "gram.y" +case 76: +#line 704 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -2023,8 +2030,8 @@ case 75: #endif } break; -case 76: -#line 707 "gram.y" +case 77: +#line 710 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -2032,8 +2039,8 @@ case 76: #endif } break; -case 77: -#line 713 "gram.y" +case 78: +#line 716 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -2041,8 +2048,8 @@ case 77: #endif } break; -case 78: -#line 719 "gram.y" +case 79: +#line 722 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -2050,98 +2057,98 @@ case 78: #endif } break; -case 79: -#line 727 "gram.y" -{ - TAGS_INIT(yyval.tag); - } -break; case 80: #line 730 "gram.y" { - yyval.tag.nopasswd = true; + TAGS_INIT(yyval.tag); } break; case 81: #line 733 "gram.y" { - yyval.tag.nopasswd = false; + yyval.tag.nopasswd = true; } break; case 82: #line 736 "gram.y" { - yyval.tag.noexec = true; + yyval.tag.nopasswd = false; } break; case 83: #line 739 "gram.y" { - yyval.tag.noexec = false; + yyval.tag.noexec = true; } break; case 84: #line 742 "gram.y" { - yyval.tag.setenv = true; + yyval.tag.noexec = false; } break; case 85: #line 745 "gram.y" { - yyval.tag.setenv = false; + yyval.tag.setenv = true; } break; case 86: #line 748 "gram.y" { - yyval.tag.log_input = true; + yyval.tag.setenv = false; } break; case 87: #line 751 "gram.y" { - yyval.tag.log_input = false; + yyval.tag.log_input = true; } break; case 88: #line 754 "gram.y" { - yyval.tag.log_output = true; + yyval.tag.log_input = false; } break; case 89: #line 757 "gram.y" { - yyval.tag.log_output = false; + yyval.tag.log_output = true; } break; case 90: #line 760 "gram.y" { - yyval.tag.follow = true; + yyval.tag.log_output = false; } break; case 91: #line 763 "gram.y" { - yyval.tag.follow = false; + yyval.tag.follow = true; } break; case 92: #line 766 "gram.y" { - yyval.tag.send_mail = true; + yyval.tag.follow = false; } break; case 93: #line 769 "gram.y" { - yyval.tag.send_mail = false; + yyval.tag.send_mail = true; } break; case 94: -#line 774 "gram.y" +#line 772 "gram.y" +{ + yyval.tag.send_mail = false; + } +break; +case 95: +#line 777 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2150,8 +2157,8 @@ case 94: } } break; -case 95: -#line 781 "gram.y" +case 96: +#line 784 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2160,8 +2167,8 @@ case 95: } } break; -case 96: -#line 788 "gram.y" +case 97: +#line 791 "gram.y" { struct sudo_command *c; @@ -2177,8 +2184,8 @@ case 96: } } break; -case 99: -#line 808 "gram.y" +case 100: +#line 811 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2189,15 +2196,15 @@ case 99: } } break; -case 101: -#line 820 "gram.y" +case 102: +#line 823 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 104: -#line 830 "gram.y" +case 105: +#line 833 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2208,15 +2215,15 @@ case 104: } } break; -case 106: -#line 842 "gram.y" +case 107: +#line 845 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 109: -#line 852 "gram.y" +case 110: +#line 855 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2227,8 +2234,8 @@ case 109: } } break; -case 112: -#line 867 "gram.y" +case 113: +#line 870 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2239,29 +2246,29 @@ case 112: } } break; -case 114: -#line 879 "gram.y" +case 115: +#line 882 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 115: -#line 885 "gram.y" +case 116: +#line 888 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 116: -#line 889 "gram.y" +case 117: +#line 892 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 117: -#line 895 "gram.y" +case 118: +#line 898 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2270,8 +2277,8 @@ case 117: } } break; -case 118: -#line 902 "gram.y" +case 119: +#line 905 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2280,8 +2287,8 @@ case 118: } } break; -case 119: -#line 909 "gram.y" +case 120: +#line 912 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2290,8 +2297,8 @@ case 119: } } break; -case 120: -#line 916 "gram.y" +case 121: +#line 919 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2300,8 +2307,8 @@ case 120: } } break; -case 121: -#line 923 "gram.y" +case 122: +#line 926 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2310,29 +2317,29 @@ case 121: } } break; -case 123: -#line 933 "gram.y" +case 124: +#line 936 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 124: -#line 939 "gram.y" +case 125: +#line 942 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 125: -#line 943 "gram.y" +case 126: +#line 946 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 126: -#line 949 "gram.y" +case 127: +#line 952 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2341,8 +2348,8 @@ case 126: } } break; -case 127: -#line 956 "gram.y" +case 128: +#line 959 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2351,8 +2358,8 @@ case 127: } } break; -case 128: -#line 963 "gram.y" +case 129: +#line 966 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2361,7 +2368,7 @@ case 128: } } break; -#line 2351 "gram.c" +#line 2358 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 81e77bdbd2..8bedcb4af9 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -192,6 +192,9 @@ entry : '\n' { | error '\n' { yyerrok; } + | error END { + yyerrok; + } | include { if (!push_include($1, false)) { free($1); From d72a48dc782b5b3db5e63284a319ee5eaa05e636 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 16 Aug 2020 06:42:15 -0600 Subject: [PATCH 042/113] Add NOMATCH token and use it in the lexer for an unmatched pattern. The ERROR token is now only used for errors detected by the lexer and for which we've already printed an error. This lets us remove the hack in sudoerserror() and just check last_token to determine whether or not to display the error. --- plugins/sudoers/gram.c | 469 ++++++++++++++++++++--------------------- plugins/sudoers/gram.h | 25 +-- plugins/sudoers/gram.y | 9 +- plugins/sudoers/toke.c | 13 +- plugins/sudoers/toke.l | 7 +- 5 files changed, 260 insertions(+), 263 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 95deeb3373..c6e596b612 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -169,18 +169,19 @@ typedef union { #define USERALIAS 289 #define RUNASALIAS 290 #define ERROR 291 -#define TYPE 292 -#define ROLE 293 -#define PRIVS 294 -#define LIMITPRIVS 295 -#define CMND_TIMEOUT 296 -#define NOTBEFORE 297 -#define NOTAFTER 298 -#define MYSELF 299 -#define SHA224_TOK 300 -#define SHA256_TOK 301 -#define SHA384_TOK 302 -#define SHA512_TOK 303 +#define NOMATCH 292 +#define TYPE 293 +#define ROLE 294 +#define PRIVS 295 +#define LIMITPRIVS 296 +#define CMND_TIMEOUT 297 +#define NOTBEFORE 298 +#define NOTAFTER 299 +#define MYSELF 300 +#define SHA224_TOK 301 +#define SHA256_TOK 302 +#define SHA384_TOK 303 +#define SHA512_TOK 304 #define YYERRCODE 256 const short sudoerslhs[] = { -1, @@ -248,32 +249,32 @@ const short sudoersdgoto[] = }; const short sudoerssindex[] = { 565, - 51, 0, 0, 0, 0, -249, -241, -24, 514, 23, - 23, -26, 0, -232, -209, -208, -203, -221, 0, 0, - 0, 0, -13, 0, 0, 565, 0, 0, 0, 2, - 5, 9, -211, 0, 18, 0, 0, 0, 0, 0, - -228, 0, -23, 0, -20, -20, 0, 0, 0, -239, - 8, 10, 21, 22, 0, 0, 0, -16, 0, -6, - 28, 33, 0, 31, 35, 0, 34, 38, 0, 37, - 39, 0, 0, 23, -38, 0, 41, 0, 53, 0, - 0, 64, 0, 0, -163, -161, -158, 0, -24, 0, - 514, 18, 18, 18, 0, -157, -156, -155, -154, -26, - 18, -225, 0, 514, -232, -26, -209, 23, -208, 23, - -203, 0, 72, 514, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 0, 70, 0, 73, 0, 73, 0, -33, 0, 74, - 0, 0, 57, -15, 78, 72, -210, 0, 0, 0, - -219, 0, 0, 76, 57, 0, 0, 54, 60, 61, - 62, 63, 65, 66, 631, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 76, -138, -135, -133, -131, -130, - -129, -128, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 0, -256, -253, -12, 514, 23, + 23, -28, 0, -246, -227, -219, -214, -220, 0, 0, + 0, 0, -9, 0, 0, 565, 0, 0, 0, 4, + 9, 15, -208, 0, 11, 0, 0, 0, 0, 0, + -211, 0, -27, 0, -18, -18, 0, 0, 0, -229, + 6, 10, 14, 20, 0, 0, 0, -17, 0, -31, + 18, 22, 0, 21, 33, 0, 31, 35, 0, 34, + 38, 0, 0, 23, -7, 0, 39, 0, 53, 0, + 0, 67, 0, 0, -193, -190, -160, 0, -12, 0, + 514, 11, 11, 11, 0, -159, -157, -156, -155, -28, + 11, -202, 0, 514, -246, -28, -227, 23, -219, 23, + -214, 0, 70, 514, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, + 0, 69, 0, 73, 0, 73, 0, -25, 0, 74, + 0, 0, 57, -26, 78, 70, -210, 0, 0, 0, + -238, 0, 0, 77, 57, 0, 0, 50, 54, 62, + 63, 64, 65, 66, 632, 0, 0, 0, 0, 0, + 0, 0, 0, 57, 77, -149, -135, -133, -132, -131, + -130, -129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; const short sudoersrindex[] = - { 136, + { 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 1, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -284,53 +285,53 @@ const short sudoersrindex[] = 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 71, 0, 106, 0, 141, 0, 97, 0, 176, - 0, 0, 99, 101, 0, 584, 663, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, + 0, 71, 0, 106, 0, 141, 0, 96, 0, 176, + 0, 0, 97, 99, 0, 584, 665, 0, 0, 0, + 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}; const short sudoersgindex[] = { 0, - -1, 0, 58, 14, 96, 88, -92, 43, 109, 7, - 67, 79, 134, -7, -19, 3, 4, 0, 0, 42, + -2, 0, 56, 16, 98, 86, -100, 41, 108, -6, + 61, 79, 137, 12, -20, 5, 2, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 55, 0, 0, 135, 0, 0, 0, 0, - 68, 56, 49, 59, + 0, 0, 58, 0, 0, 133, 0, 0, 0, 0, + 60, 55, 52, 59, }; -#define YYTABLESIZE 966 +#define YYTABLESIZE 969 const short sudoerstable[] = - { 18, - 30, 80, 45, 46, 83, 91, 50, 128, 33, 33, - 30, 81, 33, 30, 84, 43, 33, 47, 48, 41, - 91, 31, 113, 74, 143, 61, 50, 100, 74, 36, - 74, 37, 38, 30, 39, 100, 2, 102, 148, 3, - 4, 5, 155, 149, 30, 100, 49, 88, 64, 67, - 28, 86, 115, 87, 70, 18, 92, 40, 93, 94, - 29, 89, 116, 117, 13, 96, 150, 97, 100, 85, - 105, 101, 197, 118, 51, 52, 53, 54, 98, 99, - 105, 158, 159, 160, 161, 162, 163, 164, 104, 151, - 105, 106, 107, 100, 108, 109, 111, 110, 114, 119, - 134, 120, 136, 105, 121, 113, 124, 125, 126, 127, - 130, 138, 91, 100, 176, 113, 74, 146, 156, 174, - 177, 178, 179, 180, 199, 181, 182, 200, 105, 201, - 144, 202, 203, 204, 205, 1, 2, 67, 113, 71, - 110, 68, 70, 69, 157, 95, 122, 103, 132, 90, - 110, 73, 112, 173, 198, 142, 129, 123, 175, 137, - 78, 0, 133, 113, 0, 0, 0, 135, 0, 0, - 0, 0, 131, 110, 0, 37, 0, 0, 0, 0, + { 128, + 30, 50, 43, 80, 50, 33, 30, 18, 83, 31, + 30, 61, 102, 81, 33, 33, 91, 74, 84, 148, + 33, 45, 46, 41, 149, 74, 100, 47, 48, 28, + 64, 155, 143, 30, 74, 100, 91, 2, 67, 29, + 3, 4, 5, 70, 30, 100, 36, 150, 37, 38, + 88, 39, 115, 113, 89, 18, 49, 86, 92, 87, + 93, 94, 116, 96, 197, 13, 117, 97, 100, 119, + 105, 98, 120, 101, 40, 85, 118, 99, 104, 105, + 105, 106, 158, 159, 160, 161, 162, 163, 164, 151, + 107, 108, 109, 100, 110, 111, 114, 130, 51, 52, + 53, 54, 121, 105, 124, 113, 125, 126, 127, 138, + 176, 91, 100, 199, 177, 113, 74, 146, 156, 134, + 174, 136, 178, 179, 180, 181, 182, 200, 105, 201, + 202, 203, 204, 205, 1, 2, 67, 71, 113, 68, + 110, 70, 69, 157, 122, 103, 132, 95, 90, 144, + 110, 123, 112, 198, 73, 173, 175, 142, 78, 129, + 0, 133, 137, 113, 131, 0, 0, 135, 0, 0, + 0, 0, 0, 110, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 2, 0, 0, 3, 4, 5, - 47, 48, 0, 37, 32, 32, 0, 0, 32, 0, - 0, 0, 32, 15, 36, 12, 37, 38, 0, 39, - 47, 48, 13, 0, 0, 12, 30, 79, 30, 49, - 82, 30, 30, 30, 0, 30, 30, 30, 30, 30, - 30, 30, 40, 51, 52, 53, 54, 0, 12, 49, + 15, 0, 0, 0, 0, 47, 48, 0, 47, 48, + 0, 32, 2, 37, 0, 3, 4, 5, 0, 0, + 32, 32, 0, 15, 0, 12, 32, 0, 36, 0, + 37, 38, 0, 39, 49, 12, 30, 49, 30, 79, + 13, 30, 30, 30, 82, 30, 30, 30, 30, 30, + 30, 30, 51, 52, 53, 54, 40, 0, 12, 0, 2, 0, 13, 3, 4, 5, 30, 30, 30, 30, 30, 100, 13, 100, 0, 0, 100, 100, 100, 0, 100, 100, 100, 100, 100, 100, 100, 0, 13, 0, @@ -369,10 +370,10 @@ const short sudoerstable[] = 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, 14, 14, 10, 0, 10, 0, 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, - 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 18, 0, 18, 0, 0, 18, 18, 18, 0, 18, 18, 18, - 18, 18, 18, 18, 0, 80, 0, 0, 0, 0, + 18, 18, 18, 18, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 16, 0, 16, 0, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, @@ -390,47 +391,47 @@ const short sudoerstable[] = 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 0, 0, 0, 0, 0, 65, 65, 65, 65, 65, - 65, 65, 0, 65, 65, 65, 65, 47, 48, 0, + 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, + 65, 65, 65, 0, 65, 65, 65, 65, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 49, 0, 0, 80, + 0, 0, 0, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 49, 0, 0, + 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 52, 53, 54, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 52, 53, 54, 80, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 80, 80, 80, + 0, 0, 0, 0, 0, 80, 80, 80, 80, }; const short sudoerscheck[] = - { 33, - 0, 0, 10, 11, 0, 44, 33, 100, 33, 33, - 10, 10, 33, 263, 10, 9, 33, 257, 258, 33, - 44, 263, 61, 44, 58, 258, 33, 44, 44, 258, - 44, 260, 261, 33, 263, 0, 258, 44, 258, 261, - 262, 263, 58, 263, 44, 10, 286, 259, 258, 258, - 0, 43, 0, 45, 258, 33, 43, 286, 45, 46, - 10, 44, 10, 0, 286, 58, 286, 58, 33, 61, - 0, 58, 165, 10, 300, 301, 302, 303, 58, 58, - 10, 292, 293, 294, 295, 296, 297, 298, 61, 33, - 58, 61, 58, 58, 61, 58, 58, 61, 58, 263, - 108, 263, 110, 33, 263, 0, 264, 264, 264, 264, - 104, 40, 44, 44, 61, 10, 44, 44, 41, 44, - 61, 61, 61, 61, 263, 61, 61, 263, 58, 263, - 138, 263, 263, 263, 263, 0, 0, 41, 33, 41, - 0, 41, 41, 41, 146, 50, 89, 60, 106, 41, - 10, 18, 74, 151, 174, 114, 102, 91, 155, 111, - 26, -1, 107, 58, -1, -1, -1, 109, -1, -1, - -1, -1, 105, 33, -1, 0, -1, -1, -1, -1, + { 100, + 0, 33, 9, 0, 33, 33, 263, 33, 0, 263, + 10, 258, 44, 10, 33, 33, 44, 44, 10, 258, + 33, 10, 11, 33, 263, 44, 44, 257, 258, 0, + 258, 58, 58, 33, 44, 0, 44, 258, 258, 10, + 261, 262, 263, 258, 44, 10, 258, 286, 260, 261, + 259, 263, 0, 61, 44, 33, 286, 43, 43, 45, + 45, 46, 10, 58, 165, 286, 0, 58, 33, 263, + 0, 58, 263, 58, 286, 61, 10, 58, 61, 58, + 10, 61, 293, 294, 295, 296, 297, 298, 299, 33, + 58, 61, 58, 58, 61, 58, 58, 104, 301, 302, + 303, 304, 263, 33, 264, 0, 264, 264, 264, 40, + 61, 44, 44, 263, 61, 10, 44, 44, 41, 108, + 44, 110, 61, 61, 61, 61, 61, 263, 58, 263, + 263, 263, 263, 263, 0, 0, 41, 41, 33, 41, + 0, 41, 41, 146, 89, 60, 106, 50, 41, 138, + 10, 91, 74, 174, 18, 151, 155, 114, 26, 102, + -1, 107, 111, 58, 105, -1, -1, 109, -1, -1, + -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, -1, -1, -1, 258, -1, -1, 261, 262, 263, - 257, 258, -1, 58, 259, 259, -1, -1, 259, -1, - -1, -1, 259, 33, 258, 0, 260, 261, -1, 263, - 257, 258, 286, -1, -1, 10, 256, 256, 258, 286, - 256, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 270, 271, 286, 300, 301, 302, 303, -1, 33, 286, + 10, -1, -1, -1, -1, 257, 258, -1, 257, 258, + -1, 259, 258, 58, -1, 261, 262, 263, -1, -1, + 259, 259, -1, 33, -1, 0, 259, -1, 258, -1, + 260, 261, -1, 263, 286, 10, 256, 286, 258, 256, + 286, 261, 262, 263, 256, 265, 266, 267, 268, 269, + 270, 271, 301, 302, 303, 304, 286, -1, 33, -1, 258, -1, 0, 261, 262, 263, 286, 287, 288, 289, 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, 286, -1, @@ -469,10 +470,10 @@ const short sudoerscheck[] = -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, - -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, - 268, 269, 270, 271, -1, 33, -1, -1, -1, -1, + 268, 269, 270, 271, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, @@ -490,22 +491,22 @@ const short sudoerscheck[] = 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, 288, 289, 290, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - -1, -1, -1, -1, -1, 292, 293, 294, 295, 296, - 297, 298, -1, 300, 301, 302, 303, 257, 258, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, -1, -1, 257, - 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 300, 301, 302, 303, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, -1, + -1, -1, -1, -1, -1, -1, 293, 294, 295, 296, + 297, 298, 299, -1, 301, 302, 303, 304, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 300, 301, 302, 303, + -1, -1, -1, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, + -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 301, 302, 303, 304, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 301, 302, 303, 304, }; #define YYFINAL 20 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 303 +#define YYMAXTOKEN 304 #if YYDEBUG const char * const sudoersname[] = { @@ -521,9 +522,9 @@ const char * const sudoersname[] = "DEFAULTS_RUNAS","DEFAULTS_CMND","NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV", "NOSETENV","LOG_INPUT","NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","MAIL", "NOMAIL","FOLLOWLNK","NOFOLLOWLNK","ALL","HOSTALIAS","CMNDALIAS","USERALIAS", -"RUNASALIAS","ERROR","TYPE","ROLE","PRIVS","LIMITPRIVS","CMND_TIMEOUT", -"NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK","SHA256_TOK","SHA384_TOK", -"SHA512_TOK", +"RUNASALIAS","ERROR","NOMATCH","TYPE","ROLE","PRIVS","LIMITPRIVS", +"CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK","SHA256_TOK", +"SHA384_TOK","SHA512_TOK", }; const char * const sudoersrule[] = {"$accept : file", @@ -684,19 +685,15 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 976 "gram.y" +#line 977 "gram.y" void sudoerserror(const char *s) { - static int last_error_line = -1; - static char *last_error_file = NULL; debug_decl(sudoerserror, SUDOERS_DEBUG_PARSER); - /* Avoid displaying a generic error after a more specific one. */ - if (last_error_file == sudoers && last_error_line == this_lineno) + /* The lexer displays more detailed messages for ERROR tokens. */ + if (last_token == ERROR) debug_return; - last_error_file = sudoers; - last_error_line = this_lineno; /* Save the line the first error occurred on. */ if (errorlineno == -1) { @@ -1161,7 +1158,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1151 "gram.c" +#line 1148 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1352,29 +1349,29 @@ yyparse(void) switch (yyn) { case 1: -#line 181 "gram.y" +#line 182 "gram.y" { ; } break; case 5: -#line 189 "gram.y" +#line 190 "gram.y" { ; } break; case 6: -#line 192 "gram.y" +#line 193 "gram.y" { yyerrok; } break; case 7: -#line 195 "gram.y" +#line 196 "gram.y" { yyerrok; } break; case 8: -#line 198 "gram.y" +#line 199 "gram.y" { if (!push_include(yyvsp[0].string, false)) { free(yyvsp[0].string); @@ -1384,7 +1381,7 @@ case 8: } break; case 9: -#line 205 "gram.y" +#line 206 "gram.y" { if (!push_include(yyvsp[0].string, true)) { free(yyvsp[0].string); @@ -1394,7 +1391,7 @@ case 9: } break; case 10: -#line 212 "gram.y" +#line 213 "gram.y" { if (!add_userspec(yyvsp[-1].member, yyvsp[0].privilege)) { sudoerserror(N_("unable to allocate memory")); @@ -1403,125 +1400,125 @@ case 10: } break; case 11: -#line 218 "gram.y" +#line 219 "gram.y" { ; } break; case 12: -#line 221 "gram.y" +#line 222 "gram.y" { ; } break; case 13: -#line 224 "gram.y" +#line 225 "gram.y" { ; } break; case 14: -#line 227 "gram.y" +#line 228 "gram.y" { ; } break; case 15: -#line 230 "gram.y" +#line 231 "gram.y" { if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) YYERROR; } break; case 16: -#line 234 "gram.y" +#line 235 "gram.y" { if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 17: -#line 238 "gram.y" +#line 239 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 18: -#line 242 "gram.y" +#line 243 "gram.y" { if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 19: -#line 246 "gram.y" +#line 247 "gram.y" { if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) YYERROR; } break; case 20: -#line 252 "gram.y" +#line 253 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 21: -#line 255 "gram.y" +#line 256 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 22: -#line 259 "gram.y" +#line 260 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 23: -#line 262 "gram.y" +#line 263 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 24: -#line 268 "gram.y" +#line 269 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 25: -#line 271 "gram.y" +#line 272 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 26: -#line 275 "gram.y" +#line 276 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 27: -#line 278 "gram.y" +#line 279 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 29: -#line 285 "gram.y" +#line 286 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; case 30: -#line 291 "gram.y" +#line 292 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1531,7 +1528,7 @@ case 30: } break; case 31: -#line 298 "gram.y" +#line 299 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1541,7 +1538,7 @@ case 31: } break; case 32: -#line 305 "gram.y" +#line 306 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1551,7 +1548,7 @@ case 32: } break; case 33: -#line 312 "gram.y" +#line 313 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1561,7 +1558,7 @@ case 33: } break; case 34: -#line 319 "gram.y" +#line 320 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1571,14 +1568,14 @@ case 34: } break; case 36: -#line 329 "gram.y" +#line 330 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; case 37: -#line 335 "gram.y" +#line 336 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1593,21 +1590,21 @@ case 37: } break; case 38: -#line 349 "gram.y" +#line 350 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 39: -#line 353 "gram.y" +#line 354 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 40: -#line 359 "gram.y" +#line 360 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1617,7 +1614,7 @@ case 40: } break; case 41: -#line 366 "gram.y" +#line 367 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1627,7 +1624,7 @@ case 41: } break; case 42: -#line 373 "gram.y" +#line 374 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1637,7 +1634,7 @@ case 42: } break; case 43: -#line 380 "gram.y" +#line 381 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1647,7 +1644,7 @@ case 43: } break; case 44: -#line 387 "gram.y" +#line 388 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1657,7 +1654,7 @@ case 44: } break; case 46: -#line 397 "gram.y" +#line 398 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1711,7 +1708,7 @@ case 46: } break; case 47: -#line 450 "gram.y" +#line 451 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1765,7 +1762,7 @@ case 47: } break; case 48: -#line 503 "gram.y" +#line 504 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1775,7 +1772,7 @@ case 48: } break; case 49: -#line 510 "gram.y" +#line 511 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1785,7 +1782,7 @@ case 49: } break; case 50: -#line 517 "gram.y" +#line 518 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1795,7 +1792,7 @@ case 50: } break; case 51: -#line 524 "gram.y" +#line 525 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1805,20 +1802,20 @@ case 51: } break; case 53: -#line 534 "gram.y" +#line 535 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; case 54: -#line 540 "gram.y" +#line 541 "gram.y" { yyval.member = yyvsp[0].member; } break; case 55: -#line 543 "gram.y" +#line 544 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1840,75 +1837,75 @@ case 55: } break; case 56: -#line 564 "gram.y" +#line 565 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 57: -#line 568 "gram.y" +#line 569 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 58: -#line 574 "gram.y" +#line 575 "gram.y" { yyval.string = yyvsp[0].string; } break; case 59: -#line 579 "gram.y" +#line 580 "gram.y" { yyval.string = yyvsp[0].string; } break; case 60: -#line 583 "gram.y" +#line 584 "gram.y" { yyval.string = yyvsp[0].string; } break; case 61: -#line 588 "gram.y" +#line 589 "gram.y" { yyval.string = yyvsp[0].string; } break; case 62: -#line 593 "gram.y" +#line 594 "gram.y" { yyval.string = yyvsp[0].string; } break; case 63: -#line 598 "gram.y" +#line 599 "gram.y" { yyval.string = yyvsp[0].string; } break; case 64: -#line 602 "gram.y" +#line 603 "gram.y" { yyval.string = yyvsp[0].string; } break; case 65: -#line 607 "gram.y" +#line 608 "gram.y" { yyval.runas = NULL; } break; case 66: -#line 610 "gram.y" +#line 611 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; case 67: -#line 615 "gram.y" +#line 616 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1926,7 +1923,7 @@ case 67: } break; case 68: -#line 630 "gram.y" +#line 631 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1938,7 +1935,7 @@ case 68: } break; case 69: -#line 639 "gram.y" +#line 640 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1950,7 +1947,7 @@ case 69: } break; case 70: -#line 648 "gram.y" +#line 649 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1962,7 +1959,7 @@ case 70: } break; case 71: -#line 657 "gram.y" +#line 658 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1980,13 +1977,13 @@ case 71: } break; case 72: -#line 674 "gram.y" +#line 675 "gram.y" { init_options(&yyval.options); } break; case 73: -#line 677 "gram.y" +#line 678 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1997,7 +1994,7 @@ case 73: } break; case 74: -#line 685 "gram.y" +#line 686 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -2008,7 +2005,7 @@ case 74: } break; case 75: -#line 693 "gram.y" +#line 694 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -2022,7 +2019,7 @@ case 75: } break; case 76: -#line 704 "gram.y" +#line 705 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -2031,7 +2028,7 @@ case 76: } break; case 77: -#line 710 "gram.y" +#line 711 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -2040,7 +2037,7 @@ case 77: } break; case 78: -#line 716 "gram.y" +#line 717 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -2049,7 +2046,7 @@ case 78: } break; case 79: -#line 722 "gram.y" +#line 723 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -2058,97 +2055,97 @@ case 79: } break; case 80: -#line 730 "gram.y" +#line 731 "gram.y" { TAGS_INIT(yyval.tag); } break; case 81: -#line 733 "gram.y" +#line 734 "gram.y" { yyval.tag.nopasswd = true; } break; case 82: -#line 736 "gram.y" +#line 737 "gram.y" { yyval.tag.nopasswd = false; } break; case 83: -#line 739 "gram.y" +#line 740 "gram.y" { yyval.tag.noexec = true; } break; case 84: -#line 742 "gram.y" +#line 743 "gram.y" { yyval.tag.noexec = false; } break; case 85: -#line 745 "gram.y" +#line 746 "gram.y" { yyval.tag.setenv = true; } break; case 86: -#line 748 "gram.y" +#line 749 "gram.y" { yyval.tag.setenv = false; } break; case 87: -#line 751 "gram.y" +#line 752 "gram.y" { yyval.tag.log_input = true; } break; case 88: -#line 754 "gram.y" +#line 755 "gram.y" { yyval.tag.log_input = false; } break; case 89: -#line 757 "gram.y" +#line 758 "gram.y" { yyval.tag.log_output = true; } break; case 90: -#line 760 "gram.y" +#line 761 "gram.y" { yyval.tag.log_output = false; } break; case 91: -#line 763 "gram.y" +#line 764 "gram.y" { yyval.tag.follow = true; } break; case 92: -#line 766 "gram.y" +#line 767 "gram.y" { yyval.tag.follow = false; } break; case 93: -#line 769 "gram.y" +#line 770 "gram.y" { yyval.tag.send_mail = true; } break; case 94: -#line 772 "gram.y" +#line 773 "gram.y" { yyval.tag.send_mail = false; } break; case 95: -#line 777 "gram.y" +#line 778 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2158,7 +2155,7 @@ case 95: } break; case 96: -#line 784 "gram.y" +#line 785 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2168,7 +2165,7 @@ case 96: } break; case 97: -#line 791 "gram.y" +#line 792 "gram.y" { struct sudo_command *c; @@ -2185,7 +2182,7 @@ case 97: } break; case 100: -#line 811 "gram.y" +#line 812 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2197,14 +2194,14 @@ case 100: } break; case 102: -#line 823 "gram.y" +#line 824 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 105: -#line 833 "gram.y" +#line 834 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2216,14 +2213,14 @@ case 105: } break; case 107: -#line 845 "gram.y" +#line 846 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 110: -#line 855 "gram.y" +#line 856 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2235,7 +2232,7 @@ case 110: } break; case 113: -#line 870 "gram.y" +#line 871 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2247,28 +2244,28 @@ case 113: } break; case 115: -#line 882 "gram.y" +#line 883 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 116: -#line 888 "gram.y" +#line 889 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 117: -#line 892 "gram.y" +#line 893 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 118: -#line 898 "gram.y" +#line 899 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2278,7 +2275,7 @@ case 118: } break; case 119: -#line 905 "gram.y" +#line 906 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2288,7 +2285,7 @@ case 119: } break; case 120: -#line 912 "gram.y" +#line 913 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2298,7 +2295,7 @@ case 120: } break; case 121: -#line 919 "gram.y" +#line 920 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2308,7 +2305,7 @@ case 121: } break; case 122: -#line 926 "gram.y" +#line 927 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2318,28 +2315,28 @@ case 122: } break; case 124: -#line 936 "gram.y" +#line 937 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 125: -#line 942 "gram.y" +#line 943 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 126: -#line 946 "gram.y" +#line 947 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 127: -#line 952 "gram.y" +#line 953 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2349,7 +2346,7 @@ case 127: } break; case 128: -#line 959 "gram.y" +#line 960 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2359,7 +2356,7 @@ case 128: } break; case 129: -#line 966 "gram.y" +#line 967 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2368,7 +2365,7 @@ case 129: } } break; -#line 2358 "gram.c" +#line 2355 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index 6cfe58631b..ba59211125 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -34,18 +34,19 @@ #define USERALIAS 289 #define RUNASALIAS 290 #define ERROR 291 -#define TYPE 292 -#define ROLE 293 -#define PRIVS 294 -#define LIMITPRIVS 295 -#define CMND_TIMEOUT 296 -#define NOTBEFORE 297 -#define NOTAFTER 298 -#define MYSELF 299 -#define SHA224_TOK 300 -#define SHA256_TOK 301 -#define SHA384_TOK 302 -#define SHA512_TOK 303 +#define NOMATCH 292 +#define TYPE 293 +#define ROLE 294 +#define PRIVS 295 +#define LIMITPRIVS 296 +#define CMND_TIMEOUT 297 +#define NOTBEFORE 298 +#define NOTAFTER 299 +#define MYSELF 300 +#define SHA224_TOK 301 +#define SHA256_TOK 302 +#define SHA384_TOK 303 +#define SHA512_TOK 304 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 8bedcb4af9..aa749c741c 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -128,6 +128,7 @@ static struct command_digest *new_digest(int, char *); %token '(' ')' /* runas tokens */ %token '\n' /* newline (with optional comment) */ %token ERROR /* error from lexer */ +%token NOMATCH /* no match from lexer */ %token TYPE /* SELinux type */ %token ROLE /* SELinux role */ %token PRIVS /* Solaris privileges */ @@ -976,15 +977,11 @@ group : ALIAS { void sudoerserror(const char *s) { - static int last_error_line = -1; - static char *last_error_file = NULL; debug_decl(sudoerserror, SUDOERS_DEBUG_PARSER); - /* Avoid displaying a generic error after a more specific one. */ - if (last_error_file == sudoers && last_error_line == this_lineno) + /* The lexer displays more detailed messages for ERROR tokens. */ + if (last_token == ERROR) debug_return; - last_error_file = sudoers; - last_error_line = this_lineno; /* Save the line the first error occurred on. */ if (errorlineno == -1) { diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index 50cfc23086..d9dd70af6c 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -3437,9 +3437,9 @@ case 77: YY_RULE_SETUP #line 781 "toke.l" { - LEXTRACE("ERROR "); - LEXRETURN(ERROR); - } /* parse error */ + LEXTRACE("NOMATCH "); + LEXRETURN(NOMATCH); + } /* parse error, no matching token */ YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(GOTDEFS): @@ -3453,6 +3453,7 @@ case YY_STATE_EOF(GOTINC): { if (YY_START != INITIAL) { BEGIN INITIAL; + sudoerserror("unexpected state at EOF"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } @@ -3462,10 +3463,10 @@ case YY_STATE_EOF(GOTINC): YY_BREAK case 78: YY_RULE_SETUP -#line 796 "toke.l" +#line 797 "toke.l" ECHO; YY_BREAK -#line 3463 "toke.c" +#line 3464 "toke.c" case YY_END_OF_BUFFER: { @@ -4426,7 +4427,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 796 "toke.l" +#line 797 "toke.l" struct path_list { diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index 282fd1f43f..f680dd118f 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -779,13 +779,14 @@ sudoedit { } /* comment, not uid/gid */ <*>. { - LEXTRACE("ERROR "); - LEXRETURN(ERROR); - } /* parse error */ + LEXTRACE("NOMATCH "); + LEXRETURN(NOMATCH); + } /* parse error, no matching token */ <*><> { if (YY_START != INITIAL) { BEGIN INITIAL; + sudoerserror("unexpected state at EOF"); LEXTRACE("ERROR "); LEXRETURN(ERROR); } From 11803027c61f61be36c7cc25db20bdb090fd1eca Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 16 Aug 2020 14:59:45 -0600 Subject: [PATCH 043/113] Add explicit end-of-line matching in the parser for better error messages. A valid line in sudoers must end in a newline or EOF. Previously, it was possible (though not documented) to have multiple user specs on a single line. Now, each must be on its own line. --- plugins/sudoers/gram.c | 954 ++++++++---------- plugins/sudoers/gram.y | 61 +- plugins/sudoers/regress/sudoers/test5.toke.ok | 2 +- 3 files changed, 439 insertions(+), 578 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index c6e596b612..688165aaab 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -186,321 +186,210 @@ typedef union { const short sudoerslhs[] = { -1, 0, 0, 35, 35, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 31, - 31, 31, 31, 32, 32, 32, 32, 4, 4, 3, - 3, 3, 3, 3, 21, 21, 20, 11, 11, 9, - 9, 9, 9, 9, 2, 2, 1, 33, 33, 33, - 33, 34, 34, 7, 7, 6, 6, 28, 29, 30, - 24, 25, 26, 27, 18, 18, 19, 19, 19, 19, - 19, 23, 23, 23, 23, 23, 23, 23, 23, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 5, 5, 5, 38, 38, 41, - 10, 10, 39, 39, 42, 8, 8, 40, 40, 43, - 37, 37, 44, 14, 14, 12, 12, 13, 13, 13, - 13, 13, 17, 17, 15, 15, 16, 16, 16, + 36, 36, 36, 36, 36, 36, 36, 36, 31, 31, + 32, 32, 4, 4, 3, 3, 3, 3, 3, 21, + 21, 20, 11, 11, 9, 9, 9, 9, 9, 2, + 2, 1, 33, 33, 33, 33, 34, 34, 7, 7, + 6, 6, 28, 29, 30, 24, 25, 26, 27, 18, + 18, 19, 19, 19, 19, 19, 23, 23, 23, 23, + 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 5, + 5, 5, 39, 39, 42, 10, 10, 40, 40, 43, + 8, 8, 41, 41, 44, 38, 38, 45, 14, 14, + 12, 12, 13, 13, 13, 13, 13, 17, 17, 15, + 15, 16, 16, 16, 37, 37, }; const short sudoerslen[] = { 2, - 0, 1, 1, 2, 1, 2, 2, 1, 1, 2, - 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, - 4, 3, 4, 3, 4, 3, 4, 1, 3, 1, - 2, 3, 3, 3, 1, 3, 3, 1, 2, 1, - 1, 1, 1, 1, 1, 3, 4, 3, 3, 3, - 3, 1, 3, 1, 2, 1, 2, 3, 3, 3, - 3, 3, 3, 3, 0, 3, 0, 1, 3, 2, - 1, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, - 1, 3, 1, 3, 3, 1, 3, 1, 3, 3, - 1, 3, 3, 1, 3, 1, 2, 1, 1, 1, - 1, 1, 1, 3, 1, 2, 1, 1, 1, + 0, 1, 1, 2, 1, 2, 1, 1, 3, 3, + 3, 3, 3, 3, 4, 4, 4, 4, 3, 4, + 3, 4, 1, 3, 1, 2, 3, 3, 3, 1, + 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, + 3, 4, 3, 3, 3, 3, 1, 3, 1, 2, + 1, 2, 3, 3, 3, 3, 3, 3, 3, 0, + 3, 0, 1, 3, 2, 1, 0, 2, 2, 2, + 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 1, 1, 1, 3, 3, 1, 3, 1, 3, 3, + 1, 3, 1, 3, 3, 1, 3, 3, 1, 3, + 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, + 2, 1, 1, 1, 1, 1, }; const short sudoersdefred[] = { 0, - 0, 118, 120, 121, 122, 0, 0, 0, 0, 0, - 0, 0, 119, 0, 0, 0, 0, 0, 5, 0, - 114, 116, 0, 8, 9, 0, 3, 7, 6, 0, - 0, 0, 0, 28, 0, 40, 43, 42, 44, 41, - 0, 38, 0, 101, 0, 0, 97, 96, 95, 0, - 0, 0, 0, 0, 56, 54, 106, 0, 52, 0, - 0, 0, 98, 0, 0, 103, 0, 0, 111, 0, - 0, 108, 117, 0, 0, 35, 0, 4, 0, 22, - 20, 0, 26, 24, 0, 0, 0, 31, 0, 39, - 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, - 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, - 0, 115, 0, 0, 23, 21, 27, 25, 32, 33, - 34, 29, 102, 48, 49, 50, 51, 107, 53, 0, - 99, 0, 104, 0, 112, 0, 109, 0, 45, 0, - 72, 36, 0, 0, 0, 0, 0, 127, 129, 128, - 0, 123, 125, 0, 0, 66, 46, 0, 0, 0, - 0, 0, 0, 0, 0, 76, 77, 78, 79, 75, - 73, 74, 126, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 93, 94, 91, 92, 47, 124, 62, 61, - 63, 64, 58, 59, 60, + 0, 113, 115, 116, 117, 0, 0, 0, 0, 0, + 0, 0, 114, 0, 0, 0, 0, 0, 5, 0, + 109, 111, 0, 7, 8, 0, 3, 126, 125, 6, + 0, 0, 0, 0, 23, 0, 35, 38, 37, 39, + 36, 0, 33, 0, 96, 0, 0, 92, 91, 90, + 0, 0, 0, 0, 0, 51, 49, 101, 0, 47, + 0, 0, 0, 93, 0, 0, 98, 0, 0, 106, + 0, 0, 103, 112, 0, 0, 30, 0, 4, 0, + 19, 0, 21, 0, 0, 0, 26, 0, 14, 34, + 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 50, 0, 0, 11, 0, 0, 12, 0, + 0, 10, 0, 0, 13, 110, 0, 0, 9, 20, + 22, 27, 28, 29, 24, 97, 17, 15, 16, 43, + 44, 45, 46, 102, 18, 48, 0, 94, 0, 99, + 0, 107, 0, 104, 0, 40, 0, 67, 31, 0, + 0, 0, 0, 0, 122, 124, 123, 0, 118, 120, + 0, 0, 61, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 71, 72, 73, 74, 70, 68, 69, 121, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 88, + 89, 86, 87, 42, 119, 57, 56, 58, 59, 53, + 54, 55, }; const short sudoersdgoto[] = { 20, - 139, 140, 34, 35, 55, 56, 57, 58, 42, 75, - 44, 21, 22, 23, 152, 153, 154, 141, 145, 76, - 77, 165, 147, 166, 167, 168, 169, 170, 171, 172, - 24, 25, 59, 60, 26, 27, 68, 62, 65, 71, - 63, 66, 72, 69, + 146, 147, 35, 36, 56, 57, 58, 59, 43, 76, + 45, 21, 22, 23, 159, 160, 161, 148, 152, 77, + 78, 172, 154, 173, 174, 175, 176, 177, 178, 179, + 24, 25, 60, 61, 26, 27, 30, 69, 63, 66, + 72, 64, 67, 73, 70, }; const short sudoerssindex[] = - { 565, - 30, 0, 0, 0, 0, -256, -253, -12, 514, 23, - 23, -28, 0, -246, -227, -219, -214, -220, 0, 0, - 0, 0, -9, 0, 0, 565, 0, 0, 0, 4, - 9, 15, -208, 0, 11, 0, 0, 0, 0, 0, - -211, 0, -27, 0, -18, -18, 0, 0, 0, -229, - 6, 10, 14, 20, 0, 0, 0, -17, 0, -31, - 18, 22, 0, 21, 33, 0, 31, 35, 0, 34, - 38, 0, 0, 23, -7, 0, 39, 0, 53, 0, - 0, 67, 0, 0, -193, -190, -160, 0, -12, 0, - 514, 11, 11, 11, 0, -159, -157, -156, -155, -28, - 11, -202, 0, 514, -246, -28, -227, 23, -219, 23, - -214, 0, 70, 514, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, - 0, 69, 0, 73, 0, 73, 0, -25, 0, 74, - 0, 0, 57, -26, 78, 70, -210, 0, 0, 0, - -238, 0, 0, 77, 57, 0, 0, 50, 54, 62, - 63, 64, 65, 66, 632, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 77, -149, -135, -133, -132, -131, - -130, -129, 0, 0, 0, 0, 0, 0, 0, 0, + { -10, + 58, 0, 0, 0, 0, -253, -235, -29, 76, 105, + 105, -32, 0, -229, -205, -191, -188, -157, 0, 0, + 0, 0, -22, 0, 0, -10, 0, 0, 0, 0, + 6, 7, 81, -186, 0, 55, 0, 0, 0, 0, + 0, -146, 0, -31, 0, -30, -30, 0, 0, 0, + -207, 13, 19, 20, 22, 0, 0, 0, -25, 0, + 83, 29, 24, 0, 37, 27, 0, 46, 31, 0, + 50, 33, 0, 0, 105, 3, 0, 35, 0, 58, + 0, 58, 0, -180, -171, -150, 0, -29, 0, 0, + 76, 55, 55, 55, 0, -145, -143, -142, -139, -32, + 55, -169, 0, 76, -229, 0, -32, -205, 0, 105, + -191, 0, 105, -188, 0, 0, 78, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,}; + 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, + 95, 0, 95, 0, -18, 0, 97, 0, 0, -21, + -26, 110, 78, -149, 0, 0, 0, -202, 0, 0, + 108, -21, 0, 0, 96, 98, 99, 100, 101, 102, + 103, 42, 0, 0, 0, 0, 0, 0, 0, 0, + -21, 108, -110, -109, -107, -105, -98, -97, -96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,}; const short sudoersrindex[] = - { 135, + { 168, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, - 0, 1, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 246, 0, 0, 283, 0, 0, 318, 0, 0, - 353, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 423, 458, 493, 0, 0, 0, 0, 0, 0, - 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, - 0, 71, 0, 106, 0, 141, 0, 96, 0, 176, - 0, 0, 97, 99, 0, 584, 665, 0, 0, 0, - 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,}; + 0, 0, 0, 0, 0, 0, 36, 0, 38, 0, + 39, 0, 44, 0, 129, 0, 52, 0, 0, 130, + 131, 0, 9, 75, 0, 0, 0, 0, 0, 0, + 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,}; const short sudoersgindex[] = { 0, - -2, 0, 56, 16, 98, 86, -100, 41, 108, -6, - 61, 79, 137, 12, -20, 5, 2, 0, 0, 44, + 23, 0, 87, 84, 126, 117, -91, 72, 138, -4, + 90, 107, 165, 10, 4, 26, 25, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 58, 0, 0, 133, 0, 0, 0, 0, - 60, 55, 52, 59, + 0, 0, 86, 0, 0, 163, -6, 0, 0, 0, + 0, 85, 88, 77, 82, }; -#define YYTABLESIZE 969 +#define YYTABLESIZE 391 const short sudoerstable[] = - { 128, - 30, 50, 43, 80, 50, 33, 30, 18, 83, 31, - 30, 61, 102, 81, 33, 33, 91, 74, 84, 148, - 33, 45, 46, 41, 149, 74, 100, 47, 48, 28, - 64, 155, 143, 30, 74, 100, 91, 2, 67, 29, - 3, 4, 5, 70, 30, 100, 36, 150, 37, 38, - 88, 39, 115, 113, 89, 18, 49, 86, 92, 87, - 93, 94, 116, 96, 197, 13, 117, 97, 100, 119, - 105, 98, 120, 101, 40, 85, 118, 99, 104, 105, - 105, 106, 158, 159, 160, 161, 162, 163, 164, 151, - 107, 108, 109, 100, 110, 111, 114, 130, 51, 52, - 53, 54, 121, 105, 124, 113, 125, 126, 127, 138, - 176, 91, 100, 199, 177, 113, 74, 146, 156, 134, - 174, 136, 178, 179, 180, 181, 182, 200, 105, 201, - 202, 203, 204, 205, 1, 2, 67, 71, 113, 68, - 110, 70, 69, 157, 122, 103, 132, 95, 90, 144, - 110, 123, 112, 198, 73, 173, 175, 142, 78, 129, - 0, 133, 137, 113, 131, 0, 0, 135, 0, 0, - 0, 0, 0, 110, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, - 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 47, 48, 0, 47, 48, - 0, 32, 2, 37, 0, 3, 4, 5, 0, 0, - 32, 32, 0, 15, 0, 12, 32, 0, 36, 0, - 37, 38, 0, 39, 49, 12, 30, 49, 30, 79, - 13, 30, 30, 30, 82, 30, 30, 30, 30, 30, - 30, 30, 51, 52, 53, 54, 40, 0, 12, 0, - 2, 0, 13, 3, 4, 5, 30, 30, 30, 30, - 30, 100, 13, 100, 0, 0, 100, 100, 100, 0, - 100, 100, 100, 100, 100, 100, 100, 0, 13, 0, - 0, 0, 0, 0, 148, 13, 0, 11, 0, 149, - 0, 100, 100, 100, 100, 100, 105, 11, 105, 0, - 0, 105, 105, 105, 0, 105, 105, 105, 105, 105, - 105, 105, 150, 0, 0, 0, 0, 0, 0, 0, - 11, 0, 14, 0, 0, 0, 105, 105, 105, 105, - 105, 113, 14, 113, 0, 0, 113, 113, 113, 0, - 113, 113, 113, 113, 113, 113, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 10, 0, 0, - 0, 113, 113, 113, 113, 113, 110, 10, 110, 0, - 0, 110, 110, 110, 0, 110, 110, 110, 110, 110, - 110, 110, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 0, 18, 0, 0, 0, 110, 110, 110, 110, - 110, 37, 18, 37, 0, 0, 37, 37, 37, 0, - 37, 37, 37, 37, 37, 37, 37, 0, 0, 0, - 0, 0, 0, 0, 0, 18, 0, 16, 0, 0, - 0, 37, 37, 37, 37, 37, 15, 16, 15, 0, - 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, - 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 0, 17, 0, 0, 0, 15, 15, 15, 15, - 15, 12, 17, 12, 0, 0, 12, 12, 12, 0, - 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 17, 0, 19, 0, 0, - 0, 12, 12, 12, 12, 12, 0, 19, 13, 0, - 13, 0, 0, 13, 13, 13, 41, 13, 13, 13, - 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 0, 0, 0, 0, 13, 13, - 13, 13, 13, 11, 19, 11, 0, 0, 11, 11, - 11, 0, 11, 11, 11, 11, 11, 11, 11, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, - 0, 0, 0, 11, 11, 11, 11, 11, 14, 0, - 14, 0, 0, 14, 14, 14, 65, 14, 14, 14, - 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 14, 14, - 14, 14, 14, 10, 0, 10, 0, 0, 10, 10, - 10, 0, 10, 10, 10, 10, 10, 10, 10, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 10, 10, 10, 10, 10, 18, 0, - 18, 0, 0, 18, 18, 18, 0, 18, 18, 18, - 18, 18, 18, 18, 0, 0, 0, 80, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, - 18, 18, 18, 16, 0, 16, 0, 0, 16, 16, - 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, + { 19, + 51, 34, 34, 34, 44, 28, 28, 34, 134, 31, + 42, 158, 91, 75, 18, 29, 29, 75, 100, 46, + 47, 75, 18, 28, 81, 83, 28, 32, 62, 89, + 28, 162, 28, 29, 28, 95, 29, 100, 108, 150, + 29, 60, 29, 105, 29, 95, 91, 100, 108, 48, + 49, 32, 65, 105, 28, 155, 106, 28, 25, 109, + 156, 32, 112, 117, 29, 115, 68, 29, 25, 71, + 96, 119, 87, 120, 51, 121, 97, 98, 50, 99, + 204, 105, 122, 157, 108, 127, 128, 129, 111, 104, + 114, 123, 118, 95, 135, 100, 108, 107, 88, 137, + 2, 105, 25, 3, 4, 5, 110, 75, 42, 32, + 113, 37, 124, 38, 39, 51, 40, 145, 130, 141, + 131, 132, 143, 85, 133, 86, 102, 92, 13, 93, + 94, 52, 53, 54, 55, 91, 100, 18, 75, 41, + 153, 84, 101, 165, 166, 167, 168, 169, 170, 171, + 163, 181, 206, 207, 151, 208, 183, 209, 184, 185, + 186, 187, 188, 189, 210, 211, 212, 1, 2, 62, + 66, 63, 65, 64, 125, 164, 95, 103, 139, 90, + 126, 116, 74, 180, 205, 149, 182, 136, 79, 138, + 144, 0, 142, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 16, 16, 16, 16, 17, 0, - 17, 0, 0, 17, 17, 17, 0, 17, 17, 17, - 17, 17, 17, 17, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 38, 0, 39, 0, 17, 17, - 17, 17, 17, 19, 0, 19, 0, 0, 19, 19, - 19, 0, 19, 19, 19, 19, 19, 19, 19, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 19, 19, 19, 19, 19, 0, 0, - 1, 0, 2, 0, 0, 3, 4, 5, 0, 6, - 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, - 65, 65, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 14, 15, 16, 17, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 0, 0, 0, 0, 0, 0, 65, 65, 65, 65, - 65, 65, 65, 0, 65, 65, 65, 65, 47, 48, + 0, 0, 0, 0, 48, 49, 0, 33, 33, 33, + 0, 0, 0, 33, 0, 37, 155, 38, 39, 2, + 40, 156, 3, 4, 5, 1, 0, 2, 0, 0, + 3, 4, 5, 50, 6, 7, 8, 9, 10, 11, + 12, 80, 82, 41, 157, 60, 60, 13, 52, 53, + 54, 55, 0, 0, 0, 13, 14, 15, 16, 17, + 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 0, 0, 0, 48, 49, + 0, 60, 60, 60, 60, 60, 60, 60, 0, 60, + 60, 60, 60, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 50, 0, 0, + 0, 75, 75, 37, 0, 38, 39, 0, 40, 48, + 49, 0, 52, 53, 54, 55, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 41, 2, 0, 0, 3, 4, 5, 50, 0, + 0, 0, 0, 0, 0, 75, 75, 75, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 49, 0, 0, - 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 52, 53, 54, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 80, 80, 80, 80, + 13, }; const short sudoerscheck[] = - { 100, - 0, 33, 9, 0, 33, 33, 263, 33, 0, 263, - 10, 258, 44, 10, 33, 33, 44, 44, 10, 258, - 33, 10, 11, 33, 263, 44, 44, 257, 258, 0, - 258, 58, 58, 33, 44, 0, 44, 258, 258, 10, - 261, 262, 263, 258, 44, 10, 258, 286, 260, 261, - 259, 263, 0, 61, 44, 33, 286, 43, 43, 45, - 45, 46, 10, 58, 165, 286, 0, 58, 33, 263, - 0, 58, 263, 58, 286, 61, 10, 58, 61, 58, - 10, 61, 293, 294, 295, 296, 297, 298, 299, 33, - 58, 61, 58, 58, 61, 58, 58, 104, 301, 302, - 303, 304, 263, 33, 264, 0, 264, 264, 264, 40, - 61, 44, 44, 263, 61, 10, 44, 44, 41, 108, - 44, 110, 61, 61, 61, 61, 61, 263, 58, 263, - 263, 263, 263, 263, 0, 0, 41, 41, 33, 41, - 0, 41, 41, 146, 89, 60, 106, 50, 41, 138, - 10, 91, 74, 174, 18, 151, 155, 114, 26, 102, - -1, 107, 111, 58, 105, -1, -1, 109, -1, -1, - -1, -1, -1, 33, -1, 0, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, -1, -1, -1, -1, 257, 258, -1, 257, 258, - -1, 259, 258, 58, -1, 261, 262, 263, -1, -1, - 259, 259, -1, 33, -1, 0, 259, -1, 258, -1, - 260, 261, -1, 263, 286, 10, 256, 286, 258, 256, - 286, 261, 262, 263, 256, 265, 266, 267, 268, 269, - 270, 271, 301, 302, 303, 304, 286, -1, 33, -1, - 258, -1, 0, 261, 262, 263, 286, 287, 288, 289, - 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, - 265, 266, 267, 268, 269, 270, 271, -1, 286, -1, - -1, -1, -1, -1, 258, 33, -1, 0, -1, 263, - -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 270, 271, 286, -1, -1, -1, -1, -1, -1, -1, - 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, - 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, - 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, - -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, - -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, - 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, - 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, - -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, - -1, 286, 287, 288, 289, 290, 256, 10, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 270, 271, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, 0, -1, -1, -1, 286, 287, 288, 289, - 290, 256, 10, 258, -1, -1, 261, 262, 263, -1, - 265, 266, 267, 268, 269, 270, 271, -1, -1, -1, - -1, -1, -1, -1, -1, 33, -1, 0, -1, -1, - -1, 286, 287, 288, 289, 290, -1, 10, 256, -1, - 258, -1, -1, 261, 262, 263, 33, 265, 266, 267, - 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 256, 10, 258, -1, -1, 261, 262, - 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, - -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, - -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, - 258, -1, -1, 261, 262, 263, 33, 265, 266, 267, - 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, - 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, - -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, - -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, - 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, - 268, 269, 270, 271, -1, -1, -1, 33, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 286, 287, - 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, - 263, -1, 265, 266, 267, 268, 269, 270, 271, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 286, 287, 288, 289, 290, 256, -1, - 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, - 268, 269, 270, 271, -1, -1, -1, -1, -1, -1, - -1, 258, -1, 260, 261, -1, 263, -1, 286, 287, - 288, 289, 290, 256, -1, 258, -1, -1, 261, 262, - 263, -1, 265, 266, 267, 268, 269, 270, 271, 286, + { 10, + 33, 33, 33, 33, 9, 0, 0, 33, 100, 263, + 33, 33, 44, 44, 33, 10, 10, 44, 44, 10, + 11, 44, 33, 0, 31, 32, 0, 263, 258, 36, + 0, 58, 0, 10, 0, 0, 10, 0, 0, 58, + 10, 33, 10, 0, 10, 10, 44, 10, 10, 257, + 258, 0, 258, 10, 0, 258, 63, 0, 0, 66, + 263, 10, 69, 61, 10, 72, 258, 10, 10, 258, + 58, 78, 259, 80, 33, 82, 58, 58, 286, 58, + 172, 58, 263, 286, 58, 92, 93, 94, 58, 61, + 58, 263, 58, 58, 101, 58, 58, 61, 44, 104, + 258, 58, 44, 261, 262, 263, 61, 33, 33, 58, + 61, 258, 263, 260, 261, 33, 263, 40, 264, 110, + 264, 264, 113, 43, 264, 45, 44, 44, 286, 46, + 47, 301, 302, 303, 304, 44, 44, 33, 44, 286, + 44, 61, 59, 293, 294, 295, 296, 297, 298, 299, + 41, 44, 263, 263, 145, 263, 61, 263, 61, 61, + 61, 61, 61, 61, 263, 263, 263, 0, 0, 41, + 41, 41, 41, 41, 88, 153, 51, 61, 107, 42, + 91, 75, 18, 158, 181, 118, 162, 102, 26, 105, + 114, -1, 111, -1, -1, 108, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 286, 287, 288, 289, 290, -1, -1, - 256, -1, 258, -1, -1, 261, 262, 263, -1, 265, - 266, 267, 268, 269, 270, 271, -1, -1, -1, -1, - 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, - 286, 287, 288, 289, 290, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - -1, -1, -1, -1, -1, -1, 293, 294, 295, 296, - 297, 298, 299, -1, 301, 302, 303, 304, 257, 258, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 272, 273, 274, 275, 276, 277, 278, + -1, -1, -1, -1, 257, 258, -1, 259, 259, 259, + -1, -1, -1, 259, -1, 258, 258, 260, 261, 258, + 263, 263, 261, 262, 263, 256, -1, 258, -1, -1, + 261, 262, 263, 286, 265, 266, 267, 268, 269, 270, + 271, 256, 256, 286, 286, 257, 258, 286, 301, 302, + 303, 304, -1, -1, -1, 286, 287, 288, 289, 290, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, -1, -1, -1, 257, 258, + -1, 293, 294, 295, 296, 297, 298, 299, -1, 301, + 302, 303, 304, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, - -1, 257, 258, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 301, 302, 303, 304, 272, 273, 274, 275, + -1, 257, 258, 258, -1, 260, 261, -1, 263, 257, + 258, -1, 301, 302, 303, 304, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 301, 302, 303, 304, + 286, 286, 258, -1, -1, 261, 262, 263, 286, -1, + -1, -1, -1, -1, -1, 301, 302, 303, 304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 286, }; #define YYFINAL 20 #ifndef YYDEBUG @@ -533,28 +422,23 @@ const char * const sudoersrule[] = "line : entry", "line : line entry", "entry : '\\n'", -"entry : error '\\n'", -"entry : error END", +"entry : error eol", "entry : include", "entry : includedir", -"entry : userlist privileges", -"entry : USERALIAS useraliases", -"entry : HOSTALIAS hostaliases", -"entry : CMNDALIAS cmndaliases", -"entry : RUNASALIAS runasaliases", -"entry : DEFAULTS defaults_list", -"entry : DEFAULTS_USER userlist defaults_list", -"entry : DEFAULTS_RUNAS userlist defaults_list", -"entry : DEFAULTS_HOST hostlist defaults_list", -"entry : DEFAULTS_CMND cmndlist defaults_list", -"include : INCLUDE WORD '\\n'", -"include : INCLUDE WORD error '\\n'", -"include : INCLUDE WORD END", -"include : INCLUDE WORD error END", -"includedir : INCLUDEDIR WORD '\\n'", -"includedir : INCLUDEDIR WORD error '\\n'", -"includedir : INCLUDEDIR WORD END", -"includedir : INCLUDEDIR WORD error END", +"entry : userlist privileges eol", +"entry : USERALIAS useraliases eol", +"entry : HOSTALIAS hostaliases eol", +"entry : CMNDALIAS cmndaliases eol", +"entry : RUNASALIAS runasaliases eol", +"entry : DEFAULTS defaults_list eol", +"entry : DEFAULTS_USER userlist defaults_list eol", +"entry : DEFAULTS_RUNAS userlist defaults_list eol", +"entry : DEFAULTS_HOST hostlist defaults_list eol", +"entry : DEFAULTS_CMND cmndlist defaults_list eol", +"include : INCLUDE WORD eol", +"include : INCLUDE WORD error eol", +"includedir : INCLUDEDIR WORD eol", +"includedir : INCLUDEDIR WORD error eol", "defaults_list : defaults_entry", "defaults_list : defaults_list ',' defaults_entry", "defaults_entry : DEFVAR", @@ -657,6 +541,8 @@ const char * const sudoersrule[] = "group : ALIAS", "group : ALL", "group : WORD", +"eol : '\\n'", +"eol : END", }; #endif #ifdef YYSTACKSIZE @@ -685,7 +571,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 977 "gram.y" +#line 970 "gram.y" void sudoerserror(const char *s) { @@ -1158,7 +1044,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1148 "gram.c" +#line 1034 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1350,28 +1236,24 @@ yyparse(void) { case 1: #line 182 "gram.y" -{ ; } +{ + ; /* empty file */ + } break; case 5: -#line 190 "gram.y" +#line 192 "gram.y" { - ; + ; /* blank line */ } break; case 6: -#line 193 "gram.y" +#line 195 "gram.y" { yyerrok; } break; case 7: -#line 196 "gram.y" -{ - yyerrok; - } -break; -case 8: -#line 199 "gram.y" +#line 198 "gram.y" { if (!push_include(yyvsp[0].string, false)) { free(yyvsp[0].string); @@ -1380,8 +1262,8 @@ case 8: free(yyvsp[0].string); } break; -case 9: -#line 206 "gram.y" +case 8: +#line 205 "gram.y" { if (!push_include(yyvsp[0].string, true)) { free(yyvsp[0].string); @@ -1390,135 +1272,109 @@ case 9: free(yyvsp[0].string); } break; -case 10: -#line 213 "gram.y" +case 9: +#line 212 "gram.y" { - if (!add_userspec(yyvsp[-1].member, yyvsp[0].privilege)) { + if (!add_userspec(yyvsp[-2].member, yyvsp[-1].privilege)) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } break; +case 10: +#line 218 "gram.y" +{ + ; + } +break; case 11: -#line 219 "gram.y" +#line 221 "gram.y" { ; } break; case 12: -#line 222 "gram.y" +#line 224 "gram.y" { ; } break; case 13: -#line 225 "gram.y" +#line 227 "gram.y" { ; } break; case 14: -#line 228 "gram.y" +#line 230 "gram.y" { - ; + if (!add_defaults(DEFAULTS, NULL, yyvsp[-1].defaults)) + YYERROR; } break; case 15: -#line 231 "gram.y" +#line 234 "gram.y" { - if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS_USER, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 16: -#line 235 "gram.y" +#line 238 "gram.y" { - if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 17: -#line 239 "gram.y" +#line 242 "gram.y" { - if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS_HOST, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 18: -#line 243 "gram.y" +#line 246 "gram.y" { - if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) + if (!add_defaults(DEFAULTS_CMND, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 19: -#line 247 "gram.y" -{ - if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) - YYERROR; - } -break; -case 20: -#line 253 "gram.y" +#line 252 "gram.y" { yyval.string = yyvsp[-1].string; } break; -case 21: -#line 256 "gram.y" +case 20: +#line 255 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; -case 22: -#line 260 "gram.y" +case 21: +#line 261 "gram.y" { yyval.string = yyvsp[-1].string; } break; -case 23: -#line 263 "gram.y" +case 22: +#line 264 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 24: -#line 269 "gram.y" -{ - yyval.string = yyvsp[-1].string; - } -break; -case 25: -#line 272 "gram.y" -{ - yyerrok; - yyval.string = yyvsp[-2].string; - } -break; -case 26: -#line 276 "gram.y" -{ - yyval.string = yyvsp[-1].string; - } -break; -case 27: -#line 279 "gram.y" -{ - yyerrok; - yyval.string = yyvsp[-2].string; - } -break; -case 29: -#line 286 "gram.y" +#line 271 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; -case 30: -#line 292 "gram.y" +case 25: +#line 277 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1527,8 +1383,8 @@ case 30: } } break; -case 31: -#line 299 "gram.y" +case 26: +#line 284 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1537,8 +1393,8 @@ case 31: } } break; -case 32: -#line 306 "gram.y" +case 27: +#line 291 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1547,8 +1403,8 @@ case 32: } } break; -case 33: -#line 313 "gram.y" +case 28: +#line 298 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1557,8 +1413,8 @@ case 33: } } break; -case 34: -#line 320 "gram.y" +case 29: +#line 305 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1567,15 +1423,15 @@ case 34: } } break; -case 36: -#line 330 "gram.y" +case 31: +#line 315 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; -case 37: -#line 336 "gram.y" +case 32: +#line 321 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1589,22 +1445,22 @@ case 37: yyval.privilege = p; } break; -case 38: -#line 350 "gram.y" +case 33: +#line 335 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 39: -#line 354 "gram.y" +case 34: +#line 339 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 40: -#line 360 "gram.y" +case 35: +#line 345 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1613,8 +1469,8 @@ case 40: } } break; -case 41: -#line 367 "gram.y" +case 36: +#line 352 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1623,8 +1479,8 @@ case 41: } } break; -case 42: -#line 374 "gram.y" +case 37: +#line 359 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1633,8 +1489,8 @@ case 42: } } break; -case 43: -#line 381 "gram.y" +case 38: +#line 366 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1643,8 +1499,8 @@ case 43: } } break; -case 44: -#line 388 "gram.y" +case 39: +#line 373 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1653,8 +1509,8 @@ case 44: } } break; -case 46: -#line 398 "gram.y" +case 41: +#line 383 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1707,8 +1563,8 @@ case 46: yyval.cmndspec = yyvsp[-2].cmndspec; } break; -case 47: -#line 451 "gram.y" +case 42: +#line 436 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1761,8 +1617,8 @@ case 47: yyval.cmndspec = cs; } break; -case 48: -#line 504 "gram.y" +case 43: +#line 489 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1771,8 +1627,8 @@ case 48: } } break; -case 49: -#line 511 "gram.y" +case 44: +#line 496 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1781,8 +1637,8 @@ case 49: } } break; -case 50: -#line 518 "gram.y" +case 45: +#line 503 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1791,8 +1647,8 @@ case 50: } } break; -case 51: -#line 525 "gram.y" +case 46: +#line 510 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1801,21 +1657,21 @@ case 51: } } break; -case 53: -#line 535 "gram.y" +case 48: +#line 520 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; -case 54: -#line 541 "gram.y" +case 49: +#line 526 "gram.y" { yyval.member = yyvsp[0].member; } break; -case 55: -#line 544 "gram.y" +case 50: +#line 529 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1836,76 +1692,76 @@ case 55: yyval.member = yyvsp[0].member; } break; -case 56: -#line 565 "gram.y" +case 51: +#line 550 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 57: -#line 569 "gram.y" +case 52: +#line 554 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 58: -#line 575 "gram.y" +case 53: +#line 560 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 59: -#line 580 "gram.y" +case 54: +#line 565 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 60: -#line 584 "gram.y" +case 55: +#line 569 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 61: -#line 589 "gram.y" +case 56: +#line 574 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 62: -#line 594 "gram.y" +case 57: +#line 579 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 63: -#line 599 "gram.y" +case 58: +#line 584 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 64: -#line 603 "gram.y" +case 59: +#line 588 "gram.y" { yyval.string = yyvsp[0].string; } break; -case 65: -#line 608 "gram.y" +case 60: +#line 593 "gram.y" { yyval.runas = NULL; } break; -case 66: -#line 611 "gram.y" +case 61: +#line 596 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; -case 67: -#line 616 "gram.y" +case 62: +#line 601 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1922,8 +1778,8 @@ case 67: } } break; -case 68: -#line 631 "gram.y" +case 63: +#line 616 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1934,8 +1790,8 @@ case 68: /* $$->runasgroups = NULL; */ } break; -case 69: -#line 640 "gram.y" +case 64: +#line 625 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1946,8 +1802,8 @@ case 69: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 70: -#line 649 "gram.y" +case 65: +#line 634 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1958,8 +1814,8 @@ case 70: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 71: -#line 658 "gram.y" +case 66: +#line 643 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1976,14 +1832,14 @@ case 71: } } break; -case 72: -#line 675 "gram.y" +case 67: +#line 660 "gram.y" { init_options(&yyval.options); } break; -case 73: -#line 678 "gram.y" +case 68: +#line 663 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1993,8 +1849,8 @@ case 73: } } break; -case 74: -#line 686 "gram.y" +case 69: +#line 671 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -2004,8 +1860,8 @@ case 74: } } break; -case 75: -#line 694 "gram.y" +case 70: +#line 679 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -2018,8 +1874,8 @@ case 75: } } break; -case 76: -#line 705 "gram.y" +case 71: +#line 690 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -2027,8 +1883,8 @@ case 76: #endif } break; -case 77: -#line 711 "gram.y" +case 72: +#line 696 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -2036,8 +1892,8 @@ case 77: #endif } break; -case 78: -#line 717 "gram.y" +case 73: +#line 702 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -2045,8 +1901,8 @@ case 78: #endif } break; -case 79: -#line 723 "gram.y" +case 74: +#line 708 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -2054,98 +1910,98 @@ case 79: #endif } break; -case 80: -#line 731 "gram.y" +case 75: +#line 716 "gram.y" { TAGS_INIT(yyval.tag); } break; -case 81: -#line 734 "gram.y" +case 76: +#line 719 "gram.y" { yyval.tag.nopasswd = true; } break; -case 82: -#line 737 "gram.y" +case 77: +#line 722 "gram.y" { yyval.tag.nopasswd = false; } break; -case 83: -#line 740 "gram.y" +case 78: +#line 725 "gram.y" { yyval.tag.noexec = true; } break; -case 84: -#line 743 "gram.y" +case 79: +#line 728 "gram.y" { yyval.tag.noexec = false; } break; -case 85: -#line 746 "gram.y" +case 80: +#line 731 "gram.y" { yyval.tag.setenv = true; } break; -case 86: -#line 749 "gram.y" +case 81: +#line 734 "gram.y" { yyval.tag.setenv = false; } break; -case 87: -#line 752 "gram.y" +case 82: +#line 737 "gram.y" { yyval.tag.log_input = true; } break; -case 88: -#line 755 "gram.y" +case 83: +#line 740 "gram.y" { yyval.tag.log_input = false; } break; -case 89: -#line 758 "gram.y" +case 84: +#line 743 "gram.y" { yyval.tag.log_output = true; } break; -case 90: -#line 761 "gram.y" +case 85: +#line 746 "gram.y" { yyval.tag.log_output = false; } break; -case 91: -#line 764 "gram.y" +case 86: +#line 749 "gram.y" { yyval.tag.follow = true; } break; -case 92: -#line 767 "gram.y" +case 87: +#line 752 "gram.y" { yyval.tag.follow = false; } break; -case 93: -#line 770 "gram.y" +case 88: +#line 755 "gram.y" { yyval.tag.send_mail = true; } break; -case 94: -#line 773 "gram.y" +case 89: +#line 758 "gram.y" { yyval.tag.send_mail = false; } break; -case 95: -#line 778 "gram.y" +case 90: +#line 763 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2154,8 +2010,8 @@ case 95: } } break; -case 96: -#line 785 "gram.y" +case 91: +#line 770 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2164,8 +2020,8 @@ case 96: } } break; -case 97: -#line 792 "gram.y" +case 92: +#line 777 "gram.y" { struct sudo_command *c; @@ -2181,8 +2037,8 @@ case 97: } } break; -case 100: -#line 812 "gram.y" +case 95: +#line 797 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2193,15 +2049,15 @@ case 100: } } break; -case 102: -#line 824 "gram.y" +case 97: +#line 809 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 105: -#line 834 "gram.y" +case 100: +#line 819 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2212,15 +2068,15 @@ case 105: } } break; -case 107: -#line 846 "gram.y" +case 102: +#line 831 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 110: -#line 856 "gram.y" +case 105: +#line 841 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2231,8 +2087,8 @@ case 110: } } break; -case 113: -#line 871 "gram.y" +case 108: +#line 856 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2243,29 +2099,29 @@ case 113: } } break; -case 115: -#line 883 "gram.y" +case 110: +#line 868 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 116: -#line 889 "gram.y" +case 111: +#line 874 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 117: -#line 893 "gram.y" +case 112: +#line 878 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 118: -#line 899 "gram.y" +case 113: +#line 884 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2274,8 +2130,8 @@ case 118: } } break; -case 119: -#line 906 "gram.y" +case 114: +#line 891 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2284,8 +2140,8 @@ case 119: } } break; -case 120: -#line 913 "gram.y" +case 115: +#line 898 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2294,8 +2150,8 @@ case 120: } } break; -case 121: -#line 920 "gram.y" +case 116: +#line 905 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2304,8 +2160,8 @@ case 121: } } break; -case 122: -#line 927 "gram.y" +case 117: +#line 912 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2314,29 +2170,29 @@ case 122: } } break; -case 124: -#line 937 "gram.y" +case 119: +#line 922 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 125: -#line 943 "gram.y" +case 120: +#line 928 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 126: -#line 947 "gram.y" +case 121: +#line 932 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 127: -#line 953 "gram.y" +case 122: +#line 938 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2345,8 +2201,8 @@ case 127: } } break; -case 128: -#line 960 "gram.y" +case 123: +#line 945 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2355,8 +2211,8 @@ case 128: } } break; -case 129: -#line 967 "gram.y" +case 124: +#line 952 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2365,7 +2221,19 @@ case 129: } } break; -#line 2355 "gram.c" +case 125: +#line 961 "gram.y" +{ + ; + } +break; +case 126: +#line 964 "gram.y" +{ + ; /* EOF */ + } +break; +#line 2223 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index aa749c741c..bf50bfcc0e 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -179,7 +179,9 @@ static struct command_digest *new_digest(int, char *); %% -file : { ; } +file : { + ; /* empty file */ + } | line ; @@ -188,12 +190,9 @@ line : entry ; entry : '\n' { - ; + ; /* blank line */ } - | error '\n' { - yyerrok; - } - | error END { + | error eol { yyerrok; } | include { @@ -210,73 +209,59 @@ entry : '\n' { } free($1); } - | userlist privileges { + | userlist privileges eol { if (!add_userspec($1, $2)) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } - | USERALIAS useraliases { + | USERALIAS useraliases eol { ; } - | HOSTALIAS hostaliases { + | HOSTALIAS hostaliases eol { ; } - | CMNDALIAS cmndaliases { + | CMNDALIAS cmndaliases eol { ; } - | RUNASALIAS runasaliases { + | RUNASALIAS runasaliases eol { ; } - | DEFAULTS defaults_list { + | DEFAULTS defaults_list eol { if (!add_defaults(DEFAULTS, NULL, $2)) YYERROR; } - | DEFAULTS_USER userlist defaults_list { + | DEFAULTS_USER userlist defaults_list eol { if (!add_defaults(DEFAULTS_USER, $2, $3)) YYERROR; } - | DEFAULTS_RUNAS userlist defaults_list { + | DEFAULTS_RUNAS userlist defaults_list eol { if (!add_defaults(DEFAULTS_RUNAS, $2, $3)) YYERROR; } - | DEFAULTS_HOST hostlist defaults_list { + | DEFAULTS_HOST hostlist defaults_list eol { if (!add_defaults(DEFAULTS_HOST, $2, $3)) YYERROR; } - | DEFAULTS_CMND cmndlist defaults_list { + | DEFAULTS_CMND cmndlist defaults_list eol { if (!add_defaults(DEFAULTS_CMND, $2, $3)) YYERROR; } ; -include : INCLUDE WORD '\n' { - $$ = $2; - } - | INCLUDE WORD error '\n' { - yyerrok; +include : INCLUDE WORD eol { $$ = $2; } - | INCLUDE WORD END { - $$ = $2; - } - | INCLUDE WORD error END { + | INCLUDE WORD error eol { yyerrok; $$ = $2; } ; -includedir : INCLUDEDIR WORD '\n' { +includedir : INCLUDEDIR WORD eol { $$ = $2; } - | INCLUDEDIR WORD error '\n' { - yyerrok; - $$ = $2; - } - | INCLUDEDIR WORD END { - $$ = $2; - } - | INCLUDEDIR WORD error END { + | INCLUDEDIR WORD error eol { yyerrok; $$ = $2; } @@ -973,6 +958,14 @@ group : ALIAS { } ; +eol : '\n' { + ; + } + | END { + ; /* EOF */ + } + ; + %% void sudoerserror(const char *s) diff --git a/plugins/sudoers/regress/sudoers/test5.toke.ok b/plugins/sudoers/regress/sudoers/test5.toke.ok index caed66b32f..fb8152f4fb 100644 --- a/plugins/sudoers/regress/sudoers/test5.toke.ok +++ b/plugins/sudoers/regress/sudoers/test5.toke.ok @@ -1,3 +1,3 @@ # USERALIAS ALIAS = BEGINSTR ENDSTR <*> ERROR -BEGINSTR ENDSTR ERROR <*> ALL = ALL +BEGINSTR ENDSTR <*> ERROR ALL = ALL From c7bc24d40b62c038c050f729a70ddc95a4fc3cb3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 16 Aug 2020 15:19:53 -0600 Subject: [PATCH 044/113] Recover from a syntax error after the ':' in a privilege spec. For compound privilege specs, don't throw away the entire thing if we have a syntax error, only the part after the error is encountered. --- plugins/sudoers/gram.c | 598 +++++++++++++++++++++-------------------- plugins/sudoers/gram.y | 4 + 2 files changed, 308 insertions(+), 294 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 688165aaab..55558e2d71 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -188,96 +188,96 @@ const short sudoerslhs[] = 0, 0, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 31, 31, 32, 32, 4, 4, 3, 3, 3, 3, 3, 21, - 21, 20, 11, 11, 9, 9, 9, 9, 9, 2, - 2, 1, 33, 33, 33, 33, 34, 34, 7, 7, - 6, 6, 28, 29, 30, 24, 25, 26, 27, 18, - 18, 19, 19, 19, 19, 19, 23, 23, 23, 23, - 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 5, - 5, 5, 39, 39, 42, 10, 10, 40, 40, 43, - 8, 8, 41, 41, 44, 38, 38, 45, 14, 14, - 12, 12, 13, 13, 13, 13, 13, 17, 17, 15, - 15, 16, 16, 16, 37, 37, + 21, 21, 20, 11, 11, 9, 9, 9, 9, 9, + 2, 2, 1, 33, 33, 33, 33, 34, 34, 7, + 7, 6, 6, 28, 29, 30, 24, 25, 26, 27, + 18, 18, 19, 19, 19, 19, 19, 23, 23, 23, + 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 5, 5, 5, 39, 39, 42, 10, 10, 40, 40, + 43, 8, 8, 41, 41, 44, 38, 38, 45, 14, + 14, 12, 12, 13, 13, 13, 13, 13, 17, 17, + 15, 15, 16, 16, 16, 37, 37, }; const short sudoerslen[] = { 2, 0, 1, 1, 2, 1, 2, 1, 1, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 4, 3, 4, 1, 3, 1, 2, 3, 3, 3, 1, - 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, - 3, 4, 3, 3, 3, 3, 1, 3, 1, 2, - 1, 2, 3, 3, 3, 3, 3, 3, 3, 0, - 3, 0, 1, 3, 2, 1, 0, 2, 2, 2, - 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 3, 3, 1, 3, 1, 3, 3, - 1, 3, 1, 3, 3, 1, 3, 3, 1, 3, - 1, 2, 1, 1, 1, 1, 1, 1, 3, 1, - 2, 1, 1, 1, 1, 1, + 3, 4, 3, 1, 2, 1, 1, 1, 1, 1, + 1, 3, 4, 3, 3, 3, 3, 1, 3, 1, + 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, + 0, 3, 0, 1, 3, 2, 1, 0, 2, 2, + 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 3, 3, 1, 3, 1, 3, + 3, 1, 3, 1, 3, 3, 1, 3, 3, 1, + 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, + 1, 2, 1, 1, 1, 1, 1, }; const short sudoersdefred[] = { 0, - 0, 113, 115, 116, 117, 0, 0, 0, 0, 0, - 0, 0, 114, 0, 0, 0, 0, 0, 5, 0, - 109, 111, 0, 7, 8, 0, 3, 126, 125, 6, - 0, 0, 0, 0, 23, 0, 35, 38, 37, 39, - 36, 0, 33, 0, 96, 0, 0, 92, 91, 90, - 0, 0, 0, 0, 0, 51, 49, 101, 0, 47, - 0, 0, 0, 93, 0, 0, 98, 0, 0, 106, - 0, 0, 103, 112, 0, 0, 30, 0, 4, 0, - 19, 0, 21, 0, 0, 0, 26, 0, 14, 34, - 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, - 0, 0, 50, 0, 0, 11, 0, 0, 12, 0, - 0, 10, 0, 0, 13, 110, 0, 0, 9, 20, - 22, 27, 28, 29, 24, 97, 17, 15, 16, 43, - 44, 45, 46, 102, 18, 48, 0, 94, 0, 99, - 0, 107, 0, 104, 0, 40, 0, 67, 31, 0, - 0, 0, 0, 0, 122, 124, 123, 0, 118, 120, - 0, 0, 61, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 71, 72, 73, 74, 70, 68, 69, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 88, - 89, 86, 87, 42, 119, 57, 56, 58, 59, 53, - 54, 55, + 0, 114, 116, 117, 118, 0, 0, 0, 0, 0, + 0, 0, 115, 0, 0, 0, 0, 0, 5, 0, + 110, 112, 0, 7, 8, 0, 3, 127, 126, 6, + 0, 0, 0, 0, 23, 0, 36, 39, 38, 40, + 37, 0, 34, 0, 97, 0, 0, 93, 92, 91, + 0, 0, 0, 0, 0, 52, 50, 102, 0, 48, + 0, 0, 0, 94, 0, 0, 99, 0, 0, 107, + 0, 0, 104, 113, 0, 0, 30, 0, 4, 0, + 19, 0, 21, 0, 0, 0, 26, 0, 14, 35, + 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, + 0, 0, 51, 0, 0, 11, 0, 0, 12, 0, + 0, 10, 0, 0, 13, 111, 0, 0, 9, 20, + 22, 27, 28, 29, 24, 98, 17, 15, 16, 44, + 45, 46, 47, 103, 18, 49, 0, 95, 0, 100, + 0, 108, 0, 105, 0, 41, 0, 68, 0, 31, + 0, 0, 0, 0, 0, 32, 123, 125, 124, 0, + 119, 121, 0, 0, 62, 42, 0, 0, 0, 0, + 0, 0, 0, 0, 72, 73, 74, 75, 71, 69, + 70, 122, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 89, 90, 87, 88, 43, 120, 58, 57, 59, + 60, 54, 55, 56, }; const short sudoersdgoto[] = { 20, 146, 147, 35, 36, 56, 57, 58, 59, 43, 76, - 45, 21, 22, 23, 159, 160, 161, 148, 152, 77, - 78, 172, 154, 173, 174, 175, 176, 177, 178, 179, + 45, 21, 22, 23, 161, 162, 163, 148, 153, 77, + 78, 174, 155, 175, 176, 177, 178, 179, 180, 181, 24, 25, 60, 61, 26, 27, 30, 69, 63, 66, 72, 64, 67, 73, 70, }; const short sudoerssindex[] = { -10, - 58, 0, 0, 0, 0, -253, -235, -29, 76, 105, - 105, -32, 0, -229, -205, -191, -188, -157, 0, 0, + 58, 0, 0, 0, 0, -243, -235, -29, 105, 109, + 109, -32, 0, -229, -226, -211, -181, -145, 0, 0, 0, 0, -22, 0, 0, -10, 0, 0, 0, 0, - 6, 7, 81, -186, 0, 55, 0, 0, 0, 0, - 0, -146, 0, -31, 0, -30, -30, 0, 0, 0, - -207, 13, 19, 20, 22, 0, 0, 0, -25, 0, - 83, 29, 24, 0, 37, 27, 0, 46, 31, 0, - 50, 33, 0, 0, 105, 3, 0, 35, 0, 58, - 0, 58, 0, -180, -171, -150, 0, -29, 0, 0, - 76, 55, 55, 55, 0, -145, -143, -142, -139, -32, - 55, -169, 0, 76, -229, 0, -32, -205, 0, 105, - -191, 0, 105, -188, 0, 0, 78, 76, 0, 0, + 6, 7, 76, -179, 0, 59, 0, 0, 0, 0, + 0, -196, 0, -31, 0, -30, -30, 0, 0, 0, + -205, 25, 31, 40, 43, 0, 0, 0, -25, 0, + 116, 45, 21, 0, 46, 24, 0, 49, 27, 0, + 53, 33, 0, 0, 109, 12, 0, 35, 0, 58, + 0, 58, 0, -159, -148, -143, 0, -29, 0, 0, + 105, 59, 59, 59, 0, -142, -141, -139, -129, -32, + 59, -156, 0, 105, -229, 0, -32, -226, 0, 109, + -211, 0, 109, -181, 0, 0, 96, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 92, 0, 93, 0, - 95, 0, 95, 0, -18, 0, 97, 0, 0, -21, - -26, 110, 78, -149, 0, 0, 0, -202, 0, 0, - 108, -21, 0, 0, 96, 98, 99, 100, 101, 102, - 103, 42, 0, 0, 0, 0, 0, 0, 0, 0, - -21, 108, -110, -109, -107, -105, -98, -97, -96, 0, + 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, + 108, 0, 108, 0, -18, 0, 110, 0, 58, 0, + -21, 26, 99, 96, -165, 0, 0, 0, 0, -208, + 0, 0, 111, -21, 0, 0, 92, 95, 97, 98, + 100, 101, 102, 42, 0, 0, 0, 0, 0, 0, + 0, 0, -21, 111, -106, -99, -98, -97, -96, -95, + -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,}; + 0, 0, 0, 0,}; const short sudoersrindex[] = - { 168, + { 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, - 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, + 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -288,88 +288,89 @@ const short sudoersrindex[] = 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 38, 0, - 39, 0, 44, 0, 129, 0, 52, 0, 0, 130, - 131, 0, 9, 75, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 39, 0, 41, 0, 131, 0, 44, 0, 0, 0, + 132, 133, 0, 9, 75, 0, 0, 0, 0, 0, + 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,}; + 0, 0, 0, 0,}; const short sudoersgindex[] = { 0, - 23, 0, 87, 84, 126, 117, -91, 72, 138, -4, - 90, 107, 165, 10, 4, 26, 25, 0, 0, 68, + 23, 0, 90, 80, 128, 119, -82, 74, 140, -4, + 93, 112, 165, -1, 2, 28, 22, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 0, 0, 163, -6, 0, 0, 0, - 0, 85, 88, 77, 82, + 0, 0, 88, 0, 0, 166, -6, 0, 0, 0, + 0, 86, 85, 81, 83, }; -#define YYTABLESIZE 391 +#define YYTABLESIZE 402 const short sudoerstable[] = { 19, - 51, 34, 34, 34, 44, 28, 28, 34, 134, 31, - 42, 158, 91, 75, 18, 29, 29, 75, 100, 46, - 47, 75, 18, 28, 81, 83, 28, 32, 62, 89, - 28, 162, 28, 29, 28, 95, 29, 100, 108, 150, - 29, 60, 29, 105, 29, 95, 91, 100, 108, 48, - 49, 32, 65, 105, 28, 155, 106, 28, 25, 109, - 156, 32, 112, 117, 29, 115, 68, 29, 25, 71, - 96, 119, 87, 120, 51, 121, 97, 98, 50, 99, - 204, 105, 122, 157, 108, 127, 128, 129, 111, 104, - 114, 123, 118, 95, 135, 100, 108, 107, 88, 137, - 2, 105, 25, 3, 4, 5, 110, 75, 42, 32, - 113, 37, 124, 38, 39, 51, 40, 145, 130, 141, - 131, 132, 143, 85, 133, 86, 102, 92, 13, 93, - 94, 52, 53, 54, 55, 91, 100, 18, 75, 41, - 153, 84, 101, 165, 166, 167, 168, 169, 170, 171, - 163, 181, 206, 207, 151, 208, 183, 209, 184, 185, - 186, 187, 188, 189, 210, 211, 212, 1, 2, 62, - 66, 63, 65, 64, 125, 164, 95, 103, 139, 90, - 126, 116, 74, 180, 205, 149, 182, 136, 79, 138, - 144, 0, 142, 0, 0, 140, 0, 0, 0, 0, + 51, 34, 34, 34, 44, 28, 28, 34, 46, 47, + 42, 160, 91, 75, 18, 29, 29, 134, 100, 31, + 28, 75, 18, 28, 81, 83, 28, 32, 62, 89, + 29, 65, 28, 29, 28, 96, 29, 101, 109, 151, + 106, 61, 29, 33, 29, 96, 68, 101, 109, 157, + 106, 48, 49, 33, 158, 91, 106, 28, 28, 109, + 25, 37, 112, 38, 39, 115, 40, 29, 29, 75, + 25, 119, 117, 120, 51, 121, 71, 159, 105, 87, + 50, 108, 96, 164, 111, 127, 128, 129, 97, 41, + 114, 206, 118, 96, 135, 101, 109, 98, 106, 137, + 99, 33, 88, 122, 25, 104, 107, 76, 141, 110, + 42, 143, 2, 113, 123, 3, 4, 5, 85, 124, + 86, 130, 131, 92, 132, 93, 94, 167, 168, 169, + 170, 171, 172, 173, 133, 145, 84, 42, 101, 165, + 13, 18, 156, 152, 52, 53, 54, 55, 51, 91, + 100, 75, 185, 154, 183, 186, 208, 187, 188, 102, + 189, 190, 191, 209, 210, 211, 212, 213, 214, 1, + 2, 63, 67, 64, 66, 65, 166, 125, 95, 103, + 139, 90, 74, 126, 207, 184, 116, 182, 150, 136, + 138, 79, 140, 142, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 33, 33, 33, - 0, 0, 0, 33, 0, 37, 155, 38, 39, 2, - 40, 156, 3, 4, 5, 1, 0, 2, 0, 0, + 0, 0, 0, 33, 0, 37, 157, 38, 39, 2, + 40, 158, 3, 4, 5, 1, 0, 2, 0, 0, 3, 4, 5, 50, 6, 7, 8, 9, 10, 11, - 12, 80, 82, 41, 157, 60, 60, 13, 52, 53, + 12, 80, 82, 41, 159, 61, 61, 13, 52, 53, 54, 55, 0, 0, 0, 13, 14, 15, 16, 17, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 0, 0, 0, 48, 49, - 0, 60, 60, 60, 60, 60, 60, 60, 0, 60, - 60, 60, 60, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 50, 0, 0, - 0, 75, 75, 37, 0, 38, 39, 0, 40, 48, - 49, 0, 52, 53, 54, 55, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 41, 2, 0, 0, 3, 4, 5, 50, 0, - 0, 0, 0, 0, 0, 75, 75, 75, 75, 0, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 0, 0, 0, 48, 49, + 0, 61, 61, 61, 61, 61, 61, 61, 0, 61, + 61, 61, 61, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 50, 0, 0, + 0, 76, 76, 149, 0, 37, 0, 38, 39, 0, + 40, 0, 52, 53, 54, 55, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 0, 37, 41, 38, 39, 2, 40, 0, 3, + 4, 5, 48, 49, 0, 76, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, + 41, 0, 0, 0, 13, 0, 0, 0, 0, 0, + 0, 50, }; const short sudoerscheck[] = { 10, - 33, 33, 33, 33, 9, 0, 0, 33, 100, 263, - 33, 33, 44, 44, 33, 10, 10, 44, 44, 10, - 11, 44, 33, 0, 31, 32, 0, 263, 258, 36, - 0, 58, 0, 10, 0, 0, 10, 0, 0, 58, - 10, 33, 10, 0, 10, 10, 44, 10, 10, 257, - 258, 0, 258, 10, 0, 258, 63, 0, 0, 66, - 263, 10, 69, 61, 10, 72, 258, 10, 10, 258, - 58, 78, 259, 80, 33, 82, 58, 58, 286, 58, - 172, 58, 263, 286, 58, 92, 93, 94, 58, 61, - 58, 263, 58, 58, 101, 58, 58, 61, 44, 104, - 258, 58, 44, 261, 262, 263, 61, 33, 33, 58, - 61, 258, 263, 260, 261, 33, 263, 40, 264, 110, - 264, 264, 113, 43, 264, 45, 44, 44, 286, 46, - 47, 301, 302, 303, 304, 44, 44, 33, 44, 286, - 44, 61, 59, 293, 294, 295, 296, 297, 298, 299, - 41, 44, 263, 263, 145, 263, 61, 263, 61, 61, - 61, 61, 61, 61, 263, 263, 263, 0, 0, 41, - 41, 41, 41, 41, 88, 153, 51, 61, 107, 42, - 91, 75, 18, 158, 181, 118, 162, 102, 26, 105, - 114, -1, 111, -1, -1, 108, -1, -1, -1, -1, + 33, 33, 33, 33, 9, 0, 0, 33, 10, 11, + 33, 33, 44, 44, 33, 10, 10, 100, 44, 263, + 0, 44, 33, 0, 31, 32, 0, 263, 258, 36, + 10, 258, 0, 10, 0, 0, 10, 0, 0, 58, + 0, 33, 10, 0, 10, 10, 258, 10, 10, 258, + 10, 257, 258, 10, 263, 44, 63, 0, 0, 66, + 0, 258, 69, 260, 261, 72, 263, 10, 10, 44, + 10, 78, 61, 80, 33, 82, 258, 286, 58, 259, + 286, 58, 58, 58, 58, 92, 93, 94, 58, 286, + 58, 174, 58, 58, 101, 58, 58, 58, 58, 104, + 58, 58, 44, 263, 44, 61, 61, 33, 110, 61, + 33, 113, 258, 61, 263, 261, 262, 263, 43, 263, + 45, 264, 264, 44, 264, 46, 47, 293, 294, 295, + 296, 297, 298, 299, 264, 40, 61, 33, 59, 41, + 286, 33, 149, 145, 301, 302, 303, 304, 33, 44, + 44, 44, 61, 44, 44, 61, 263, 61, 61, 44, + 61, 61, 61, 263, 263, 263, 263, 263, 263, 0, + 0, 41, 41, 41, 41, 41, 154, 88, 51, 61, + 107, 42, 18, 91, 183, 164, 75, 160, 118, 102, + 105, 26, 108, 111, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, 259, 259, 259, @@ -383,13 +384,14 @@ const short sudoerscheck[] = -1, 293, 294, 295, 296, 297, 298, 299, -1, 301, 302, 303, 304, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, - -1, 257, 258, 258, -1, 260, 261, -1, 263, 257, - 258, -1, 301, 302, 303, 304, 272, 273, 274, 275, + -1, 257, 258, 256, -1, 258, -1, 260, 261, -1, + 263, -1, 301, 302, 303, 304, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 286, 258, -1, -1, 261, 262, 263, 286, -1, - -1, -1, -1, -1, -1, 301, 302, 303, 304, -1, + 286, -1, 258, 286, 260, 261, 258, 263, -1, 261, + 262, 263, 257, 258, -1, 301, 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 286, + 286, -1, -1, -1, 286, -1, -1, -1, -1, -1, + -1, 286, }; #define YYFINAL 20 #ifndef YYDEBUG @@ -448,6 +450,7 @@ const char * const sudoersrule[] = "defaults_entry : DEFVAR '-' WORD", "privileges : privilege", "privileges : privileges ':' privilege", +"privileges : privileges ':' error eol", "privilege : hostlist '=' cmndspeclist", "ophost : host", "ophost : '!' host", @@ -571,7 +574,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 970 "gram.y" +#line 974 "gram.y" void sudoerserror(const char *s) { @@ -1044,7 +1047,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1034 "gram.c" +#line 1037 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1431,7 +1434,14 @@ case 31: } break; case 32: -#line 321 "gram.y" +#line 319 "gram.y" +{ + yyerrok; + yyval.privilege = yyvsp[-3].privilege; + } +break; +case 33: +#line 325 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1445,22 +1455,22 @@ case 32: yyval.privilege = p; } break; -case 33: -#line 335 "gram.y" +case 34: +#line 339 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 34: -#line 339 "gram.y" +case 35: +#line 343 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 35: -#line 345 "gram.y" +case 36: +#line 349 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1469,8 +1479,8 @@ case 35: } } break; -case 36: -#line 352 "gram.y" +case 37: +#line 356 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1479,8 +1489,8 @@ case 36: } } break; -case 37: -#line 359 "gram.y" +case 38: +#line 363 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1489,8 +1499,8 @@ case 37: } } break; -case 38: -#line 366 "gram.y" +case 39: +#line 370 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1499,8 +1509,8 @@ case 38: } } break; -case 39: -#line 373 "gram.y" +case 40: +#line 377 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1509,8 +1519,8 @@ case 39: } } break; -case 41: -#line 383 "gram.y" +case 42: +#line 387 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1563,8 +1573,8 @@ case 41: yyval.cmndspec = yyvsp[-2].cmndspec; } break; -case 42: -#line 436 "gram.y" +case 43: +#line 440 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1617,8 +1627,8 @@ case 42: yyval.cmndspec = cs; } break; -case 43: -#line 489 "gram.y" +case 44: +#line 493 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1627,8 +1637,8 @@ case 43: } } break; -case 44: -#line 496 "gram.y" +case 45: +#line 500 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1637,8 +1647,8 @@ case 44: } } break; -case 45: -#line 503 "gram.y" +case 46: +#line 507 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1647,8 +1657,8 @@ case 45: } } break; -case 46: -#line 510 "gram.y" +case 47: +#line 514 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1657,21 +1667,21 @@ case 46: } } break; -case 48: -#line 520 "gram.y" +case 49: +#line 524 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; -case 49: -#line 526 "gram.y" +case 50: +#line 530 "gram.y" { yyval.member = yyvsp[0].member; } break; -case 50: -#line 529 "gram.y" +case 51: +#line 533 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1692,28 +1702,22 @@ case 50: yyval.member = yyvsp[0].member; } break; -case 51: -#line 550 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = false; - } -break; case 52: #line 554 "gram.y" { yyval.member = yyvsp[0].member; - yyval.member->negated = true; + yyval.member->negated = false; } break; case 53: -#line 560 "gram.y" +#line 558 "gram.y" { - yyval.string = yyvsp[0].string; + yyval.member = yyvsp[0].member; + yyval.member->negated = true; } break; case 54: -#line 565 "gram.y" +#line 564 "gram.y" { yyval.string = yyvsp[0].string; } @@ -1725,19 +1729,19 @@ case 55: } break; case 56: -#line 574 "gram.y" +#line 573 "gram.y" { yyval.string = yyvsp[0].string; } break; case 57: -#line 579 "gram.y" +#line 578 "gram.y" { yyval.string = yyvsp[0].string; } break; case 58: -#line 584 "gram.y" +#line 583 "gram.y" { yyval.string = yyvsp[0].string; } @@ -1749,19 +1753,25 @@ case 59: } break; case 60: -#line 593 "gram.y" +#line 592 "gram.y" { - yyval.runas = NULL; + yyval.string = yyvsp[0].string; } break; case 61: -#line 596 "gram.y" +#line 597 "gram.y" { - yyval.runas = yyvsp[-1].runas; + yyval.runas = NULL; } break; case 62: -#line 601 "gram.y" +#line 600 "gram.y" +{ + yyval.runas = yyvsp[-1].runas; + } +break; +case 63: +#line 605 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1778,8 +1788,8 @@ case 62: } } break; -case 63: -#line 616 "gram.y" +case 64: +#line 620 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1790,8 +1800,8 @@ case 63: /* $$->runasgroups = NULL; */ } break; -case 64: -#line 625 "gram.y" +case 65: +#line 629 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1802,8 +1812,8 @@ case 64: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 65: -#line 634 "gram.y" +case 66: +#line 638 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1814,8 +1824,8 @@ case 65: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 66: -#line 643 "gram.y" +case 67: +#line 647 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1832,14 +1842,14 @@ case 66: } } break; -case 67: -#line 660 "gram.y" +case 68: +#line 664 "gram.y" { init_options(&yyval.options); } break; -case 68: -#line 663 "gram.y" +case 69: +#line 667 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1849,8 +1859,8 @@ case 68: } } break; -case 69: -#line 671 "gram.y" +case 70: +#line 675 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1860,8 +1870,8 @@ case 69: } } break; -case 70: -#line 679 "gram.y" +case 71: +#line 683 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -1874,8 +1884,8 @@ case 70: } } break; -case 71: -#line 690 "gram.y" +case 72: +#line 694 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -1883,8 +1893,8 @@ case 71: #endif } break; -case 72: -#line 696 "gram.y" +case 73: +#line 700 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -1892,8 +1902,8 @@ case 72: #endif } break; -case 73: -#line 702 "gram.y" +case 74: +#line 706 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -1901,8 +1911,8 @@ case 73: #endif } break; -case 74: -#line 708 "gram.y" +case 75: +#line 712 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -1910,98 +1920,98 @@ case 74: #endif } break; -case 75: -#line 716 "gram.y" +case 76: +#line 720 "gram.y" { TAGS_INIT(yyval.tag); } break; -case 76: -#line 719 "gram.y" +case 77: +#line 723 "gram.y" { yyval.tag.nopasswd = true; } break; -case 77: -#line 722 "gram.y" +case 78: +#line 726 "gram.y" { yyval.tag.nopasswd = false; } break; -case 78: -#line 725 "gram.y" +case 79: +#line 729 "gram.y" { yyval.tag.noexec = true; } break; -case 79: -#line 728 "gram.y" +case 80: +#line 732 "gram.y" { yyval.tag.noexec = false; } break; -case 80: -#line 731 "gram.y" +case 81: +#line 735 "gram.y" { yyval.tag.setenv = true; } break; -case 81: -#line 734 "gram.y" +case 82: +#line 738 "gram.y" { yyval.tag.setenv = false; } break; -case 82: -#line 737 "gram.y" +case 83: +#line 741 "gram.y" { yyval.tag.log_input = true; } break; -case 83: -#line 740 "gram.y" +case 84: +#line 744 "gram.y" { yyval.tag.log_input = false; } break; -case 84: -#line 743 "gram.y" +case 85: +#line 747 "gram.y" { yyval.tag.log_output = true; } break; -case 85: -#line 746 "gram.y" +case 86: +#line 750 "gram.y" { yyval.tag.log_output = false; } break; -case 86: -#line 749 "gram.y" +case 87: +#line 753 "gram.y" { yyval.tag.follow = true; } break; -case 87: -#line 752 "gram.y" +case 88: +#line 756 "gram.y" { yyval.tag.follow = false; } break; -case 88: -#line 755 "gram.y" +case 89: +#line 759 "gram.y" { yyval.tag.send_mail = true; } break; -case 89: -#line 758 "gram.y" +case 90: +#line 762 "gram.y" { yyval.tag.send_mail = false; } break; -case 90: -#line 763 "gram.y" +case 91: +#line 767 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2010,8 +2020,8 @@ case 90: } } break; -case 91: -#line 770 "gram.y" +case 92: +#line 774 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2020,8 +2030,8 @@ case 91: } } break; -case 92: -#line 777 "gram.y" +case 93: +#line 781 "gram.y" { struct sudo_command *c; @@ -2037,8 +2047,8 @@ case 92: } } break; -case 95: -#line 797 "gram.y" +case 96: +#line 801 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2049,15 +2059,15 @@ case 95: } } break; -case 97: -#line 809 "gram.y" +case 98: +#line 813 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 100: -#line 819 "gram.y" +case 101: +#line 823 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2068,15 +2078,15 @@ case 100: } } break; -case 102: -#line 831 "gram.y" +case 103: +#line 835 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 105: -#line 841 "gram.y" +case 106: +#line 845 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2087,8 +2097,8 @@ case 105: } } break; -case 108: -#line 856 "gram.y" +case 109: +#line 860 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2099,29 +2109,29 @@ case 108: } } break; -case 110: -#line 868 "gram.y" +case 111: +#line 872 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 111: -#line 874 "gram.y" +case 112: +#line 878 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 112: -#line 878 "gram.y" +case 113: +#line 882 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 113: -#line 884 "gram.y" +case 114: +#line 888 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2130,8 +2140,8 @@ case 113: } } break; -case 114: -#line 891 "gram.y" +case 115: +#line 895 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2140,8 +2150,8 @@ case 114: } } break; -case 115: -#line 898 "gram.y" +case 116: +#line 902 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2150,8 +2160,8 @@ case 115: } } break; -case 116: -#line 905 "gram.y" +case 117: +#line 909 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2160,8 +2170,8 @@ case 116: } } break; -case 117: -#line 912 "gram.y" +case 118: +#line 916 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2170,29 +2180,29 @@ case 117: } } break; -case 119: -#line 922 "gram.y" +case 120: +#line 926 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 120: -#line 928 "gram.y" +case 121: +#line 932 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 121: -#line 932 "gram.y" +case 122: +#line 936 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 122: -#line 938 "gram.y" +case 123: +#line 942 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2201,8 +2211,8 @@ case 122: } } break; -case 123: -#line 945 "gram.y" +case 124: +#line 949 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2211,8 +2221,8 @@ case 123: } } break; -case 124: -#line 952 "gram.y" +case 125: +#line 956 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2221,19 +2231,19 @@ case 124: } } break; -case 125: -#line 961 "gram.y" +case 126: +#line 965 "gram.y" { ; } break; -case 126: -#line 964 "gram.y" +case 127: +#line 968 "gram.y" { ; /* EOF */ } break; -#line 2223 "gram.c" +#line 2233 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index bf50bfcc0e..6aabd48488 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -316,6 +316,10 @@ privileges : privilege HLTQ_CONCAT($1, $3, entries); $$ = $1; } + | privileges ':' error eol { + yyerrok; + $$ = $1; + } ; privilege : hostlist '=' cmndspeclist { From 360c2647602be09913ca8d0bf4f1f54df5870d9c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 17 Aug 2020 07:41:48 -0600 Subject: [PATCH 045/113] Make this test pass with bison's verbose error messages. --- plugins/sudoers/regress/testsudoers/test11.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/sudoers/regress/testsudoers/test11.sh b/plugins/sudoers/regress/testsudoers/test11.sh index a5bd2d317f..802afa9b2b 100755 --- a/plugins/sudoers/regress/testsudoers/test11.sh +++ b/plugins/sudoers/regress/testsudoers/test11.sh @@ -1,6 +1,7 @@ #!/bin/sh # # Test @include with garbage after the path name +# The standard error output is dup'd to the standard output. # # Avoid warnings about memory leaks when there is a syntax error @@ -8,18 +9,17 @@ ASAN_OPTIONS=detect_leaks=0; export ASAN_OPTIONS MYUID=`\ls -ln $TESTDIR/test2.inc | awk '{print $3}'` MYGID=`\ls -ln $TESTDIR/test2.inc | awk '{print $4}'` -exec 2>&1 echo "Testing @include with garbage after the path name" echo "" -./testsudoers -U $MYUID -G $MYGID root id <&1 | sed 's/\(syntax error\), .*/\1/' @include sudoers.local womp womp EOF echo "" echo "Testing #include with garbage after the path name" echo "" -./testsudoers -U $MYUID -G $MYGID root id <&1 | sed 's/\(syntax error\), .*/\1/' #include sudoers.local womp womp EOF From 609910cc2110887a28564385a1cf85c6b2fbdbe9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 17 Aug 2020 13:14:30 -0600 Subject: [PATCH 046/113] sudoers error recovery can be configured via an "error_recovery" setting. This setting is an argument to the sudoers plugin, similar to how sudoers_file, sudoers_mode, sudoers_uid, etc. are implemented. The default value is true. --- doc/sudoers.man.in | 21 ++++++++++++++++++++- doc/sudoers.mdoc.in | 20 +++++++++++++++++++- plugins/sudoers/file.c | 2 +- plugins/sudoers/policy.c | 20 ++++++++++++++++++-- plugins/sudoers/sudoers.h | 1 + 5 files changed, 59 insertions(+), 5 deletions(-) diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index 8b90e97f2e..3d6ce83558 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "July 5, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "August 17, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -98,6 +98,25 @@ Plugin sudoers_policy sudoers.so sudoers_mode=0400 .PP The following plugin arguments are supported: .TP 10n +error_recovery=bool +The +\fIerror_recovery\fR +argument can be used to control whether +\fBsudoers\fR +should attempt to recover from parse errors in the +\fIsudoers\fR +file. +If set to +\fItrue\fR +(the default), +\fBsudoers\fR +will try to recover from a parse error by discarding the portion +of the line that contains the error until the end of the line. +A value of +\fIfalse\fR +will disable error recovery. +Prior to version 1.9.3, no error recovery was performed. +.TP 10n ldap_conf=pathname The \fIldap_conf\fR diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index 3e9691b1bf..79e1ddc5bc 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd July 5, 2020 +.Dd August 17, 2020 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -91,6 +91,24 @@ Plugin sudoers_policy sudoers.so sudoers_mode=0400 .Pp The following plugin arguments are supported: .Bl -tag -width 8n +.It error_recovery=bool +The +.Em error_recovery +argument can be used to control whether +.Nm +should attempt to recover from parse errors in the +.Em sudoers +file. +If set to +.Em true +(the default), +.Nm +will try to recover from a parse error by discarding the portion +of the line that contains the error until the end of the line. +A value of +.Em false +will disable error recovery. +Prior to version 1.9.3, no error recovery was performed. .It ldap_conf=pathname The .Em ldap_conf diff --git a/plugins/sudoers/file.c b/plugins/sudoers/file.c index 7d04ed3b59..5b12b8fb36 100644 --- a/plugins/sudoers/file.c +++ b/plugins/sudoers/file.c @@ -109,7 +109,7 @@ sudo_file_parse(struct sudo_nss *nss) log_warningx(SLOG_SEND_MAIL|SLOG_NO_STDERR, N_("parse error in %s"), errorfile); } - if (error) { + if (error || !sudoers_recovery) { /* unrecoverable error */ debug_return_ptr(NULL); } diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index b2d28afc27..1dc0f16c95 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -49,6 +49,7 @@ struct sudoers_exec_args { static unsigned int sudo_version; static const char *interfaces_string; +bool sudoers_recovery = true; sudo_conv_t sudo_conv; sudo_printf_t sudo_printf; const char *path_ldap_conf = _PATH_LDAP_CONF; @@ -97,10 +98,14 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group) #define MATCHES(s, v) \ (strncmp((s), (v), sizeof(v) - 1) == 0) +#define INVALID(v) do { \ + sudo_warn(U_("invalid %.*s set by sudo front-end"), \ + (int)(sizeof(v) - 2), (v)); \ +} while (0) + #define CHECK(s, v) do { \ if ((s)[sizeof(v) - 1] == '\0') { \ - sudo_warn(U_("invalid %.*s set by sudo front-end"), \ - (int)(sizeof(v) - 2), v); \ + INVALID(v); \ goto bad; \ } \ } while (0) @@ -108,6 +113,15 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group) /* Parse sudo.conf plugin args. */ if (info->plugin_args != NULL) { for (cur = info->plugin_args; *cur != NULL; cur++) { + if (MATCHES(*cur, "error_recovery=")) { + int val = sudo_strtobool(*cur + sizeof("error_recovery=") - 1); + if (val == -1) { + INVALID("error_recovery="); /* Not a fatal error. */ + } else { + sudoers_recovery = val; + } + continue; + } if (MATCHES(*cur, "sudoers_file=")) { CHECK(*cur, "sudoers_file="); sudoers_file = *cur + sizeof("sudoers_file=") - 1; @@ -485,6 +499,8 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group) sudo_debug_printf(SUDO_DEBUG_INFO, "user_info: %s", *cur); #undef MATCHES +#undef INVALID +#undef CHECK debug_return_int(flags); oom: diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 46c72f1e8d..3b63bd437b 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -298,6 +298,7 @@ extern char *errorfile; extern int errorlineno; extern bool parse_error; extern bool sudoers_warnings; +extern bool sudoers_recovery; extern bool sudoers_strict; /* toke.l */ From a3364c1e95dbe90607a73625ec05d9e22f694bfe Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 17 Aug 2020 13:45:16 -0600 Subject: [PATCH 047/113] Fix sudoers_policy plugin options when sudoers_audit is not listed. As of sudo 1.9.1 the sudoers file is opened by the audit plugin, not the policy plugin. As a result, plugin options set for sudoers_policy have no effect. If sudoers_policy has plugin options in sudo.conf and sudoers_audit is not listed, move the options to sudoers_audit so they will have an effect. --- doc/sudoers.man.in | 17 +++++++++++++++-- doc/sudoers.mdoc.in | 17 +++++++++++++++-- src/load_plugins.c | 14 ++++++++++++-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index 3d6ce83558..e56d699411 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -72,6 +72,7 @@ plugin, the following configuration can be used. .nf .sp .RS 6n +Plugin sudoers_audit sudoers.so Plugin sudoers_policy sudoers.so Plugin sudoers_io sudoers.so .RE @@ -84,15 +85,27 @@ Starting with plugin in the sudo.conf(@mansectform@) file. -These arguments, if present, should be listed after the path to the plugin +Plugin arguments, if any, should be listed after the path to the plugin (i.e., after \fIsudoers.so\fR). +The arguments are only effective for the plugin that opens (and parses) the +\fIsudoers\fR +file. +.PP +For +\fBsudo\fR +version 1.9.1 and higher, this is the +\fIsudoers_audit\fR +plugin. +For older versions, it is the +\fIsudoers_policy\fR +plugin. Multiple arguments may be specified, separated by white space. For example: .nf .sp .RS 6n -Plugin sudoers_policy sudoers.so sudoers_mode=0400 +Plugin sudoers_audit sudoers.so sudoers_mode=0400 error_recovery=false .RE .fi .PP diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index 79e1ddc5bc..eaff43c14b 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -69,6 +69,7 @@ to use the .Nm plugin, the following configuration can be used. .Bd -literal -offset indent +Plugin sudoers_audit sudoers.so Plugin sudoers_policy sudoers.so Plugin sudoers_io sudoers.so .Ed @@ -80,13 +81,25 @@ Starting with plugin in the .Xr sudo.conf @mansectform@ file. -These arguments, if present, should be listed after the path to the plugin +Plugin arguments, if any, should be listed after the path to the plugin (i.e., after .Pa sudoers.so ) . +The arguments are only effective for the plugin that opens (and parses) the +.Em sudoers +file. +.Pp +For +.Nm sudo +version 1.9.1 and higher, this is the +.Em sudoers_audit +plugin. +For older versions, it is the +.Em sudoers_policy +plugin. Multiple arguments may be specified, separated by white space. For example: .Bd -literal -offset indent -Plugin sudoers_policy sudoers.so sudoers_mode=0400 +Plugin sudoers_audit sudoers.so sudoers_mode=0400 error_recovery=false .Ed .Pp The following plugin arguments are supported: diff --git a/src/load_plugins.c b/src/load_plugins.c index 578524088b..27a8f36cd0 100644 --- a/src/load_plugins.c +++ b/src/load_plugins.c @@ -532,8 +532,18 @@ sudo_load_plugins(struct plugin_container *policy_plugin, * loaded, load it too, if possible. */ if (!plugin_exists(audit_plugins, "sudoers_audit")) { - (void)sudo_load_sudoers_plugin("sudoers_audit", policy_plugin, - io_plugins, audit_plugins, approval_plugins, true); + if (sudo_load_sudoers_plugin("sudoers_audit", policy_plugin, + io_plugins, audit_plugins, approval_plugins, true)) { + /* + * Move the plugin options from sudoers_policy to sudoers_audit + * since the audit module is now what actually opens sudoers. + */ + if (policy_plugin->options != NULL) { + TAILQ_LAST(audit_plugins, plugin_container_list)->options = + policy_plugin->options; + policy_plugin->options = NULL; + } + } } } From da5afe11bf1be986ee3576703887b27d06506055 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 17 Aug 2020 16:02:29 -0600 Subject: [PATCH 048/113] Mention eof-of-line terminator and plugin argument changes. --- NEWS | 22 ++++++++++++++++++---- doc/UPGRADE | 27 +++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index ee35ad5dba..9fb342d98c 100644 --- a/NEWS +++ b/NEWS @@ -14,10 +14,16 @@ What's new in Sudo 1.9.3 * Fixed the libssl dependency in Debian packages on older releases that use libssl1.0.0. - * Sudo (and visudo) now provide more detailed messages when there - is a syntax error in sudoers. The offending line and token - is now displayed. If bison is used to generate the parser, - information about what token was expected is also displayed. + * Sudo (and visudo) now provide more detailed messages when a + syntax error is detected in sudoers. The offending line and + token are now displayed. If the parser was generated by GNU + bison, additional information about what token was expected is + also displayed. + + * Sudoers rules must now end in either a newline or the end-of-file. + Previously, it was possible to have multiple rules on a single + line, separated by white space. The use of an end-of-line + terminator makes it possible to display accurate error messages. * Sudo no longer refuses to run if a syntax error in the sudoers file is encountered. The entry with the syntax error will be @@ -28,6 +34,14 @@ What's new in Sudo 1.9.3 * Fixed the sample_approval plugin's symbol exports file for systems where the compiler doesn't support symbol hiding. + * Fixed a regression introduced in sudo 1.9.1 where arguments to + the "sudoers_policy" plugin in sudo.conf were not being applied. + The sudoers file is now parsed by the "sudoers_audit" plugin, + which is loaded implicitly when "sudoers_policy" is listed in + sudo.conf. Starting with sudo 1.9.3, if there are plugin arguments + for "sudoers_policy" but "sudoers_audit" is not listed, those + arguments will be applied to "sudoers_audit" instead. + What's new in Sudo 1.9.2 * Fixed package builds on RedHat Enterprise Linux 8. diff --git a/doc/UPGRADE b/doc/UPGRADE index a6eb2e5e6a..73c033abe5 100644 --- a/doc/UPGRADE +++ b/doc/UPGRADE @@ -1,6 +1,33 @@ Notes on upgrading from an older release ======================================== +o Upgrading from a version prior to 1.9.3: + + Starting with version 1.9.3, sudoers rules must end in either + a newline or the end-of-file. This makes it possible to provide + better error messages. Previously, it was possible to include + multiple rules on a single line, separated by white space. + + Starting with version 1.9.3, sudo will attempt to recover from + a syntax error in the sudoers file by discarding the portion + of the line that contains the error until the end of the line. + To restore the historic behavior of refusing to run when a + syntax error is encountered, add "error_recovery=false" as a + plugin option in sudo.conf for the "sudoers_audit" plugin, (or + "sudoers_policy" if there is no "sudoers_audit" plugin configured). + +o Upgrading from a version prior to 1.9.1: + + Starting with version 1.9.1, sudoers plugin arguments in sudo.conf + should be specified for the "sudoers_audit" plugin, not + "sudoers_policy". This is because the sudoers file is now + opened and parsed by the "sudoers_audit" plugin. Previously, + this was done by the "sudoers_policy" plugin. The use of an + audit plugin makes it possible for the sudoers module to detect + when a command has been rejected by an approval plugin and only + log commands that are allowed by both policy and approval + plugins. + o Upgrading from a version prior to 1.8.30: Starting with version 1.8.30, sudo will no longer allow commands From 3235687d96741f22ebdfb3502a93d7010f816d22 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 17 Aug 2020 19:37:09 -0600 Subject: [PATCH 049/113] Briefly describe how to restore historical parse error behavior. --- NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 9fb342d98c..d5f4fc3d1a 100644 --- a/NEWS +++ b/NEWS @@ -29,7 +29,9 @@ What's new in Sudo 1.9.3 file is encountered. The entry with the syntax error will be discarded and sudo will continue to parse the file. This makes recovery from a syntax error less painful on systems where sudo - is the primary method of superuser access. + is the primary method of superuser access. The historic behavior + can be restored by add "error_recovery=false" to the sudoers + plugin's optional arguments in sudo.conf. * Fixed the sample_approval plugin's symbol exports file for systems where the compiler doesn't support symbol hiding. From 019f1f6b937fd19bc4c811d7bf58665f5fe900ac Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 25 Aug 2020 16:48:13 -0600 Subject: [PATCH 050/113] Use sigabbrev_np(3) to access signal abbreviations if supported. glibc-2.32 has removed sys_sigabbrev[], we can use sigabbrev_np(3) instead. --- config.h.in | 3 +++ configure | 39 ++++++++++++++++++++++++------------ configure.ac | 45 ++++++++++++++++++++++-------------------- lib/util/sig2str.c | 49 ++++++++++++++++++++++++++-------------------- lib/util/str2sig.c | 35 ++++++++++++++++++--------------- 5 files changed, 100 insertions(+), 71 deletions(-) diff --git a/config.h.in b/config.h.in index 2fa1d92a64..2946936901 100644 --- a/config.h.in +++ b/config.h.in @@ -740,6 +740,9 @@ /* Define to 1 if you have the `sig2str' function. */ #undef HAVE_SIG2STR +/* Define to 1 if you have the `sigabbrev_np' function. */ +#undef HAVE_SIGABBREV_NP + /* Define to 1 if you use S/Key. */ #undef HAVE_SKEY diff --git a/configure b/configure index 6a2097a40a..0f3bd7fefc 100755 --- a/configure +++ b/configure @@ -23687,9 +23687,21 @@ done if test x"${ac_cv_func_sig2str}${ac_cv_func_str2sig}" != x"yesyes"; then - COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }strsig_test" - HAVE_SIGNAME="false" - ac_fn_c_check_decl "$LINENO" "sys_signame" "ac_cv_have_decl_sys_signame" " + for ac_func in sigabbrev_np +do : + ac_fn_c_check_func "$LINENO" "sigabbrev_np" "ac_cv_func_sigabbrev_np" +if test "x$ac_cv_func_sigabbrev_np" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SIGABBREV_NP 1 +_ACEOF + +fi +done + + if test x"${ac_cv_func_sigabbrev_np}" != x"yes"; then + COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }strsig_test" + HAVE_SIGNAME="false" + ac_fn_c_check_decl "$LINENO" "sys_signame" "ac_cv_have_decl_sys_signame" " $ac_includes_default #include @@ -23705,7 +23717,7 @@ cat >>confdefs.h <<_ACEOF _ACEOF if test $ac_have_decl = 1; then : - HAVE_SIGNAME="true" + HAVE_SIGNAME="true" fi ac_fn_c_check_decl "$LINENO" "_sys_signame" "ac_cv_have_decl__sys_signame" " @@ -23724,7 +23736,7 @@ cat >>confdefs.h <<_ACEOF _ACEOF if test $ac_have_decl = 1; then : - HAVE_SIGNAME="true" + HAVE_SIGNAME="true" fi ac_fn_c_check_decl "$LINENO" "sys_sigabbrev" "ac_cv_have_decl_sys_sigabbrev" " @@ -23743,12 +23755,12 @@ cat >>confdefs.h <<_ACEOF _ACEOF if test $ac_have_decl = 1; then : - HAVE_SIGNAME="true" + HAVE_SIGNAME="true" fi - if test "$HAVE_SIGNAME" != "true"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for undeclared sys_sigabbrev" >&5 + if test "$HAVE_SIGNAME" != "true"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for undeclared sys_sigabbrev" >&5 $as_echo_n "checking for undeclared sys_sigabbrev... " >&6; } if ${sudo_cv_var_sys_sigabbrev+:} false; then : $as_echo_n "(cached) " >&6 @@ -23777,17 +23789,18 @@ rm -f core conftest.err conftest.$ac_objext \ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_sys_sigabbrev" >&5 $as_echo "$sudo_cv_var_sys_sigabbrev" >&6; } - if test "$sudo_cv_var_sys_sigabbrev" = yes; then - $as_echo "#define HAVE_SYS_SIGABBREV 1" >>confdefs.h + if test "$sudo_cv_var_sys_sigabbrev" = yes; then + $as_echo "#define HAVE_SYS_SIGABBREV 1" >>confdefs.h - else - case " $LIBOBJS " in + else + case " $LIBOBJS " in *" signame.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS signame.$ac_objext" ;; esac - SIGNAME=signame.lo + SIGNAME=signame.lo + fi fi fi fi diff --git a/configure.ac b/configure.ac index 39eedbc211..8ad43c00c0 100644 --- a/configure.ac +++ b/configure.ac @@ -3498,29 +3498,32 @@ dnl Check for sys_signame or sys_sigabbrev if missing sig2str() or str2sig(). dnl Also enable unit tests for sig2str() and str2sig(). dnl if test x"${ac_cv_func_sig2str}${ac_cv_func_str2sig}" != x"yesyes"; then - COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }strsig_test" - HAVE_SIGNAME="false" - AC_CHECK_DECLS([sys_signame, _sys_signame, sys_sigabbrev], [ - HAVE_SIGNAME="true" - ], [ ], [ + AC_CHECK_FUNCS([sigabbrev_np]) + if test x"${ac_cv_func_sigabbrev_np}" != x"yes"; then + COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }strsig_test" + HAVE_SIGNAME="false" + AC_CHECK_DECLS([sys_signame, _sys_signame, sys_sigabbrev], [ + HAVE_SIGNAME="true" + ], [ ], [ AC_INCLUDES_DEFAULT #include - ]) - if test "$HAVE_SIGNAME" != "true"; then - AC_CACHE_CHECK([for undeclared sys_sigabbrev], - [sudo_cv_var_sys_sigabbrev], - [AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[extern char **sys_sigabbrev;]], [[return sys_sigabbrev[1];]])], - [sudo_cv_var_sys_sigabbrev=yes], - [sudo_cv_var_sys_sigabbrev=no] - ) - ] - ) - if test "$sudo_cv_var_sys_sigabbrev" = yes; then - AC_DEFINE(HAVE_SYS_SIGABBREV) - else - AC_LIBOBJ(signame) - SIGNAME=signame.lo + ]) + if test "$HAVE_SIGNAME" != "true"; then + AC_CACHE_CHECK([for undeclared sys_sigabbrev], + [sudo_cv_var_sys_sigabbrev], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[extern char **sys_sigabbrev;]], [[return sys_sigabbrev[1];]])], + [sudo_cv_var_sys_sigabbrev=yes], + [sudo_cv_var_sys_sigabbrev=no] + ) + ] + ) + if test "$sudo_cv_var_sys_sigabbrev" = yes; then + AC_DEFINE(HAVE_SYS_SIGABBREV) + else + AC_LIBOBJ(signame) + SIGNAME=signame.lo + fi fi fi fi diff --git a/lib/util/sig2str.c b/lib/util/sig2str.c index 6249fa42ee..1d86021b84 100644 --- a/lib/util/sig2str.c +++ b/lib/util/sig2str.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2012-2015, 2017-2019 Todd C. Miller + * Copyright (c) 2012-2015, 2017-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -32,20 +32,24 @@ #include #include "sudo_compat.h" +#include "sudo_util.h" -#if defined(HAVE_DECL_SYS_SIGNAME) && HAVE_DECL_SYS_SIGNAME == 1 -# define sudo_sys_signame sys_signame -#elif defined(HAVE_DECL__SYS_SIGNAME) && HAVE_DECL__SYS_SIGNAME == 1 -# define sudo_sys_signame _sys_signame -#elif defined(HAVE_DECL_SYS_SIGABBREV) && HAVE_DECL_SYS_SIGABBREV == 1 -# define sudo_sys_signame sys_sigabbrev -#else -# ifdef HAVE_SYS_SIGABBREV - /* sys_sigabbrev is not declared by glibc */ -# define sudo_sys_signame sys_sigabbrev +#if !defined(HAVE_SIGABBREV_NP) +# if defined(HAVE_DECL_SYS_SIGNAME) && HAVE_DECL_SYS_SIGNAME == 1 +# define sigabbrev_np(_x) sys_signame[(_x)] +# elif defined(HAVE_DECL__SYS_SIGNAME) && HAVE_DECL__SYS_SIGNAME == 1 +# define sigabbrev_np(_x) _sys_signame[(_x)] +# elif defined(HAVE_SYS_SIGABBREV) +# define sigabbrev_np(_x) sys_sigabbrev[(_x)] +# if defined(HAVE_DECL_SYS_SIGABBREV) && HAVE_DECL_SYS_SIGABBREV == 0 + /* sys_sigabbrev is not declared by glibc */ + extern const char *const sys_sigabbrev[NSIG]; +# endif +# else +# define sigabbrev_np(_x) sudo_sys_signame[(_x)] + extern const char *const sudo_sys_signame[NSIG]; # endif -extern const char *const sudo_sys_signame[NSIG]; -#endif +#endif /* !HAVE_SIGABBREV_NP */ /* * Translate signal number to name. @@ -77,15 +81,18 @@ sudo_sig2str(int signo, char *signame) return 0; } #endif - if (signo > 0 && signo < NSIG && sudo_sys_signame[signo] != NULL) { - strlcpy(signame, sudo_sys_signame[signo], SIG2STR_MAX); - /* Make sure we always return an upper case signame. */ - if (islower((unsigned char)signame[0])) { - int i; - for (i = 0; signame[i] != '\0'; i++) - signame[i] = toupper((unsigned char)signame[i]); + if (signo > 0 && signo < NSIG) { + const char *cp = sigabbrev_np(signo); + if (cp != NULL) { + strlcpy(signame, cp, SIG2STR_MAX); + /* Make sure we always return an upper case signame. */ + if (islower((unsigned char)signame[0])) { + int i; + for (i = 0; signame[i] != '\0'; i++) + signame[i] = toupper((unsigned char)signame[i]); + } + return 0; } - return 0; } errno = EINVAL; return -1; diff --git a/lib/util/str2sig.c b/lib/util/str2sig.c index 3724949dbc..e265ec4c20 100644 --- a/lib/util/str2sig.c +++ b/lib/util/str2sig.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -37,19 +37,22 @@ #include "sudo_compat.h" #include "sudo_util.h" -#if defined(HAVE_DECL_SYS_SIGNAME) && HAVE_DECL_SYS_SIGNAME == 1 -# define sudo_sys_signame sys_signame -#elif defined(HAVE_DECL__SYS_SIGNAME) && HAVE_DECL__SYS_SIGNAME == 1 -# define sudo_sys_signame _sys_signame -#elif defined(HAVE_DECL_SYS_SIGABBREV) && HAVE_DECL_SYS_SIGABBREV == 1 -# define sudo_sys_signame sys_sigabbrev -#else -# ifdef HAVE_SYS_SIGABBREV - /* sys_sigabbrev is not declared by glibc */ -# define sudo_sys_signame sys_sigabbrev +#if !defined(HAVE_SIGABBREV_NP) +# if defined(HAVE_DECL_SYS_SIGNAME) && HAVE_DECL_SYS_SIGNAME == 1 +# define sigabbrev_np(_x) sys_signame[(_x)] +# elif defined(HAVE_DECL__SYS_SIGNAME) && HAVE_DECL__SYS_SIGNAME == 1 +# define sigabbrev_np(_x) _sys_signame[(_x)] +# elif defined(HAVE_SYS_SIGABBREV) +# define sigabbrev_np(_x) sys_sigabbrev[(_x)] +# if defined(HAVE_DECL_SYS_SIGABBREV) && HAVE_DECL_SYS_SIGABBREV == 0 + /* sys_sigabbrev is not declared by glibc */ + extern const char *const sys_sigabbrev[NSIG]; +# endif +# else +# define sigabbrev_np(_x) sudo_sys_signame[(_x)] + extern const char *const sudo_sys_signame[NSIG]; # endif -extern const char *const sudo_sys_signame[NSIG]; -#endif +#endif /* !HAVE_SIGABBREV_NP */ /* * Many systems use aliases for source backward compatibility. @@ -154,11 +157,11 @@ sudo_str2sig(const char *signame, int *result) } } - /* Check sys_signame[]. */ for (signo = 1; signo < NSIG; signo++) { - if (sudo_sys_signame[signo] != NULL) { + const char *cp = sigabbrev_np(signo); + if (cp != NULL) { /* On macOS sys_signame[] may contain lower-case names. */ - if (strcasecmp(signame, sudo_sys_signame[signo]) == 0) { + if (strcasecmp(signame, cp) == 0) { *result = signo; return 0; } From 03eb3d6db9777c10e5cdb58bd26bf355cd525df3 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 27 Aug 2020 16:06:45 -0600 Subject: [PATCH 051/113] Don't override errorfile and errorlineno set by check_aliases(). Now that alias parsing stores the file and line number, visudo can use that information to go to the line with an error when re-editing. --- plugins/sudoers/visudo.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 4a1ba6e2ab..1135648411 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -569,10 +569,8 @@ check_defaults_and_aliases(bool strict, bool quiet) } } parse_error = true; - } else if (check_aliases(strict, quiet) != 0) { - rcstr_delref(errorfile); - errorfile = NULL; /* don't know which file */ - errorlineno = -1; + } + if (check_aliases(strict, quiet) != 0) { parse_error = true; } debug_return; From 1b300f78dec80636764d4f6239483895d5897f22 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 27 Aug 2020 16:08:18 -0600 Subject: [PATCH 052/113] Remove superfluous "parse error in sudoers near line N" message. The sudoers parser now produces better syntax error messages so we don't need visudo to print its own. --- plugins/sudoers/visudo.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 1135648411..84c93300e7 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -942,15 +942,7 @@ check_syntax(const char *sudoers_file, bool quiet, bool strict, bool oldperms) sudoers_setlocale(oldlocale, NULL); ok = !parse_error; - if (parse_error) { - if (!quiet) { - if (errorlineno != -1) - (void) printf(_("parse error in %s near line %d\n"), - errorfile, errorlineno); - else if (errorfile != NULL) - (void) printf(_("parse error in %s\n"), errorfile); - } - } else { + if (!parse_error) { struct sudoersfile *sp; /* Parsed OK, check mode and owner. */ From 47ed1721be8195b8e829a29bc4f20eb4e17fae97 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 27 Aug 2020 16:12:09 -0600 Subject: [PATCH 053/113] Refer to "syntax error" instead of "parse error". This is the term the parser uses when there is an actual error. --- doc/sudoers.man.in | 6 +++--- doc/sudoers.mdoc.in | 6 +++--- doc/visudo.man.in | 14 +++++++------- doc/visudo.mdoc.in | 14 +++++++------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index e56d699411..a2e926bd12 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "August 17, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "August 27, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -116,14 +116,14 @@ The \fIerror_recovery\fR argument can be used to control whether \fBsudoers\fR -should attempt to recover from parse errors in the +should attempt to recover from syntax errors in the \fIsudoers\fR file. If set to \fItrue\fR (the default), \fBsudoers\fR -will try to recover from a parse error by discarding the portion +will try to recover from a syntax error by discarding the portion of the line that contains the error until the end of the line. A value of \fIfalse\fR diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index eaff43c14b..f46179e692 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 17, 2020 +.Dd August 27, 2020 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -109,14 +109,14 @@ The .Em error_recovery argument can be used to control whether .Nm -should attempt to recover from parse errors in the +should attempt to recover from syntax errors in the .Em sudoers file. If set to .Em true (the default), .Nm -will try to recover from a parse error by discarding the portion +will try to recover from a syntax error by discarding the portion of the line that contains the error until the end of the line. A value of .Em false diff --git a/doc/visudo.man.in b/doc/visudo.man.in index eb48f4b9c4..95763d5675 100644 --- a/doc/visudo.man.in +++ b/doc/visudo.man.in @@ -2,7 +2,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 1996,1998-2005, 2007-2019 +.\" Copyright (c) 1996,1998-2005, 2007-2020 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -21,7 +21,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.TH "VISUDO" "@mansectsu@" "October 20, 2019" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "VISUDO" "@mansectsu@" "August 27, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -42,7 +42,7 @@ vipw(@mansectsu@). locks the \fIsudoers\fR file against multiple simultaneous edits, provides basic sanity checks, -and checks for parse errors before installing the edited file. +and checks for syntax errors before installing the edited file. If the \fIsudoers\fR file is currently being edited you will receive a message to try again later. @@ -70,7 +70,7 @@ The \(oqQ\(cq option should be used with extreme caution because if \fBvisudo\fR -believes there to be a parse error, so will +believes there to be a syntax error, so will \fBsudo\fR and no one will be able to run \fBsudo\fR @@ -79,7 +79,7 @@ If \(oqe\(cq is typed to edit the \fIsudoers\fR -file after a parse error has been detected, the cursor will be placed on +file after a syntax error has been detected, the cursor will be placed on the line where the error occurred (if the editor supports this feature). .PP There are two @@ -228,7 +228,7 @@ file. If an alias is referenced but not actually defined or if there is a cycle in an alias, \fBvisudo\fR -will consider this a parse error. +will consider this a syntax error. Note that it is not possible to differentiate between an alias and a host name or user name that consists solely of uppercase letters, digits, and the underscore @@ -364,7 +364,7 @@ Default temporary file used by visudo .SH "DIAGNOSTICS" In addition to reporting \fIsudoers\fR -parse errors, +syntax errors, \fBvisudo\fR may produce the following messages: .TP 6n diff --git a/doc/visudo.mdoc.in b/doc/visudo.mdoc.in index 8c0a1c3151..6613b30609 100644 --- a/doc/visudo.mdoc.in +++ b/doc/visudo.mdoc.in @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 1996,1998-2005, 2007-2019 +.\" Copyright (c) 1996,1998-2005, 2007-2020 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -20,7 +20,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd October 20, 2019 +.Dd August 27, 2020 .Dt VISUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -40,7 +40,7 @@ file in a safe fashion, analogous to locks the .Em sudoers file against multiple simultaneous edits, provides basic sanity checks, -and checks for parse errors before installing the edited file. +and checks for syntax errors before installing the edited file. If the .Em sudoers file is currently being edited you will receive a message to try again later. @@ -68,7 +68,7 @@ The .Ql Q option should be used with extreme caution because if .Nm -believes there to be a parse error, so will +believes there to be a syntax error, so will .Nm sudo and no one will be able to run .Nm sudo @@ -77,7 +77,7 @@ If .Ql e is typed to edit the .Em sudoers -file after a parse error has been detected, the cursor will be placed on +file after a syntax error has been detected, the cursor will be placed on the line where the error occurred (if the editor supports this feature). .Pp There are two @@ -222,7 +222,7 @@ file. If an alias is referenced but not actually defined or if there is a cycle in an alias, .Nm -will consider this a parse error. +will consider this a syntax error. Note that it is not possible to differentiate between an alias and a host name or user name that consists solely of uppercase letters, digits, and the underscore @@ -351,7 +351,7 @@ Default temporary file used by visudo .Sh DIAGNOSTICS In addition to reporting .Em sudoers -parse errors, +syntax errors, .Nm may produce the following messages: .Bl -tag -width 4n From 84e6e6ccf9c8ed27dc75e87dcc199c04b791183c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 31 Aug 2020 14:09:36 -0600 Subject: [PATCH 054/113] Update copyright year on some files where it was out of date. --- doc/Makefile.in | 2 +- doc/sudo_logsrvd.man.in | 4 ++-- doc/sudo_plugin_python.man.in | 2 +- doc/sudo_plugin_python.mdoc.in | 2 +- lib/logsrv/Makefile.in | 2 +- lib/util/cfmakeraw.c | 2 +- lib/util/fchmodat.c | 2 +- lib/util/fstatat.c | 2 +- lib/util/getdelim.c | 2 +- lib/util/getusershell.c | 2 +- lib/util/openat.c | 2 +- lib/util/regress/getdelim/getdelim_test.c | 2 +- lib/util/regress/strsig/strsig_test.c | 2 +- lib/util/regress/strtofoo/strtobool_test.c | 2 +- lib/util/regress/strtofoo/strtoid_test.c | 2 +- lib/util/regress/strtofoo/strtomode_test.c | 2 +- lib/util/regress/strtofoo/strtonum_test.c | 2 +- lib/util/regress/vsyslog/vsyslog_test.c | 2 +- lib/util/roundup.c | 2 +- lib/util/strtoid.c | 2 +- lib/util/strtonum.c | 2 +- lib/util/term.c | 2 +- lib/util/unlinkat.c | 2 +- logsrvd/Makefile.in | 2 +- logsrvd/eventlog.c | 2 +- logsrvd/iolog_writer.c | 2 +- logsrvd/logsrv_util.c | 2 +- plugins/python/Makefile.in | 2 +- plugins/python/pyhelpers.c | 2 +- plugins/python/pyhelpers.h | 2 +- plugins/python/python_baseplugin.c | 2 +- plugins/python/python_convmessage.c | 2 +- plugins/python/python_importblocker.c | 2 +- plugins/python/python_loghandler.c | 2 +- plugins/python/python_plugin_approval.c | 2 +- plugins/python/python_plugin_audit.c | 2 +- plugins/python/python_plugin_common.c | 2 +- plugins/python/python_plugin_common.h | 2 +- plugins/python/python_plugin_group.c | 2 +- plugins/python/python_plugin_io.c | 2 +- plugins/python/python_plugin_policy.c | 2 +- plugins/python/sudo_python_debug.c | 2 +- plugins/python/sudo_python_module.c | 2 +- plugins/python/sudo_python_module.h | 2 +- plugins/sudoers/fmtsudoers.c | 2 +- plugins/sudoers/group_plugin.c | 2 +- plugins/sudoers/ldap_conf.c | 2 +- plugins/sudoers/parse.c | 2 +- plugins/sudoers/parse_ldif.c | 2 +- plugins/sudoers/set_perms.c | 2 +- plugins/sudoers/starttime.c | 2 +- plugins/sudoers/tsdump.c | 2 +- src/exec_monitor.c | 2 +- src/exec_nopty.c | 2 +- src/limits.c | 2 +- src/ttyname.c | 2 +- 56 files changed, 57 insertions(+), 57 deletions(-) diff --git a/doc/Makefile.in b/doc/Makefile.in index 8c32b32d1d..eed67a1484 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: ISC # -# Copyright (c) 2010-2015, 2017-2019 Todd C. Miller +# Copyright (c) 2010-2015, 2017-2020 Todd C. Miller # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above diff --git a/doc/sudo_logsrvd.man.in b/doc/sudo_logsrvd.man.in index f89c96f2f4..2eae8d29f1 100644 --- a/doc/sudo_logsrvd.man.in +++ b/doc/sudo_logsrvd.man.in @@ -2,7 +2,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 2019 Todd C. Miller +.\" Copyright (c) 2019-2020 Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -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" "@mansectsu@" "October 16, 2019" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO_LOGSRVD" "@mansectsu@" "March 28, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" diff --git a/doc/sudo_plugin_python.man.in b/doc/sudo_plugin_python.man.in index b19d3d5392..919ecd9412 100644 --- a/doc/sudo_plugin_python.man.in +++ b/doc/sudo_plugin_python.man.in @@ -2,7 +2,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 2019 Robert Manner +.\" Copyright (c) 2019-2020 Robert Manner .\" .\" 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/doc/sudo_plugin_python.mdoc.in b/doc/sudo_plugin_python.mdoc.in index 96858d215b..ba87971e5f 100644 --- a/doc/sudo_plugin_python.mdoc.in +++ b/doc/sudo_plugin_python.mdoc.in @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 2019 Robert Manner +.\" Copyright (c) 2019-2020 Robert Manner .\" .\" 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/lib/logsrv/Makefile.in b/lib/logsrv/Makefile.in index 7b863547b8..63d1d2444d 100644 --- a/lib/logsrv/Makefile.in +++ b/lib/logsrv/Makefile.in @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: ISC # -# Copyright (c) 2019 Todd C. Miller +# Copyright (c) 2019-2020 Todd C. Miller # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/cfmakeraw.c b/lib/util/cfmakeraw.c index 7ad4e549fa..956001f0e4 100644 --- a/lib/util/cfmakeraw.c +++ b/lib/util/cfmakeraw.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/fchmodat.c b/lib/util/fchmodat.c index 73b1de1ad5..9800296f22 100644 --- a/lib/util/fchmodat.c +++ b/lib/util/fchmodat.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/fstatat.c b/lib/util/fstatat.c index 8d5dcc16fb..0b342d1dd2 100644 --- a/lib/util/fstatat.c +++ b/lib/util/fstatat.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/getdelim.c b/lib/util/getdelim.c index 413d8ccd81..8daf620d55 100644 --- a/lib/util/getdelim.c +++ b/lib/util/getdelim.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/getusershell.c b/lib/util/getusershell.c index 262559f199..791281628e 100644 --- a/lib/util/getusershell.c +++ b/lib/util/getusershell.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/openat.c b/lib/util/openat.c index 09622d0924..5431525f1b 100644 --- a/lib/util/openat.c +++ b/lib/util/openat.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2015, 2019 Todd C. Miller + * Copyright (c) 2015, 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/regress/getdelim/getdelim_test.c b/lib/util/regress/getdelim/getdelim_test.c index e854f2f3e9..6a550bc3e8 100644 --- a/lib/util/regress/getdelim/getdelim_test.c +++ b/lib/util/regress/getdelim/getdelim_test.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/regress/strsig/strsig_test.c b/lib/util/regress/strsig/strsig_test.c index 0d6b5b8a67..573dc1d081 100644 --- a/lib/util/regress/strsig/strsig_test.c +++ b/lib/util/regress/strsig/strsig_test.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/regress/strtofoo/strtobool_test.c b/lib/util/regress/strtofoo/strtobool_test.c index b34fd5f98c..10cd82f3d0 100644 --- a/lib/util/regress/strtofoo/strtobool_test.c +++ b/lib/util/regress/strtofoo/strtobool_test.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2014-2019 Todd C. Miller + * Copyright (c) 2014-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/regress/strtofoo/strtoid_test.c b/lib/util/regress/strtofoo/strtoid_test.c index 31bb566a59..306eccb00d 100644 --- a/lib/util/regress/strtofoo/strtoid_test.c +++ b/lib/util/regress/strtofoo/strtoid_test.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2014-2019 Todd C. Miller + * Copyright (c) 2014-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/regress/strtofoo/strtomode_test.c b/lib/util/regress/strtofoo/strtomode_test.c index 4430a24ac9..3855f2a7af 100644 --- a/lib/util/regress/strtofoo/strtomode_test.c +++ b/lib/util/regress/strtofoo/strtomode_test.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2014-2019 Todd C. Miller + * Copyright (c) 2014-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/regress/strtofoo/strtonum_test.c b/lib/util/regress/strtofoo/strtonum_test.c index bc075eab67..cefb88d8b7 100644 --- a/lib/util/regress/strtofoo/strtonum_test.c +++ b/lib/util/regress/strtofoo/strtonum_test.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/regress/vsyslog/vsyslog_test.c b/lib/util/regress/vsyslog/vsyslog_test.c index 549c1afc7e..435934efc9 100644 --- a/lib/util/regress/vsyslog/vsyslog_test.c +++ b/lib/util/regress/vsyslog/vsyslog_test.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2017-2019 Todd C. Miller + * Copyright (c) 2017-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/roundup.c b/lib/util/roundup.c index 782ea45e90..38f15711ad 100644 --- a/lib/util/roundup.c +++ b/lib/util/roundup.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/strtoid.c b/lib/util/strtoid.c index bbda9815f4..5ad8d99e29 100644 --- a/lib/util/strtoid.c +++ b/lib/util/strtoid.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2013-2019 Todd C. Miller + * Copyright (c) 2013-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/strtonum.c b/lib/util/strtonum.c index d0ce1adb12..12edbbe9ed 100644 --- a/lib/util/strtonum.c +++ b/lib/util/strtonum.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2013-2015, 2019 Todd C. Miller + * Copyright (c) 2013-2015, 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/term.c b/lib/util/term.c index 0dbbaf67ce..9454ac6e36 100644 --- a/lib/util/term.c +++ b/lib/util/term.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2011-2015, 2017-2019 Todd C. Miller + * Copyright (c) 2011-2015, 2017-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/lib/util/unlinkat.c b/lib/util/unlinkat.c index bb5fdbeee8..f1d590eb89 100644 --- a/lib/util/unlinkat.c +++ b/lib/util/unlinkat.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/logsrvd/Makefile.in b/logsrvd/Makefile.in index 5ebddbecaa..f1aecae307 100644 --- a/logsrvd/Makefile.in +++ b/logsrvd/Makefile.in @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: ISC # -# Copyright (c) 2019 Todd C. Miller +# Copyright (c) 2019-2020 Todd C. Miller # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above diff --git a/logsrvd/eventlog.c b/logsrvd/eventlog.c index 006a9b5dc4..227b90b198 100644 --- a/logsrvd/eventlog.c +++ b/logsrvd/eventlog.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1994-1996, 1998-2019 Todd C. Miller + * Copyright (c) 1994-1996, 1998-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 7e99182965..18287cb163 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/logsrvd/logsrv_util.c b/logsrvd/logsrv_util.c index 6ddc3e3027..e5d54f146f 100644 --- a/logsrvd/logsrv_util.c +++ b/logsrvd/logsrv_util.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/python/Makefile.in b/plugins/python/Makefile.in index b4bb3e58d6..d6e2916e1e 100644 --- a/plugins/python/Makefile.in +++ b/plugins/python/Makefile.in @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: ISC # -# Copyright (c) 2019 Todd C. Miller +# Copyright (c) 2019-2020 Todd C. Miller # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/python/pyhelpers.c b/plugins/python/pyhelpers.c index 27e9ffb3bc..0fec24d1b6 100644 --- a/plugins/python/pyhelpers.c +++ b/plugins/python/pyhelpers.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/pyhelpers.h b/plugins/python/pyhelpers.h index fe4810bde1..01843d7dc5 100644 --- a/plugins/python/pyhelpers.h +++ b/plugins/python/pyhelpers.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_baseplugin.c b/plugins/python/python_baseplugin.c index 3ff4623c25..6060169735 100644 --- a/plugins/python/python_baseplugin.c +++ b/plugins/python/python_baseplugin.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_convmessage.c b/plugins/python/python_convmessage.c index af9cee797e..91cd3dfac9 100644 --- a/plugins/python/python_convmessage.c +++ b/plugins/python/python_convmessage.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_importblocker.c b/plugins/python/python_importblocker.c index 66aceecd82..a2b98eeea9 100644 --- a/plugins/python/python_importblocker.c +++ b/plugins/python/python_importblocker.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_loghandler.c b/plugins/python/python_loghandler.c index f83a20dad4..2541e687e6 100644 --- a/plugins/python/python_loghandler.c +++ b/plugins/python/python_loghandler.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2020 Robert Manner * * 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/python/python_plugin_approval.c b/plugins/python/python_plugin_approval.c index 38947ea5a6..31c479f19b 100644 --- a/plugins/python/python_plugin_approval.c +++ b/plugins/python/python_plugin_approval.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2020 Robert Manner * * 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/python/python_plugin_audit.c b/plugins/python/python_plugin_audit.c index 8ff5221906..ac4093482a 100644 --- a/plugins/python/python_plugin_audit.c +++ b/plugins/python/python_plugin_audit.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2020 Robert Manner * * 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/python/python_plugin_common.c b/plugins/python/python_plugin_common.c index 1ef36e7791..d3e41fb561 100644 --- a/plugins/python/python_plugin_common.c +++ b/plugins/python/python_plugin_common.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_plugin_common.h b/plugins/python/python_plugin_common.h index b7481a1ace..c0fdce654b 100644 --- a/plugins/python/python_plugin_common.h +++ b/plugins/python/python_plugin_common.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_plugin_group.c b/plugins/python/python_plugin_group.c index 30f460ffe6..d0ea3c113d 100644 --- a/plugins/python/python_plugin_group.c +++ b/plugins/python/python_plugin_group.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_plugin_io.c b/plugins/python/python_plugin_io.c index d7b9fc4e89..b124808465 100644 --- a/plugins/python/python_plugin_io.c +++ b/plugins/python/python_plugin_io.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/python_plugin_policy.c b/plugins/python/python_plugin_policy.c index ea84d2c451..82b9a18841 100644 --- a/plugins/python/python_plugin_policy.c +++ b/plugins/python/python_plugin_policy.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/sudo_python_debug.c b/plugins/python/sudo_python_debug.c index 1d30a94604..18cb756e6d 100644 --- a/plugins/python/sudo_python_debug.c +++ b/plugins/python/sudo_python_debug.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Todd C. Miller + * Copyright (c) 2019-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/python/sudo_python_module.c b/plugins/python/sudo_python_module.c index cb4b20186f..bd189df9ae 100644 --- a/plugins/python/sudo_python_module.c +++ b/plugins/python/sudo_python_module.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/python/sudo_python_module.h b/plugins/python/sudo_python_module.h index 48f5c1c732..a6c4f045c6 100644 --- a/plugins/python/sudo_python_module.h +++ b/plugins/python/sudo_python_module.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2019 Robert Manner + * Copyright (c) 2019-2020 Robert Manner * * 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/sudoers/fmtsudoers.c b/plugins/sudoers/fmtsudoers.c index 4588dfb036..43f68e1483 100644 --- a/plugins/sudoers/fmtsudoers.c +++ b/plugins/sudoers/fmtsudoers.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2004-2005, 2007-2019 Todd C. Miller + * Copyright (c) 2004-2005, 2007-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/sudoers/group_plugin.c b/plugins/sudoers/group_plugin.c index 725bed1b06..fa4dc88ce9 100644 --- a/plugins/sudoers/group_plugin.c +++ b/plugins/sudoers/group_plugin.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2010-2019 Todd C. Miller + * Copyright (c) 2010-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/sudoers/ldap_conf.c b/plugins/sudoers/ldap_conf.c index 14584d74d0..88e2b20e80 100644 --- a/plugins/sudoers/ldap_conf.c +++ b/plugins/sudoers/ldap_conf.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2003-2019 Todd C. Miller + * Copyright (c) 2003-2020 Todd C. Miller * * This code is derived from software contributed by Aaron Spangler. * diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index e63ac8547b..bd598a0759 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2004-2005, 2007-2019 Todd C. Miller + * Copyright (c) 2004-2005, 2007-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/sudoers/parse_ldif.c b/plugins/sudoers/parse_ldif.c index ef0c298a6e..ce07c19671 100644 --- a/plugins/sudoers/parse_ldif.c +++ b/plugins/sudoers/parse_ldif.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2018-2019 Todd C. Miller + * Copyright (c) 2018-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/sudoers/set_perms.c b/plugins/sudoers/set_perms.c index 119ed62b5f..31e5f6614a 100644 --- a/plugins/sudoers/set_perms.c +++ b/plugins/sudoers/set_perms.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1994-1996, 1998-2019 Todd C. Miller + * Copyright (c) 1994-1996, 1998-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/sudoers/starttime.c b/plugins/sudoers/starttime.c index 1724e5de6c..26ac2181f2 100644 --- a/plugins/sudoers/starttime.c +++ b/plugins/sudoers/starttime.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2012-2019 Todd C. Miller + * Copyright (c) 2012-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/plugins/sudoers/tsdump.c b/plugins/sudoers/tsdump.c index 4267c4e50b..a46a27c05e 100644 --- a/plugins/sudoers/tsdump.c +++ b/plugins/sudoers/tsdump.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2018-2019 Todd C. Miller + * Copyright (c) 2018-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/src/exec_monitor.c b/src/exec_monitor.c index f8a013be40..bd8eee185e 100644 --- a/src/exec_monitor.c +++ b/src/exec_monitor.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2019 Todd C. Miller + * Copyright (c) 2009-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/src/exec_nopty.c b/src/exec_nopty.c index 709a1a56f6..7281531609 100644 --- a/src/exec_nopty.c +++ b/src/exec_nopty.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2009-2019 Todd C. Miller + * Copyright (c) 2009-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/src/limits.c b/src/limits.c index 46fb72afdf..257caa9f0c 100644 --- a/src/limits.c +++ b/src/limits.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1999-2019 Todd C. Miller + * Copyright (c) 1999-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/src/ttyname.c b/src/ttyname.c index 827564fbae..4cd6edd960 100644 --- a/src/ttyname.c +++ b/src/ttyname.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2012-2019 Todd C. Miller + * Copyright (c) 2012-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above From c4a579cf8a8ba092ea4135c1a1a007f537dcc960 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 31 Aug 2020 16:37:01 -0600 Subject: [PATCH 055/113] Pass resource limits values to the plugin in user_info[] Sudo resets the resource limits early in its execution so the plugin cannot tell what the original limits were itself. --- NEWS | 5 + doc/sudo_plugin.man.in | 98 ++++++++++++++++++- doc/sudo_plugin.mdoc.in | 86 +++++++++++++++- include/sudo_plugin.h | 2 +- ...tiple_approval_plugin_and_arguments.stdout | 4 +- src/exec.c | 2 +- src/limits.c | 89 ++++++++++++++--- src/sudo.c | 11 ++- src/sudo.h | 1 + 9 files changed, 275 insertions(+), 23 deletions(-) diff --git a/NEWS b/NEWS index d5f4fc3d1a..2ae665a1a0 100644 --- a/NEWS +++ b/NEWS @@ -44,6 +44,11 @@ What's new in Sudo 1.9.3 for "sudoers_policy" but "sudoers_audit" is not listed, those arguments will be applied to "sudoers_audit" instead. + * The user's resource limits are now passed to sudo plugins in + the user_info[] list. A plugin cannot determine the limits + itself because sudo changes the limits while it runs to prevent + resource starvation. + What's new in Sudo 1.9.2 * Fixed package builds on RedHat Enterprise Linux 8. diff --git a/doc/sudo_plugin.man.in b/doc/sudo_plugin.man.in index 4ba139f49b..0413914671 100644 --- a/doc/sudo_plugin.man.in +++ b/doc/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" "June 16, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN" "5" "August 31, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -513,6 +513,97 @@ The parent process ID of the running process. Only available starting with API version 1.2. .TP 6n +rlimit_as=soft,hard +The maximum size to which the process's address space may grow (in bytes), +if supported by the operating system. +The soft and hard limits are separated by a comma. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +rlimit_locks=soft,hard +The maximum number of locks that the process may establish, +if supported by the operating system. +The soft and hard limits are separated by a comma. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +rlimit_memlock=soft,hard +The maximum size that the process may lock in memory (in bytes), +if supported by the operating system. +The soft and hard limits are separated by a comma. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n +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. +A value of +\(lqinfinity\(rq +indicates that there is no limit. +Only available starting with API version 1.16. +.TP 6n sid=int The session ID of the running \fBsudo\fR @@ -4942,6 +5033,11 @@ command was not run. has increased from 255 to 1023 bytes. .sp 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 +list. .SH "SEE ALSO" sudo.conf(@mansectform@), sudoers(@mansectform@), diff --git a/doc/sudo_plugin.mdoc.in b/doc/sudo_plugin.mdoc.in index c942db8a81..f29e549d82 100644 --- a/doc/sudo_plugin.mdoc.in +++ b/doc/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 June 16, 2020 +.Dd August 31, 2020 .Dt SUDO_PLUGIN @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -456,6 +456,86 @@ The parent process ID of the running .Nm sudo process. Only available starting with API version 1.2. +.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. +The soft and hard limits are separated by a comma. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.It rlimit_locks=soft,hard +The maximum number of locks that the process may establish, +if supported by the operating system. +The soft and hard limits are separated by a comma. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.It rlimit_memlock=soft,hard +The maximum size that the process may lock in memory (in bytes), +if supported by the operating system. +The soft and hard limits are separated by a comma. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. +.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. +A value of +.Dq infinity +indicates that there is no limit. +Only available starting with API version 1.16. .It sid=int The session ID of the running .Nm sudo @@ -4367,6 +4447,10 @@ command was not run. has increased from 255 to 1023 bytes. .Pp 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 +list. .El .Sh SEE ALSO .Xr sudo.conf @mansectform@ , diff --git a/include/sudo_plugin.h b/include/sudo_plugin.h index 61f0f3dd9f..a75ca06cd1 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 15 +#define SUDO_API_VERSION_MINOR 16 #define SUDO_API_MKVERSION(x, y) (((x) << 16) | (y)) #define SUDO_API_VERSION SUDO_API_MKVERSION(SUDO_API_VERSION_MAJOR, SUDO_API_VERSION_MINOR) diff --git a/plugins/python/regress/testdata/check_multiple_approval_plugin_and_arguments.stdout b/plugins/python/regress/testdata/check_multiple_approval_plugin_and_arguments.stdout index aae182d789..f914fcc5a1 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.15" + "version": "1.16" } (APPROVAL 2) Constructed: { @@ -56,7 +56,7 @@ "INFO1=VALUE1", "info2=value2" \], - "version": "1.15" + "version": "1.16" } (APPROVAL 1) Show version was called with arguments: (0,) Python approval plugin (API 1.0): ApprovalTestPlugin (loaded from 'SRC_DIR/regress/plugin_approval_test.py') diff --git a/src/exec.c b/src/exec.c index 9c830fd630..0c2ba41a89 100644 --- a/src/exec.c +++ b/src/exec.c @@ -309,7 +309,7 @@ sudo_terminated(struct command_status *cstat) debug_return_bool(false); } -#if SUDO_API_VERSION != SUDO_API_MKVERSION(1, 15) +#if SUDO_API_VERSION != SUDO_API_MKVERSION(1, 16) # error "Update sudo_needs_pty() after changing the plugin API" #endif static bool diff --git a/src/limits.c b/src/limits.c index 257caa9f0c..ec0c4eded1 100644 --- a/src/limits.c +++ b/src/limits.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #ifdef __linux__ @@ -55,6 +56,11 @@ # define RLIM_INFINITY RLIM64_INFINITY #endif /* HAVE_SETRLIMIT64 */ +/* Older BSD systems have RLIMIT_VMEM, not RLIMIT_AS. */ +#if !defined(RLIMIT_AS) && defined(RLIMIT_VMEM) +# define RLIMIT_AS RLIMIT_VMEM +#endif + /* * macOS doesn't allow nofile soft limit to be infinite or * the stack hard limit to be infinite. @@ -64,27 +70,35 @@ static struct rlimit nofile_fallback = { SUDO_OPEN_MAX, RLIM_INFINITY }; static struct rlimit stack_fallback = { SUDO_STACK_MIN, 65532 * 1024 }; static struct saved_limit { - const char *name; - int resource; - bool saved; - struct rlimit *fallback; - struct rlimit newlimit; - struct rlimit oldlimit; + const char *name; /* rlimit_foo in lower case */ + int resource; /* RLIMIT_FOO definition */ + bool override; /* override limit while sudo executes? */ + bool saved; /* true if we were able to get the value */ + struct rlimit *fallback; /* fallback if we fail to set to newlimit */ + struct rlimit newlimit; /* new limit to use if override is true */ + struct rlimit oldlimit; /* original limit, valid if saved is true */ } saved_limits[] = { #ifdef RLIMIT_AS - { "RLIMIT_AS", RLIMIT_AS, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, + { "rlimit_as", RLIMIT_AS, true, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, +#endif + { "rlimit_core", RLIMIT_CORE, false }, + { "rlimit_cpu", RLIMIT_CPU, true, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, + { "rlimit_data", RLIMIT_DATA, true, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, + { "rlimit_fsize", RLIMIT_FSIZE, true, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, +#ifdef RLIMIT_LOCKS + { "rlimit_locks", RLIMIT_LOCKS, false }, #endif - { "RLIMIT_CPU", RLIMIT_CPU, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, - { "RLIMIT_DATA", RLIMIT_DATA, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, - { "RLIMIT_FSIZE", RLIMIT_FSIZE, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, - { "RLIMIT_NOFILE", RLIMIT_NOFILE, false, &nofile_fallback, { RLIM_INFINITY, RLIM_INFINITY } }, +#ifdef RLIMIT_MEMLOCK + { "rlimit_memlock", RLIMIT_MEMLOCK, false }, +#endif + { "rlimit_nofile", RLIMIT_NOFILE, true, false, &nofile_fallback, { RLIM_INFINITY, RLIM_INFINITY } }, #ifdef RLIMIT_NPROC - { "RLIMIT_NPROC", RLIMIT_NPROC, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, + { "rlimit_nproc", RLIMIT_NPROC, true, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, #endif #ifdef RLIMIT_RSS - { "RLIMIT_RSS", RLIMIT_RSS, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, + { "rlimit_rss", RLIMIT_RSS, true, false, NULL, { RLIM_INFINITY, RLIM_INFINITY } }, #endif - { "RLIMIT_STACK", RLIMIT_STACK, false, &stack_fallback, { SUDO_STACK_MIN, RLIM_INFINITY } } + { "rlimit_stack", RLIMIT_STACK, true, false, &stack_fallback, { SUDO_STACK_MIN, RLIM_INFINITY } } }; static struct rlimit corelimit; @@ -228,6 +242,9 @@ unlimit_sudo(void) (long long)lim->oldlimit.rlim_max); lim->saved = true; + if (!lim->override) + continue; + if (lim->newlimit.rlim_cur != RLIM_INFINITY) { /* Don't reduce the soft resource limit. */ if (lim->oldlimit.rlim_cur == RLIM_INFINITY || @@ -284,7 +301,7 @@ restore_limits(void) /* Restore resource limits to saved values. */ for (idx = 0; idx < nitems(saved_limits); idx++) { struct saved_limit *lim = &saved_limits[idx]; - if (lim->saved) { + if (lim->override && lim->saved) { struct rlimit rl = lim->oldlimit; int i, rc; @@ -324,3 +341,45 @@ restore_limits(void) debug_return; } + +int +serialize_limits(char **info, size_t info_max) +{ + char *str; + unsigned int idx, nstored = 0; + debug_decl(serialize_limits, SUDO_DEBUG_UTIL); + + for (idx = 0; idx < nitems(saved_limits); idx++) { + const struct saved_limit *lim = &saved_limits[idx]; + const struct rlimit *rl = &lim->oldlimit; + char curlim[(((sizeof(int) * 8) + 2) / 3) + 2]; + char maxlim[(((sizeof(int) * 8) + 2) / 3) + 2]; + + if (!lim->saved) + continue; + + if (nstored == info_max) + goto oom; + + if (rl->rlim_cur == RLIM_INFINITY) { + strlcpy(curlim, "infinity", sizeof(curlim)); + } else { + snprintf(curlim, sizeof(curlim), "%llu", + (unsigned long long)rl->rlim_cur); + } + if (rl->rlim_max == RLIM_INFINITY) { + strlcpy(maxlim, "infinity", sizeof(maxlim)); + } else { + snprintf(maxlim, sizeof(maxlim), "%llu", + (unsigned long long)rl->rlim_max); + } + if (asprintf(&str, "%s=%s,%s", lim->name, curlim, maxlim) == -1) + goto oom; + info[nstored++] = str; + } + debug_return_int(nstored); +oom: + while (nstored--) + free(info[nstored]); + debug_return_int(-1); +} diff --git a/src/sudo.c b/src/sudo.c index 62096c57c3..a32ef14669 100644 --- a/src/sudo.c +++ b/src/sudo.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -490,10 +491,11 @@ static char ** get_user_info(struct user_details *ud) { char *cp, **user_info, path[PATH_MAX]; + size_t user_info_max = 32 + RLIM_NLIMITS; unsigned int i = 0; mode_t mask; struct passwd *pw; - int fd; + int fd, n; debug_decl(get_user_info, SUDO_DEBUG_UTIL); /* @@ -512,7 +514,7 @@ get_user_info(struct user_details *ud) memset(ud, 0, sizeof(*ud)); /* XXX - bound check number of entries */ - user_info = reallocarray(NULL, 32, sizeof(char *)); + user_info = reallocarray(NULL, user_info_max, sizeof(char *)); if (user_info == NULL) goto oom; @@ -614,6 +616,11 @@ get_user_info(struct user_details *ud) if (asprintf(&user_info[++i], "cols=%d", ud->ts_cols) == -1) goto oom; + n = serialize_limits(&user_info[i + 1], user_info_max - (i + 1)); + if (n == -1) + goto oom; + i += n; + user_info[++i] = NULL; /* Add to list of vectors to be garbage collected at exit. */ diff --git a/src/sudo.h b/src/sudo.h index 23f734c6e3..7603fd2f77 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -293,5 +293,6 @@ void restore_limits(void); void restore_nproc(void); void unlimit_nproc(void); void unlimit_sudo(void); +int serialize_limits(char **info, size_t info_max); #endif /* SUDO_SUDO_H */ From 6bdfd010d25ddfe1d05e113e6bc0ded0a09df699 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 1 Sep 2020 06:26:00 -0600 Subject: [PATCH 056/113] Add CHROOT and CWD sudoers options. Also matching runchroot and runcwd Defaults settings. --- MANIFEST | 1 + doc/sudoers.man.in | 74 +- doc/sudoers.mdoc.in | 80 +- plugins/sudoers/Makefile.in | 32 +- plugins/sudoers/def_data.c | 8 + plugins/sudoers/def_data.h | 4 + plugins/sudoers/def_data.in | 6 + plugins/sudoers/defaults.c | 3 +- plugins/sudoers/defaults.h | 4 +- plugins/sudoers/exptilde.c | 100 + plugins/sudoers/gram.c | 699 +-- plugins/sudoers/gram.h | 26 +- plugins/sudoers/gram.y | 40 + plugins/sudoers/parse.c | 18 + plugins/sudoers/parse.h | 4 + plugins/sudoers/policy.c | 22 +- plugins/sudoers/regress/sudoers/test1.toke.ok | 8 +- .../sudoers/regress/sudoers/test11.toke.ok | 2 +- .../sudoers/regress/sudoers/test12.toke.ok | 2 +- .../sudoers/regress/sudoers/test13.toke.ok | 2 +- .../sudoers/regress/sudoers/test14.toke.ok | 4 +- .../sudoers/regress/sudoers/test15.toke.ok | 2 +- .../sudoers/regress/sudoers/test16.toke.ok | 2 +- .../sudoers/regress/sudoers/test17.toke.ok | 18 +- .../sudoers/regress/sudoers/test18.toke.ok | 12 +- .../sudoers/regress/sudoers/test19.toke.ok | 20 +- .../sudoers/regress/sudoers/test22.toke.ok | 8 +- plugins/sudoers/regress/sudoers/test3.toke.ok | 8 +- plugins/sudoers/regress/sudoers/test4.toke.ok | 4 +- plugins/sudoers/regress/sudoers/test6.toke.ok | 8 +- plugins/sudoers/regress/sudoers/test8.toke.ok | 2 +- plugins/sudoers/sudoers.h | 5 +- plugins/sudoers/sudoers_version.h | 3 +- plugins/sudoers/toke.c | 4152 ++++++++++------- plugins/sudoers/toke.l | 36 +- 35 files changed, 3223 insertions(+), 2196 deletions(-) create mode 100644 plugins/sudoers/exptilde.c diff --git a/MANIFEST b/MANIFEST index d2d32e9a04..f3993d9bbd 100644 --- a/MANIFEST +++ b/MANIFEST @@ -471,6 +471,7 @@ plugins/sudoers/digestname.c plugins/sudoers/editor.c plugins/sudoers/env.c plugins/sudoers/env_pattern.c +plugins/sudoers/exptilde.c plugins/sudoers/file.c plugins/sudoers/filedigest.c plugins/sudoers/find_path.c diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index a2e926bd12..c82ae74fc2 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "August 27, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "August 28, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -1163,6 +1163,10 @@ Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') Timeout_Spec ::= 'TIMEOUT=timeout' +Chdir_Spec ::= 'CWD=directory' + +Chroot_Spec ::= 'CHROOT=directory' + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | @@ -1502,6 +1506,54 @@ timeout values: \fR1d2d3h\fR. .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 +\fRCWD\fR +setting. +The +\fIdirectory\fR +must be a fully-qualified path name beginning with a +\(oq/\(cq +or +\(oq~\(cq +character. +By default, commands are run from the invoking user's current working +directory, unless the +\fB\-i\fR +option is given. +Path names of the form +\fR~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. +.PP +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 +\fRCHROOT\fR +setting. +The +\fIdirectory\fR +must be a fully-qualified path name beginning with a +\(oq/\(cq +or +\(oq~\(cq +character. +This setting can be used to run the command in a +chroot(2) +\(lqsandbox\(rq +similar to the +chroot(@mansectsu@) +utility. +Path names of the form +\fR~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. +.PP +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: @@ -4399,6 +4451,26 @@ In either case, the contents of are processed before the contents of \fIenv_file\fR. .TP 14n +runchroot +If set, +\fBsudo\fR +will use this value for the root directory when running a command. +See the +\fIChroot_Spec\fR +section for more details. +.sp +This setting is only supported by version 1.9.3 or higher. +.TP 14n +runcwd +If set, +\fBsudo\fR +will use this value for the working directory when running a command. +See the +\fIChdir_Spec\fR +section for more details. +.sp +This setting is only supported by version 1.9.3 or higher. +.TP 14n secure_path If set, \fBsudo\fR diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index f46179e692..95a4d04b2a 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 27, 2020 +.Dd August 28, 2020 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -1096,12 +1096,12 @@ Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')' .ie \n(SL \{\ -.ie \n(PS Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec) -.el Option_Spec ::= (SELinux_Spec | Date_Spec | Timeout_Spec) +.ie \n(PS Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) +.el Option_Spec ::= (SELinux_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .\} .el \{\ -.ie \n(PS Option_Spec ::= (Solaris_Priv_Spec | Date_Spec | Timeout_Spec) -.el Option_Spec ::= (Date_Spec | Timeout_Spec) +.ie \n(PS Option_Spec ::= (Solaris_Priv_Spec | Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) +.el Option_Spec ::= (Date_Spec | Timeout_Spec | Chdir_Spec | Chroot_Spec) .\} .if \n(SL \{\ @@ -1116,6 +1116,10 @@ Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp') Timeout_Spec ::= 'TIMEOUT=timeout' +Chdir_Spec ::= 'CWD=directory' + +Chroot_Spec ::= 'CHROOT=directory' + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | @@ -1422,6 +1426,54 @@ timeout values: .Li 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 +setting. +The +.Fa directory +must be a fully-qualified path name beginning with a +.Sq / +or +.Sq ~ +character. +By default, commands are run from the invoking user's current working +directory, unless the +.Fl i +option is given. +Path names of the form +.Li ~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. +.Pp +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 +setting. +The +.Fa directory +must be a fully-qualified path name beginning with a +.Sq / +or +.Sq ~ +character. +This setting can be used to run the command in a +.Xr chroot 2 +.Dq sandbox +similar to the +.Xr chroot @mansectsu@ +utility. +Path names of the form +.Li ~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. +.Pp +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: @@ -4110,6 +4162,24 @@ In either case, the contents of .Em restricted_env_file are processed before the contents of .Em env_file . +.It runchroot +If set, +.Nm sudo +will use this value for the root directory when running a command. +See the +.Sx Chroot_Spec +section for more details. +.Pp +This setting is only supported by version 1.9.3 or higher. +.It runcwd +If set, +.Nm sudo +will use this value for the working directory when running a command. +See the +.Sx Chdir_Spec +section for more details. +.Pp +This setting is only supported by version 1.9.3 or higher. .It secure_path If set, .Nm sudo diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index ce514a71d0..3f69441215 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -159,11 +159,11 @@ TEST_PROGS = check_addr check_base64 check_digest check_env_pattern check_fill \ AUTH_OBJS = sudo_auth.lo @AUTH_OBJS@ LIBPARSESUDOERS_OBJS = alias.lo audit.lo base64.lo defaults.lo digestname.lo \ - filedigest.lo gentime.lo gmtoff.lo gram.lo hexchar.lo \ - match.lo match_addr.lo match_command.lo match_digest.lo \ - pwutil.lo pwutil_impl.lo rcstr.lo redblack.lo \ - strlist.lo sudoers_debug.lo timeout.lo timestr.lo \ - toke.lo toke_util.lo + exptilde.lo filedigest.lo gentime.lo gmtoff.lo gram.lo \ + hexchar.lo match.lo match_addr.lo match_command.lo \ + match_digest.lo pwutil.lo pwutil_impl.lo rcstr.lo \ + redblack.lo strlist.lo sudoers_debug.lo timeout.lo \ + timestr.lo toke.lo toke_util.lo LIBPARSESUDOERS_IOBJS = $(LIBPARSESUDOERS_OBJS:.lo=.i) passwd.i @@ -1217,6 +1217,28 @@ env_pattern.i: $(srcdir)/env_pattern.c $(devdir)/def_data.h \ $(CC) -E -o $@ $(CPPFLAGS) $< env_pattern.plog: env_pattern.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/env_pattern.c --i-file $< --output-file $@ +exptilde.lo: $(srcdir)/exptilde.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/pwutil.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) $(SSP_CFLAGS) $(srcdir)/exptilde.c +exptilde.i: $(srcdir)/exptilde.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/pwutil.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -E -o $@ $(CPPFLAGS) $< +exptilde.plog: exptilde.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/exptilde.c --i-file $< --output-file $@ file.lo: $(srcdir)/file.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index 4fec7c6fc0..d8f30b8fba 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -551,6 +551,14 @@ struct sudo_defs_types sudo_defs_table[] = { "pam_rhost", T_FLAG, N_("Set the pam remote host to the local host name"), NULL, + }, { + "runcwd", T_STR|T_BOOL|T_PATH|T_TILDE, + N_("Working directory to change to before executing the command: %s"), + NULL, + }, { + "runchroot", T_STR|T_BOOL|T_PATH|T_TILDE, + N_("Root directory to change to before executing the command: %s"), + NULL, }, { NULL, 0, NULL } diff --git a/plugins/sudoers/def_data.h b/plugins/sudoers/def_data.h index f1dcdce5a1..c4f1894020 100644 --- a/plugins/sudoers/def_data.h +++ b/plugins/sudoers/def_data.h @@ -256,6 +256,10 @@ #define def_pam_ruser (sudo_defs_table[I_PAM_RUSER].sd_un.flag) #define I_PAM_RHOST 127 #define def_pam_rhost (sudo_defs_table[I_PAM_RHOST].sd_un.flag) +#define I_RUNCWD 128 +#define def_runcwd (sudo_defs_table[I_RUNCWD].sd_un.str) +#define I_RUNCHROOT 129 +#define def_runchroot (sudo_defs_table[I_RUNCHROOT].sd_un.str) enum def_tuple { never, diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index da156da262..918c2bd93b 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -399,3 +399,9 @@ pam_ruser pam_rhost T_FLAG "Set the pam remote host to the local host name" +runcwd + T_STR|T_BOOL|T_PATH|T_TILDE + "Working directory to change to before executing the command: %s" +runchroot + T_STR|T_BOOL|T_PATH|T_TILDE + "Root directory to change to before executing the command: %s" diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index a72b3de226..0dbdff5ac6 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -249,7 +249,8 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, rc = store_syslogpri(val, &def->sd_un); break; case T_STR: - if (ISSET(def->type, T_PATH) && val != NULL && *val != '/') { + if (ISSET(def->type, T_PATH) && val != NULL && *val != '/' && + (!ISSET(def->type, T_TILDE) || *val != '~')) { if (!quiet) { if (lineno > 0) { sudo_warnx(U_("%s:%d: values for \"%s\" must start with a '/'"), diff --git a/plugins/sudoers/defaults.h b/plugins/sudoers/defaults.h index 404aeb8142..c31516113e 100644 --- a/plugins/sudoers/defaults.h +++ b/plugins/sudoers/defaults.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1999-2005, 2008-2018 + * Copyright (c) 1999-2005, 2008-2020 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -111,6 +111,8 @@ struct early_default { #define T_BOOL 0x100 #undef T_PATH #define T_PATH 0x200 +#undef T_TILDE +#define T_TILDE 0x400 /* * Argument to update_defaults() diff --git a/plugins/sudoers/exptilde.c b/plugins/sudoers/exptilde.c new file mode 100644 index 0000000000..c9658e4d71 --- /dev/null +++ b/plugins/sudoers/exptilde.c @@ -0,0 +1,100 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * This is an open source non-commercial project. Dear PVS-Studio, please check it. + * PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com + */ + +#include + +#include +#include +#include +#include +#include + +#include "sudoers.h" +#include "pwutil.h" + +/* + * Expand leading tilde in *path, which must be dynamically allocated. + * Replaces path with the expanded version as needed, freeing the old one. + * Returns true on success, false on failure. + */ +bool +expand_tilde(char **path, const char *user) +{ + char *npath, *opath = *path; + char *slash = NULL; + struct passwd *pw; + int len; + debug_decl(expand_tilde, SUDOERS_DEBUG_UTIL); + + switch (*opath++) { + case '/': + /* A fully-qualified path, nothing to do. */ + debug_return_bool(true); + case '~': + /* See below. */ + break; + default: + /* Not a fully-qualified path or one that starts with a tilde. */ + debug_return_bool(false); + } + + switch (*opath) { + case '\0': + /* format: ~ */ + break; + case '/': + /* format: ~/foo */ + opath++; + break; + default: + /* format: ~user/foo */ + user = opath; + slash = strchr(opath, '/'); + if (slash != NULL) { + *slash = '\0'; + opath = slash + 1; + } else { + opath = NULL; + } + } + pw = sudo_getpwnam(user); + if (slash != NULL) + *slash = '/'; + if (pw == NULL) { + /* Unknown user. */ + sudo_warnx(U_("unknown user: %s"), user); + debug_return_bool(false); + } + + len = asprintf(&npath, "%s%s%s", pw->pw_dir, opath ? "/" : "", + opath ? opath : ""); + sudo_pw_delref(pw); + if (len == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + + free(*path); + *path = npath; + debug_return_bool(true); +} diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 55558e2d71..a722832c2a 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -170,34 +170,37 @@ typedef union { #define RUNASALIAS 290 #define ERROR 291 #define NOMATCH 292 -#define TYPE 293 -#define ROLE 294 -#define PRIVS 295 -#define LIMITPRIVS 296 -#define CMND_TIMEOUT 297 -#define NOTBEFORE 298 -#define NOTAFTER 299 -#define MYSELF 300 -#define SHA224_TOK 301 -#define SHA256_TOK 302 -#define SHA384_TOK 303 -#define SHA512_TOK 304 +#define CHROOT 293 +#define CWD 294 +#define TYPE 295 +#define ROLE 296 +#define PRIVS 297 +#define LIMITPRIVS 298 +#define CMND_TIMEOUT 299 +#define NOTBEFORE 300 +#define NOTAFTER 301 +#define MYSELF 302 +#define SHA224_TOK 303 +#define SHA256_TOK 304 +#define SHA384_TOK 305 +#define SHA512_TOK 306 #define YYERRCODE 256 const short sudoerslhs[] = { -1, - 0, 0, 35, 35, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 31, 31, - 32, 32, 4, 4, 3, 3, 3, 3, 3, 21, + 0, 0, 37, 37, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 33, 33, + 34, 34, 4, 4, 3, 3, 3, 3, 3, 21, 21, 21, 20, 11, 11, 9, 9, 9, 9, 9, - 2, 2, 1, 33, 33, 33, 33, 34, 34, 7, - 7, 6, 6, 28, 29, 30, 24, 25, 26, 27, - 18, 18, 19, 19, 19, 19, 19, 23, 23, 23, - 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, + 2, 2, 1, 35, 35, 35, 35, 36, 36, 7, + 7, 6, 6, 24, 25, 30, 31, 32, 26, 27, + 28, 29, 18, 18, 19, 19, 19, 19, 19, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 5, 5, 5, 39, 39, 42, 10, 10, 40, 40, - 43, 8, 8, 41, 41, 44, 38, 38, 45, 14, - 14, 12, 12, 13, 13, 13, 13, 13, 17, 17, - 15, 15, 16, 16, 16, 37, 37, + 22, 22, 22, 22, 5, 5, 5, 41, 41, 44, + 10, 10, 42, 42, 45, 8, 8, 43, 43, 46, + 40, 40, 47, 14, 14, 12, 12, 13, 13, 13, + 13, 13, 17, 17, 15, 15, 16, 16, 16, 39, + 39, }; const short sudoerslen[] = { 2, @@ -207,77 +210,80 @@ const short sudoerslen[] = 3, 4, 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, 4, 3, 3, 3, 3, 1, 3, 1, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, - 0, 3, 0, 1, 3, 2, 1, 0, 2, 2, - 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, + 3, 3, 0, 3, 0, 1, 3, 2, 1, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 3, 3, 1, 3, 1, 3, - 3, 1, 3, 1, 3, 3, 1, 3, 3, 1, - 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, - 1, 2, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, + 1, 3, 1, 3, 3, 1, 3, 1, 3, 3, + 1, 3, 3, 1, 3, 1, 2, 1, 1, 1, + 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, + 1, }; const short sudoersdefred[] = { 0, - 0, 114, 116, 117, 118, 0, 0, 0, 0, 0, - 0, 0, 115, 0, 0, 0, 0, 0, 5, 0, - 110, 112, 0, 7, 8, 0, 3, 127, 126, 6, + 0, 118, 120, 121, 122, 0, 0, 0, 0, 0, + 0, 0, 119, 0, 0, 0, 0, 0, 5, 0, + 114, 116, 0, 7, 8, 0, 3, 131, 130, 6, 0, 0, 0, 0, 23, 0, 36, 39, 38, 40, - 37, 0, 34, 0, 97, 0, 0, 93, 92, 91, - 0, 0, 0, 0, 0, 52, 50, 102, 0, 48, - 0, 0, 0, 94, 0, 0, 99, 0, 0, 107, - 0, 0, 104, 113, 0, 0, 30, 0, 4, 0, + 37, 0, 34, 0, 101, 0, 0, 97, 96, 95, + 0, 0, 0, 0, 0, 52, 50, 106, 0, 48, + 0, 0, 0, 98, 0, 0, 103, 0, 0, 111, + 0, 0, 108, 117, 0, 0, 30, 0, 4, 0, 19, 0, 21, 0, 0, 0, 26, 0, 14, 35, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 11, 0, 0, 12, 0, - 0, 10, 0, 0, 13, 111, 0, 0, 9, 20, - 22, 27, 28, 29, 24, 98, 17, 15, 16, 44, - 45, 46, 47, 103, 18, 49, 0, 95, 0, 100, - 0, 108, 0, 105, 0, 41, 0, 68, 0, 31, - 0, 0, 0, 0, 0, 32, 123, 125, 124, 0, - 119, 121, 0, 0, 62, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 72, 73, 74, 75, 71, 69, - 70, 122, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 89, 90, 87, 88, 43, 120, 58, 57, 59, - 60, 54, 55, 56, + 0, 10, 0, 0, 13, 115, 0, 0, 9, 20, + 22, 27, 28, 29, 24, 102, 17, 15, 16, 44, + 45, 46, 47, 107, 18, 49, 0, 99, 0, 104, + 0, 112, 0, 109, 0, 41, 0, 70, 0, 31, + 0, 0, 0, 0, 0, 32, 127, 129, 128, 0, + 123, 125, 0, 0, 64, 42, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 71, 72, 76, 77, + 78, 79, 75, 73, 74, 126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 93, 94, 91, + 92, 43, 124, 55, 54, 60, 59, 61, 62, 56, + 57, 58, }; const short sudoersdgoto[] = { 20, 146, 147, 35, 36, 56, 57, 58, 59, 43, 76, 45, 21, 22, 23, 161, 162, 163, 148, 153, 77, - 78, 174, 155, 175, 176, 177, 178, 179, 180, 181, - 24, 25, 60, 61, 26, 27, 30, 69, 63, 66, - 72, 64, 67, 73, 70, + 78, 176, 155, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 24, 25, 60, 61, 26, 27, 30, 69, + 63, 66, 72, 64, 67, 73, 70, }; const short sudoerssindex[] = { -10, - 58, 0, 0, 0, 0, -243, -235, -29, 105, 109, - 109, -32, 0, -229, -226, -211, -181, -145, 0, 0, + 48, 0, 0, 0, 0, -245, -233, -29, 38, 95, + 95, -32, 0, -205, -197, -195, -191, -144, 0, 0, 0, 0, -22, 0, 0, -10, 0, 0, 0, 0, - 6, 7, 76, -179, 0, 59, 0, 0, 0, 0, - 0, -196, 0, -31, 0, -30, -30, 0, 0, 0, - -205, 25, 31, 40, 43, 0, 0, 0, -25, 0, - 116, 45, 21, 0, 46, 24, 0, 49, 27, 0, - 53, 33, 0, 0, 109, 12, 0, 35, 0, 58, - 0, 58, 0, -159, -148, -143, 0, -29, 0, 0, - 105, 59, 59, 59, 0, -142, -141, -139, -129, -32, - 59, -156, 0, 105, -229, 0, -32, -226, 0, 109, - -211, 0, 109, -181, 0, 0, 96, 78, 0, 0, + 6, 7, 32, -189, 0, 50, 0, 0, 0, 0, + 0, -138, 0, -31, 0, -30, -30, 0, 0, 0, + -220, 15, 22, 27, 43, 0, 0, 0, -25, 0, + 69, 35, 21, 0, 49, 24, 0, 55, 25, 0, + 60, 26, 0, 0, 95, 8, 0, 29, 0, 48, + 0, 48, 0, -157, -156, -155, 0, -29, 0, 0, + 38, 50, 50, 50, 0, -153, -140, -135, -134, -32, + 50, -168, 0, 38, -205, 0, -32, -197, 0, 95, + -195, 0, 95, -191, 0, 0, 86, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 106, 0, 107, 0, - 108, 0, 108, 0, -18, 0, 110, 0, 58, 0, - -21, 26, 99, 96, -165, 0, 0, 0, 0, -208, - 0, 0, 111, -21, 0, 0, 92, 95, 97, 98, - 100, 101, 102, 42, 0, 0, 0, 0, 0, 0, - 0, 0, -21, 111, -106, -99, -98, -97, -96, -95, - -94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 88, 0, 96, 0, + 97, 0, 97, 0, -18, 0, 99, 0, 48, 0, + -21, 42, 98, 86, -143, 0, 0, 0, 0, -214, + 0, 0, 103, -21, 0, 0, 100, 101, 102, 104, + 105, 106, 107, 108, 109, 59, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -21, 103, -114, -104, + -103, -99, -92, -91, -90, -89, -88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,}; + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0,}; const short sudoersrindex[] = - { 170, + { 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -287,117 +293,116 @@ const short sudoersrindex[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 36, 0, 38, 0, - 39, 0, 41, 0, 131, 0, 44, 0, 0, 0, - 132, 133, 0, 9, 75, 0, 0, 0, 0, 0, - 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 41, 0, + 45, 0, 46, 0, 137, 0, 47, 0, 0, 0, + 138, 139, 0, 9, 94, 0, 0, 0, 0, 0, + 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,}; + 0, 0,}; const short sudoersgindex[] = { 0, - 23, 0, 90, 80, 128, 119, -82, 74, 140, -4, - 93, 112, 165, -1, 2, 28, 22, 0, 0, 71, + 30, 0, 110, 87, 132, 124, -95, 79, 145, 11, + 111, 113, 171, -1, 3, 31, 28, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 88, 0, 0, 166, -6, 0, 0, 0, - 0, 86, 85, 81, 83, + 0, 0, 0, 0, 92, 0, 0, 169, -4, 0, + 0, 0, 0, 91, 89, 85, 90, }; -#define YYTABLESIZE 402 +#define YYTABLESIZE 400 const short sudoerstable[] = { 19, - 51, 34, 34, 34, 44, 28, 28, 34, 46, 47, - 42, 160, 91, 75, 18, 29, 29, 134, 100, 31, - 28, 75, 18, 28, 81, 83, 28, 32, 62, 89, - 29, 65, 28, 29, 28, 96, 29, 101, 109, 151, - 106, 61, 29, 33, 29, 96, 68, 101, 109, 157, - 106, 48, 49, 33, 158, 91, 106, 28, 28, 109, - 25, 37, 112, 38, 39, 115, 40, 29, 29, 75, - 25, 119, 117, 120, 51, 121, 71, 159, 105, 87, - 50, 108, 96, 164, 111, 127, 128, 129, 97, 41, - 114, 206, 118, 96, 135, 101, 109, 98, 106, 137, - 99, 33, 88, 122, 25, 104, 107, 76, 141, 110, - 42, 143, 2, 113, 123, 3, 4, 5, 85, 124, - 86, 130, 131, 92, 132, 93, 94, 167, 168, 169, - 170, 171, 172, 173, 133, 145, 84, 42, 101, 165, - 13, 18, 156, 152, 52, 53, 54, 55, 51, 91, - 100, 75, 185, 154, 183, 186, 208, 187, 188, 102, - 189, 190, 191, 209, 210, 211, 212, 213, 214, 1, - 2, 63, 67, 64, 66, 65, 166, 125, 95, 103, - 139, 90, 74, 126, 207, 184, 116, 182, 150, 136, - 138, 79, 140, 142, 144, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 34, 34, 34, 134, 28, 28, 34, 46, 47, + 42, 160, 91, 75, 18, 29, 29, 31, 100, 44, + 28, 75, 18, 28, 28, 28, 81, 83, 28, 32, + 29, 89, 100, 29, 29, 29, 48, 49, 29, 151, + 105, 63, 100, 157, 113, 110, 33, 28, 158, 28, + 105, 91, 62, 25, 113, 110, 33, 29, 106, 29, + 65, 109, 68, 25, 112, 50, 71, 115, 117, 87, + 42, 159, 96, 119, 85, 120, 86, 121, 105, 97, + 212, 108, 111, 114, 98, 75, 118, 127, 128, 129, + 100, 51, 84, 88, 42, 104, 135, 25, 105, 164, + 99, 51, 113, 110, 33, 122, 123, 124, 141, 107, + 130, 143, 102, 2, 137, 110, 3, 4, 5, 37, + 113, 38, 39, 131, 40, 145, 80, 18, 132, 133, + 92, 91, 93, 94, 52, 53, 54, 55, 165, 100, + 75, 13, 154, 152, 156, 101, 187, 41, 214, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 215, 216, + 189, 190, 191, 217, 192, 193, 194, 195, 196, 197, + 218, 219, 220, 221, 222, 1, 2, 65, 69, 66, + 68, 67, 95, 166, 103, 139, 90, 116, 74, 213, + 186, 188, 150, 136, 79, 138, 140, 125, 144, 0, + 142, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 49, 0, 33, 33, 33, 0, 0, 0, 33, 0, 37, 157, 38, 39, 2, 40, 158, 3, 4, 5, 1, 0, 2, 0, 0, 3, 4, 5, 50, 6, 7, 8, 9, 10, 11, - 12, 80, 82, 41, 159, 61, 61, 13, 52, 53, - 54, 55, 0, 0, 0, 13, 14, 15, 16, 17, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 0, 0, 0, 48, 49, - 0, 61, 61, 61, 61, 61, 61, 61, 0, 61, - 61, 61, 61, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 50, 0, 0, - 0, 76, 76, 149, 0, 37, 0, 38, 39, 0, - 40, 0, 52, 53, 54, 55, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 0, 37, 41, 38, 39, 2, 40, 0, 3, - 4, 5, 48, 49, 0, 76, 76, 76, 76, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 41, 0, 0, 0, 13, 0, 0, 0, 0, 0, - 0, 50, + 12, 80, 82, 41, 159, 63, 63, 13, 0, 0, + 52, 53, 54, 55, 0, 13, 14, 15, 16, 17, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 37, 0, 38, 39, 0, + 40, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 0, 63, 63, 63, 63, 48, 49, 149, 0, 37, + 0, 38, 39, 41, 40, 48, 49, 0, 0, 0, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 50, 0, 0, 41, 0, 0, + 80, 80, 2, 0, 50, 3, 4, 5, 0, 0, + 0, 52, 53, 54, 55, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, }; const short sudoerscheck[] = { 10, - 33, 33, 33, 33, 9, 0, 0, 33, 10, 11, - 33, 33, 44, 44, 33, 10, 10, 100, 44, 263, - 0, 44, 33, 0, 31, 32, 0, 263, 258, 36, - 10, 258, 0, 10, 0, 0, 10, 0, 0, 58, - 0, 33, 10, 0, 10, 10, 258, 10, 10, 258, - 10, 257, 258, 10, 263, 44, 63, 0, 0, 66, - 0, 258, 69, 260, 261, 72, 263, 10, 10, 44, - 10, 78, 61, 80, 33, 82, 258, 286, 58, 259, - 286, 58, 58, 58, 58, 92, 93, 94, 58, 286, - 58, 174, 58, 58, 101, 58, 58, 58, 58, 104, - 58, 58, 44, 263, 44, 61, 61, 33, 110, 61, - 33, 113, 258, 61, 263, 261, 262, 263, 43, 263, - 45, 264, 264, 44, 264, 46, 47, 293, 294, 295, - 296, 297, 298, 299, 264, 40, 61, 33, 59, 41, - 286, 33, 149, 145, 301, 302, 303, 304, 33, 44, - 44, 44, 61, 44, 44, 61, 263, 61, 61, 44, - 61, 61, 61, 263, 263, 263, 263, 263, 263, 0, - 0, 41, 41, 41, 41, 41, 154, 88, 51, 61, - 107, 42, 18, 91, 183, 164, 75, 160, 118, 102, - 105, 26, 108, 111, 114, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, 33, 33, 33, 100, 0, 0, 33, 10, 11, + 33, 33, 44, 44, 33, 10, 10, 263, 44, 9, + 0, 44, 33, 0, 0, 0, 31, 32, 0, 263, + 10, 36, 0, 10, 10, 10, 257, 258, 10, 58, + 0, 33, 10, 258, 0, 0, 0, 0, 263, 0, + 10, 44, 258, 0, 10, 10, 10, 10, 63, 10, + 258, 66, 258, 10, 69, 286, 258, 72, 61, 259, + 33, 286, 58, 78, 43, 80, 45, 82, 58, 58, + 176, 58, 58, 58, 58, 44, 58, 92, 93, 94, + 58, 33, 61, 44, 33, 61, 101, 44, 58, 58, + 58, 33, 58, 58, 58, 263, 263, 263, 110, 61, + 264, 113, 44, 258, 104, 61, 261, 262, 263, 258, + 61, 260, 261, 264, 263, 40, 33, 33, 264, 264, + 44, 44, 46, 47, 303, 304, 305, 306, 41, 44, + 44, 286, 44, 145, 149, 59, 44, 286, 263, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 263, 263, + 61, 61, 61, 263, 61, 61, 61, 61, 61, 61, + 263, 263, 263, 263, 263, 0, 0, 41, 41, 41, + 41, 41, 51, 154, 61, 107, 42, 75, 18, 187, + 160, 164, 118, 102, 26, 105, 108, 88, 114, -1, + 111, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, 259, 259, 259, -1, -1, -1, 259, -1, 258, 258, 260, 261, 258, 263, 263, 261, 262, 263, 256, -1, 258, -1, -1, 261, 262, 263, 286, 265, 266, 267, 268, 269, 270, - 271, 256, 256, 286, 286, 257, 258, 286, 301, 302, - 303, 304, -1, -1, -1, 286, 287, 288, 289, 290, + 271, 256, 256, 286, 286, 257, 258, 286, -1, -1, + 303, 304, 305, 306, -1, 286, 287, 288, 289, 290, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, -1, -1, -1, 257, 258, - -1, 293, 294, 295, 296, 297, 298, 299, -1, 301, - 302, 303, 304, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, -1, -1, - -1, 257, 258, 256, -1, 258, -1, 260, 261, -1, - 263, -1, 301, 302, 303, 304, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, -1, 258, 286, 260, 261, 258, 263, -1, 261, - 262, 263, 257, 258, -1, 301, 302, 303, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 286, -1, -1, -1, 286, -1, -1, -1, -1, -1, - -1, 286, + 282, 283, 284, 285, 286, 258, -1, 260, 261, -1, + 263, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, 303, 304, 305, 306, 257, 258, 256, -1, 258, + -1, 260, 261, 286, 263, 257, 258, -1, -1, -1, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, -1, -1, 286, -1, -1, + 257, 258, 258, -1, 286, 261, 262, 263, -1, -1, + -1, 303, 304, 305, 306, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 303, 304, 305, 306, }; #define YYFINAL 20 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 304 +#define YYMAXTOKEN 306 #if YYDEBUG const char * const sudoersname[] = { @@ -413,9 +418,9 @@ const char * const sudoersname[] = "DEFAULTS_RUNAS","DEFAULTS_CMND","NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV", "NOSETENV","LOG_INPUT","NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","MAIL", "NOMAIL","FOLLOWLNK","NOFOLLOWLNK","ALL","HOSTALIAS","CMNDALIAS","USERALIAS", -"RUNASALIAS","ERROR","NOMATCH","TYPE","ROLE","PRIVS","LIMITPRIVS", -"CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK","SHA256_TOK", -"SHA384_TOK","SHA512_TOK", +"RUNASALIAS","ERROR","NOMATCH","CHROOT","CWD","TYPE","ROLE","PRIVS", +"LIMITPRIVS","CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK", +"SHA256_TOK","SHA384_TOK","SHA512_TOK", }; const char * const sudoersrule[] = {"$accept : file", @@ -472,6 +477,8 @@ const char * const sudoersrule[] = "digcmnd : digestlist opcmnd", "opcmnd : cmnd", "opcmnd : '!' cmnd", +"chdirspec : CWD '=' WORD", +"chrootspec : CHROOT '=' WORD", "timeoutspec : CMND_TIMEOUT '=' WORD", "notbeforespec : NOTBEFORE '=' WORD", "notafterspec : NOTAFTER '=' WORD", @@ -487,6 +494,8 @@ const char * const sudoersrule[] = "runaslist : ':' grouplist", "runaslist : ':'", "options :", +"options : options chdirspec", +"options : options chrootspec", "options : options notbeforespec", "options : options notafterspec", "options : options timeoutspec", @@ -574,7 +583,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 974 "gram.y" +#line 1004 "gram.y" void sudoerserror(const char *s) { @@ -864,6 +873,7 @@ free_privilege(struct privilege *priv) struct member_list *prev_binding = NULL; struct cmndspec *cs; struct defaults *def; + char *runcwd = NULL, *runchroot = NULL; #ifdef HAVE_SELINUX char *role = NULL, *type = NULL; #endif /* HAVE_SELINUX */ @@ -876,6 +886,15 @@ free_privilege(struct privilege *priv) free_members(&priv->hostlist); while ((cs = TAILQ_FIRST(&priv->cmndlist)) != NULL) { TAILQ_REMOVE(&priv->cmndlist, cs, entries); + /* Only free the first instance of runcwd/runchroot. */ + if (cs->runcwd != runcwd) { + runcwd = cs->runcwd; + free(cs->runcwd); + } + if (cs->runchroot != runchroot) { + runcwd = cs->runchroot; + free(cs->runchroot); + } #ifdef HAVE_SELINUX /* Only free the first instance of a role/type. */ if (cs->role != role) { @@ -1047,7 +1066,7 @@ init_options(struct command_options *opts) opts->limitprivs = NULL; #endif } -#line 1037 "gram.c" +#line 1056 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(void) { @@ -1238,25 +1257,25 @@ yyparse(void) switch (yyn) { case 1: -#line 182 "gram.y" +#line 186 "gram.y" { ; /* empty file */ } break; case 5: -#line 192 "gram.y" +#line 196 "gram.y" { ; /* blank line */ } break; case 6: -#line 195 "gram.y" +#line 199 "gram.y" { yyerrok; } break; case 7: -#line 198 "gram.y" +#line 202 "gram.y" { if (!push_include(yyvsp[0].string, false)) { free(yyvsp[0].string); @@ -1266,7 +1285,7 @@ case 7: } break; case 8: -#line 205 "gram.y" +#line 209 "gram.y" { if (!push_include(yyvsp[0].string, true)) { free(yyvsp[0].string); @@ -1276,7 +1295,7 @@ case 8: } break; case 9: -#line 212 "gram.y" +#line 216 "gram.y" { if (!add_userspec(yyvsp[-2].member, yyvsp[-1].privilege)) { sudoerserror(N_("unable to allocate memory")); @@ -1285,99 +1304,99 @@ case 9: } break; case 10: -#line 218 "gram.y" +#line 222 "gram.y" { ; } break; case 11: -#line 221 "gram.y" +#line 225 "gram.y" { ; } break; case 12: -#line 224 "gram.y" +#line 228 "gram.y" { ; } break; case 13: -#line 227 "gram.y" +#line 231 "gram.y" { ; } break; case 14: -#line 230 "gram.y" +#line 234 "gram.y" { if (!add_defaults(DEFAULTS, NULL, yyvsp[-1].defaults)) YYERROR; } break; case 15: -#line 234 "gram.y" +#line 238 "gram.y" { if (!add_defaults(DEFAULTS_USER, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 16: -#line 238 "gram.y" +#line 242 "gram.y" { if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 17: -#line 242 "gram.y" +#line 246 "gram.y" { if (!add_defaults(DEFAULTS_HOST, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 18: -#line 246 "gram.y" +#line 250 "gram.y" { if (!add_defaults(DEFAULTS_CMND, yyvsp[-2].member, yyvsp[-1].defaults)) YYERROR; } break; case 19: -#line 252 "gram.y" +#line 256 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 20: -#line 255 "gram.y" +#line 259 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 21: -#line 261 "gram.y" +#line 265 "gram.y" { yyval.string = yyvsp[-1].string; } break; case 22: -#line 264 "gram.y" +#line 268 "gram.y" { yyerrok; yyval.string = yyvsp[-2].string; } break; case 24: -#line 271 "gram.y" +#line 275 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; case 25: -#line 277 "gram.y" +#line 281 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); if (yyval.defaults == NULL) { @@ -1387,7 +1406,7 @@ case 25: } break; case 26: -#line 284 "gram.y" +#line 288 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); if (yyval.defaults == NULL) { @@ -1397,7 +1416,7 @@ case 26: } break; case 27: -#line 291 "gram.y" +#line 295 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); if (yyval.defaults == NULL) { @@ -1407,7 +1426,7 @@ case 27: } break; case 28: -#line 298 "gram.y" +#line 302 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); if (yyval.defaults == NULL) { @@ -1417,7 +1436,7 @@ case 28: } break; case 29: -#line 305 "gram.y" +#line 309 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); if (yyval.defaults == NULL) { @@ -1427,21 +1446,21 @@ case 29: } break; case 31: -#line 315 "gram.y" +#line 319 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; case 32: -#line 319 "gram.y" +#line 323 "gram.y" { yyerrok; yyval.privilege = yyvsp[-3].privilege; } break; case 33: -#line 325 "gram.y" +#line 329 "gram.y" { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { @@ -1456,21 +1475,21 @@ case 33: } break; case 34: -#line 339 "gram.y" +#line 343 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 35: -#line 343 "gram.y" +#line 347 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 36: -#line 349 "gram.y" +#line 353 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -1480,7 +1499,7 @@ case 36: } break; case 37: -#line 356 "gram.y" +#line 360 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -1490,7 +1509,7 @@ case 37: } break; case 38: -#line 363 "gram.y" +#line 367 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -1500,7 +1519,7 @@ case 38: } break; case 39: -#line 370 "gram.y" +#line 374 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); if (yyval.member == NULL) { @@ -1510,7 +1529,7 @@ case 39: } break; case 40: -#line 377 "gram.y" +#line 381 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -1520,11 +1539,17 @@ case 40: } break; case 42: -#line 387 "gram.y" +#line 391 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); HLTQ_CONCAT(yyvsp[-2].cmndspec, yyvsp[0].cmndspec, entries); + + /* propagate runcwd and runchroot */ + if (yyvsp[0].cmndspec->runcwd == NULL) + yyvsp[0].cmndspec->runcwd = prev->runcwd; + if (yyvsp[0].cmndspec->runchroot == NULL) + yyvsp[0].cmndspec->runchroot = prev->runchroot; #ifdef HAVE_SELINUX /* propagate role and type */ if (yyvsp[0].cmndspec->role == NULL && yyvsp[0].cmndspec->type == NULL) { @@ -1574,7 +1599,7 @@ case 42: } break; case 43: -#line 440 "gram.y" +#line 450 "gram.y" { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { @@ -1617,6 +1642,8 @@ case 43: cs->notbefore = yyvsp[-2].options.notbefore; cs->notafter = yyvsp[-2].options.notafter; cs->timeout = yyvsp[-2].options.timeout; + cs->runcwd = yyvsp[-2].options.runcwd; + cs->runchroot = yyvsp[-2].options.runchroot; cs->tags = yyvsp[-1].tag; cs->cmnd = yyvsp[0].member; HLTQ_INIT(cs, entries); @@ -1628,7 +1655,7 @@ case 43: } break; case 44: -#line 493 "gram.y" +#line 505 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1638,7 +1665,7 @@ case 44: } break; case 45: -#line 500 "gram.y" +#line 512 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1648,7 +1675,7 @@ case 45: } break; case 46: -#line 507 "gram.y" +#line 519 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1658,7 +1685,7 @@ case 46: } break; case 47: -#line 514 "gram.y" +#line 526 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); if (yyval.digest == NULL) { @@ -1668,20 +1695,20 @@ case 47: } break; case 49: -#line 524 "gram.y" +#line 536 "gram.y" { HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); yyval.digest = yyvsp[-2].digest; } break; case 50: -#line 530 "gram.y" +#line 542 "gram.y" { yyval.member = yyvsp[0].member; } break; case 51: -#line 533 "gram.y" +#line 545 "gram.y" { struct sudo_command *c = (struct sudo_command *) yyvsp[0].member->name; @@ -1703,75 +1730,87 @@ case 51: } break; case 52: -#line 554 "gram.y" +#line 566 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 53: -#line 558 "gram.y" +#line 570 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 54: -#line 564 "gram.y" +#line 576 "gram.y" { yyval.string = yyvsp[0].string; } break; case 55: -#line 569 "gram.y" +#line 581 "gram.y" { yyval.string = yyvsp[0].string; } break; case 56: -#line 573 "gram.y" +#line 586 "gram.y" { yyval.string = yyvsp[0].string; } break; case 57: -#line 578 "gram.y" +#line 591 "gram.y" { yyval.string = yyvsp[0].string; } break; case 58: -#line 583 "gram.y" +#line 595 "gram.y" { yyval.string = yyvsp[0].string; } break; case 59: -#line 588 "gram.y" +#line 600 "gram.y" { yyval.string = yyvsp[0].string; } break; case 60: -#line 592 "gram.y" +#line 605 "gram.y" { yyval.string = yyvsp[0].string; } break; case 61: -#line 597 "gram.y" +#line 610 "gram.y" { - yyval.runas = NULL; + yyval.string = yyvsp[0].string; } break; case 62: -#line 600 "gram.y" +#line 614 "gram.y" { - yyval.runas = yyvsp[-1].runas; + yyval.string = yyvsp[0].string; } break; case 63: -#line 605 "gram.y" +#line 619 "gram.y" +{ + yyval.runas = NULL; + } +break; +case 64: +#line 622 "gram.y" +{ + yyval.runas = yyvsp[-1].runas; + } +break; +case 65: +#line 627 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1788,8 +1827,8 @@ case 63: } } break; -case 64: -#line 620 "gram.y" +case 66: +#line 642 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1800,8 +1839,8 @@ case 64: /* $$->runasgroups = NULL; */ } break; -case 65: -#line 629 "gram.y" +case 67: +#line 651 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1812,8 +1851,8 @@ case 65: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 66: -#line 638 "gram.y" +case 68: +#line 660 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1824,8 +1863,8 @@ case 66: yyval.runas->runasgroups = yyvsp[0].member; } break; -case 67: -#line 647 "gram.y" +case 69: +#line 669 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1842,14 +1881,28 @@ case 67: } } break; -case 68: -#line 664 "gram.y" +case 70: +#line 686 "gram.y" { init_options(&yyval.options); } break; -case 69: -#line 667 "gram.y" +case 71: +#line 689 "gram.y" +{ + free(yyval.options.runcwd); + yyval.options.runcwd = yyvsp[0].string; + } +break; +case 72: +#line 693 "gram.y" +{ + free(yyval.options.runchroot); + yyval.options.runchroot = yyvsp[0].string; + } +break; +case 73: +#line 697 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1859,8 +1912,8 @@ case 69: } } break; -case 70: -#line 675 "gram.y" +case 74: +#line 705 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1870,8 +1923,8 @@ case 70: } } break; -case 71: -#line 683 "gram.y" +case 75: +#line 713 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -1884,8 +1937,8 @@ case 71: } } break; -case 72: -#line 694 "gram.y" +case 76: +#line 724 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -1893,8 +1946,8 @@ case 72: #endif } break; -case 73: -#line 700 "gram.y" +case 77: +#line 730 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -1902,8 +1955,8 @@ case 73: #endif } break; -case 74: -#line 706 "gram.y" +case 78: +#line 736 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -1911,8 +1964,8 @@ case 74: #endif } break; -case 75: -#line 712 "gram.y" +case 79: +#line 742 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -1920,98 +1973,98 @@ case 75: #endif } break; -case 76: -#line 720 "gram.y" +case 80: +#line 750 "gram.y" { TAGS_INIT(yyval.tag); } break; -case 77: -#line 723 "gram.y" +case 81: +#line 753 "gram.y" { yyval.tag.nopasswd = true; } break; -case 78: -#line 726 "gram.y" +case 82: +#line 756 "gram.y" { yyval.tag.nopasswd = false; } break; -case 79: -#line 729 "gram.y" +case 83: +#line 759 "gram.y" { yyval.tag.noexec = true; } break; -case 80: -#line 732 "gram.y" +case 84: +#line 762 "gram.y" { yyval.tag.noexec = false; } break; -case 81: -#line 735 "gram.y" +case 85: +#line 765 "gram.y" { yyval.tag.setenv = true; } break; -case 82: -#line 738 "gram.y" +case 86: +#line 768 "gram.y" { yyval.tag.setenv = false; } break; -case 83: -#line 741 "gram.y" +case 87: +#line 771 "gram.y" { yyval.tag.log_input = true; } break; -case 84: -#line 744 "gram.y" +case 88: +#line 774 "gram.y" { yyval.tag.log_input = false; } break; -case 85: -#line 747 "gram.y" +case 89: +#line 777 "gram.y" { yyval.tag.log_output = true; } break; -case 86: -#line 750 "gram.y" +case 90: +#line 780 "gram.y" { yyval.tag.log_output = false; } break; -case 87: -#line 753 "gram.y" +case 91: +#line 783 "gram.y" { yyval.tag.follow = true; } break; -case 88: -#line 756 "gram.y" +case 92: +#line 786 "gram.y" { yyval.tag.follow = false; } break; -case 89: -#line 759 "gram.y" +case 93: +#line 789 "gram.y" { yyval.tag.send_mail = true; } break; -case 90: -#line 762 "gram.y" +case 94: +#line 792 "gram.y" { yyval.tag.send_mail = false; } break; -case 91: -#line 767 "gram.y" +case 95: +#line 797 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2020,8 +2073,8 @@ case 91: } } break; -case 92: -#line 774 "gram.y" +case 96: +#line 804 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2030,8 +2083,8 @@ case 92: } } break; -case 93: -#line 781 "gram.y" +case 97: +#line 811 "gram.y" { struct sudo_command *c; @@ -2047,8 +2100,8 @@ case 93: } } break; -case 96: -#line 801 "gram.y" +case 100: +#line 831 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2059,15 +2112,15 @@ case 96: } } break; -case 98: -#line 813 "gram.y" +case 102: +#line 843 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 101: -#line 823 "gram.y" +case 105: +#line 853 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2078,15 +2131,15 @@ case 101: } } break; -case 103: -#line 835 "gram.y" +case 107: +#line 865 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 106: -#line 845 "gram.y" +case 110: +#line 875 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2097,8 +2150,8 @@ case 106: } } break; -case 109: -#line 860 "gram.y" +case 113: +#line 890 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2109,29 +2162,29 @@ case 109: } } break; -case 111: -#line 872 "gram.y" +case 115: +#line 902 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 112: -#line 878 "gram.y" +case 116: +#line 908 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 113: -#line 882 "gram.y" +case 117: +#line 912 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 114: -#line 888 "gram.y" +case 118: +#line 918 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2140,8 +2193,8 @@ case 114: } } break; -case 115: -#line 895 "gram.y" +case 119: +#line 925 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2150,8 +2203,8 @@ case 115: } } break; -case 116: -#line 902 "gram.y" +case 120: +#line 932 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2160,8 +2213,8 @@ case 116: } } break; -case 117: -#line 909 "gram.y" +case 121: +#line 939 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2170,8 +2223,8 @@ case 117: } } break; -case 118: -#line 916 "gram.y" +case 122: +#line 946 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2180,29 +2233,29 @@ case 118: } } break; -case 120: -#line 926 "gram.y" +case 124: +#line 956 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 121: -#line 932 "gram.y" +case 125: +#line 962 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 122: -#line 936 "gram.y" +case 126: +#line 966 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 123: -#line 942 "gram.y" +case 127: +#line 972 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2211,8 +2264,8 @@ case 123: } } break; -case 124: -#line 949 "gram.y" +case 128: +#line 979 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2221,8 +2274,8 @@ case 124: } } break; -case 125: -#line 956 "gram.y" +case 129: +#line 986 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2231,19 +2284,19 @@ case 125: } } break; -case 126: -#line 965 "gram.y" +case 130: +#line 995 "gram.y" { ; } break; -case 127: -#line 968 "gram.y" +case 131: +#line 998 "gram.y" { ; /* EOF */ } break; -#line 2233 "gram.c" +#line 2286 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index ba59211125..4b0d9fe5f8 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -35,18 +35,20 @@ #define RUNASALIAS 290 #define ERROR 291 #define NOMATCH 292 -#define TYPE 293 -#define ROLE 294 -#define PRIVS 295 -#define LIMITPRIVS 296 -#define CMND_TIMEOUT 297 -#define NOTBEFORE 298 -#define NOTAFTER 299 -#define MYSELF 300 -#define SHA224_TOK 301 -#define SHA256_TOK 302 -#define SHA384_TOK 303 -#define SHA512_TOK 304 +#define CHROOT 293 +#define CWD 294 +#define TYPE 295 +#define ROLE 296 +#define PRIVS 297 +#define LIMITPRIVS 298 +#define CMND_TIMEOUT 299 +#define NOTBEFORE 300 +#define NOTAFTER 301 +#define MYSELF 302 +#define SHA224_TOK 303 +#define SHA256_TOK 304 +#define SHA384_TOK 305 +#define SHA512_TOK 306 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 6aabd48488..2aafa4e844 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -129,6 +129,8 @@ static struct command_digest *new_digest(int, char *); %token '\n' /* newline (with optional comment) */ %token ERROR /* error from lexer */ %token NOMATCH /* no match from lexer */ +%token CHROOT /* root directory for command */ +%token CWD /* working directory for command */ %token TYPE /* SELinux type */ %token ROLE /* SELinux role */ %token PRIVS /* Solaris privileges */ @@ -165,6 +167,8 @@ static struct command_digest *new_digest(int, char *); %type privileges %type cmndtag %type options +%type chdirspec +%type chrootspec %type rolespec %type typespec %type privsspec @@ -388,6 +392,12 @@ cmndspeclist : cmndspec struct cmndspec *prev; prev = HLTQ_LAST($1, cmndspec, entries); HLTQ_CONCAT($1, $3, entries); + + /* propagate runcwd and runchroot */ + if ($3->runcwd == NULL) + $3->runcwd = prev->runcwd; + if ($3->runchroot == NULL) + $3->runchroot = prev->runchroot; #ifdef HAVE_SELINUX /* propagate role and type */ if ($3->role == NULL && $3->type == NULL) { @@ -479,6 +489,8 @@ cmndspec : runasspec options cmndtag digcmnd { cs->notbefore = $2.notbefore; cs->notafter = $2.notafter; cs->timeout = $2.timeout; + cs->runcwd = $2.runcwd; + cs->runchroot = $2.runchroot; cs->tags = $3; cs->cmnd = $4; HLTQ_INIT(cs, entries); @@ -561,6 +573,16 @@ opcmnd : cmnd { } ; +chdirspec : CWD '=' WORD { + $$ = $3; + } + ; + +chrootspec : CHROOT '=' WORD { + $$ = $3; + } + ; + timeoutspec : CMND_TIMEOUT '=' WORD { $$ = $3; } @@ -664,6 +686,14 @@ runaslist : /* empty */ { options : /* empty */ { init_options(&$$); } + | options chdirspec { + free($$.runcwd); + $$.runcwd = $2; + } + | options chrootspec { + free($$.runchroot); + $$.runchroot = $2; + } | options notbeforespec { $$.notbefore = parse_gentime($2); free($2); @@ -1260,6 +1290,7 @@ free_privilege(struct privilege *priv) struct member_list *prev_binding = NULL; struct cmndspec *cs; struct defaults *def; + char *runcwd = NULL, *runchroot = NULL; #ifdef HAVE_SELINUX char *role = NULL, *type = NULL; #endif /* HAVE_SELINUX */ @@ -1272,6 +1303,15 @@ free_privilege(struct privilege *priv) free_members(&priv->hostlist); while ((cs = TAILQ_FIRST(&priv->cmndlist)) != NULL) { TAILQ_REMOVE(&priv->cmndlist, cs, entries); + /* Only free the first instance of runcwd/runchroot. */ + if (cs->runcwd != runcwd) { + runcwd = cs->runcwd; + free(cs->runcwd); + } + if (cs->runchroot != runchroot) { + runcwd = cs->runchroot; + free(cs->runchroot); + } #ifdef HAVE_SELINUX /* Only free the first instance of a role/type. */ if (cs->role != role) { diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index bd598a0759..f01bb93e35 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -239,6 +239,24 @@ apply_cmndspec(struct cmndspec *cs) #endif /* HAVE_PRIV_SET */ if (cs->timeout > 0) def_command_timeout = cs->timeout; + if (cs->runcwd != NULL) { + free(def_runcwd); + def_runcwd = strdup(cs->runcwd); + if (def_runcwd == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } + } + if (cs->runchroot != NULL) { + free(def_runchroot); + def_runchroot = strdup(cs->runchroot); + if (def_runchroot == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_bool(false); + } + } if (cs->tags.nopasswd != UNSPEC) def_authenticate = !cs->tags.nopasswd; if (cs->tags.noexec != UNSPEC) diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index ecc81b8359..7c4fa93505 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -131,6 +131,8 @@ struct command_options { time_t notbefore; /* time restriction */ time_t notafter; /* time restriction */ int timeout; /* command timeout */ + char *runcwd; /* working directory */ + char *runchroot; /* root directory */ #ifdef HAVE_SELINUX char *role, *type; /* SELinux role and type */ #endif @@ -211,6 +213,8 @@ struct cmndspec { int timeout; /* command timeout */ time_t notbefore; /* time restriction */ time_t notafter; /* time restriction */ + char *runcwd; /* working directory */ + char *runchroot; /* root directory */ #ifdef HAVE_SELINUX char *role, *type; /* SELinux role and type */ #endif diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 1dc0f16c95..57da0f7d23 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2010-2017 Todd C. Miller + * Copyright (c) 2010-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -567,7 +567,7 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, debug_return_bool(true); /* nothing to do */ /* Increase the length of command_info as needed, it is *not* checked. */ - command_info = calloc(54, sizeof(char *)); + command_info = calloc(55, sizeof(char *)); if (command_info == NULL) goto oom; @@ -618,7 +618,15 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, goto oom; } } - if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) { + if (def_runcwd) { + /* Set cwd to explicit value in sudoers. */ + if (!expand_tilde(&def_runcwd, runas_pw->pw_name)) { + sudo_warnx(U_("invalid working directory: %s"), def_runcwd); + goto bad; + } + if ((command_info[info_len++] = sudo_new_key_val("cwd", def_runcwd)) == NULL) + goto oom; + } else if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) { /* Set cwd to run user's homedir. */ if ((command_info[info_len++] = sudo_new_key_val("cwd", runas_pw->pw_dir)) == NULL) goto oom; @@ -779,6 +787,14 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, if (asprintf(&command_info[info_len++], "timeout=%u", timeout) == -1) goto oom; } + if (def_runchroot != NULL) { + if (!expand_tilde(&def_runchroot, runas_pw->pw_name)) { + sudo_warnx(U_("invalid chroot directory: %s"), def_runchroot); + goto bad; + } + if ((command_info[info_len++] = sudo_new_key_val("chroot", def_runchroot)) == NULL) + goto oom; + } if (cmnd_umask != ACCESSPERMS) { if (asprintf(&command_info[info_len++], "umask=0%o", (unsigned int)cmnd_umask) == -1) goto oom; diff --git a/plugins/sudoers/regress/sudoers/test1.toke.ok b/plugins/sudoers/regress/sudoers/test1.toke.ok index 79945dc9e3..28c85922b9 100644 --- a/plugins/sudoers/regress/sudoers/test1.toke.ok +++ b/plugins/sudoers/regress/sudoers/test1.toke.ok @@ -2,7 +2,7 @@ # # # -WORD(5) ALL = LOG_INPUT LOG_OUTPUT COMMAND ARG : ALL = NOLOG_INPUT NOLOG_OUTPUT COMMAND -WORD(5) ALL = NOPASSWD NOEXEC SETENV COMMAND : ALL = PASSWD EXEC NOSETENV COMMAND -WORD(5) ALL = MAIL COMMAND : ALL = NOMAIL COMMAND -WORD(5) ALL = FOLLOW COMMAND ARG : ALL = NOFOLLOW COMMAND ARG +WORD(6) ALL = LOG_INPUT LOG_OUTPUT COMMAND ARG : ALL = NOLOG_INPUT NOLOG_OUTPUT COMMAND +WORD(6) ALL = NOPASSWD NOEXEC SETENV COMMAND : ALL = PASSWD EXEC NOSETENV COMMAND +WORD(6) ALL = MAIL COMMAND : ALL = NOMAIL COMMAND +WORD(6) ALL = FOLLOW COMMAND ARG : ALL = NOFOLLOW COMMAND ARG diff --git a/plugins/sudoers/regress/sudoers/test11.toke.ok b/plugins/sudoers/regress/sudoers/test11.toke.ok index d57d6c3910..bfef7a71cc 100644 --- a/plugins/sudoers/regress/sudoers/test11.toke.ok +++ b/plugins/sudoers/regress/sudoers/test11.toke.ok @@ -1,2 +1,2 @@ -WORD(5) +WORD(6) <*> \ No newline at end of file diff --git a/plugins/sudoers/regress/sudoers/test12.toke.ok b/plugins/sudoers/regress/sudoers/test12.toke.ok index a1995f0d63..0d79959897 100644 --- a/plugins/sudoers/regress/sudoers/test12.toke.ok +++ b/plugins/sudoers/regress/sudoers/test12.toke.ok @@ -1,2 +1,2 @@ -WORD(5) ALL = ( ALL ) +WORD(6) ALL = ( ALL ) <*> \ No newline at end of file diff --git a/plugins/sudoers/regress/sudoers/test13.toke.ok b/plugins/sudoers/regress/sudoers/test13.toke.ok index e189ffded2..faebe902e4 100644 --- a/plugins/sudoers/regress/sudoers/test13.toke.ok +++ b/plugins/sudoers/regress/sudoers/test13.toke.ok @@ -1 +1 @@ -WORD(5) ALL = ( ALL ) <*> \ No newline at end of file +WORD(6) ALL = ( ALL ) <*> \ No newline at end of file diff --git a/plugins/sudoers/regress/sudoers/test14.toke.ok b/plugins/sudoers/regress/sudoers/test14.toke.ok index 4646150f81..0b4f36a716 100644 --- a/plugins/sudoers/regress/sudoers/test14.toke.ok +++ b/plugins/sudoers/regress/sudoers/test14.toke.ok @@ -1,6 +1,6 @@ CMNDALIAS ALIAS = SHA224_TOK : DIGEST , SHA224_TOK : DIGEST COMMAND CMNDALIAS ALIAS = SHA256_TOK : DIGEST , SHA256_TOK : DIGEST COMMAND -WORD(5) ALL = ALIAS , ALIAS , SHA512_TOK : DIGEST COMMAND +WORD(6) ALL = ALIAS , ALIAS , SHA512_TOK : DIGEST COMMAND -WORD(5) ALL = SHA256_TOK : DIGEST , SHA256_TOK : DIGEST ALL +WORD(6) ALL = SHA256_TOK : DIGEST , SHA256_TOK : DIGEST ALL diff --git a/plugins/sudoers/regress/sudoers/test15.toke.ok b/plugins/sudoers/regress/sudoers/test15.toke.ok index c26de2e319..08bb2b873f 100644 --- a/plugins/sudoers/regress/sudoers/test15.toke.ok +++ b/plugins/sudoers/regress/sudoers/test15.toke.ok @@ -1,2 +1,2 @@ # -WORD(5) ALL = COMMAND ARG +WORD(6) ALL = COMMAND ARG diff --git a/plugins/sudoers/regress/sudoers/test16.toke.ok b/plugins/sudoers/regress/sudoers/test16.toke.ok index 9b8c41babc..debc4c770b 100644 --- a/plugins/sudoers/regress/sudoers/test16.toke.ok +++ b/plugins/sudoers/regress/sudoers/test16.toke.ok @@ -1,3 +1,3 @@ # CMNDALIAS ALIAS = COMMAND ARG -WORD(5) ALL = ALIAS +WORD(6) ALL = ALIAS diff --git a/plugins/sudoers/regress/sudoers/test17.toke.ok b/plugins/sudoers/regress/sudoers/test17.toke.ok index 17bb5fb5fc..d0a82ca77b 100644 --- a/plugins/sudoers/regress/sudoers/test17.toke.ok +++ b/plugins/sudoers/regress/sudoers/test17.toke.ok @@ -1,11 +1,11 @@ # DEFAULTS DEFVAR = WORD(2) -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND , COMMAND , CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND , CMND_TIMEOUT = WORD(5) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND , COMMAND , CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND , CMND_TIMEOUT = WORD(6) COMMAND diff --git a/plugins/sudoers/regress/sudoers/test18.toke.ok b/plugins/sudoers/regress/sudoers/test18.toke.ok index 66ffa2eb57..56bbdef146 100644 --- a/plugins/sudoers/regress/sudoers/test18.toke.ok +++ b/plugins/sudoers/regress/sudoers/test18.toke.ok @@ -1,10 +1,10 @@ # DEFAULTS DEFVAR = WORD(2) -DEFAULTS_USER WORD(5) DEFVAR = WORD(2) -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND , COMMAND , CMND_TIMEOUT = WORD(5) COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND -WORD(5) ALL = CMND_TIMEOUT = WORD(5) <*> COMMAND +DEFAULTS_USER WORD(6) DEFVAR = WORD(2) +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND , COMMAND , CMND_TIMEOUT = WORD(6) COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND +WORD(6) ALL = CMND_TIMEOUT = WORD(6) <*> COMMAND testsudoers: sudoers:2: value "2d8h10m59ss" is invalid for option "command_timeout" testsudoers: sudoers:3: value "15f" is invalid for option "command_timeout" diff --git a/plugins/sudoers/regress/sudoers/test19.toke.ok b/plugins/sudoers/regress/sudoers/test19.toke.ok index 45c5d2749d..04461d9d8d 100644 --- a/plugins/sudoers/regress/sudoers/test19.toke.ok +++ b/plugins/sudoers/regress/sudoers/test19.toke.ok @@ -1,12 +1,12 @@ # # -WORD(5) ALL = NOTBEFORE = WORD(5) NOTAFTER = WORD(5) COMMAND , COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND , NOTAFTER = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND -WORD(5) ALL = NOTBEFORE = WORD(5) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) NOTAFTER = WORD(6) COMMAND , COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND , NOTAFTER = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND +WORD(6) ALL = NOTBEFORE = WORD(6) COMMAND diff --git a/plugins/sudoers/regress/sudoers/test22.toke.ok b/plugins/sudoers/regress/sudoers/test22.toke.ok index baf395bda5..9eeb964dff 100644 --- a/plugins/sudoers/regress/sudoers/test22.toke.ok +++ b/plugins/sudoers/regress/sudoers/test22.toke.ok @@ -1,6 +1,6 @@ # -WORD(5) ALL = ( : ) ALL -WORD(5) ALL = ( : ) ALL -WORD(5) ALL = ( ) ALL -WORD(5) ALL = ( ) ALL +WORD(6) ALL = ( : ) ALL +WORD(6) ALL = ( : ) ALL +WORD(6) ALL = ( ) ALL +WORD(6) ALL = ( ) ALL diff --git a/plugins/sudoers/regress/sudoers/test3.toke.ok b/plugins/sudoers/regress/sudoers/test3.toke.ok index 49f2e51afe..028f333b1e 100644 --- a/plugins/sudoers/regress/sudoers/test3.toke.ok +++ b/plugins/sudoers/regress/sudoers/test3.toke.ok @@ -1,6 +1,6 @@ # -USERALIAS ALIAS = WORD(5) , WORD(5) +USERALIAS ALIAS = WORD(6) , WORD(6) DEFAULTS_USER ALIAS DEFVAR -DEFAULTS_USER WORD(5) , WORD(5) DEFVAR -DEFAULTS_USER WORD(5) , WORD(5) DEFVAR -DEFAULTS_USER WORD(5) , WORD(5) DEFVAR +DEFAULTS_USER WORD(6) , WORD(6) DEFVAR +DEFAULTS_USER WORD(6) , WORD(6) DEFVAR +DEFAULTS_USER WORD(6) , WORD(6) DEFVAR diff --git a/plugins/sudoers/regress/sudoers/test4.toke.ok b/plugins/sudoers/regress/sudoers/test4.toke.ok index 3cb47070fa..307945f43a 100644 --- a/plugins/sudoers/regress/sudoers/test4.toke.ok +++ b/plugins/sudoers/regress/sudoers/test4.toke.ok @@ -1,5 +1,5 @@ # -USERALIAS ALIAS = WORD(5) : ALIAS = WORD(5) +USERALIAS ALIAS = WORD(6) : ALIAS = WORD(6) # -USERALIAS ALIAS = WORD(5) <*> ERROR ALIAS = WORD(5) +USERALIAS ALIAS = WORD(6) <*> ERROR ALIAS = WORD(6) diff --git a/plugins/sudoers/regress/sudoers/test6.toke.ok b/plugins/sudoers/regress/sudoers/test6.toke.ok index a9c0522cee..db8e1c5988 100644 --- a/plugins/sudoers/regress/sudoers/test6.toke.ok +++ b/plugins/sudoers/regress/sudoers/test6.toke.ok @@ -1,12 +1,12 @@ # -DEFAULTS_USER WORD(5) DEFVAR -DEFAULTS_RUNAS WORD(5) DEFVAR +DEFAULTS_USER WORD(6) DEFVAR +DEFAULTS_RUNAS WORD(6) DEFVAR DEFAULTS_USER BEGINSTR STRBODY ENDSTR WORD(4) DEFVAR DEFAULTS_RUNAS BEGINSTR STRBODY ENDSTR WORD(4) DEFVAR # -WORD(5) ALL = ALL -WORD(5) ALL = ( WORD(5) : WORD(5) ) ALL +WORD(6) ALL = ALL +WORD(6) ALL = ( WORD(6) : WORD(6) ) ALL BEGINSTR STRBODY ENDSTR WORD(4) ALL = ALL BEGINSTR STRBODY ENDSTR WORD(4) ALL = ( BEGINSTR STRBODY ENDSTR WORD(4) : BEGINSTR STRBODY ENDSTR WORD(4) ) ALL diff --git a/plugins/sudoers/regress/sudoers/test8.toke.ok b/plugins/sudoers/regress/sudoers/test8.toke.ok index 9d6eaf9b16..4b39d04fdb 100644 --- a/plugins/sudoers/regress/sudoers/test8.toke.ok +++ b/plugins/sudoers/regress/sudoers/test8.toke.ok @@ -1,7 +1,7 @@ # USERALIAS ALIAS = BEGINSTR STRBODY ENDSTR WORD(4) USERALIAS ALIAS = BEGINSTR STRBODY STRBODY ENDSTR WORD(4) -USERALIAS ALIAS = WORD(5) +USERALIAS ALIAS = WORD(6) # USERALIAS ALIAS = BEGINSTR STRBODY <*> ERROR ERROR \ No newline at end of file diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 3b63bd437b..9ef52afe47 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 1993-1996, 1998-2005, 2007-2017 + * Copyright (c) 1993-1996, 1998-2005, 2007-2020 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -425,6 +425,9 @@ extern const char *path_plugin_dir; char *find_editor(int nfiles, char **files, int *argc_out, char ***argv_out, char * const *whitelist, const char **env_editor, bool env_error); +/* exptilde.c */ +bool expand_tilde(char **path, const char *user); + /* gc.c */ enum sudoers_gc_types { GC_UNKNOWN, diff --git a/plugins/sudoers/sudoers_version.h b/plugins/sudoers/sudoers_version.h index 50c729d59c..35808687a2 100644 --- a/plugins/sudoers/sudoers_version.h +++ b/plugins/sudoers/sudoers_version.h @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2011-2013, 2015, 2017 + * Copyright (c) 2011-2013, 2015, 2017, 2019-2020 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -69,6 +69,7 @@ * 46 sudo 1.8.20, added TIMEOUT, NOTBEFORE and NOTAFTER options. * 47 sudo 1.9.0, Cmd_Alias treated as Cmnd_Alias, support for multiple digests per command and for ALL. * 48 sudo 1.9.1, @include and @includedir, include path escaping/quoting. + * 49 sudo 1.9.3, CWD and CHDIR options. */ #ifndef SUDOERS_VERSION_H diff --git a/plugins/sudoers/toke.c b/plugins/sudoers/toke.c index d9dd70af6c..f5ee29495b 100644 --- a/plugins/sudoers/toke.c +++ b/plugins/sudoers/toke.c @@ -393,8 +393,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 78 -#define YY_END_OF_BUFFER 79 +#define YY_NUM_RULES 81 +#define YY_END_OF_BUFFER 82 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -402,108 +402,131 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[916] = +static yyconst flex_int16_t yy_accept[1126] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 79, 64, 74, 73, - 77, 72, 63, 76, 40, 67, 68, 40, 69, 64, - 64, 64, 64, 71, 70, 77, 64, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 77, - 64, 64, 74, 76, 55, 55, 55, 55, 55, 2, - 77, 1, 64, 55, 55, 55, 64, 17, 16, 16, - 17, 16, 16, 77, 76, 77, 3, 9, 8, 9, - 4, 9, 5, 77, 13, 13, 13, 11, 12, 77, - 19, 19, 18, 18, 18, 19, 18, 18, 18, 18, - - 19, 19, 19, 19, 19, 19, 18, 19, 19, 65, - 65, 66, 65, 64, 0, 74, 73, 72, 76, 76, - 0, 0, 64, 42, 0, 40, 0, 41, 0, 62, - 62, 0, 64, 64, 0, 64, 64, 64, 64, 0, - 45, 64, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 0, 75, 64, - 64, 64, 64, 74, 0, 0, 0, 0, 0, 76, - 64, 64, 64, 64, 64, 2, 1, 0, 1, 56, - 56, 0, 55, 64, 17, 17, 15, 0, 14, 15, - 0, 3, 9, 0, 6, 7, 9, 9, 13, 0, - - 13, 13, 0, 10, 0, 42, 0, 0, 41, 19, - 19, 0, 19, 0, 0, 18, 18, 18, 18, 18, - 18, 19, 19, 55, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 65, 65, 65, 76, 76, 76, 0, - 42, 64, 64, 64, 64, 64, 0, 0, 45, 45, - 64, 55, 47, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 64, 64, 0, 0, 0, 0, 0, 76, 64, - 64, 64, 64, 64, 64, 0, 64, 10, 0, 0, - 0, 18, 18, 18, 19, 19, 19, 19, 19, 19, - - 19, 19, 19, 19, 19, 19, 19, 19, 19, 76, - 76, 76, 64, 64, 64, 64, 64, 64, 0, 46, - 46, 46, 0, 0, 45, 45, 45, 45, 45, 45, - 45, 64, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 55, 55, 55, 51, 55, - 55, 52, 64, 64, 64, 64, 0, 0, 0, 0, - 0, 0, 76, 64, 64, 64, 64, 0, 0, 0, - 0, 0, 18, 18, 19, 19, 55, 19, 19, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 67, + 77, 76, 80, 75, 66, 79, 40, 70, 71, 40, + 72, 67, 67, 67, 67, 74, 73, 80, 67, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 80, 67, 67, 77, 79, 57, 57, 57, + 57, 57, 2, 80, 1, 67, 57, 57, 57, 67, + 17, 16, 16, 17, 16, 16, 80, 79, 80, 3, + 9, 8, 9, 4, 9, 5, 80, 13, 13, 13, + 11, 12, 80, 19, 19, 18, 18, 18, 19, 18, + + 18, 18, 18, 19, 19, 19, 19, 19, 19, 18, + 19, 19, 68, 68, 69, 68, 64, 64, 64, 64, + 64, 64, 64, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 80, 64, 64, 67, 0, 77, 76, + 75, 79, 79, 0, 0, 67, 42, 0, 40, 0, + 41, 0, 65, 65, 0, 67, 67, 0, 67, 67, + 67, 67, 0, 45, 67, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 0, 78, 67, 67, 67, 67, 77, 0, + 0, 0, 0, 0, 79, 67, 67, 67, 67, 67, + + 2, 1, 0, 1, 58, 58, 0, 57, 67, 17, + 17, 15, 0, 14, 15, 0, 3, 9, 0, 6, + 7, 9, 9, 13, 0, 13, 13, 0, 10, 0, + 42, 0, 0, 41, 19, 19, 0, 19, 0, 0, + 18, 18, 18, 18, 18, 18, 19, 19, 57, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 68, 68, + 68, 64, 0, 42, 0, 41, 0, 64, 64, 0, + 64, 64, 64, 64, 64, 64, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 64, 64, 64, 64, + 79, 79, 79, 0, 42, 67, 67, 67, 67, 67, + + 0, 0, 45, 45, 67, 57, 47, 57, 51, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 67, 67, 0, + 0, 0, 0, 0, 79, 67, 67, 67, 67, 67, + 67, 0, 67, 10, 0, 0, 0, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 64, 64, 64, 0, 0, 46, 46, 46, 0, 45, - - 45, 0, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 64, 0, 29, 55, 55, 55, 55, - 0, 36, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 53, 55, 55, 64, 64, 64, 64, 64, 0, - 0, 0, 76, 64, 64, 64, 0, 0, 0, 18, - 18, 19, 55, 55, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 64, 64, 64, - 64, 64, 0, 46, 0, 45, 45, 45, 0, 0, - 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 64, 55, 55, 55, 55, 55, - - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 57, 58, 59, 60, 64, 0, 0, 76, 64, 64, - 64, 0, 0, 0, 0, 0, 19, 55, 55, 19, - 19, 55, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 43, 43, 43, 0, 0, 45, 45, 45, - 45, 45, 45, 45, 0, 0, 0, 0, 0, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 64, 0, 38, 55, 55, 55, 0, - 28, 55, 55, 55, 0, 37, 55, 55, 55, 55, - 0, 27, 0, 30, 48, 64, 0, 0, 76, 64, - - 64, 64, 43, 43, 43, 55, 55, 19, 55, 55, - 19, 19, 19, 64, 43, 43, 43, 43, 0, 45, - 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 0, 0, 0, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, 20, 55, - 55, 55, 55, 55, 55, 55, 55, 50, 55, 61, - 0, 0, 76, 64, 24, 56, 0, 43, 43, 43, - 43, 55, 55, 19, 55, 55, 19, 19, 19, 44, - 44, 44, 44, 45, 0, 0, 0, 45, 45, 45, + 19, 19, 19, 19, 19, 0, 64, 64, 64, 64, + 64, 57, 47, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 64, 64, 79, 79, 79, + 67, 67, 67, 67, 67, 67, 0, 46, 46, 46, + + 0, 0, 45, 45, 45, 45, 45, 45, 45, 67, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 53, 57, 57, + 54, 67, 67, 67, 67, 0, 0, 0, 0, 0, + 0, 79, 67, 67, 67, 67, 0, 0, 0, 0, + 0, 18, 18, 19, 19, 57, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 64, + 64, 64, 64, 64, 64, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 64, 64, + 64, 64, 67, 67, 67, 0, 0, 46, 46, 46, + + 0, 45, 45, 0, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 67, 57, 0, 29, 57, + 57, 57, 57, 0, 36, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 55, 57, 57, 67, 67, 67, + 67, 67, 0, 0, 0, 79, 67, 67, 67, 0, + 0, 0, 18, 18, 19, 57, 57, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 64, 64, 64, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 64, 64, 64, 64, 64, 67, + 67, 67, 67, 67, 0, 46, 0, 45, 45, 45, + + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 67, 52, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 59, 60, 61, 62, 67, 0, 0, + 79, 67, 67, 67, 0, 0, 0, 0, 0, 19, + 57, 57, 19, 19, 57, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 64, 64, 64, 64, 64, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 59, 60, 61, 62, 64, 43, 43, 43, 0, + 0, 45, 45, 45, 45, 45, 45, 45, 0, 0, + + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 67, 0, 38, + 57, 57, 57, 0, 28, 57, 57, 57, 0, 37, + 57, 57, 57, 57, 0, 27, 0, 30, 48, 67, + 0, 0, 79, 67, 67, 67, 43, 43, 43, 57, + 57, 19, 57, 57, 19, 19, 19, 43, 43, 43, + 57, 57, 57, 57, 57, 57, 57, 64, 67, 43, + 43, 43, 43, 0, 45, 0, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, - 45, 45, 45, 64, 55, 55, 55, 0, 39, 55, - 55, 0, 26, 0, 31, 49, 0, 24, 22, 76, - 25, 0, 64, 44, 44, 44, 44, 55, 55, 55, - 55, 64, 64, 44, 44, 44, 44, 0, 0, 0, - 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 20, 57, 57, 57, 57, 57, 57, + 57, 57, 50, 57, 63, 0, 0, 79, 67, 24, + 58, 0, 43, 43, 43, 43, 57, 57, 19, 57, + 57, 19, 19, 19, 64, 43, 43, 43, 43, 57, + 57, 57, 57, 57, 57, 57, 63, 44, 44, 44, + 44, 45, 0, 0, 0, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 0, 0, + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 67, 57, 57, 57, 0, 39, 57, 57, 0, + 26, 0, 31, 49, 0, 24, 22, 79, 25, 0, + + 67, 44, 44, 44, 44, 57, 57, 57, 57, 44, + 44, 44, 44, 57, 57, 57, 57, 67, 67, 44, + 44, 44, 44, 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 64, 54, 0, 34, 55, 55, 55, 25, - 22, 22, 22, 22, 76, 24, 0, 0, 0, 0, - 0, 24, 0, 0, 0, 44, 44, 44, 44, 55, + 45, 45, 45, 45, 45, 45, 45, 45, 67, 56, + 0, 34, 57, 57, 57, 25, 22, 22, 22, 22, + 79, 24, 0, 0, 0, 0, 0, 24, 0, 0, + 0, 44, 44, 44, 44, 57, 57, 57, 64, 64, + 44, 44, 44, 44, 57, 57, 57, 67, 67, 67, + 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, - 55, 55, 64, 64, 64, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 21, 0, 32, 55, - 55, 22, 76, 0, 24, 0, 0, 0, 55, 55, - 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, + 45, 21, 0, 32, 57, 57, 22, 79, 0, 24, + 0, 0, 0, 57, 57, 64, 64, 64, 57, 57, + 67, 67, 67, 67, 67, 0, 0, 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, 0, 35, - 55, 23, 0, 0, 0, 0, 0, 55, 64, 64, - 64, 45, 45, 45, 45, 45, 45, 0, 33, 23, - 23, 23, 23, 0, 0, 0, 64, 64, 64, 64, - 64, 45, 45, 45, 45, 45, 23, 0, 0, 0, - - 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, + 57, 23, 0, 0, 0, 0, 0, 57, 64, 64, + 64, 64, 64, 57, 67, 67, 67, 45, 45, 45, + 45, 45, 45, 0, 33, 23, 23, 23, 23, 0, + 0, 0, 64, 64, 64, 67, 67, 67, 67, 67, + 45, 45, 45, 45, 45, 23, 0, 0, 0, 0, + + 0, 64, 64, 64, 64, 64, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0 } ; @@ -542,926 +565,1214 @@ static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_meta[75] = { 0, 1, 2, 3, 4, 3, 2, 5, 6, 7, 1, - 8, 8, 1, 1, 9, 1, 10, 11, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, - 8, 1, 12, 12, 12, 12, 12, 12, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 16, 17, 18, 18, 18, - 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19 + 8, 8, 1, 9, 10, 1, 11, 12, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, + 8, 1, 13, 13, 13, 13, 13, 13, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 17, 18, 19, 19, 19, + 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20 } ; -static yyconst flex_int16_t yy_base[996] = +static yyconst flex_int16_t yy_base[1228] = { 0, 0, 73, 123, 194, 81, 97, 265, 338, 411, 466, - 128, 137, 522, 0, 154, 172, 4214, 4153, 74, 6090, - 4204, 4197, 6090, 594, 72, 6090, 6090, 4142, 6090, 174, - 606, 194, 95, 4168, 6090, 6090, 29, 669, 4153, 35, - 48, 725, 51, 4161, 4147, 72, 4145, 4143, 52, 787, - 226, 98, 225, 816, 55, 103, 4109, 76, 4101, 186, - 259, 145, 286, 4126, 4125, 4132, 133, 0, 6090, 4161, - 4156, 6090, 0, 359, 880, 230, 0, 4101, 6090, 134, - 6090, 167, 6090, 253, 4100, 146, 184, 6090, 297, 248, - 420, 908, 952, 287, 329, 1010, 1060, 4112, 140, 165, - - 1116, 4103, 4115, 4101, 4056, 4042, 356, 0, 160, 4022, - 262, 6090, 429, 4005, 482, 286, 6090, 4053, 164, 6090, - 4056, 434, 479, 414, 629, 436, 669, 4000, 798, 766, - 3999, 1178, 581, 1191, 4007, 4018, 826, 836, 335, 4005, - 272, 373, 1254, 1310, 3979, 3972, 3963, 3961, 3965, 3962, - 471, 3952, 3959, 3956, 3948, 3947, 3922, 764, 6090, 235, - 809, 148, 168, 908, 3898, 3903, 3884, 3868, 3857, 382, - 602, 329, 314, 410, 233, 818, 314, 847, 361, 880, - 3864, 1372, 885, 383, 0, 3895, 874, 3897, 6090, 6090, - 1030, 0, 3814, 1158, 6090, 6090, 3813, 952, 3812, 3859, - - 769, 384, 892, 770, 3862, 454, 904, 1190, 3807, 1381, - 0, 1230, 1438, 1390, 1330, 1477, 3834, 1402, 1437, 1040, - 1527, 1583, 3796, 0, 3790, 3778, 3781, 3778, 1429, 3762, - 3741, 3730, 3726, 3718, 828, 439, 259, 366, 444, 1460, - 1497, 1630, 1670, 1710, 1750, 3749, 3736, 1795, 618, 1841, - 830, 1886, 0, 3729, 3703, 3688, 3664, 3677, 3665, 3661, - 3648, 3656, 3633, 3617, 483, 3602, 3598, 3612, 3611, 3599, - 3598, 928, 408, 577, 3570, 3554, 3545, 3548, 1143, 555, - 770, 3551, 605, 428, 708, 1670, 861, 887, 1605, 1642, - 1684, 1931, 3591, 1976, 0, 3551, 3531, 3514, 3527, 3515, - - 3512, 3500, 3501, 3457, 3445, 3408, 3419, 1134, 3385, 6090, - 752, 777, 1694, 1011, 2023, 2063, 1723, 752, 3425, 3398, - 1732, 926, 3397, 3396, 908, 1770, 2103, 1815, 1340, 2149, - 1863, 874, 3381, 1163, 3363, 3358, 921, 1228, 3337, 3323, - 3310, 3300, 3291, 3289, 3283, 3267, 3243, 3246, 0, 3224, - 3220, 0, 1385, 366, 604, 1101, 3208, 3203, 3204, 3154, - 3168, 3117, 1165, 263, 1359, 879, 1138, 1906, 3170, 1953, - 1998, 1509, 2194, 2239, 1387, 3124, 922, 1402, 3125, 3100, - 3103, 3083, 3074, 3070, 3066, 3054, 857, 3071, 3077, 3015, - 2286, 2326, 2366, 3001, 2997, 2033, 2956, 2946, 2931, 2914, - - 924, 2044, 1048, 2073, 1418, 2406, 0, 2085, 2453, 2123, - 1615, 2499, 2171, 1125, 1797, 6090, 2888, 2893, 2882, 2875, - 1798, 6090, 2890, 2861, 2808, 2821, 2791, 2784, 2764, 2757, - 2758, 0, 2676, 2673, 986, 1091, 1148, 735, 1187, 2687, - 2607, 2605, 1539, 1105, 1166, 1334, 2216, 2261, 2298, 2644, - 2627, 2602, 2609, 2590, 2604, 2556, 2499, 2512, 2505, 2514, - 2514, 2496, 2508, 2505, 2506, 2489, 2448, 2308, 1206, 2546, - 2586, 2339, 2478, 2476, 2456, 2434, 2624, 1347, 2348, 2379, - 2391, 1357, 2012, 2275, 2426, 2466, 2671, 0, 2479, 2718, - 2519, 1825, 2764, 2558, 1351, 1933, 2408, 2391, 2387, 1934, - - 2375, 1632, 2150, 2367, 2339, 2342, 2320, 2151, 2152, 2307, - 2283, 2260, 2240, 2238, 372, 2223, 2202, 1429, 1190, 1019, - 1344, 2568, 2234, 2598, 2610, 2438, 2547, 2201, 2195, 2672, - 2180, 1634, 2673, 2171, 2161, 2674, 2719, 0, 0, 0, - 0, 2123, 2810, 2849, 2888, 2131, 2130, 2126, 2644, 2928, - 2691, 1873, 2973, 2740, 2784, 2118, 2822, 2834, 2796, 1642, - 1659, 2475, 2861, 2861, 2874, 3020, 0, 2900, 3067, 2874, - 1963, 3113, 2911, 1207, 2720, 6090, 2093, 2082, 2071, 2721, - 6090, 2064, 2066, 2059, 2767, 6090, 2045, 1980, 1983, 1980, - 2940, 6090, 2974, 6090, 0, 1418, 1942, 1934, 1472, 1284, - - 1175, 1433, 2994, 3041, 3088, 1955, 1941, 1918, 1916, 1892, - 1906, 1889, 1865, 3133, 131, 3172, 3211, 3145, 1888, 1852, - 3158, 1423, 3183, 1751, 3251, 0, 3195, 3264, 3221, 2054, - 3309, 3233, 3286, 3331, 3356, 1710, 1987, 2941, 2950, 3366, - 2954, 3378, 0, 3400, 3425, 3445, 2181, 3472, 1745, 1820, - 1821, 1800, 2975, 1755, 1732, 2976, 3021, 0, 1744, 1709, - 1691, 1676, 2375, 1436, 2239, 1669, 3482, 1664, 3493, 3504, - 3052, 1624, 1597, 3022, 1593, 1573, 3023, 3115, 0, 3516, - 3556, 3596, 3636, 1586, 3528, 3540, 3568, 1585, 2262, 2380, - 3578, 2477, 3676, 0, 3608, 3689, 3619, 3296, 3734, 3648, - - 3658, 1566, 3711, 3756, 3411, 2205, 2326, 2956, 783, 1023, - 3781, 0, 3457, 1387, 1510, 3116, 1508, 3605, 6090, 1492, - 1480, 3783, 6090, 3784, 6090, 0, 1421, 2218, 2110, 1759, - 1415, 3808, 3816, 3809, 3821, 3833, 3854, 3860, 1394, 1367, - 1370, 3871, 1667, 3911, 3951, 3884, 1685, 3890, 1397, 3924, - 3936, 3902, 1338, 1337, 2535, 2587, 3961, 2611, 3991, 0, - 3973, 4004, 4024, 3341, 4049, 4071, 4095, 4106, 4117, 2834, - 1323, 1248, 1020, 0, 4051, 6090, 4052, 1235, 1233, 6090, - 1504, 2335, 6090, 1678, 1802, 4144, 4152, 4160, 4168, 4162, - 4190, 4204, 4220, 4217, 1227, 4242, 4254, 4266, 1223, 4197, - - 1156, 1140, 4274, 4314, 4354, 4286, 4298, 4326, 1153, 1133, - 2741, 3196, 4336, 3234, 4394, 0, 4366, 4407, 4377, 3721, - 4429, 965, 4453, 4464, 4082, 943, 871, 4227, 6090, 4228, - 773, 6090, 2595, 4474, 4484, 4496, 4508, 4520, 4363, 715, - 4530, 1707, 4570, 4610, 4543, 4549, 655, 4583, 4595, 4561, - 630, 569, 3265, 502, 431, 4622, 0, 3195, 4622, 6090, - 4650, 2769, 4648, 373, 4661, 4673, 4638, 4700, 4713, 4753, - 4793, 4688, 4698, 4723, 331, 0, 246, 4725, 6090, 1847, - 3685, 6090, 1913, 4736, 4765, 4777, 4803, 1881, 4843, 4883, - 4816, 6090, 4854, 4864, 3864, 6090, 6090, 4893, 182, 4905, - - 4921, 4824, 4931, 4941, 4951, 4989, 4999, 5009, 21, 5019, - 5029, 6090, 5035, 4439, 6090, 5085, 5104, 5123, 5142, 5161, - 5180, 5199, 5218, 5237, 5256, 5264, 5282, 5301, 5304, 5323, - 5342, 5361, 5380, 5399, 5418, 5437, 5456, 5475, 5494, 5502, - 5509, 5517, 5535, 5554, 5573, 5576, 5595, 5614, 5633, 5652, - 5671, 5679, 5696, 5715, 5723, 5731, 5738, 5745, 5752, 5760, - 5767, 5773, 5780, 5787, 5795, 5804, 5811, 5818, 5825, 5833, - 5842, 5849, 5856, 5864, 5873, 5880, 5889, 5897, 5906, 5913, - 5922, 5930, 5939, 5957, 5976, 5995, 6003, 6012, 6020, 6027, - 6036, 6043, 6052, 6070, 2015 - + 128, 137, 522, 0, 157, 172, 596, 0, 6501, 6444, + 74, 8253, 6486, 6460, 8253, 668, 72, 8253, 8253, 6408, + 8253, 174, 680, 195, 95, 6434, 8253, 8253, 29, 743, + 6419, 54, 35, 77, 799, 52, 6428, 6381, 44, 6378, + 6386, 50, 861, 226, 127, 225, 890, 216, 105, 6344, + 76, 6341, 192, 266, 145, 359, 6365, 6364, 6376, 132, + 0, 8253, 6405, 6400, 8253, 0, 427, 954, 230, 0, + 6344, 8253, 116, 8253, 169, 8253, 275, 6342, 202, 182, + 8253, 293, 246, 434, 982, 1026, 284, 294, 1084, 1134, + + 6332, 148, 106, 1190, 6328, 6329, 6293, 6303, 6298, 329, + 0, 294, 6278, 227, 8253, 372, 6269, 333, 6268, 447, + 1237, 360, 465, 1300, 6268, 315, 111, 1356, 6250, 6261, + 6237, 6238, 6208, 1418, 485, 387, 6188, 719, 358, 8253, + 6235, 259, 8253, 6238, 655, 824, 6183, 858, 436, 892, + 6179, 919, 929, 6177, 1448, 981, 1463, 6202, 6213, 996, + 1006, 495, 6187, 343, 100, 1526, 1582, 6172, 6160, 6159, + 6157, 6150, 6147, 6151, 6126, 895, 6106, 6100, 6087, 6072, + 6077, 6073, 492, 8253, 184, 717, 307, 392, 1241, 6051, + 6046, 6025, 6017, 6016, 836, 676, 194, 207, 368, 414, + + 949, 727, 1104, 749, 1224, 5999, 1644, 1241, 833, 0, + 6045, 960, 6048, 8253, 8253, 1381, 0, 5994, 1300, 8253, + 8253, 5985, 1134, 5984, 6029, 941, 366, 966, 752, 6009, + 846, 879, 1431, 5954, 1653, 0, 1502, 1710, 1662, 1445, + 1751, 5992, 1602, 1674, 1218, 1801, 1857, 5944, 0, 5935, + 5928, 5918, 5915, 1687, 5905, 5897, 5873, 5846, 5839, 985, + 665, 5831, 1787, 5814, 1892, 5806, 1919, 1750, 5805, 1949, + 1726, 1964, 5843, 1916, 1946, 1612, 2027, 2083, 5816, 5805, + 5782, 5778, 5775, 1966, 5738, 5736, 390, 1500, 365, 897, + 457, 474, 496, 2103, 2128, 2140, 2180, 2220, 2258, 5760, + + 5736, 2303, 717, 2349, 928, 2412, 2468, 5718, 0, 5728, + 5719, 5720, 5690, 5703, 5683, 5660, 5659, 5667, 5662, 5656, + 286, 5633, 5618, 5630, 5628, 5620, 5617, 1389, 154, 370, + 5580, 5570, 5558, 5560, 1392, 335, 1077, 5556, 798, 654, + 782, 2180, 393, 1228, 2152, 2194, 2206, 2513, 5596, 2558, + 0, 5576, 5567, 5545, 5547, 5533, 5526, 5517, 5496, 5493, + 5467, 5454, 5448, 1410, 5409, 2259, 2605, 2645, 2685, 2725, + 5443, 2770, 0, 5424, 5415, 5389, 5387, 5375, 5359, 5344, + 5356, 5342, 5337, 5324, 5335, 1657, 940, 8253, 826, 949, + 2278, 1085, 2817, 2857, 1889, 464, 5336, 5321, 2230, 1095, + + 5320, 5297, 1265, 2323, 2897, 2369, 1684, 2943, 2490, 1331, + 3006, 900, 1659, 1105, 471, 1643, 1710, 1192, 1106, 801, + 657, 1238, 1007, 827, 1274, 867, 1445, 5284, 1013, 1240, + 5281, 1420, 1395, 1226, 905, 5252, 5237, 5228, 5212, 5226, + 5202, 1490, 1189, 1709, 1094, 1419, 2533, 5211, 2580, 2617, + 2115, 3062, 3107, 1726, 5166, 1266, 1727, 5144, 5137, 5140, + 5130, 5108, 5106, 5102, 5099, 3152, 1491, 1514, 1739, 2627, + 1379, 3199, 3239, 2658, 1583, 5103, 2005, 5055, 1621, 2006, + 5040, 5033, 5023, 5020, 5011, 5008, 4996, 5003, 1776, 1620, + 1749, 1624, 3279, 3319, 3359, 4952, 4950, 2665, 4921, 4912, + + 4911, 4910, 1619, 2696, 1977, 2706, 2000, 3399, 0, 2747, + 3446, 2790, 2288, 3492, 2829, 1384, 1487, 2261, 8253, 982, + 1690, 1383, 723, 2350, 8253, 1867, 1262, 1658, 1761, 1609, + 1491, 1714, 1706, 1917, 4909, 1900, 1631, 1891, 1832, 1940, + 2137, 1747, 4861, 4819, 4820, 2110, 1949, 1963, 1921, 2841, + 2869, 2881, 4826, 4797, 4772, 4772, 4751, 4766, 4757, 4731, + 4732, 4723, 4722, 4711, 4679, 2015, 2166, 2248, 276, 2214, + 3539, 3579, 3619, 4598, 4591, 4582, 4591, 4580, 4523, 4499, + 4492, 4480, 4450, 4410, 2358, 2156, 2542, 2359, 2127, 2917, + 1958, 3659, 3699, 2803, 4432, 4417, 4416, 4371, 3737, 2003, + + 2965, 3084, 3129, 2244, 2388, 2594, 3172, 2979, 3784, 0, + 3211, 3831, 3222, 2379, 3877, 3251, 2297, 4355, 2560, 2085, + 1858, 2304, 2561, 1930, 2479, 2771, 1191, 1762, 2390, 2375, + 2772, 2773, 2469, 4289, 4282, 4281, 4261, 2204, 4249, 4225, + 2693, 2716, 2514, 2943, 3261, 4274, 3291, 3303, 2929, 2992, + 4223, 4219, 3331, 4222, 2314, 3348, 4170, 4174, 3359, 3360, + 2399, 2500, 2589, 2635, 2714, 3373, 2168, 3924, 3964, 3350, + 3362, 4130, 4103, 3401, 4080, 2523, 3402, 4069, 4052, 3447, + 3448, 4026, 4025, 3977, 3878, 3036, 4003, 4042, 4081, 3904, + 3900, 3896, 3419, 4121, 3466, 3094, 4166, 3514, 3549, 3871, + + 3561, 3591, 3184, 2645, 2881, 3334, 3528, 3601, 3631, 4213, + 0, 3633, 4260, 3644, 3139, 4306, 3671, 2136, 3449, 8253, + 4369, 3096, 2377, 3493, 8253, 1488, 2654, 3307, 3494, 8253, + 2573, 2959, 2695, 2906, 3495, 8253, 3671, 8253, 3842, 2683, + 3758, 3743, 2867, 1330, 1986, 2684, 3683, 3710, 3721, 3743, + 3705, 4430, 3672, 3638, 2875, 1030, 3564, 4487, 4526, 4565, + 4621, 2824, 2213, 2652, 3579, 2876, 1562, 2939, 3758, 2763, + 4678, 4717, 3769, 3568, 3565, 3807, 2818, 3851, 3222, 4757, + 0, 3899, 4770, 3934, 3390, 4815, 3946, 3976, 3988, 4015, + 3303, 3514, 3913, 4027, 4027, 4054, 4862, 0, 4056, 4909, + + 4067, 3817, 4093, 2957, 4972, 2263, 1881, 3880, 3205, 2307, + 4122, 4123, 3497, 3165, 3488, 3444, 3384, 3288, 2604, 3602, + 3396, 4141, 3430, 4187, 4234, 4112, 3355, 3305, 5045, 3287, + 3219, 3878, 3879, 0, 4280, 3236, 5102, 5141, 4291, 5197, + 2392, 4214, 2967, 3159, 4215, 4216, 3127, 5255, 5295, 5335, + 5375, 3135, 4329, 4499, 4511, 3109, 3280, 3373, 4536, 3562, + 5415, 0, 4548, 5428, 4575, 4339, 5473, 4587, 4688, 3102, + 4700, 4729, 4741, 3946, 3988, 4599, 2482, 2505, 5520, 0, + 4792, 3861, 3042, 4816, 2493, 4261, 8253, 2606, 3451, 4369, + 8253, 4370, 8253, 3041, 2943, 4598, 3748, 3858, 2927, 4852, + + 4863, 4890, 4931, 5114, 5126, 4817, 2837, 2770, 2752, 5532, + 5572, 5612, 5652, 5176, 2705, 2924, 3089, 5268, 3576, 5692, + 5732, 5153, 3657, 5164, 2720, 5280, 5308, 5033, 2671, 2606, + 3965, 4067, 5318, 4094, 5772, 0, 5347, 5785, 5358, 4747, + 5830, 5387, 5398, 5449, 5494, 4511, 2597, 3019, 3182, 2536, + 4818, 8253, 5476, 3132, 3185, 8253, 3350, 4375, 8253, 3354, + 4647, 5559, 5567, 5599, 5610, 5625, 4972, 5654, 5692, 5558, + 2551, 5664, 5707, 5719, 2527, 5198, 2285, 2143, 5747, 3759, + 5877, 5917, 5759, 3806, 5521, 2120, 3497, 5957, 5997, 6037, + 5807, 5852, 5889, 2111, 2028, 4110, 4430, 5899, 4549, 6077, + + 0, 5929, 6090, 5940, 4882, 5969, 2015, 5980, 6008, 4942, + 1944, 1833, 5696, 8253, 6037, 3540, 8253, 4727, 6048, 6058, + 6112, 6137, 6149, 5926, 1783, 6161, 6201, 6241, 6190, 1709, + 6178, 3870, 6281, 6321, 6190, 6228, 1673, 6253, 6265, 6025, + 1475, 1302, 4603, 1251, 1148, 6293, 0, 3951, 6009, 8253, + 6321, 4861, 6332, 902, 6344, 6359, 6309, 6230, 6369, 4001, + 6409, 6449, 6382, 6410, 6489, 6529, 6569, 6421, 6431, 6459, + 858, 0, 694, 6293, 8253, 3656, 5478, 8253, 3709, 6471, + 6501, 6513, 6609, 6649, 6689, 6542, 4002, 6729, 6769, 6554, + 8253, 6580, 6592, 5817, 8253, 8253, 6619, 668, 6631, 6661, + + 6398, 6671, 4318, 6809, 6849, 6702, 6709, 6747, 6785, 6795, + 6823, 6833, 6859, 6869, 6907, 320, 6917, 6123, 8253, 6927, + 5862, 134, 6955, 6720, 8253, 7011, 7031, 7051, 7071, 7091, + 7111, 7131, 7151, 7171, 7191, 4157, 7211, 7231, 3749, 7251, + 7271, 7291, 7311, 7331, 7351, 7371, 7391, 7411, 7431, 7451, + 7471, 7491, 7511, 7531, 7551, 7571, 4159, 4560, 7580, 7599, + 7619, 7639, 4178, 7659, 7679, 7699, 7719, 7731, 7751, 4962, + 7771, 7791, 7811, 7831, 7851, 7871, 7891, 7911, 4562, 7920, + 4605, 4843, 5180, 7928, 7947, 5190, 5334, 5374, 5414, 7956, + 7965, 5511, 5590, 5607, 7973, 7982, 5611, 5645, 7990, 7999, + + 8018, 5683, 8030, 5731, 8040, 8048, 8057, 8076, 6074, 8088, + 8108, 5771, 8118, 8126, 8135, 8154, 8174, 8194, 5916, 8204, + 5183, 5956, 8213, 6224, 5551, 8232, 4808 } ; -static yyconst flex_int16_t yy_def[996] = +static yyconst flex_int16_t yy_def[1228] = { 0, - 915, 1, 1, 1, 916, 916, 917, 917, 918, 918, - 919, 919, 915, 13, 920, 920, 915, 921, 915, 915, - 915, 915, 915, 922, 923, 915, 915, 924, 915, 925, - 921, 31, 31, 926, 915, 915, 921, 915, 38, 38, - 38, 38, 42, 42, 42, 42, 42, 42, 42, 921, - 31, 921, 915, 922, 38, 38, 42, 42, 42, 915, - 915, 915, 927, 42, 42, 42, 921, 928, 915, 915, - 928, 915, 928, 915, 922, 915, 929, 930, 915, 930, - 915, 930, 915, 931, 932, 932, 932, 915, 915, 933, - 934, 935, 915, 93, 93, 93, 915, 97, 97, 97, - - 97, 101, 101, 101, 101, 101, 93, 96, 96, 936, - 936, 915, 936, 921, 921, 915, 915, 915, 937, 915, - 915, 938, 915, 923, 915, 933, 923, 924, 924, 925, - 939, 921, 921, 31, 940, 134, 134, 134, 134, 941, - 942, 921, 915, 143, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 915, 915, 921, - 921, 921, 921, 915, 915, 915, 915, 915, 915, 937, - 921, 134, 921, 921, 921, 915, 915, 915, 915, 943, - 944, 921, 144, 921, 945, 945, 915, 915, 915, 915, - 938, 946, 947, 947, 915, 915, 947, 947, 948, 915, - - 948, 948, 915, 915, 915, 933, 933, 933, 949, 950, - 96, 949, 951, 915, 915, 93, 216, 216, 216, 216, - 915, 221, 222, 952, 222, 222, 222, 222, 222, 222, - 222, 96, 96, 953, 953, 953, 937, 937, 954, 915, - 915, 921, 921, 921, 134, 245, 955, 915, 956, 915, - 921, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 921, 921, 915, 915, 915, 915, 915, 937, 921, - 921, 245, 921, 921, 921, 915, 921, 915, 915, 915, - 915, 96, 292, 221, 222, 222, 222, 222, 222, 222, - - 222, 222, 222, 222, 222, 222, 222, 96, 96, 915, - 954, 954, 921, 921, 921, 921, 921, 921, 957, 958, - 958, 321, 959, 958, 960, 250, 915, 327, 327, 915, - 327, 921, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 921, 921, 921, 921, 915, 915, 915, 915, - 915, 915, 937, 921, 921, 921, 921, 915, 915, 915, - 915, 915, 292, 221, 222, 222, 961, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 96, 96, 96, 96, - 921, 921, 921, 915, 962, 962, 396, 962, 963, 964, - - 965, 915, 966, 330, 966, 915, 406, 966, 915, 409, - 409, 915, 409, 921, 915, 915, 144, 144, 144, 144, - 915, 915, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 921, 921, 921, 921, 921, 915, - 915, 915, 937, 921, 921, 921, 915, 915, 915, 373, - 374, 222, 961, 961, 222, 222, 222, 222, 222, 222, - 222, 222, 96, 96, 96, 96, 96, 921, 921, 921, - 921, 921, 967, 967, 968, 969, 915, 915, 915, 915, - 915, 970, 970, 971, 412, 971, 915, 487, 971, 915, - 490, 490, 915, 490, 921, 144, 144, 144, 144, 144, - - 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 921, 921, 921, 921, 921, 915, 915, 937, 921, 921, - 921, 915, 915, 915, 915, 915, 222, 961, 961, 222, - 222, 961, 222, 222, 222, 222, 222, 96, 96, 96, - 96, 96, 921, 921, 921, 915, 972, 973, 477, 915, - 550, 550, 915, 550, 915, 915, 915, 915, 915, 915, - 974, 974, 975, 493, 975, 915, 566, 975, 915, 569, - 569, 915, 569, 921, 915, 915, 144, 144, 144, 915, - 915, 144, 144, 144, 915, 915, 144, 144, 144, 144, - 915, 915, 915, 915, 144, 921, 915, 915, 937, 921, - - 921, 921, 915, 915, 915, 961, 961, 222, 961, 961, - 222, 222, 96, 921, 921, 921, 921, 921, 915, 976, - 915, 977, 553, 977, 977, 625, 977, 915, 628, 628, - 915, 628, 915, 915, 915, 915, 978, 978, 979, 572, - 979, 915, 642, 979, 915, 645, 645, 645, 921, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 921, - 915, 915, 937, 921, 921, 921, 915, 915, 915, 915, - 915, 961, 961, 222, 961, 961, 222, 222, 96, 921, - 921, 921, 921, 915, 915, 915, 915, 980, 980, 981, - 631, 981, 981, 693, 981, 915, 696, 696, 915, 696, - - 915, 915, 915, 915, 915, 915, 982, 982, 983, 983, - 983, 711, 983, 921, 144, 144, 144, 915, 915, 144, - 144, 915, 915, 915, 915, 144, 915, 915, 984, 937, - 921, 985, 986, 915, 915, 915, 915, 961, 961, 961, - 961, 921, 921, 921, 921, 921, 921, 915, 915, 915, - 915, 915, 915, 987, 987, 988, 699, 988, 988, 759, - 988, 915, 762, 762, 915, 762, 915, 915, 915, 915, - 989, 989, 921, 144, 915, 915, 144, 144, 144, 915, - 984, 984, 915, 984, 937, 985, 985, 985, 985, 915, - 985, 986, 986, 915, 915, 915, 915, 915, 915, 961, - - 961, 961, 921, 921, 921, 915, 915, 915, 915, 990, - 990, 991, 765, 991, 991, 815, 991, 915, 818, 818, - 818, 915, 915, 915, 915, 915, 921, 915, 915, 144, - 144, 915, 937, 915, 915, 915, 915, 915, 961, 961, - 921, 921, 921, 921, 921, 915, 915, 915, 915, 915, - 915, 992, 992, 993, 993, 993, 856, 856, 915, 915, - 144, 994, 915, 915, 915, 915, 915, 961, 921, 921, - 921, 915, 915, 915, 915, 995, 995, 915, 915, 994, - 994, 915, 994, 915, 915, 915, 921, 921, 921, 921, - 921, 915, 915, 915, 915, 915, 915, 915, 915, 915, - - 915, 915, 921, 921, 921, 915, 915, 915, 921, 921, - 921, 915, 915, 915, 0, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915 - + 1125, 1, 1, 1, 1126, 1126, 1127, 1127, 1128, 1128, + 1129, 1129, 1125, 13, 1130, 1130, 1125, 17, 1125, 1131, + 1125, 1125, 1125, 1125, 1125, 1132, 1133, 1125, 1125, 1134, + 1125, 1135, 1131, 33, 33, 1136, 1125, 1125, 1131, 1125, + 40, 40, 40, 40, 40, 45, 45, 45, 45, 45, + 45, 45, 1131, 33, 1131, 1125, 1132, 40, 40, 45, + 45, 45, 1125, 1125, 1125, 1137, 45, 45, 45, 1131, + 1138, 1125, 1125, 1138, 1125, 1138, 1125, 1132, 1125, 1139, + 1140, 1125, 1140, 1125, 1140, 1125, 1141, 1142, 1142, 1142, + 1125, 1125, 1143, 1144, 1145, 1125, 96, 96, 96, 1125, + + 100, 100, 100, 100, 104, 104, 104, 104, 104, 96, + 99, 99, 1146, 1146, 1125, 1146, 1147, 1148, 1149, 1150, + 1147, 121, 121, 1125, 124, 124, 124, 124, 128, 128, + 128, 128, 128, 1147, 121, 1147, 1131, 1131, 1125, 1125, + 1125, 1151, 1125, 1125, 1152, 1125, 1153, 1125, 1143, 1153, + 1154, 1154, 1155, 1156, 1131, 1131, 1131, 1157, 157, 157, + 157, 157, 1158, 1159, 1131, 1125, 166, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 1125, 1125, 1131, 1131, 1131, 1131, 1125, 1125, + 1125, 1125, 1125, 1125, 1151, 1131, 157, 1131, 1131, 1131, + + 1125, 1125, 1125, 1125, 1160, 1161, 1131, 167, 1131, 1162, + 1162, 1125, 1125, 1125, 1125, 1152, 1163, 1164, 1164, 1125, + 1125, 1164, 1164, 1165, 1125, 1165, 1165, 1125, 1125, 1125, + 1143, 1143, 1143, 1166, 1167, 1168, 1166, 1169, 1125, 1125, + 1168, 241, 241, 241, 241, 1125, 246, 247, 1170, 247, + 247, 247, 247, 247, 247, 247, 1168, 1168, 1171, 1171, + 1171, 1172, 1172, 1173, 1173, 1174, 1174, 1175, 1176, 1172, + 1172, 1172, 272, 272, 272, 272, 1125, 277, 278, 278, + 278, 278, 278, 278, 278, 278, 1172, 1172, 1172, 1172, + 1177, 1177, 1178, 1125, 1125, 1131, 1131, 1131, 1131, 299, + + 1179, 1125, 1180, 1125, 1131, 1125, 306, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 1131, 1131, 1125, + 1125, 1125, 1125, 1125, 1177, 1131, 1131, 299, 1131, 1131, + 1131, 1125, 1131, 1125, 1125, 1125, 1125, 1168, 348, 246, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 1168, 1168, 1125, 1172, 1172, 1172, 272, + 370, 277, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 1172, 1172, 1125, 1178, 1178, + 1131, 1131, 1131, 1131, 1131, 1131, 1181, 1182, 1182, 399, + + 1183, 1182, 1184, 304, 1125, 405, 405, 1125, 405, 1131, + 1125, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 1131, 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, + 1125, 1185, 1131, 1131, 1131, 1131, 1125, 1125, 1125, 1125, + 1125, 348, 246, 247, 247, 1186, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 452, 466, 466, 466, 1172, + 1172, 1172, 1172, 1172, 1172, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 1172, 1172, + 1172, 1172, 1131, 1131, 1131, 1125, 1187, 1187, 498, 1187, + + 1188, 1189, 1190, 1125, 1191, 408, 1191, 1125, 508, 1191, + 1125, 511, 511, 1125, 511, 1131, 411, 1125, 1125, 411, + 411, 411, 411, 1125, 1125, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 1131, 1131, 1131, + 1131, 1131, 1125, 1125, 1125, 1185, 1131, 1131, 1131, 1125, + 1125, 1125, 452, 453, 247, 1186, 1186, 247, 247, 247, + 247, 247, 247, 247, 247, 466, 466, 466, 466, 466, + 1172, 1172, 1172, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 1172, 1172, 1172, 1172, 1172, 1131, + 1131, 1131, 1131, 1131, 1192, 1192, 1193, 1194, 1125, 1125, + + 1125, 1125, 1125, 1195, 1195, 1196, 514, 1196, 1125, 609, + 1196, 1125, 612, 612, 1125, 612, 1131, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 1131, 1131, 1131, 1131, 1131, 1125, 1125, + 1185, 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, 247, + 1186, 1186, 247, 247, 1186, 247, 247, 247, 247, 247, + 466, 466, 466, 466, 466, 1172, 1172, 1172, 1172, 1172, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 1172, 1172, 1172, 1172, 1172, 1131, 1131, 1131, 1125, + 1197, 1198, 599, 1125, 694, 694, 1125, 694, 1125, 1125, + + 1125, 1125, 1125, 1125, 1199, 1199, 1200, 615, 1200, 1125, + 710, 1200, 1125, 713, 713, 1125, 713, 1131, 1125, 1125, + 1125, 721, 721, 1125, 1125, 721, 721, 721, 1125, 1125, + 721, 721, 721, 721, 1125, 1125, 1125, 1125, 721, 1131, + 1125, 1125, 1201, 1131, 1131, 1131, 1125, 1125, 1125, 1202, + 1202, 1125, 1202, 1202, 752, 752, 1203, 1172, 1172, 1172, + 1125, 761, 761, 761, 761, 761, 761, 1172, 1131, 1131, + 1131, 1131, 1131, 1125, 1204, 1125, 1205, 697, 1205, 1205, + 780, 1205, 1125, 783, 783, 1125, 783, 1125, 1125, 1125, + 1125, 1206, 1206, 1207, 716, 1207, 1125, 797, 1207, 1125, + + 800, 800, 800, 1131, 1125, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 1131, 1125, 1125, 1208, 1131, 1131, + 1131, 1125, 1125, 1125, 1125, 1125, 1209, 1209, 1125, 1209, + 1209, 829, 829, 1210, 1211, 1211, 1211, 1211, 1211, 1125, + 840, 840, 840, 840, 840, 840, 1211, 1131, 1131, 1131, + 1131, 1125, 1125, 1125, 1125, 1212, 1212, 1213, 786, 1213, + 1213, 861, 1213, 1125, 864, 864, 1125, 864, 1125, 1125, + 1125, 1125, 1125, 1125, 1214, 1214, 1215, 1215, 1215, 879, + 1215, 1131, 805, 805, 805, 1125, 1125, 805, 805, 1125, + 1125, 1125, 1125, 805, 1125, 1125, 1216, 1208, 1131, 1217, + + 1218, 1125, 1125, 1125, 1125, 1209, 1209, 1209, 1209, 1211, + 1211, 1211, 1211, 840, 840, 840, 840, 1131, 1131, 1131, + 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, 1125, 1219, + 1219, 1220, 867, 1220, 1220, 935, 1220, 1125, 938, 938, + 1125, 938, 1125, 1125, 1125, 1125, 1221, 1221, 1131, 805, + 1125, 1125, 805, 805, 805, 1125, 1216, 1216, 1125, 1216, + 1208, 1217, 1217, 1217, 1217, 1125, 1217, 1218, 1218, 1125, + 1125, 1125, 1125, 1125, 1125, 1209, 1209, 1209, 1211, 1211, + 1211, 1211, 1211, 1211, 840, 840, 840, 1131, 1131, 1131, + 1125, 1125, 1125, 1125, 1222, 1222, 1223, 941, 1223, 1223, + + 1000, 1223, 1125, 1003, 1003, 1003, 1125, 1125, 1125, 1125, + 1125, 1131, 1125, 1125, 805, 805, 1125, 1208, 1125, 1125, + 1125, 1125, 1125, 1209, 1209, 1211, 1211, 1211, 840, 840, + 1131, 1131, 1131, 1131, 1131, 1125, 1125, 1125, 1125, 1125, + 1125, 1224, 1224, 1225, 1225, 1225, 1046, 1046, 1125, 1125, + 805, 1226, 1125, 1125, 1125, 1125, 1125, 1209, 1211, 1211, + 1211, 1211, 1211, 840, 1131, 1131, 1131, 1125, 1125, 1125, + 1125, 1227, 1227, 1125, 1125, 1226, 1226, 1125, 1226, 1125, + 1125, 1125, 1211, 1211, 1211, 1131, 1131, 1131, 1131, 1131, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1211, 1211, 1211, 1211, 1211, 1131, 1131, 1131, 1125, + 1125, 1125, 1211, 1211, 1211, 1131, 1131, 1131, 1125, 1125, + 1125, 1211, 1211, 1211, 0, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125 } ; -static yyconst flex_int16_t yy_nxt[6165] = +static yyconst flex_int16_t yy_nxt[8328] = { 0, - 18, 19, 20, 18, 21, 19, 22, 23, 24, 25, - 26, 27, 18, 28, 29, 18, 18, 30, 31, 32, - 33, 31, 31, 31, 31, 31, 31, 31, 34, 35, - 36, 37, 38, 39, 39, 39, 40, 41, 42, 42, - 42, 42, 43, 44, 45, 42, 46, 47, 48, 49, - 42, 42, 42, 42, 42, 50, 18, 51, 51, 51, - 51, 51, 51, 18, 18, 18, 18, 18, 18, 18, - 18, 52, 18, 18, 53, 116, 115, 144, 53, 116, - 125, 54, 19, 69, 115, 70, 19, 71, 146, 72, - 144, 148, 156, 147, 142, 72, 149, 144, 19, 69, - - 126, 70, 19, 71, 152, 72, 157, 55, 56, 72, - 73, 72, 57, 138, 138, 138, 138, 138, 139, 153, - 58, 154, 171, 59, 60, 72, 73, 127, 60, 86, - 20, 61, 21, 86, 87, 88, 74, 62, 86, 20, - 63, 21, 86, 87, 88, 144, 179, 201, 614, 174, - 179, 201, 74, 115, 18, 19, 20, 36, 21, 19, - 111, 112, 162, 195, 172, 64, 120, 65, 238, 66, - 42, 163, 42, 19, 20, 36, 21, 19, 111, 112, - 131, 131, 222, 89, 131, 131, 115, 176, 115, 194, - 202, 176, 89, 225, 67, 60, 196, 162, 898, 60, - - 177, 200, 61, 115, 131, 272, 184, 222, 62, 113, - 226, 63, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 194, 115, 232, 18, 164, 113, 273, 132, - 164, 158, 159, 233, 188, 158, 64, 159, 65, 200, - 66, 42, 114, 42, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 198, 159, 125, 188, 198, 165, - 166, 120, 621, 238, 167, 67, 19, 20, 236, 21, - 19, 22, 168, 75, 178, 169, 207, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 116, 115, 248, - 115, 116, 181, 181, 285, 444, 181, 181, 203, 204, - - 250, 205, 203, 208, 199, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 179, 181, 235, 115, 179, - 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 19, - 20, 182, 21, 19, 22, 114, 75, 219, 219, 219, - 219, 219, 220, 246, 246, 246, 246, 246, 246, 813, - 187, 159, 179, 188, 187, 189, 179, 190, 310, 115, - 238, 189, 915, 190, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 120, 283, 238, 190, 190, 863, - 202, 282, 437, 76, 77, 77, 77, 77, 77, 77, - - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 19, 20, 190, 21, 19, 22, 79, 75, - 209, 115, 915, 209, 80, 81, 82, 115, 115, 209, - 158, 159, 209, 188, 158, 209, 209, 596, 115, 200, - 83, 251, 915, 287, 125, 236, 120, 915, 312, 211, - 279, 209, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 915, 115, 915, 115, 84, 19, 20, 127, - 21, 19, 22, 79, 75, 212, 209, 356, 284, 80, - 81, 82, 915, 115, 235, 366, 114, 114, 114, 114, - 114, 208, 114, 114, 235, 83, 114, 123, 123, 123, - - 123, 123, 123, 123, 123, 123, 123, 259, 260, 208, - 114, 114, 114, 261, 262, 345, 346, 263, 621, 264, - 265, 84, 36, 19, 20, 36, 21, 19, 22, 36, - 36, 90, 26, 27, 36, 91, 29, 36, 36, 92, - 93, 94, 95, 93, 93, 93, 93, 93, 93, 93, - 34, 96, 36, 36, 97, 98, 98, 98, 99, 100, - 101, 101, 101, 101, 102, 103, 104, 101, 105, 101, - 106, 101, 101, 101, 101, 101, 101, 76, 36, 107, - 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, - 108, 108, 108, 109, 108, 108, 120, 813, 121, 242, - - 243, 244, 242, 242, 242, 242, 242, 242, 242, 122, - 115, 364, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 133, 438, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 135, 248, 115, 357, 136, 136, - 136, 136, 136, 136, 240, 358, 326, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 115, 757, 115, - 115, 115, 280, 136, 136, 136, 136, 136, 136, 114, - 281, 846, 114, 124, 124, 124, 124, 280, 114, 124, - 124, 114, 114, 124, 114, 114, 114, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 135, 124, 124, - - 114, 143, 143, 143, 143, 143, 143, 144, 144, 144, - 144, 145, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 115, 144, 136, 136, 136, 136, - 136, 136, 114, 114, 114, 114, 114, 114, 114, 114, - 114, 114, 114, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 915, 120, 514, 312, 144, 144, 144, - 144, 144, 144, 115, 868, 158, 159, 144, 188, 158, - 201, 288, 131, 131, 201, 288, 131, 131, 280, 310, - 135, 312, 114, 114, 114, 114, 114, 114, 158, 159, - 115, 160, 161, 114, 114, 114, 131, 114, 114, 402, - - 248, 114, 128, 128, 128, 128, 128, 115, 128, 128, - 158, 159, 128, 188, 158, 114, 114, 114, 120, 176, - 121, 132, 861, 176, 200, 115, 128, 128, 128, 234, - 280, 122, 177, 234, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 115, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 158, 159, 463, 188, 158, - 464, 170, 120, 235, 121, 115, 181, 181, 288, 332, - 181, 181, 288, 203, 204, 191, 205, 203, 915, 915, - - 915, 915, 915, 915, 915, 915, 915, 915, 131, 164, - 181, 131, 125, 164, 131, 131, 115, 131, 131, 131, - 131, 259, 260, 131, 131, 248, 115, 261, 262, 115, - 367, 263, 915, 264, 115, 182, 326, 211, 131, 131, - 414, 248, 165, 166, 398, 398, 398, 167, 353, 354, - 280, 355, 326, 158, 159, 168, 188, 158, 169, 208, - 248, 419, 453, 214, 131, 211, 420, 454, 215, 211, - 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 135, 211, 248, 115, 217, 217, 217, 217, 217, 217, - 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, - - 211, 211, 211, 211, 211, 211, 211, 194, 511, 217, - 217, 217, 217, 217, 217, 211, 211, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 915, 313, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 211, 915, 915, - 248, 115, 211, 211, 211, 211, 211, 211, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 293, 293, - 293, 293, 293, 293, 402, 248, 115, 211, 211, 211, - 211, 211, 211, 211, 115, 115, 404, 211, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 135, 211, - 827, 601, 221, 221, 221, 221, 221, 221, 222, 222, - - 222, 222, 223, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 512, 224, 217, 217, 217, - 217, 217, 217, 211, 211, 211, 211, 211, 211, 211, - 211, 211, 211, 211, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 915, 120, 115, 238, 222, 222, - 222, 222, 222, 222, 387, 388, 115, 389, 222, 193, - 115, 757, 439, 193, 415, 193, 193, 120, 415, 238, - 513, 519, 193, 211, 211, 211, 211, 211, 211, 131, - 115, 691, 114, 130, 114, 114, 130, 193, 114, 114, - 840, 416, 130, 115, 206, 206, 206, 206, 495, 446, - - 206, 206, 363, 115, 206, 839, 130, 130, 114, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 245, 206, - 206, 115, 468, 245, 245, 245, 245, 245, 245, 421, - 115, 443, 520, 421, 209, 209, 209, 209, 209, 794, - 209, 209, 115, 794, 209, 115, 665, 515, 245, 245, - 245, 245, 245, 245, 114, 600, 422, 114, 209, 209, - 209, 115, 115, 114, 402, 248, 114, 114, 649, 114, - 114, 114, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 135, 831, 830, 114, 252, 252, 252, 252, - 252, 252, 144, 144, 144, 144, 144, 144, 144, 144, - - 144, 144, 144, 144, 144, 144, 144, 144, 144, 115, - 144, 245, 245, 245, 245, 245, 245, 114, 114, 114, - 114, 114, 114, 114, 114, 114, 114, 114, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 915, 115, - 248, 664, 144, 144, 144, 144, 144, 144, 289, 290, - 291, 289, 289, 289, 289, 289, 289, 289, 407, 407, - 407, 407, 407, 408, 248, 691, 623, 114, 114, 114, - 114, 114, 114, 181, 248, 326, 114, 180, 114, 114, - 180, 209, 114, 114, 209, 404, 180, 135, 415, 115, - 209, 131, 415, 209, 521, 131, 209, 209, 131, 115, - - 180, 180, 114, 421, 131, 435, 115, 421, 436, 602, - 211, 574, 209, 748, 115, 416, 802, 801, 131, 131, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 422, 120, 445, 238, 915, 248, 212, 209, 131, 621, - 115, 131, 115, 800, 131, 131, 404, 131, 131, 131, - 131, 623, 773, 131, 131, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 300, 301, 211, 131, 131, - 115, 302, 303, 115, 120, 304, 238, 305, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 115, 599, - 660, 115, 780, 214, 131, 292, 292, 292, 292, 292, - - 292, 292, 292, 292, 292, 666, 783, 731, 784, 292, - 292, 292, 292, 292, 292, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 368, 779, 369, 369, 369, - 369, 369, 369, 663, 292, 292, 292, 292, 292, 292, - 211, 120, 778, 238, 211, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 294, 135, 211, 777, 774, 294, - 294, 294, 294, 294, 294, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 701, 224, 292, 292, 292, 292, 292, 292, - 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, - - 211, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 915, 518, 623, 549, 222, 222, 222, 222, 222, - 222, 368, 741, 369, 369, 369, 369, 369, 369, 369, - 369, 369, 369, 488, 488, 488, 488, 488, 489, 740, - 211, 211, 211, 211, 211, 211, 313, 739, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 314, 368, 248, - 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, - 404, 181, 583, 738, 609, 181, 248, 584, 181, 610, - 832, 667, 784, 742, 181, 115, 313, 485, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, 181, 181, - - 368, 742, 371, 371, 371, 371, 371, 372, 369, 369, - 369, 369, 391, 392, 393, 391, 391, 391, 391, 391, - 391, 391, 115, 841, 115, 115, 313, 248, 316, 316, - 316, 316, 316, 317, 314, 314, 314, 314, 485, 313, - 115, 314, 314, 314, 314, 314, 314, 728, 727, 115, - 396, 396, 397, 398, 398, 398, 398, 398, 398, 398, - 323, 120, 115, 238, 115, 115, 114, 915, 318, 318, - 318, 318, 318, 318, 318, 318, 318, 318, 115, 623, - 726, 721, 318, 318, 318, 318, 318, 318, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 415, 421, - - 115, 720, 415, 421, 120, 714, 238, 318, 318, 318, - 318, 318, 318, 320, 321, 322, 322, 322, 322, 322, - 322, 322, 322, 323, 785, 416, 422, 324, 324, 324, - 324, 324, 324, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 567, 567, 567, 567, 567, 568, 882, - 717, 883, 324, 324, 324, 324, 324, 324, 248, 327, - 328, 329, 327, 327, 327, 327, 327, 327, 327, 330, - 716, 715, 833, 331, 331, 331, 331, 331, 331, 915, - 549, 405, 405, 405, 405, 405, 405, 405, 405, 405, - 405, 626, 626, 626, 626, 626, 627, 887, 331, 331, - - 331, 331, 331, 331, 333, 333, 333, 333, 333, 333, - 333, 333, 333, 333, 135, 897, 400, 883, 333, 333, - 333, 333, 333, 333, 447, 448, 449, 447, 447, 447, - 447, 447, 447, 447, 575, 580, 115, 679, 575, 580, - 678, 677, 676, 318, 318, 318, 318, 318, 318, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 135, - 675, 576, 581, 373, 373, 373, 373, 373, 373, 368, - 674, 369, 369, 369, 369, 369, 369, 369, 369, 369, - 369, 643, 643, 643, 643, 643, 644, 673, 373, 373, - 373, 373, 373, 373, 374, 374, 374, 374, 374, 374, - - 374, 374, 374, 374, 248, 672, 662, 661, 374, 374, - 374, 374, 374, 374, 368, 564, 369, 369, 369, 369, - 369, 369, 369, 369, 369, 369, 896, 659, 402, 248, - 658, 657, 896, 373, 373, 373, 373, 373, 373, 313, - 404, 314, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 474, 474, 474, 474, 474, 474, 474, 474, 474, - 474, 323, 479, 480, 481, 479, 479, 479, 479, 479, - 479, 479, 694, 694, 694, 694, 694, 695, 115, 313, - 656, 314, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 413, 413, 413, 413, 413, 413, 413, 413, 413, - - 413, 402, 248, 483, 483, 483, 483, 483, 483, 655, - 654, 782, 783, 404, 784, 782, 653, 652, 115, 402, - 248, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 404, 651, 650, 555, 405, 405, 405, 405, 405, - 405, 487, 487, 487, 487, 487, 487, 487, 487, 487, - 487, 585, 591, 593, 549, 585, 591, 593, 400, 323, - 405, 405, 405, 405, 405, 405, 248, 409, 410, 411, - 409, 409, 409, 409, 409, 409, 409, 412, 586, 592, - 594, 413, 413, 413, 413, 413, 413, 915, 613, 486, - 486, 486, 486, 486, 486, 486, 486, 486, 486, 712, - - 712, 712, 712, 712, 713, 612, 413, 413, 413, 413, - 413, 413, 450, 450, 450, 450, 450, 450, 450, 450, - 450, 450, 248, 611, 732, 608, 450, 450, 450, 450, - 450, 450, 522, 564, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 607, 732, 732, 606, 732, 732, - 522, 450, 450, 450, 450, 450, 450, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 732, 598, 732, - 733, 451, 451, 451, 451, 451, 451, 522, 621, 524, - 524, 524, 524, 524, 524, 524, 524, 524, 524, 597, - 623, 402, 248, 115, 115, 115, 450, 450, 450, 450, - - 450, 450, 468, 485, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 522, 115, 525, 525, 525, 525, - 525, 526, 523, 523, 523, 523, 543, 544, 545, 543, - 543, 543, 543, 543, 543, 543, 782, 783, 115, 784, - 782, 115, 468, 248, 470, 470, 470, 470, 470, 470, - 470, 470, 470, 470, 640, 468, 595, 469, 469, 469, - 469, 469, 469, 115, 555, 590, 556, 556, 556, 556, - 556, 556, 556, 556, 556, 556, 729, 120, 589, 238, - 729, 115, 468, 588, 471, 471, 471, 471, 471, 472, - 469, 469, 469, 469, 115, 555, 621, 557, 557, 557, - - 557, 557, 557, 557, 557, 557, 557, 555, 691, 558, - 558, 558, 558, 558, 559, 556, 556, 556, 556, 587, - 582, 115, 402, 248, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 483, 404, 730, 579, 578, 482, 482, - 482, 482, 482, 482, 494, 494, 494, 494, 494, 494, - 494, 494, 494, 494, 522, 577, 523, 523, 523, 523, - 523, 523, 549, 482, 482, 482, 482, 482, 482, 402, - 248, 484, 484, 484, 484, 484, 484, 484, 484, 484, - 484, 485, 915, 248, 400, 486, 486, 486, 486, 486, - 486, 402, 248, 915, 485, 402, 248, 562, 562, 562, - - 562, 562, 562, 485, 323, 691, 323, 485, 542, 541, - 486, 486, 486, 486, 486, 486, 248, 490, 491, 492, - 490, 490, 490, 490, 490, 490, 490, 493, 540, 539, - 538, 494, 494, 494, 494, 494, 494, 566, 566, 566, - 566, 566, 566, 566, 566, 566, 566, 537, 575, 536, - 535, 621, 575, 534, 533, 532, 494, 494, 494, 494, - 494, 494, 468, 691, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 915, 576, 565, 565, 565, 565, - 565, 565, 565, 565, 565, 565, 603, 604, 605, 603, - 603, 603, 603, 603, 603, 603, 862, 120, 531, 238, - - 862, 115, 468, 621, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 522, 757, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 522, 915, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 530, 757, - 529, 115, 550, 551, 552, 550, 550, 550, 550, 550, - 550, 550, 553, 528, 527, 915, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 915, 580, 585, 591, 357, 580, 585, 591, - 517, 554, 554, 554, 554, 554, 554, 402, 248, 562, - 562, 562, 562, 562, 562, 562, 562, 562, 562, 485, - - 581, 586, 592, 561, 561, 561, 561, 561, 561, 625, - 625, 625, 625, 625, 625, 625, 625, 625, 625, 516, - 593, 575, 580, 510, 593, 575, 580, 509, 561, 561, - 561, 561, 561, 561, 402, 248, 563, 563, 563, 563, - 563, 563, 563, 563, 563, 563, 564, 594, 576, 581, - 565, 565, 565, 565, 565, 565, 915, 621, 624, 624, - 624, 624, 624, 624, 624, 624, 624, 624, 585, 757, - 881, 882, 585, 883, 881, 565, 565, 565, 565, 565, - 565, 248, 569, 570, 571, 569, 569, 569, 569, 569, - 569, 569, 572, 508, 507, 586, 573, 573, 573, 573, - - 573, 573, 633, 634, 635, 633, 633, 633, 633, 633, - 633, 633, 555, 506, 556, 556, 556, 556, 556, 556, - 505, 573, 573, 573, 573, 573, 573, 614, 615, 615, - 615, 615, 615, 615, 615, 615, 615, 615, 555, 504, - 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, - 555, 248, 556, 556, 556, 556, 556, 556, 556, 556, - 556, 556, 640, 503, 502, 115, 614, 616, 616, 616, - 616, 616, 616, 616, 616, 616, 616, 402, 248, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 573, 564, - 915, 248, 642, 642, 642, 642, 642, 642, 642, 642, - - 642, 642, 564, 501, 115, 614, 617, 617, 617, 617, - 617, 618, 615, 615, 615, 615, 402, 248, 638, 638, - 638, 638, 638, 638, 500, 499, 498, 915, 564, 641, - 641, 641, 641, 641, 641, 641, 641, 641, 641, 497, - 496, 591, 477, 115, 621, 591, 622, 622, 622, 622, - 622, 622, 622, 622, 622, 622, 623, 402, 248, 400, - 624, 624, 624, 624, 624, 624, 402, 248, 592, 564, - 915, 248, 402, 248, 323, 593, 718, 722, 640, 593, - 718, 722, 640, 473, 640, 624, 624, 624, 624, 624, - 624, 628, 629, 630, 628, 628, 628, 628, 628, 628, - - 628, 631, 594, 719, 723, 632, 632, 632, 632, 632, - 632, 667, 668, 668, 668, 668, 668, 668, 668, 668, - 668, 668, 724, 718, 722, 323, 724, 718, 722, 141, - 632, 632, 632, 632, 632, 632, 402, 248, 638, 638, - 638, 638, 638, 638, 638, 638, 638, 638, 564, 725, - 719, 723, 637, 637, 637, 637, 637, 637, 667, 669, - 669, 669, 669, 669, 669, 669, 669, 669, 669, 667, - 668, 668, 668, 668, 668, 668, 467, 637, 637, 637, - 637, 637, 637, 402, 248, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 640, 466, 465, 462, 641, - - 641, 641, 641, 641, 641, 667, 670, 670, 670, 670, - 670, 671, 668, 668, 668, 668, 724, 775, 461, 460, - 724, 775, 459, 458, 641, 641, 641, 641, 641, 641, - 248, 645, 646, 647, 645, 645, 645, 645, 645, 645, - 645, 457, 456, 725, 776, 648, 648, 648, 648, 648, - 648, 680, 681, 682, 683, 680, 680, 680, 680, 680, - 680, 455, 614, 615, 615, 615, 615, 615, 615, 452, - 648, 648, 648, 648, 648, 648, 685, 686, 687, 685, - 685, 685, 685, 685, 685, 685, 368, 357, 115, 614, - 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, - - 115, 632, 632, 632, 632, 632, 632, 632, 632, 632, - 632, 621, 621, 689, 689, 689, 689, 689, 689, 876, - 876, 876, 876, 623, 813, 442, 357, 115, 614, 615, - 615, 615, 615, 615, 615, 615, 615, 615, 615, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 915, - 915, 692, 692, 692, 692, 692, 692, 692, 692, 692, - 692, 441, 813, 357, 440, 434, 115, 621, 433, 689, - 689, 689, 689, 689, 689, 689, 689, 689, 689, 623, - 621, 621, 690, 690, 690, 690, 690, 690, 690, 690, - 690, 690, 691, 813, 432, 431, 692, 692, 692, 692, - - 692, 692, 701, 430, 702, 702, 702, 702, 702, 702, - 702, 702, 702, 702, 760, 760, 760, 760, 760, 761, - 429, 692, 692, 692, 692, 692, 692, 696, 697, 698, - 696, 696, 696, 696, 696, 696, 696, 699, 428, 427, - 426, 700, 700, 700, 700, 700, 700, 701, 425, 703, - 703, 703, 703, 703, 703, 703, 703, 703, 703, 816, - 816, 816, 816, 816, 817, 424, 700, 700, 700, 700, - 700, 700, 701, 423, 704, 704, 704, 704, 704, 705, - 702, 702, 702, 702, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, 402, 248, 708, 708, 708, 708, - - 708, 708, 708, 708, 708, 708, 640, 418, 417, 135, - 707, 707, 707, 707, 707, 707, 402, 248, 708, 708, - 708, 708, 708, 708, 323, 400, 323, 701, 640, 702, - 702, 702, 702, 702, 702, 707, 707, 707, 707, 707, - 707, 402, 248, 709, 709, 709, 709, 709, 709, 709, - 709, 709, 709, 141, 390, 386, 385, 710, 710, 710, - 710, 710, 710, 711, 711, 711, 711, 711, 711, 711, - 711, 711, 711, 402, 248, 772, 772, 772, 772, 772, - 772, 384, 710, 710, 710, 710, 710, 710, 915, 383, + 20, 21, 22, 20, 23, 21, 24, 25, 26, 27, + 28, 29, 20, 30, 31, 20, 20, 32, 33, 34, + 35, 33, 33, 33, 33, 33, 33, 33, 36, 37, + 38, 39, 40, 41, 42, 41, 43, 44, 45, 45, + 45, 45, 46, 47, 48, 45, 49, 50, 51, 52, + 45, 45, 45, 45, 45, 53, 20, 54, 54, 54, + 54, 54, 54, 20, 20, 20, 20, 20, 20, 20, + 20, 55, 20, 20, 56, 139, 177, 167, 56, 139, + 148, 57, 21, 72, 138, 73, 21, 74, 171, 75, + 181, 178, 173, 169, 165, 75, 167, 174, 21, 72, + + 149, 73, 21, 74, 182, 75, 170, 58, 59, 75, + 76, 75, 60, 161, 161, 161, 161, 161, 162, 167, + 61, 179, 172, 62, 63, 75, 76, 150, 63, 89, + 22, 64, 23, 89, 90, 91, 77, 65, 89, 22, + 66, 23, 89, 90, 91, 220, 204, 167, 247, 199, + 204, 251, 77, 278, 20, 138, 281, 41, 21, 22, + 38, 23, 21, 114, 115, 67, 197, 68, 305, 69, + 45, 219, 45, 21, 22, 38, 23, 21, 114, 115, + 154, 154, 138, 92, 154, 154, 184, 138, 227, 263, + 247, 187, 92, 201, 70, 63, 187, 201, 221, 63, + + 188, 250, 64, 226, 154, 209, 202, 226, 65, 138, + 137, 66, 116, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 435, 219, 20, 189, 116, 41, 155, + 189, 183, 184, 261, 213, 183, 67, 225, 68, 138, + 69, 45, 137, 45, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 148, 169, 338, 225, 167, 190, + 191, 143, 138, 292, 192, 70, 21, 22, 170, 23, + 21, 24, 193, 78, 232, 194, 223, 184, 339, 213, + 223, 203, 260, 196, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 228, 229, 664, 230, 228, 236, + + 224, 233, 243, 243, 243, 243, 243, 243, 243, 243, + 243, 243, 244, 244, 244, 244, 244, 245, 424, 425, + 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 21, + 22, 148, 23, 21, 24, 1125, 78, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 278, 257, 139, + 302, 232, 138, 139, 328, 206, 206, 258, 280, 206, + 206, 304, 227, 183, 184, 138, 213, 183, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, 265, 206, + 138, 443, 184, 79, 80, 80, 80, 80, 80, 80, + + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 21, 22, 207, 23, 21, 24, 82, 78, + 263, 225, 386, 138, 83, 84, 85, 260, 212, 184, + 436, 213, 212, 214, 234, 215, 340, 234, 437, 214, + 86, 215, 263, 234, 148, 263, 234, 138, 138, 234, + 234, 289, 329, 269, 269, 215, 215, 269, 269, 143, + 290, 292, 446, 236, 1125, 234, 87, 21, 22, 138, + 23, 21, 24, 82, 78, 341, 388, 269, 292, 83, + 84, 85, 215, 275, 275, 275, 275, 275, 276, 237, + 234, 233, 158, 183, 184, 86, 213, 183, 143, 1125, + + 390, 262, 270, 273, 273, 273, 273, 273, 273, 273, + 273, 273, 273, 300, 300, 300, 300, 300, 300, 138, + 521, 87, 38, 21, 22, 38, 23, 21, 24, 38, + 38, 93, 28, 29, 38, 94, 31, 38, 38, 95, + 96, 97, 98, 96, 96, 96, 96, 96, 96, 96, + 36, 99, 38, 38, 100, 101, 101, 101, 102, 103, + 104, 104, 104, 104, 105, 106, 107, 104, 108, 104, + 109, 104, 104, 104, 104, 104, 104, 79, 38, 110, + 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, + 111, 111, 111, 112, 111, 111, 117, 21, 22, 117, + + 23, 21, 24, 38, 38, 118, 28, 29, 117, 119, + 31, 117, 117, 120, 121, 122, 123, 121, 121, 121, + 121, 121, 121, 121, 36, 37, 38, 117, 124, 125, + 125, 125, 126, 127, 128, 128, 128, 128, 129, 130, + 131, 128, 132, 128, 133, 128, 128, 128, 128, 128, + 128, 134, 117, 135, 135, 135, 135, 135, 135, 117, + 117, 117, 117, 117, 117, 117, 117, 136, 117, 117, + 143, 261, 144, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 145, 1097, 1125, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 156, 529, 157, 157, + + 157, 157, 157, 157, 157, 157, 157, 157, 158, 138, + 776, 445, 159, 159, 159, 159, 159, 159, 183, 184, + 260, 213, 183, 137, 137, 137, 137, 137, 204, 137, + 137, 138, 204, 137, 302, 138, 336, 159, 159, 159, + 159, 159, 159, 137, 337, 404, 137, 137, 137, 137, + 204, 1125, 137, 344, 204, 137, 137, 344, 137, 137, + 137, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 158, 138, 622, 137, 166, 166, 166, 166, 166, + 166, 167, 167, 167, 167, 168, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 138, 167, + + 159, 159, 159, 159, 159, 159, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 1125, 143, 1125, + 390, 167, 167, 167, 167, 167, 167, 138, 143, 528, + 292, 167, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 336, 138, 1125, 1125, 137, 137, 137, 137, + 137, 137, 183, 184, 532, 185, 186, 137, 137, 137, + 336, 137, 137, 294, 1125, 137, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 998, 148, 138, 137, + 137, 137, 143, 343, 144, 1125, 147, 147, 147, 147, + + 147, 233, 147, 147, 335, 145, 147, 1125, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 1053, 534, + 147, 147, 147, 151, 151, 151, 151, 151, 1125, 151, + 151, 315, 316, 151, 233, 154, 154, 317, 318, 154, + 154, 319, 226, 320, 321, 517, 226, 151, 151, 151, + 201, 388, 263, 390, 201, 195, 143, 387, 144, 154, + 138, 183, 184, 202, 213, 183, 542, 228, 229, 216, + 230, 228, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 154, 138, 155, 154, 259, 410, 154, 154, + 259, 154, 154, 154, 154, 263, 225, 154, 154, 296, + + 297, 298, 296, 296, 296, 296, 296, 296, 296, 492, + 1125, 236, 154, 154, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 619, 1125, 138, 239, 154, 236, + 260, 1125, 240, 236, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 158, 236, 531, 536, 242, 242, + 242, 242, 242, 242, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 833, 247, 242, 242, 242, 242, 242, 242, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + + 1125, 391, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 1125, 500, 500, 500, 236, 236, 236, 236, + 236, 236, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 138, 1125, 1125, 183, 184, 336, 213, 183, + 138, 236, 236, 236, 236, 236, 236, 236, 527, 138, + 520, 236, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 158, 236, 1125, 336, 246, 246, 246, 246, + 246, 246, 247, 247, 247, 247, 248, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 219, + 249, 242, 242, 242, 242, 242, 242, 236, 236, 236, + + 236, 236, 236, 236, 236, 236, 236, 236, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 1125, 1125, + 1125, 547, 247, 247, 247, 247, 247, 247, 526, 344, + 206, 206, 247, 344, 206, 206, 349, 349, 349, 349, + 349, 349, 189, 731, 138, 541, 189, 236, 236, 236, + 236, 236, 236, 271, 206, 272, 272, 272, 272, 272, + 272, 272, 272, 272, 272, 158, 1125, 776, 1125, 273, + 273, 273, 273, 273, 273, 190, 191, 315, 316, 207, + 192, 138, 302, 317, 318, 537, 530, 319, 193, 320, + 1125, 194, 263, 404, 273, 273, 273, 273, 273, 273, + + 262, 218, 1125, 262, 624, 218, 556, 218, 218, 262, + 533, 557, 262, 262, 218, 262, 262, 262, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 158, 218, + 998, 262, 277, 277, 277, 277, 277, 277, 278, 278, + 278, 278, 279, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 263, 278, 273, 273, 273, + 273, 273, 273, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 1125, 138, 138, 819, 278, 278, + 278, 278, 278, 278, 143, 470, 292, 516, 278, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 432, + 433, 1125, 434, 262, 262, 262, 262, 262, 262, 183, + 184, 540, 287, 288, 262, 262, 262, 621, 262, 262, + 466, 467, 262, 468, 263, 231, 231, 231, 231, 138, + 538, 231, 231, 539, 138, 231, 262, 262, 262, 154, + 138, 442, 137, 153, 137, 137, 153, 617, 137, 137, + 231, 231, 153, 345, 346, 347, 345, 345, 345, 345, + 345, 345, 345, 1125, 138, 138, 153, 153, 137, 156, + 549, 299, 299, 299, 299, 299, 299, 299, 299, 299, + 299, 158, 143, 535, 292, 299, 299, 299, 299, 299, + + 299, 183, 184, 933, 213, 183, 234, 234, 234, 234, + 234, 236, 234, 234, 236, 1125, 234, 568, 138, 1125, + 299, 299, 299, 299, 299, 299, 137, 628, 167, 137, + 234, 234, 234, 569, 236, 137, 618, 236, 137, 137, + 808, 137, 137, 137, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 158, 263, 546, 137, 306, 306, + 306, 306, 306, 306, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 138, 167, 299, 299, 299, 299, 299, 299, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 1125, 158, 278, 846, 167, 167, 167, 167, 167, 167, + 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, + 371, 371, 371, 371, 371, 371, 302, 1125, 263, 137, + 137, 137, 137, 137, 137, 206, 587, 404, 137, 205, + 137, 137, 205, 234, 137, 137, 234, 627, 205, 1125, + 518, 575, 234, 154, 518, 234, 576, 154, 234, 234, + 154, 1125, 205, 205, 137, 263, 154, 489, 490, 263, + 491, 633, 236, 522, 234, 589, 1125, 519, 523, 1036, + 154, 154, 349, 349, 349, 349, 349, 349, 349, 349, + + 349, 349, 509, 509, 509, 509, 509, 510, 237, 234, + 154, 524, 263, 154, 625, 524, 154, 154, 1125, 154, + 154, 154, 154, 356, 357, 154, 154, 518, 524, 358, + 359, 518, 524, 360, 1125, 361, 620, 158, 525, 236, + 154, 154, 1125, 630, 367, 368, 369, 367, 367, 367, + 367, 367, 367, 367, 519, 525, 269, 269, 1064, 236, + 269, 269, 236, 629, 138, 239, 154, 240, 588, 348, + 348, 348, 348, 348, 348, 348, 348, 348, 348, 158, + 269, 263, 548, 348, 348, 348, 348, 348, 348, 1125, + 1125, 262, 262, 262, 262, 262, 585, 262, 262, 586, + + 570, 262, 138, 626, 263, 270, 732, 638, 348, 348, + 348, 348, 348, 348, 236, 262, 262, 262, 236, 350, + 350, 350, 350, 350, 350, 350, 350, 350, 350, 158, + 236, 263, 1058, 350, 350, 350, 350, 350, 350, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 635, 249, 348, 348, + 348, 348, 348, 348, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 1125, 1125, 138, 138, 247, + 247, 247, 247, 247, 247, 1125, 264, 264, 264, 264, + + 264, 623, 264, 264, 722, 391, 264, 392, 392, 392, + 392, 392, 392, 634, 236, 236, 236, 236, 236, 236, + 264, 264, 264, 266, 266, 266, 266, 266, 1125, 266, + 266, 885, 167, 266, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 138, 1125, 138, 266, 266, 266, + 269, 632, 631, 262, 268, 262, 262, 268, 1125, 262, + 262, 302, 636, 268, 371, 371, 371, 371, 371, 371, + 371, 371, 371, 371, 590, 726, 138, 268, 268, 262, + 271, 644, 370, 370, 370, 370, 370, 370, 370, 370, + 370, 370, 158, 504, 302, 138, 370, 370, 370, 370, + + 370, 370, 378, 379, 138, 506, 518, 524, 380, 381, + 518, 524, 382, 138, 383, 642, 1125, 302, 138, 263, + 302, 370, 370, 370, 370, 370, 370, 262, 506, 643, + 262, 404, 302, 519, 525, 236, 262, 661, 236, 262, + 262, 138, 262, 262, 262, 372, 372, 372, 372, 372, + 372, 372, 372, 372, 372, 158, 933, 820, 262, 372, + 372, 372, 372, 372, 372, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 263, 278, 370, 370, 370, 370, 370, 370, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 1125, 143, 1125, 292, 278, 278, 278, 278, 278, + 278, 295, 295, 295, 295, 295, 295, 295, 295, 295, + 295, 447, 721, 448, 448, 448, 448, 448, 448, 859, + 262, 262, 262, 262, 262, 262, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 391, 637, 392, 392, + 392, 392, 392, 392, 392, 392, 392, 392, 447, 1029, + 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, + 683, 206, 263, 641, 666, 206, 236, 686, 206, 236, + 662, 138, 138, 1025, 206, 138, 391, 804, 393, 393, + + 393, 393, 393, 393, 393, 393, 393, 393, 206, 206, + 447, 263, 449, 449, 449, 449, 449, 449, 449, 449, + 449, 449, 447, 263, 450, 450, 450, 450, 450, 451, + 448, 448, 448, 448, 236, 138, 391, 236, 394, 394, + 394, 394, 394, 395, 392, 392, 392, 392, 498, 498, + 499, 500, 500, 500, 500, 500, 500, 500, 401, 138, + 269, 302, 518, 278, 269, 842, 518, 269, 236, 740, + 663, 236, 506, 269, 665, 138, 396, 396, 396, 396, + 396, 396, 396, 396, 396, 396, 158, 269, 269, 519, + 396, 396, 396, 396, 396, 396, 493, 494, 495, 493, + + 493, 493, 493, 493, 493, 493, 610, 610, 610, 610, + 610, 611, 884, 138, 167, 396, 396, 396, 396, 396, + 396, 398, 399, 400, 400, 400, 400, 400, 400, 400, + 400, 401, 1125, 138, 1024, 402, 402, 402, 402, 402, + 402, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 524, 138, 723, 753, 524, 889, 718, 167, 754, + 402, 402, 402, 402, 402, 402, 302, 405, 406, 407, + 405, 405, 405, 405, 405, 405, 405, 408, 525, 685, + 682, 409, 409, 409, 409, 409, 409, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 711, 711, 711, + + 711, 711, 712, 1125, 504, 302, 409, 409, 409, 409, + 409, 409, 137, 263, 263, 137, 506, 167, 1125, 236, + 734, 137, 236, 807, 137, 137, 733, 137, 137, 137, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 158, 278, 915, 137, 411, 411, 411, 411, 411, 411, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 138, 167, 396, + 396, 396, 396, 396, 396, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 1125, 1125, 504, 302, + + 167, 167, 167, 167, 167, 167, 1125, 1125, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 739, 727, + 236, 1125, 302, 236, 728, 137, 137, 137, 137, 137, + 137, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 452, 158, 953, 970, 167, 452, 452, 452, 452, 452, + 452, 550, 551, 552, 550, 550, 550, 550, 550, 550, + 550, 719, 724, 764, 684, 719, 724, 970, 765, 138, + 452, 452, 452, 452, 452, 452, 453, 453, 453, 453, + 453, 453, 453, 453, 453, 453, 745, 167, 720, 725, + 453, 453, 453, 453, 453, 453, 447, 263, 448, 448, + + 448, 448, 448, 448, 448, 448, 448, 448, 811, 236, + 504, 302, 236, 167, 302, 452, 452, 452, 452, 452, + 452, 470, 607, 471, 471, 471, 471, 471, 471, 471, + 471, 471, 471, 447, 859, 448, 448, 448, 448, 448, + 448, 448, 448, 448, 448, 571, 572, 573, 571, 571, + 571, 571, 571, 571, 571, 236, 954, 167, 236, 138, + 263, 470, 302, 472, 472, 472, 472, 472, 472, 472, + 472, 472, 472, 506, 470, 899, 471, 471, 471, 471, + 471, 471, 263, 596, 596, 596, 596, 596, 596, 596, + 596, 596, 596, 401, 167, 143, 843, 292, 809, 778, + + 263, 470, 278, 473, 473, 473, 473, 473, 474, 471, + 471, 471, 471, 263, 601, 602, 603, 601, 601, 601, + 601, 601, 601, 601, 515, 515, 515, 515, 515, 515, + 515, 515, 515, 515, 236, 167, 924, 236, 138, 138, + 263, 262, 813, 475, 475, 475, 475, 475, 475, 475, + 475, 475, 475, 743, 985, 815, 821, 475, 475, 475, + 475, 475, 475, 504, 302, 605, 605, 605, 605, 605, + 605, 138, 729, 735, 737, 506, 729, 735, 737, 757, + 769, 744, 475, 475, 475, 475, 475, 475, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 978, 730, + + 736, 738, 476, 476, 476, 476, 476, 476, 609, 609, + 609, 609, 609, 609, 609, 609, 609, 609, 138, 590, + 977, 591, 591, 591, 591, 591, 591, 475, 475, 475, + 475, 475, 475, 391, 776, 392, 392, 392, 392, 392, + 392, 392, 392, 392, 392, 1125, 778, 608, 608, 608, + 608, 608, 608, 608, 608, 608, 608, 645, 138, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 143, + 841, 292, 138, 391, 278, 392, 392, 392, 392, 392, + 392, 392, 392, 392, 392, 645, 976, 647, 647, 647, + 647, 647, 647, 647, 647, 647, 647, 645, 302, 648, + + 648, 648, 648, 648, 649, 646, 646, 646, 646, 607, + 832, 845, 138, 504, 302, 505, 505, 505, 505, 505, + 505, 505, 505, 505, 505, 506, 278, 247, 818, 507, + 507, 507, 507, 507, 507, 687, 688, 689, 687, 687, + 687, 687, 687, 687, 687, 645, 167, 646, 646, 646, + 646, 646, 646, 814, 507, 507, 507, 507, 507, 507, + 302, 511, 512, 513, 511, 511, 511, 511, 511, 511, + 511, 514, 138, 278, 986, 515, 515, 515, 515, 515, + 515, 699, 138, 700, 700, 700, 700, 700, 700, 700, + 700, 700, 700, 719, 263, 1125, 302, 719, 138, 167, + + 515, 515, 515, 515, 515, 515, 137, 607, 746, 137, + 812, 847, 138, 916, 956, 137, 278, 882, 137, 137, + 720, 137, 137, 137, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 158, 504, 302, 137, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 138, 167, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, + 950, 263, 167, 167, 553, 553, 553, 553, 553, 553, + + 699, 768, 701, 701, 701, 701, 701, 701, 701, 701, + 701, 701, 781, 781, 781, 781, 781, 782, 869, 553, + 553, 553, 553, 553, 553, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 987, 167, 778, 278, 554, + 554, 554, 554, 554, 554, 699, 806, 702, 702, 702, + 702, 702, 703, 700, 700, 700, 700, 798, 798, 798, + 798, 798, 799, 693, 553, 553, 553, 553, 553, 553, + 236, 236, 566, 236, 236, 567, 236, 236, 236, 236, + 1125, 1015, 263, 167, 236, 236, 236, 236, 236, 236, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, + + 699, 894, 700, 700, 700, 700, 700, 700, 917, 236, + 236, 236, 236, 236, 236, 470, 167, 471, 471, 471, + 471, 471, 471, 471, 471, 471, 471, 504, 302, 706, + 706, 706, 706, 706, 706, 1016, 167, 138, 1125, 607, 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, + 778, 888, 1012, 835, 263, 470, 167, 471, 471, 471, + 471, 471, 471, 471, 471, 471, 471, 1125, 909, 709, + 709, 709, 709, 709, 709, 709, 709, 709, 709, 747, + 748, 749, 747, 747, 747, 747, 747, 747, 747, 897, + 143, 263, 292, 897, 263, 590, 776, 591, 591, 591, + + 591, 591, 591, 591, 591, 591, 591, 645, 778, 646, + 646, 646, 646, 646, 646, 646, 646, 646, 646, 645, + 302, 646, 646, 646, 646, 646, 646, 646, 646, 646, + 646, 607, 724, 908, 138, 590, 724, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 167, 898, 729, + 504, 302, 959, 729, 960, 907, 1017, 810, 960, 725, + 735, 737, 607, 719, 735, 737, 666, 719, 667, 667, + 667, 667, 667, 667, 138, 590, 730, 593, 593, 593, + 593, 593, 594, 591, 591, 591, 591, 736, 738, 776, + 720, 758, 759, 760, 758, 758, 758, 758, 758, 758, + + 758, 859, 724, 729, 906, 263, 724, 729, 862, 862, + 862, 862, 862, 863, 138, 504, 302, 605, 605, 605, + 605, 605, 605, 605, 605, 605, 605, 506, 263, 725, + 730, 604, 604, 604, 604, 604, 604, 698, 698, 698, + 698, 698, 698, 698, 698, 698, 698, 822, 735, 737, + 719, 138, 735, 737, 719, 896, 604, 604, 604, 604, + 604, 604, 504, 302, 606, 606, 606, 606, 606, 606, + 606, 606, 606, 606, 607, 736, 738, 720, 608, 608, + 608, 608, 608, 608, 780, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 724, 729, 735, 955, 724, 729, + + 735, 895, 167, 608, 608, 608, 608, 608, 608, 302, + 612, 613, 614, 612, 612, 612, 612, 612, 612, 612, + 615, 725, 730, 736, 616, 616, 616, 616, 616, 616, + 1125, 302, 779, 779, 779, 779, 779, 779, 779, 779, + 779, 779, 708, 138, 504, 302, 278, 1030, 167, 616, + 616, 616, 616, 616, 616, 666, 708, 667, 667, 667, + 667, 667, 667, 667, 667, 667, 667, 788, 789, 790, + 788, 788, 788, 788, 788, 788, 788, 699, 1125, 700, + 700, 700, 700, 700, 700, 700, 700, 700, 700, 1051, + 859, 167, 918, 693, 263, 666, 502, 668, 668, 668, + + 668, 668, 668, 668, 668, 668, 668, 699, 900, 700, + 700, 700, 700, 700, 700, 700, 700, 700, 700, 717, + 717, 717, 717, 717, 717, 717, 717, 717, 717, 844, + 900, 138, 900, 901, 263, 666, 834, 669, 669, 669, + 669, 669, 670, 667, 667, 667, 667, 1125, 302, 504, + 302, 793, 793, 793, 793, 793, 793, 138, 1078, 708, + 1079, 708, 797, 797, 797, 797, 797, 797, 797, 797, + 797, 797, 737, 918, 263, 590, 737, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 1125, 831, 796, + 796, 796, 796, 796, 796, 796, 796, 796, 796, 738, + + 822, 823, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 1096, 138, 1079, 138, 590, 830, 591, 591, 591, + 591, 591, 591, 591, 591, 591, 591, 822, 824, 824, + 824, 824, 824, 824, 824, 824, 824, 824, 822, 825, + 825, 825, 825, 825, 826, 823, 823, 823, 823, 958, + 959, 828, 960, 958, 138, 694, 695, 696, 694, 694, + 694, 694, 694, 694, 694, 697, 217, 217, 217, 698, + 698, 698, 698, 698, 698, 979, 848, 849, 850, 851, + 848, 848, 848, 848, 848, 848, 769, 770, 770, 770, + 770, 770, 770, 827, 698, 698, 698, 698, 698, 698, + + 504, 302, 706, 706, 706, 706, 706, 706, 706, 706, + 706, 706, 607, 138, 263, 817, 705, 705, 705, 705, + 705, 705, 979, 816, 138, 853, 854, 855, 853, 853, + 853, 853, 853, 853, 853, 880, 880, 880, 880, 880, + 881, 705, 705, 705, 705, 705, 705, 504, 302, 707, + 707, 707, 707, 707, 707, 707, 707, 707, 707, 708, + 143, 263, 292, 709, 709, 709, 709, 709, 709, 787, + 787, 787, 787, 787, 787, 787, 787, 787, 787, 890, + 892, 886, 167, 890, 892, 886, 1031, 699, 709, 709, + 709, 709, 709, 709, 302, 713, 714, 715, 713, 713, + + 713, 713, 713, 713, 713, 716, 891, 893, 887, 717, + 717, 717, 717, 717, 717, 776, 138, 857, 857, 857, + 857, 857, 857, 961, 693, 138, 949, 778, 502, 504, + 302, 167, 401, 263, 717, 717, 717, 717, 717, 717, + 666, 708, 667, 667, 667, 667, 667, 667, 667, 667, + 667, 667, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 1125, 302, 860, 860, 860, 860, 860, 860, + 860, 860, 860, 860, 708, 1072, 1072, 1072, 1072, 263, + 666, 776, 667, 667, 667, 667, 667, 667, 667, 667, + 667, 667, 869, 859, 870, 870, 870, 870, 870, 870, + + 870, 870, 870, 870, 869, 302, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 795, 1059, 1086, 263, + 769, 770, 770, 770, 770, 770, 770, 770, 770, 770, + 770, 869, 263, 872, 872, 872, 872, 872, 873, 870, + 870, 870, 870, 504, 302, 803, 803, 803, 803, 803, + 803, 803, 803, 803, 803, 795, 263, 138, 138, 769, + 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + 1125, 302, 504, 302, 876, 876, 876, 876, 876, 876, + 263, 263, 795, 776, 795, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 933, 767, 138, 769, 772, + + 772, 772, 772, 772, 773, 770, 770, 770, 770, 1125, + 1125, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, 766, 933, 890, 892, 763, 776, 890, 892, 822, + 823, 823, 823, 823, 823, 823, 138, 776, 933, 777, + 777, 777, 777, 777, 777, 777, 777, 777, 777, 778, + 891, 893, 762, 779, 779, 779, 779, 779, 779, 902, + 903, 904, 905, 902, 902, 902, 902, 902, 902, 163, + 163, 163, 163, 167, 167, 163, 761, 163, 779, 779, + 779, 779, 779, 779, 783, 784, 785, 783, 783, 783, + 783, 783, 783, 783, 786, 217, 217, 217, 787, 787, + + 787, 787, 787, 787, 822, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 886, 890, 892, 756, 886, + 890, 892, 755, 787, 787, 787, 787, 787, 787, 504, + 302, 793, 793, 793, 793, 793, 793, 793, 793, 793, + 793, 708, 887, 891, 893, 792, 792, 792, 792, 792, + 792, 822, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 886, 278, 278, 278, 886, 752, 751, 750, + 792, 792, 792, 792, 792, 792, 504, 302, 794, 794, + 794, 794, 794, 794, 794, 794, 794, 794, 795, 887, + 645, 742, 796, 796, 796, 796, 796, 796, 910, 911, + + 912, 913, 910, 910, 910, 910, 910, 910, 835, 836, + 836, 836, 836, 836, 836, 741, 138, 796, 796, 796, + 796, 796, 796, 302, 800, 801, 802, 800, 800, 800, + 800, 800, 800, 800, 1102, 263, 138, 138, 803, 803, + 803, 803, 803, 803, 138, 924, 263, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 936, 936, 936, + 936, 936, 937, 803, 803, 803, 803, 803, 803, 137, + 890, 892, 137, 263, 890, 892, 958, 959, 137, 960, + 958, 137, 137, 1125, 137, 137, 137, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 891, 893, 693, + + 137, 167, 167, 167, 167, 167, 167, 167, 167, 805, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 138, 167, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 236, 502, 401, 776, 236, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 998, 236, + 401, 681, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 829, 247, 247, 680, 249, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + + 236, 236, 236, 236, 835, 836, 836, 836, 836, 836, + 836, 836, 836, 836, 836, 924, 679, 926, 926, 926, + 926, 926, 926, 926, 926, 926, 926, 924, 302, 927, + 927, 927, 927, 927, 928, 925, 925, 925, 925, 795, + 678, 677, 263, 835, 837, 837, 837, 837, 837, 837, + 837, 837, 837, 837, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 776, 1125, 931, 931, 931, 931, + 931, 931, 301, 301, 397, 397, 859, 998, 301, 676, + 397, 263, 835, 838, 838, 838, 838, 838, 839, 836, + 836, 836, 836, 935, 935, 935, 935, 935, 935, 935, + + 935, 935, 935, 1125, 900, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 504, 302, 496, 496, 776, + 263, 262, 675, 496, 262, 674, 900, 795, 900, 900, + 262, 998, 673, 262, 262, 672, 262, 262, 262, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 143, + 671, 292, 262, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 840, 278, 278, 278, 278, 263, 278, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 769, 770, 770, 770, 770, + + 770, 770, 770, 770, 770, 770, 943, 944, 945, 943, + 943, 943, 943, 943, 943, 943, 869, 1018, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, 1052, 143, + 660, 292, 1052, 138, 769, 770, 770, 770, 770, 770, + 770, 770, 770, 770, 770, 869, 659, 870, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 869, 658, 870, + 870, 870, 870, 870, 870, 1001, 1001, 1001, 1001, 1001, + 1002, 657, 138, 776, 656, 857, 857, 857, 857, 857, + 857, 857, 857, 857, 857, 778, 776, 655, 858, 858, + 858, 858, 858, 858, 858, 858, 858, 858, 859, 654, + + 653, 652, 860, 860, 860, 860, 860, 860, 504, 302, + 948, 948, 948, 948, 948, 948, 651, 951, 951, 951, + 1095, 951, 951, 951, 650, 1125, 1095, 860, 860, 860, + 860, 860, 860, 864, 865, 866, 864, 864, 864, 864, + 864, 864, 864, 867, 952, 952, 952, 868, 868, 868, + 868, 868, 868, 963, 1125, 497, 497, 963, 964, 965, + 966, 497, 1077, 1078, 963, 1079, 1077, 167, 963, 964, + 965, 966, 868, 868, 868, 868, 868, 868, 504, 302, + 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, + 795, 436, 640, 639, 875, 875, 875, 875, 875, 875, + + 1047, 1047, 1047, 1047, 1047, 1048, 970, 967, 971, 971, + 971, 971, 971, 971, 971, 971, 971, 971, 969, 875, + 875, 875, 875, 875, 875, 504, 302, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 1125, 599, 502, + 401, 878, 878, 878, 878, 878, 878, 970, 595, 972, + 972, 972, 972, 972, 972, 972, 972, 972, 972, 302, + 1007, 1007, 1007, 1007, 1007, 1007, 878, 878, 878, 878, + 878, 878, 137, 1125, 249, 137, 962, 249, 401, 249, + 164, 137, 962, 962, 137, 137, 962, 137, 137, 137, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + + 962, 962, 962, 137, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 883, 167, 167, 167, 138, 167, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 886, 584, 583, 924, + 886, 925, 925, 925, 925, 925, 925, 582, 236, 581, + 580, 579, 236, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 887, 236, 578, 577, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, + + 574, 249, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 835, + 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, + 970, 158, 973, 973, 973, 973, 973, 974, 975, 975, + 975, 975, 970, 565, 975, 975, 975, 971, 971, 971, + 971, 971, 971, 971, 564, 563, 562, 263, 835, 836, + 836, 836, 836, 836, 836, 836, 836, 836, 836, 918, + 561, 919, 919, 919, 919, 919, 919, 951, 560, 559, + 558, 951, 991, 992, 993, 991, 991, 991, 991, 991, + 991, 991, 501, 501, 1011, 1011, 263, 262, 501, 1013, + + 262, 1011, 249, 1013, 952, 249, 262, 249, 138, 262, + 262, 555, 262, 262, 262, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 1014, 447, 262, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 914, 278, 278, 278, + 278, 278, 263, 278, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 918, 436, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 545, 436, 544, 988, 989, 990, 988, + 988, 988, 988, 988, 988, 988, 924, 436, 925, 925, + + 925, 925, 925, 925, 925, 925, 925, 925, 543, 1125, + 138, 918, 1125, 920, 920, 920, 920, 920, 920, 920, + 920, 920, 920, 138, 924, 401, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 595, 595, 502, 401, + 138, 918, 595, 921, 921, 921, 921, 921, 922, 923, + 923, 923, 923, 776, 164, 996, 996, 996, 996, 996, + 996, 488, 487, 486, 485, 933, 1000, 1000, 1000, 1000, + 1000, 1000, 1000, 1000, 1000, 1000, 597, 597, 484, 483, + 138, 918, 597, 923, 923, 923, 919, 919, 919, 919, + + 919, 919, 919, 1125, 482, 999, 999, 999, 999, 999, + 999, 999, 999, 999, 999, 302, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 598, 598, 481, 480, + 138, 776, 598, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 859, 776, 479, 932, 932, 932, 932, + 932, 932, 932, 932, 932, 932, 933, 478, 477, 271, + 934, 934, 934, 934, 934, 934, 302, 1008, 1008, 1008, + 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1013, 469, 1077, + 1078, 1013, 1079, 1077, 465, 934, 934, 934, 934, 934, + 934, 938, 939, 940, 938, 938, 938, 938, 938, 938, + + 938, 941, 464, 463, 1014, 942, 942, 942, 942, 942, + 942, 302, 1009, 1009, 1009, 1009, 1009, 1010, 1007, 1007, + 1007, 1007, 1013, 690, 690, 462, 1013, 167, 461, 690, + 942, 942, 942, 942, 942, 942, 504, 302, 948, 948, + 948, 948, 948, 948, 948, 948, 948, 948, 979, 1014, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 1125, 1072, 460, 1072, 1125, 1125, 1125, 1125, 963, 1072, + 278, 459, 963, 964, 965, 966, 1021, 1022, 1023, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 458, 263, 979, 457, + 981, 981, 981, 981, 981, 981, 981, 981, 981, 981, + + 1125, 456, 691, 691, 1125, 964, 965, 966, 691, 455, + 454, 1125, 240, 444, 967, 1125, 1125, 1125, 966, 692, + 692, 441, 967, 774, 774, 692, 440, 263, 979, 774, + 982, 982, 982, 982, 982, 983, 984, 984, 984, 984, + 1019, 439, 438, 1020, 1020, 1020, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 431, 967, 1125, 430, 775, 775, 1125, + 1125, 1125, 1125, 775, 429, 967, 428, 263, 979, 427, + 984, 984, 984, 980, 980, 980, 980, 980, 980, 980, + 970, 426, 971, 971, 971, 971, 971, 971, 971, 971, + 971, 971, 423, 1125, 422, 249, 968, 1013, 249, 421, + + 249, 1013, 968, 968, 420, 419, 968, 263, 918, 969, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 968, 968, 968, 970, 1014, 971, 971, 971, 971, 971, + 971, 971, 971, 971, 971, 970, 418, 971, 971, 971, + 971, 971, 971, 852, 852, 417, 416, 138, 918, 852, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 415, 414, 413, 412, 164, 1026, 1027, 1028, 1026, 1026, + 1026, 1026, 1026, 1026, 1026, 979, 156, 980, 980, 980, + 980, 980, 980, 929, 929, 385, 384, 138, 776, 929, + 996, 996, 996, 996, 996, 996, 996, 996, 996, 996, + + 933, 776, 263, 997, 997, 997, 997, 997, 997, 997, + 997, 997, 997, 998, 263, 377, 376, 999, 999, 999, + 999, 999, 999, 1036, 375, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 1037, 1037, 1091, 1091, 1091, 1091, 1091, + 1091, 374, 999, 999, 999, 999, 999, 999, 1003, 1004, + 1005, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 373, 262, + 366, 267, 1006, 1006, 1006, 1006, 1006, 1006, 1036, 265, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1119, 1119, 1119, 1119, 1119, 1119, 263, 1006, 1006, 1006, + 1006, 1006, 1006, 979, 260, 980, 980, 980, 980, 980, + + 980, 980, 980, 980, 980, 1036, 365, 1039, 1039, 1039, + 1039, 1039, 1040, 1037, 1037, 1037, 1037, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1049, 994, 994, + 364, 1049, 263, 979, 994, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 776, 363, 1043, 1043, 1043, + 1043, 1043, 1043, 362, 1050, 355, 354, 998, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1041, 1041, + 353, 352, 263, 1031, 1041, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1125, 351, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 302, 1007, 1007, + + 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1007, 1125, 237, + 1049, 229, 138, 1031, 1049, 1033, 1033, 1033, 1033, 1033, + 1033, 1033, 1033, 1033, 1033, 302, 1007, 1007, 1007, 1007, + 1007, 1007, 1007, 1007, 1007, 1007, 224, 1050, 1049, 225, + 219, 1036, 1049, 1037, 1037, 1037, 1037, 1037, 1037, 219, + 184, 211, 138, 1031, 342, 1034, 1034, 1034, 1034, 1034, + 1035, 1032, 1032, 1032, 1032, 1050, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 249, 334, 167, 249, + 333, 249, 138, 776, 332, 1043, 1043, 1043, 1043, 1043, + + 1043, 1043, 1043, 1043, 1043, 998, 776, 331, 1044, 1044, + 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 330, 327, + 326, 325, 1045, 1045, 1045, 1045, 1045, 1045, 1053, 324, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 323, 1116, 1116, 1116, 1116, 1116, 1116, 1045, 1045, 1045, + 1045, 1045, 1045, 1053, 322, 1055, 1055, 1055, 1055, 1055, + 1055, 1055, 1055, 1055, 1055, 1053, 314, 1056, 1056, 1056, + 1056, 1056, 1057, 1054, 1054, 1054, 1054, 1059, 138, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 313, + 312, 1049, 311, 310, 309, 1049, 1065, 1066, 1067, 1065, + + 1065, 1065, 1065, 1065, 1065, 1065, 1031, 308, 1032, 1032, + 1032, 1032, 1032, 1032, 307, 164, 263, 1059, 1050, 1061, + 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 137, + 164, 1074, 239, 138, 152, 1074, 1071, 1071, 150, 278, + 143, 141, 1071, 138, 286, 138, 1068, 1069, 1070, 1068, + 1068, 1068, 1068, 1068, 1068, 1068, 263, 1059, 1075, 1062, + 1062, 1062, 1062, 1062, 1063, 1060, 1060, 1060, 1060, 1036, + 285, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1036, 284, 1037, 1037, 1037, 1037, 1037, 1037, 1037, + 1037, 1037, 1037, 283, 1074, 282, 263, 1031, 1074, 1032, + + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 776, + 278, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, + 1073, 1075, 1074, 267, 263, 1053, 1074, 1054, 1054, 1054, + 1054, 1054, 1054, 260, 256, 255, 138, 1031, 254, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1075, + 1080, 1081, 1082, 1080, 1080, 1080, 1080, 1080, 1080, 1080, + 1053, 253, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 1054, 1054, 167, 252, 247, 1053, 138, 1054, 1054, 1054, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1083, 1084, 1085, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 225, 1059, 219, + + 1060, 1060, 1060, 1060, 1060, 1060, 211, 140, 177, 208, + 174, 1074, 200, 198, 1097, 1074, 1098, 1098, 1098, 1098, + 1098, 1098, 180, 179, 263, 1059, 176, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 263, 1075, 1091, + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 278, + 175, 167, 164, 152, 263, 1059, 141, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1093, 1093, 1093, + 1093, 1093, 1094, 1091, 1091, 1091, 1091, 1097, 140, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 138, + + 1125, 1125, 1125, 1125, 263, 1086, 1125, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1097, 1125, 1099, + 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1097, + 1125, 1100, 1100, 1100, 1100, 1100, 1101, 1098, 1098, 1098, + 1098, 1125, 1125, 1125, 138, 1086, 1125, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1125, 1125, 1125, + 1107, 1108, 1109, 1107, 1107, 1107, 1107, 1107, 1107, 1107, + 1086, 1125, 1087, 1087, 1087, 1087, 1087, 1087, 1125, 1125, + 1125, 1125, 1125, 1125, 138, 1086, 1125, 1089, 1089, 1089, + 1089, 1089, 1090, 1087, 1087, 1087, 1087, 138, 1091, 1091, + + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1125, 138, + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, + 1125, 1125, 1125, 1125, 138, 1102, 1125, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1110, 1111, 1112, + 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1097, 1125, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1125, + 1125, 1125, 1125, 1125, 263, 1102, 1125, 1104, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1097, 1125, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1113, + 1114, 1115, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1125, + + 1125, 1125, 1125, 1125, 263, 1102, 1125, 1105, 1105, 1105, + 1105, 1105, 1106, 1103, 1103, 1103, 1103, 1125, 1102, 1125, + 1103, 1103, 1103, 1103, 1103, 1103, 263, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1125, 1122, 1122, + 1122, 1122, 1122, 1122, 263, 1086, 1125, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 263, 1125, 1125, + 1125, 1125, 1125, 1125, 138, 1107, 1107, 1107, 1107, 1107, + 1107, 1107, 1107, 1107, 1107, 263, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 138, 1086, 1125, 1087, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1125, 1125, 1125, + + 1125, 1125, 138, 1117, 1117, 1117, 1117, 1117, 1118, 1116, + 1116, 1116, 1116, 1119, 1119, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1119, 1125, 138, 1102, 1125, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1125, 1125, 1125, + 138, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, + 1110, 1120, 1120, 1120, 1120, 1120, 1121, 1119, 1119, 1119, + 1119, 1125, 1125, 1125, 263, 1102, 1125, 1103, 1103, 1103, + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1122, 1122, 1122, + 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1113, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 263, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 263, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 263, 1123, 1123, 1123, 1123, 1123, + 1124, 1122, 1122, 1122, 1122, 1116, 1116, 1116, 1116, 1116, + 1116, 1116, 1116, 1116, 1116, 1119, 1119, 1119, 1119, 1119, + 1119, 1119, 1119, 1119, 1119, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 263, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 138, 1122, 1122, 1122, 1122, 1122, 1122, 1122, + 1122, 1122, 1122, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 263, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 113, 113, 113, 113, 113, 113, 113, 113, 113, + + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 137, 1125, 1125, 137, 1125, 1125, 1125, 1125, 137, + 1125, 137, 137, 137, 1125, 1125, 137, 137, 137, 137, + 137, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 147, 1125, 1125, 147, 1125, 1125, 147, 1125, 147, + 1125, 147, 147, 147, 147, 1125, 147, 147, 147, 147, + 147, 151, 1125, 1125, 151, 1125, 1125, 1125, 1125, 151, + 1125, 151, 151, 151, 1125, 1125, 151, 151, 151, 151, + 151, 153, 1125, 1125, 153, 153, 153, 1125, 153, 153, + + 1125, 153, 153, 153, 1125, 1125, 153, 153, 153, 153, + 153, 205, 1125, 1125, 205, 205, 205, 1125, 205, 205, + 1125, 205, 205, 205, 1125, 1125, 205, 205, 205, 205, + 205, 210, 1125, 1125, 210, 210, 210, 1125, 210, 210, + 1125, 210, 210, 210, 1125, 210, 210, 1125, 210, 210, + 210, 218, 1125, 1125, 218, 218, 1125, 1125, 218, 218, + 1125, 218, 218, 218, 218, 1125, 218, 218, 218, 218, + 218, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, + 222, 224, 224, 1125, 224, 224, 1125, 224, 224, 224, + + 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, + 224, 231, 1125, 1125, 231, 1125, 1125, 231, 1125, 231, + 1125, 231, 231, 231, 231, 1125, 231, 231, 231, 231, + 231, 235, 1125, 1125, 235, 1125, 1125, 1125, 1125, 235, + 1125, 235, 235, 235, 1125, 235, 235, 235, 235, 235, + 235, 238, 1125, 1125, 238, 238, 238, 1125, 238, 238, + 1125, 238, 238, 238, 1125, 238, 238, 238, 238, 238, + 238, 259, 1125, 1125, 1125, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 262, 1125, 1125, 262, 1125, 1125, 1125, 1125, 262, + + 1125, 262, 262, 262, 1125, 1125, 262, 262, 262, 262, + 262, 264, 1125, 1125, 264, 1125, 1125, 264, 1125, 264, + 1125, 264, 264, 264, 264, 1125, 264, 264, 264, 264, + 264, 266, 1125, 1125, 266, 1125, 1125, 1125, 1125, 266, + 1125, 266, 266, 266, 1125, 1125, 266, 266, 266, 266, + 266, 268, 1125, 1125, 268, 268, 268, 1125, 268, 268, + 1125, 268, 268, 268, 1125, 1125, 268, 268, 268, 268, + 268, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 293, 293, 1125, 293, 293, 293, 293, 293, 293, - 734, 735, 736, 737, 734, 734, 734, 734, 734, 734, - 667, 668, 668, 668, 668, 668, 668, 668, 668, 668, - 668, 667, 668, 668, 668, 668, 668, 668, 668, 668, - 668, 668, 742, 382, 743, 743, 743, 743, 743, 743, - 743, 743, 743, 743, 748, 381, 749, 749, 749, 749, - 749, 749, 749, 749, 749, 749, 748, 380, 750, 750, - 750, 750, 750, 750, 750, 750, 750, 750, 379, 378, - 377, 115, 742, 376, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 748, 375, 751, 751, 751, 751, - 751, 752, 749, 749, 749, 749, 700, 700, 700, 700, - - 700, 700, 700, 700, 700, 700, 718, 215, 365, 362, - 718, 115, 742, 361, 745, 745, 745, 745, 745, 746, - 747, 747, 747, 747, 621, 360, 755, 755, 755, 755, - 755, 755, 359, 719, 352, 351, 691, 759, 759, 759, - 759, 759, 759, 759, 759, 759, 759, 350, 349, 348, - 347, 115, 742, 344, 747, 747, 747, 743, 743, 743, - 743, 743, 743, 743, 915, 343, 758, 758, 758, 758, - 758, 758, 758, 758, 758, 758, 767, 768, 769, 767, - 767, 767, 767, 767, 767, 767, 881, 882, 342, 883, - 881, 115, 621, 341, 755, 755, 755, 755, 755, 755, - - 755, 755, 755, 755, 691, 621, 340, 756, 756, 756, - 756, 756, 756, 756, 756, 756, 756, 757, 339, 338, - 337, 758, 758, 758, 758, 758, 758, 701, 336, 702, - 702, 702, 702, 702, 702, 702, 702, 702, 702, 857, - 857, 857, 857, 857, 858, 335, 758, 758, 758, 758, - 758, 758, 762, 763, 764, 762, 762, 762, 762, 762, - 762, 762, 765, 334, 141, 133, 766, 766, 766, 766, - 766, 766, 701, 235, 702, 702, 702, 702, 702, 702, - 702, 702, 702, 702, 722, 724, 309, 308, 722, 724, - 307, 766, 766, 766, 766, 766, 766, 402, 248, 772, - - 772, 772, 772, 772, 772, 772, 772, 772, 772, 787, - 306, 723, 725, 787, 788, 789, 790, 787, 299, 298, - 297, 787, 788, 789, 790, 794, 296, 795, 795, 795, - 795, 795, 795, 795, 795, 795, 795, 794, 295, 796, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 794, - 915, 797, 797, 797, 797, 797, 798, 799, 799, 799, - 799, 775, 212, 791, 204, 775, 199, 200, 194, 194, - 794, 793, 799, 799, 799, 795, 795, 795, 795, 795, - 795, 795, 892, 892, 892, 892, 892, 892, 776, 803, - 804, 805, 803, 803, 803, 803, 803, 803, 803, 159, - - 742, 186, 743, 743, 743, 743, 743, 743, 806, 807, - 808, 806, 806, 806, 806, 806, 806, 806, 748, 286, - 749, 749, 749, 749, 749, 749, 115, 742, 278, 743, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 115, - 748, 277, 749, 749, 749, 749, 749, 749, 749, 749, - 749, 749, 748, 276, 749, 749, 749, 749, 749, 749, - 749, 749, 749, 749, 275, 274, 115, 742, 271, 743, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 766, - 766, 766, 766, 766, 766, 766, 766, 766, 766, 621, - 270, 811, 811, 811, 811, 811, 811, 269, 268, 267, - - 266, 757, 258, 257, 256, 255, 115, 621, 254, 811, - 811, 811, 811, 811, 811, 811, 811, 811, 811, 757, - 621, 253, 812, 812, 812, 812, 812, 812, 812, 812, - 812, 812, 813, 141, 114, 141, 814, 814, 814, 814, - 814, 814, 815, 815, 815, 815, 815, 815, 815, 815, - 815, 815, 775, 828, 214, 129, 775, 828, 120, 118, - 115, 814, 814, 814, 814, 814, 814, 818, 819, 820, - 818, 818, 818, 818, 818, 818, 818, 235, 231, 776, - 829, 821, 821, 821, 821, 821, 821, 915, 230, 814, - 814, 814, 814, 814, 814, 814, 814, 814, 814, 248, - - 822, 822, 822, 822, 822, 822, 821, 821, 821, 821, - 821, 821, 248, 822, 822, 822, 822, 822, 822, 822, - 822, 822, 822, 248, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 248, 824, 824, 824, 824, 824, - 825, 822, 822, 822, 822, 915, 229, 228, 227, 915, - 915, 915, 915, 787, 222, 200, 194, 787, 788, 789, - 790, 915, 186, 117, 152, 915, 788, 789, 790, 915, - 183, 149, 175, 915, 915, 915, 790, 834, 173, 155, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 154, 915, 151, 150, 786, 144, 141, 129, 828, 791, - - 786, 786, 828, 118, 786, 915, 117, 791, 115, 915, - 915, 915, 915, 915, 915, 791, 915, 915, 786, 786, - 786, 915, 915, 791, 792, 829, 915, 915, 828, 859, - 792, 792, 828, 859, 792, 836, 837, 838, 836, 836, - 836, 836, 836, 836, 836, 915, 915, 915, 792, 792, - 792, 915, 915, 915, 915, 829, 860, 915, 794, 793, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 794, 915, 795, 795, 795, 795, 795, 795, 795, 795, - 795, 795, 794, 915, 795, 795, 795, 795, 795, 795, - 841, 915, 842, 842, 842, 842, 842, 842, 842, 842, - - 842, 842, 846, 915, 847, 847, 847, 847, 847, 847, - 847, 847, 847, 847, 846, 915, 848, 848, 848, 848, - 848, 848, 848, 848, 848, 848, 915, 915, 915, 115, - 841, 915, 843, 843, 843, 843, 843, 843, 843, 843, - 843, 843, 846, 915, 849, 849, 849, 849, 849, 850, - 847, 847, 847, 847, 821, 821, 821, 821, 821, 821, - 821, 821, 821, 821, 859, 915, 915, 915, 859, 115, - 841, 915, 844, 844, 844, 844, 844, 845, 842, 842, - 842, 842, 621, 915, 853, 853, 853, 853, 853, 853, - 915, 860, 915, 915, 813, 856, 856, 856, 856, 856, - - 856, 856, 856, 856, 856, 915, 915, 915, 915, 115, - 621, 915, 853, 853, 853, 853, 853, 853, 853, 853, - 853, 853, 813, 621, 915, 854, 854, 854, 854, 854, - 854, 854, 854, 854, 854, 915, 915, 915, 915, 855, - 855, 855, 855, 855, 855, 915, 915, 855, 855, 855, - 855, 855, 855, 855, 855, 855, 855, 912, 912, 912, - 912, 912, 912, 915, 855, 855, 855, 855, 855, 855, - 248, 822, 822, 822, 822, 822, 822, 822, 822, 822, - 822, 248, 822, 822, 822, 822, 822, 822, 822, 822, - 822, 822, 835, 835, 835, 835, 835, 835, 835, 835, - - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 863, 915, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 863, 915, 865, 865, 865, 865, - 865, 865, 865, 865, 865, 865, 863, 915, 866, 866, - 866, 866, 866, 867, 864, 864, 864, 864, 869, 870, - 871, 869, 869, 869, 869, 869, 869, 869, 915, 841, - 915, 842, 842, 842, 842, 842, 842, 872, 873, 874, - 872, 872, 872, 872, 872, 872, 872, 846, 915, 847, - 847, 847, 847, 847, 847, 115, 841, 915, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, 115, 846, - - 915, 847, 847, 847, 847, 847, 847, 847, 847, 847, - 847, 846, 915, 847, 847, 847, 847, 847, 847, 847, - 847, 847, 847, 859, 915, 115, 841, 859, 842, 842, - 842, 842, 842, 842, 842, 842, 842, 842, 621, 915, - 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, - 860, 878, 915, 915, 863, 878, 864, 864, 864, 864, - 864, 864, 915, 915, 915, 115, 884, 885, 886, 884, - 884, 884, 884, 884, 884, 884, 915, 863, 879, 864, - 864, 864, 864, 864, 864, 864, 864, 864, 864, 863, - 915, 864, 864, 864, 864, 864, 864, 864, 864, 864, - - 864, 878, 915, 915, 915, 878, 892, 892, 892, 892, - 892, 892, 892, 892, 892, 892, 893, 893, 893, 893, - 893, 893, 893, 893, 893, 893, 878, 915, 879, 887, - 878, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 894, 894, 894, 894, 894, 895, 892, 892, 892, - 892, 915, 898, 879, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 899, 915, 915, 915, 915, 115, 887, - 915, 889, 889, 889, 889, 889, 889, 889, 889, 889, - 889, 898, 915, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 898, 915, 901, 901, 901, 901, 901, - - 902, 899, 899, 899, 899, 915, 915, 915, 115, 887, - 915, 890, 890, 890, 890, 890, 891, 888, 888, 888, - 888, 903, 904, 905, 903, 903, 903, 903, 903, 903, - 903, 915, 887, 915, 888, 888, 888, 888, 888, 888, - 898, 915, 899, 899, 899, 899, 899, 899, 115, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 115, 887, - 915, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 115, 892, 892, 892, 892, 892, 892, 892, 892, - 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, - 892, 892, 915, 915, 915, 915, 915, 915, 115, 887, - - 915, 888, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 906, 907, 908, 906, 906, 906, 906, 906, 906, - 906, 898, 915, 899, 899, 899, 899, 899, 899, 899, - 899, 899, 899, 915, 915, 915, 915, 898, 115, 899, - 899, 899, 899, 899, 899, 899, 899, 899, 899, 909, - 909, 909, 909, 909, 909, 909, 909, 909, 909, 903, - 903, 903, 903, 903, 903, 903, 903, 903, 903, 910, - 910, 910, 910, 910, 911, 909, 909, 909, 909, 915, - 915, 915, 915, 915, 915, 915, 115, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 115, 915, 915, 915, - - 915, 915, 915, 915, 915, 915, 115, 912, 912, 912, - 912, 912, 912, 912, 912, 912, 912, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 913, 913, 913, - 913, 913, 914, 912, 912, 912, 912, 909, 909, 909, - 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, - 909, 909, 909, 912, 912, 912, 912, 912, 912, 912, - 912, 912, 912, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 115, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 115, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - - 68, 68, 68, 68, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 114, 915, 915, 114, 915, 915, 915, 915, 915, 114, - 114, 114, 915, 915, 114, 114, 114, 114, 114, 119, - - 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 119, 119, 124, 915, - 915, 124, 915, 915, 124, 915, 915, 124, 124, 124, - 124, 915, 124, 124, 124, 124, 124, 128, 915, 915, - 128, 915, 915, 915, 915, 915, 128, 128, 128, 915, - 915, 128, 128, 128, 128, 128, 130, 915, 915, 130, - 130, 130, 915, 130, 915, 130, 130, 130, 915, 915, - 130, 130, 130, 130, 130, 140, 140, 915, 915, 915, - 915, 140, 180, 915, 915, 180, 180, 180, 915, 180, - 915, 180, 180, 180, 915, 915, 180, 180, 180, 180, - - 180, 185, 915, 915, 185, 185, 185, 915, 185, 915, - 185, 185, 185, 915, 185, 185, 915, 185, 185, 185, - 192, 192, 192, 193, 915, 915, 193, 193, 915, 915, - 193, 915, 193, 193, 193, 193, 915, 193, 193, 193, - 193, 193, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 199, 199, 915, 199, 199, 915, 199, 199, 199, - 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, - 206, 915, 915, 206, 915, 915, 206, 915, 915, 206, - 206, 206, 206, 915, 206, 206, 206, 206, 206, 210, - - 915, 915, 210, 915, 915, 915, 915, 915, 210, 210, - 210, 915, 210, 210, 210, 210, 210, 210, 213, 915, - 915, 213, 213, 213, 915, 213, 915, 213, 213, 213, - 915, 213, 213, 213, 213, 213, 213, 234, 915, 915, - 915, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 234, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, 239, 239, 915, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 131, 915, 915, 131, 131, 131, - - 915, 131, 915, 131, 131, 131, 915, 915, 131, 131, - 131, 131, 131, 140, 140, 915, 915, 915, 915, 140, - 247, 247, 915, 915, 915, 915, 247, 249, 249, 249, - 915, 915, 915, 915, 249, 180, 915, 915, 180, 180, - 180, 915, 180, 915, 180, 180, 180, 915, 915, 180, - 180, 180, 180, 180, 181, 915, 915, 181, 181, 181, - 915, 181, 915, 181, 181, 181, 915, 915, 181, 181, - 181, 181, 181, 185, 915, 915, 185, 185, 185, 915, - 185, 915, 185, 185, 185, 915, 185, 185, 915, 185, - 185, 185, 192, 192, 192, 193, 915, 915, 193, 193, - - 915, 915, 193, 915, 193, 193, 193, 193, 915, 193, - 193, 193, 193, 193, 199, 199, 915, 199, 199, 915, - 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, - 199, 199, 199, 209, 915, 915, 209, 915, 915, 915, - 915, 915, 209, 209, 209, 915, 915, 209, 209, 209, - 209, 209, 210, 915, 915, 210, 915, 915, 915, 915, - 915, 210, 210, 210, 915, 210, 210, 210, 210, 210, - 210, 213, 915, 915, 213, 213, 213, 915, 213, 915, - 213, 213, 213, 915, 213, 213, 213, 213, 213, 213, - 224, 915, 915, 224, 915, 224, 234, 915, 915, 915, - - 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, - 234, 234, 234, 234, 234, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 319, 319, 915, 915, 915, 915, - 319, 325, 325, 325, 915, 915, 915, 915, 325, 394, - 394, 915, 915, 915, 915, 394, 395, 395, 915, 915, - 915, 915, 395, 399, 399, 915, 915, 915, 915, 399, - 401, 401, 401, 915, 915, 915, 915, 401, 224, 915, - 915, 224, 915, 224, 473, 473, 915, 915, 915, 915, - 473, 475, 475, 915, 915, 915, 915, 475, 476, 476, - - 915, 915, 915, 915, 476, 478, 478, 478, 915, 915, - 915, 915, 478, 482, 482, 482, 482, 915, 915, 915, - 915, 482, 546, 546, 915, 915, 915, 915, 546, 547, - 547, 915, 915, 915, 915, 547, 548, 548, 915, 915, - 915, 915, 548, 560, 560, 560, 915, 915, 915, 915, - 560, 561, 561, 561, 561, 915, 915, 915, 915, 561, - 619, 619, 915, 915, 915, 915, 619, 620, 620, 915, - 915, 915, 915, 620, 636, 636, 636, 915, 915, 915, - 915, 636, 637, 637, 637, 637, 915, 915, 915, 915, - 637, 684, 684, 915, 915, 915, 915, 684, 688, 915, - - 688, 688, 915, 915, 915, 915, 688, 706, 706, 706, - 915, 915, 915, 915, 706, 707, 707, 707, 707, 915, - 915, 915, 915, 707, 753, 753, 915, 915, 915, 915, - 753, 754, 915, 754, 754, 915, 915, 915, 915, 754, - 770, 770, 770, 915, 915, 915, 915, 770, 771, 771, - 771, 915, 915, 915, 915, 915, 771, 781, 781, 781, - 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, - 781, 781, 781, 781, 781, 781, 786, 786, 915, 786, - 786, 786, 786, 915, 915, 786, 786, 786, 915, 915, - 786, 786, 786, 786, 786, 792, 792, 915, 792, 792, - - 792, 792, 915, 915, 792, 792, 792, 915, 915, 792, - 792, 792, 792, 792, 809, 809, 915, 915, 915, 915, - 809, 810, 915, 810, 810, 915, 915, 915, 915, 810, - 826, 826, 915, 915, 915, 915, 915, 826, 851, 851, - 915, 915, 915, 915, 851, 852, 915, 852, 852, 915, - 915, 915, 915, 852, 875, 875, 915, 915, 915, 915, - 875, 876, 915, 876, 915, 915, 915, 915, 915, 876, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, - 880, 880, 880, 880, 880, 880, 880, 880, 880, 17, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915 + 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 293, 147, 1125, 1125, 147, 1125, 1125, 1125, 1125, 147, + 1125, 147, 147, 147, 1125, 1125, 147, 147, 147, 147, + 147, 151, 1125, 1125, 151, 1125, 1125, 1125, 1125, 151, + 1125, 151, 151, 151, 1125, 1125, 151, 151, 151, 151, + 151, 153, 1125, 1125, 153, 153, 153, 1125, 153, 153, + 1125, 153, 153, 153, 1125, 1125, 153, 153, 153, 153, + 153, 154, 1125, 1125, 154, 154, 154, 1125, 154, 154, + 1125, 154, 154, 154, 1125, 1125, 154, 154, 154, 154, + 154, 303, 303, 303, 1125, 1125, 1125, 1125, 303, 205, + + 1125, 1125, 205, 205, 205, 1125, 205, 205, 1125, 205, + 205, 205, 1125, 1125, 205, 205, 205, 205, 205, 206, + 1125, 1125, 206, 206, 206, 1125, 206, 206, 1125, 206, + 206, 206, 1125, 1125, 206, 206, 206, 206, 206, 210, + 1125, 1125, 210, 210, 210, 1125, 210, 210, 1125, 210, + 210, 210, 1125, 210, 210, 1125, 210, 210, 210, 218, + 1125, 1125, 218, 218, 1125, 1125, 218, 218, 1125, 218, + 218, 218, 218, 1125, 218, 218, 218, 218, 218, 224, + 224, 1125, 224, 224, 1125, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, 224, 234, + + 1125, 1125, 234, 1125, 1125, 1125, 1125, 234, 1125, 234, + 234, 234, 1125, 1125, 234, 234, 234, 234, 234, 235, + 1125, 1125, 235, 1125, 1125, 1125, 1125, 235, 1125, 235, + 235, 235, 1125, 235, 235, 235, 235, 235, 235, 236, + 1125, 1125, 236, 236, 1125, 236, 236, 1125, 1125, 236, + 236, 238, 1125, 1125, 238, 238, 238, 1125, 238, 238, + 1125, 238, 238, 238, 1125, 238, 238, 238, 238, 238, + 238, 259, 1125, 1125, 1125, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 262, 1125, 1125, 262, 1125, 1125, 1125, 1125, 262, + + 1125, 262, 262, 262, 1125, 1125, 262, 262, 262, 262, + 262, 264, 1125, 1125, 264, 1125, 1125, 1125, 1125, 264, + 1125, 264, 264, 264, 1125, 1125, 264, 264, 264, 264, + 264, 266, 1125, 1125, 266, 1125, 1125, 1125, 1125, 266, + 1125, 266, 266, 266, 1125, 1125, 266, 266, 266, 266, + 266, 268, 1125, 1125, 268, 268, 268, 1125, 268, 268, + 1125, 268, 268, 268, 1125, 1125, 268, 268, 268, 268, + 268, 269, 1125, 1125, 269, 269, 269, 1125, 269, 269, + 1125, 269, 269, 269, 1125, 1125, 269, 269, 269, 269, + 269, 291, 291, 291, 291, 291, 291, 291, 291, 291, + + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 403, 403, 403, 1125, 1125, 1125, 1125, 403, 503, + 503, 503, 1125, 1125, 1125, 1125, 503, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 600, 600, 600, + 1125, 1125, 1125, 1125, 600, 604, 604, 604, 604, 1125, + 1125, 1125, 1125, 604, 704, 704, 704, 1125, 1125, 1125, + 1125, 704, 705, 705, 705, 705, 1125, 1125, 1125, 1125, + + 705, 791, 791, 791, 1125, 1125, 1125, 1125, 791, 792, + 792, 792, 792, 1125, 1125, 1125, 1125, 792, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 236, 1125, + 1125, 236, 236, 1125, 236, 236, 1125, 1125, 236, 236, + 856, 1125, 856, 856, 1125, 1125, 1125, 1125, 856, 874, + 874, 874, 1125, 1125, 1125, 1125, 874, 875, 875, 875, + 875, 1125, 1125, 1125, 1125, 875, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 236, 1125, 1125, 236, + + 236, 1125, 236, 236, 1125, 1125, 236, 236, 262, 1125, + 1125, 262, 1125, 1125, 1125, 1125, 262, 1125, 262, 262, + 262, 1125, 1125, 262, 262, 262, 262, 262, 930, 1125, + 930, 930, 1125, 1125, 1125, 1125, 930, 946, 946, 946, + 1125, 1125, 1125, 1125, 946, 947, 947, 947, 1125, 1125, + 1125, 1125, 1125, 947, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + 957, 957, 957, 957, 962, 962, 1125, 962, 962, 962, + 962, 1125, 962, 1125, 962, 962, 962, 1125, 1125, 962, + 962, 962, 962, 962, 968, 968, 1125, 968, 968, 968, + + 968, 1125, 968, 1125, 968, 968, 968, 1125, 1125, 968, + 968, 968, 968, 968, 995, 1125, 995, 995, 1125, 1125, + 1125, 1125, 995, 1042, 1125, 1042, 1042, 1125, 1125, 1125, + 1125, 1042, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, + 1076, 1076, 19, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125 } ; -static yyconst flex_int16_t yy_chk[6165] = +static yyconst flex_int16_t yy_chk[8328] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1470,677 +1781,915 @@ static yyconst flex_int16_t yy_chk[6165] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 19, 909, 40, 2, 19, - 25, 2, 5, 5, 37, 5, 5, 5, 40, 5, - 41, 43, 49, 41, 37, 5, 43, 55, 6, 6, + 1, 1, 1, 1, 2, 21, 49, 43, 2, 21, + 27, 2, 5, 5, 39, 5, 5, 5, 43, 5, + 52, 49, 46, 42, 39, 5, 42, 46, 6, 6, - 25, 6, 6, 6, 46, 6, 49, 2, 2, 5, - 5, 6, 2, 33, 33, 33, 33, 33, 33, 46, - 2, 58, 55, 2, 3, 6, 6, 25, 3, 11, + 27, 6, 6, 6, 52, 6, 42, 2, 2, 5, + 5, 6, 2, 35, 35, 35, 35, 35, 35, 44, + 2, 61, 44, 2, 3, 6, 6, 27, 3, 11, 11, 3, 11, 11, 11, 11, 5, 3, 12, 12, - 3, 12, 12, 12, 12, 56, 62, 86, 615, 58, - 62, 86, 6, 52, 3, 15, 15, 15, 15, 15, - 15, 15, 52, 80, 56, 3, 119, 3, 119, 3, - 3, 52, 3, 16, 16, 16, 16, 16, 16, 16, - 30, 30, 99, 11, 30, 30, 615, 60, 67, 80, - 87, 60, 12, 99, 3, 4, 82, 67, 899, 4, - - 60, 86, 4, 162, 30, 162, 67, 100, 4, 15, - 100, 4, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 82, 163, 109, 4, 53, 16, 163, 30, - 53, 76, 76, 109, 76, 76, 4, 160, 4, 87, - 4, 4, 51, 4, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 84, 84, 90, 84, 84, 53, - 53, 237, 877, 237, 53, 4, 7, 7, 111, 7, - 7, 7, 53, 7, 61, 53, 90, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 116, 175, 141, - 160, 116, 63, 63, 175, 364, 63, 63, 89, 89, - - 141, 89, 89, 90, 89, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 177, 63, 111, 364, 177, + 3, 12, 12, 12, 12, 83, 65, 59, 103, 61, + 65, 103, 6, 127, 3, 165, 127, 3, 15, 15, + 15, 15, 15, 15, 15, 3, 59, 3, 165, 3, + 3, 83, 3, 16, 16, 16, 16, 16, 16, 16, + 32, 32, 55, 11, 32, 32, 185, 70, 90, 1122, + 102, 55, 12, 63, 3, 4, 70, 63, 85, 4, + + 55, 102, 4, 89, 32, 70, 63, 89, 4, 329, + 197, 4, 15, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 329, 85, 4, 56, 16, 4, 32, + 56, 79, 79, 114, 79, 79, 4, 90, 4, 185, + 4, 4, 54, 4, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 93, 58, 197, 89, 58, 56, + 56, 142, 198, 142, 56, 4, 7, 7, 58, 7, + 7, 7, 56, 7, 93, 56, 87, 87, 198, 87, + 87, 64, 114, 58, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 92, 92, 569, 92, 92, 569, + + 92, 93, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 98, 98, 98, 98, 98, 98, 321, 321, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, - 8, 63, 8, 8, 8, 172, 8, 95, 95, 95, - 95, 95, 95, 139, 139, 139, 139, 139, 139, 875, - 74, 74, 179, 74, 74, 74, 179, 74, 238, 173, - 238, 74, 107, 74, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 170, 173, 170, 74, 74, 864, - 202, 172, 354, 8, 8, 8, 8, 8, 8, 8, + 8, 118, 8, 8, 8, 110, 8, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 126, 112, 139, + 164, 118, 187, 139, 187, 66, 66, 112, 126, 66, + 66, 164, 227, 116, 116, 1116, 116, 116, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 118, 66, + 336, 336, 287, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 9, 9, 74, 9, 9, 9, 9, 9, - 91, 354, 124, 91, 9, 9, 9, 515, 142, 91, - 113, 113, 91, 113, 113, 91, 91, 515, 184, 202, - 9, 142, 124, 184, 126, 236, 239, 855, 239, 91, - 170, 91, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 206, 273, 126, 174, 9, 10, 10, 124, - 10, 10, 10, 10, 10, 91, 91, 273, 174, 10, - 10, 10, 206, 284, 113, 284, 115, 115, 115, 115, - 115, 126, 115, 115, 236, 10, 115, 123, 123, 123, - - 123, 123, 123, 123, 123, 123, 123, 151, 151, 206, - 115, 115, 115, 151, 151, 265, 265, 151, 854, 151, - 151, 10, 13, 13, 13, 13, 13, 13, 13, 13, + 8, 8, 9, 9, 66, 9, 9, 9, 9, 9, + 289, 227, 289, 199, 9, 9, 9, 116, 77, 77, + 330, 77, 77, 77, 94, 77, 199, 94, 330, 77, + 9, 77, 136, 94, 149, 287, 94, 188, 343, 94, + 94, 136, 188, 120, 120, 77, 77, 120, 120, 291, + 136, 291, 343, 94, 149, 94, 9, 10, 10, 200, + 10, 10, 10, 10, 10, 200, 292, 120, 292, 10, + 10, 10, 77, 123, 123, 123, 123, 123, 123, 94, + 94, 149, 396, 183, 183, 10, 183, 183, 293, 415, + + 293, 135, 120, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 162, 162, 162, 162, 162, 162, 396, + 415, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 24, 852, 24, 133, - - 133, 133, 133, 133, 133, 133, 133, 133, 133, 24, - 280, 280, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 31, 355, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 249, 133, 274, 31, 31, - 31, 31, 31, 31, 125, 274, 249, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 171, 851, 355, - 283, 31, 171, 31, 31, 31, 31, 31, 31, 38, - 171, 847, 38, 127, 127, 127, 127, 283, 38, 127, - 127, 38, 38, 127, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 127, 127, - - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 311, 438, 311, 42, 42, 42, - 42, 42, 42, 285, 840, 158, 158, 42, 158, 158, - 201, 204, 130, 130, 201, 204, 130, 130, 285, 312, - 318, 312, 42, 42, 42, 42, 42, 42, 50, 50, - 438, 50, 50, 50, 50, 50, 130, 50, 50, 709, - - 709, 50, 129, 129, 129, 129, 129, 318, 129, 129, - 161, 161, 129, 161, 161, 50, 50, 50, 54, 176, - 54, 130, 831, 176, 201, 281, 129, 129, 129, 235, - 281, 54, 176, 235, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 161, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 187, 187, 387, 187, 187, - 387, 54, 75, 235, 75, 251, 180, 180, 288, 251, - 180, 180, 288, 203, 203, 75, 203, 203, 75, 75, - - 75, 75, 75, 75, 75, 75, 75, 75, 92, 164, - 180, 92, 207, 164, 92, 92, 287, 92, 92, 92, - 92, 183, 183, 92, 92, 325, 827, 183, 183, 332, - 287, 183, 207, 183, 366, 180, 325, 92, 92, 92, - 332, 401, 164, 164, 322, 322, 322, 164, 272, 272, - 366, 272, 401, 198, 198, 164, 198, 198, 164, 207, - 826, 337, 377, 92, 92, 93, 337, 377, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 822, 272, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - - 93, 93, 93, 93, 93, 93, 93, 198, 435, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 96, 314, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 710, - 710, 435, 96, 96, 96, 96, 96, 96, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, 220, 220, - 220, 220, 220, 220, 403, 403, 314, 96, 96, 96, - 96, 96, 96, 97, 520, 773, 403, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 773, 520, 97, 97, 97, 97, 97, 97, 97, 97, - - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 436, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 279, 436, 279, 101, 101, - 101, 101, 101, 101, 308, 308, 356, 308, 101, 194, - 444, 810, 356, 194, 334, 194, 194, 363, 334, 363, - 437, 444, 194, 101, 101, 101, 101, 101, 101, 132, - 414, 809, 132, 132, 132, 132, 132, 194, 132, 132, - 802, 334, 132, 367, 208, 208, 208, 208, 414, 367, - - 208, 208, 279, 437, 208, 801, 132, 132, 132, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 208, - 208, 445, 469, 134, 134, 134, 134, 134, 134, 338, - 601, 363, 445, 338, 212, 212, 212, 212, 212, 799, - 212, 212, 439, 795, 212, 519, 601, 439, 134, 134, - 134, 134, 134, 134, 143, 519, 338, 143, 212, 212, - 212, 469, 574, 143, 772, 772, 143, 143, 574, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 779, 778, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, 144, 600, - 771, 600, 144, 144, 144, 144, 144, 144, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 215, 329, 329, - 329, 329, 329, 329, 478, 754, 753, 144, 144, 144, - 144, 144, 144, 182, 482, 478, 182, 182, 182, 182, - 182, 210, 182, 182, 210, 482, 182, 365, 375, 446, - 210, 214, 375, 210, 446, 214, 210, 210, 214, 521, - - 182, 182, 182, 378, 214, 353, 495, 378, 353, 521, - 210, 495, 210, 749, 365, 375, 741, 740, 214, 214, - 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 378, 518, 365, 518, 405, 405, 210, 210, 213, 622, - 353, 213, 714, 739, 213, 213, 405, 213, 213, 213, - 213, 622, 714, 213, 213, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 229, 229, 213, 213, 213, - 731, 229, 229, 596, 599, 229, 599, 229, 240, 240, - 240, 240, 240, 240, 240, 240, 240, 240, 602, 518, - 596, 664, 727, 213, 213, 216, 216, 216, 216, 216, - - 216, 216, 216, 216, 216, 602, 781, 664, 781, 216, - 216, 216, 216, 216, 216, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 372, 721, 372, 372, 372, - 372, 372, 372, 599, 216, 216, 216, 216, 216, 216, - 221, 443, 720, 443, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 717, 715, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 702, 221, 221, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - - 221, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 443, 688, 684, 222, 222, 222, 222, 222, - 222, 289, 676, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 411, 411, 411, 411, 411, 411, 675, - 222, 222, 222, 222, 222, 222, 242, 673, 242, 242, - 242, 242, 242, 242, 242, 242, 242, 242, 290, 560, - 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, - 560, 286, 502, 672, 532, 286, 561, 502, 286, 532, - 784, 668, 784, 743, 286, 242, 243, 561, 243, 243, - 243, 243, 243, 243, 243, 243, 243, 243, 286, 286, - - 291, 747, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 743, 842, 666, 243, 244, 636, 244, 244, - 244, 244, 244, 244, 244, 244, 244, 244, 636, 317, - 747, 317, 317, 317, 317, 317, 317, 662, 661, 313, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 321, 730, 842, 730, 660, 244, 245, 624, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, 317, 624, - 659, 655, 245, 245, 245, 245, 245, 245, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 415, 421, - - 649, 654, 415, 421, 785, 649, 785, 245, 245, 245, - 245, 245, 245, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 730, 415, 421, 248, 248, 248, - 248, 248, 248, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 492, 492, 492, 492, 492, 492, 880, - 652, 880, 248, 248, 248, 248, 248, 248, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 651, 650, 785, 250, 250, 250, 250, 250, 250, 331, - 620, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 552, 552, 552, 552, 552, 552, 888, 250, 250, - - 250, 250, 250, 250, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 883, 619, 883, 252, 252, - 252, 252, 252, 252, 368, 368, 368, 368, 368, 368, - 368, 368, 368, 368, 496, 500, 888, 613, 496, 500, - 612, 611, 610, 252, 252, 252, 252, 252, 252, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 609, 496, 500, 292, 292, 292, 292, 292, 292, 370, - 608, 370, 370, 370, 370, 370, 370, 370, 370, 370, - 370, 571, 571, 571, 571, 571, 571, 607, 292, 292, - 292, 292, 292, 292, 294, 294, 294, 294, 294, 294, - - 294, 294, 294, 294, 637, 606, 598, 597, 294, 294, - 294, 294, 294, 294, 371, 637, 371, 371, 371, 371, - 371, 371, 371, 371, 371, 371, 995, 590, 483, 483, - 589, 588, 995, 294, 294, 294, 294, 294, 294, 315, - 483, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 396, 396, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 630, 630, 630, 630, 630, 630, 315, 316, - 587, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 404, 404, 404, 404, 404, 404, 404, 404, 404, - - 404, 408, 408, 408, 408, 408, 408, 408, 408, 584, - 583, 729, 729, 408, 729, 729, 582, 579, 316, 327, - 327, 327, 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 578, 577, 556, 327, 327, 327, 327, 327, - 327, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 503, 508, 509, 548, 503, 508, 509, 547, 546, - 327, 327, 327, 327, 327, 327, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 330, 330, 330, 503, 508, - 509, 330, 330, 330, 330, 330, 330, 413, 542, 413, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 647, - - 647, 647, 647, 647, 647, 535, 330, 330, 330, 330, - 330, 330, 373, 373, 373, 373, 373, 373, 373, 373, - 373, 373, 706, 534, 728, 531, 373, 373, 373, 373, - 373, 373, 447, 706, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 529, 665, 728, 528, 728, 728, - 523, 373, 373, 373, 373, 373, 373, 374, 374, 374, - 374, 374, 374, 374, 374, 374, 374, 665, 517, 665, - 665, 374, 374, 374, 374, 374, 374, 448, 689, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 516, - 689, 484, 484, 514, 665, 513, 374, 374, 374, 374, - - 374, 374, 391, 484, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 449, 512, 449, 449, 449, 449, - 449, 449, 449, 449, 449, 449, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 782, 782, 511, 782, - 782, 391, 392, 707, 392, 392, 392, 392, 392, 392, - 392, 392, 392, 392, 707, 472, 510, 472, 472, 472, - 472, 472, 472, 468, 479, 507, 479, 479, 479, 479, - 479, 479, 479, 479, 479, 479, 663, 663, 506, 663, - 663, 392, 393, 505, 393, 393, 393, 393, 393, 393, - 393, 393, 393, 393, 472, 480, 690, 480, 480, 480, - - 480, 480, 480, 480, 480, 480, 480, 481, 690, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 504, - 501, 393, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 663, 499, 498, 406, 406, - 406, 406, 406, 406, 485, 485, 485, 485, 485, 485, - 485, 485, 485, 485, 526, 497, 526, 526, 526, 526, - 526, 526, 476, 406, 406, 406, 406, 406, 406, 409, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, 486, 486, 475, 409, 409, 409, 409, 409, - 409, 562, 562, 692, 486, 489, 489, 489, 489, 489, - - 489, 489, 489, 562, 474, 692, 473, 489, 467, 466, - 409, 409, 409, 409, 409, 409, 412, 412, 412, 412, - 412, 412, 412, 412, 412, 412, 412, 412, 465, 464, - 463, 412, 412, 412, 412, 412, 412, 491, 491, 491, - 491, 491, 491, 491, 491, 491, 491, 462, 527, 461, - 460, 755, 527, 459, 458, 457, 412, 412, 412, 412, - 412, 412, 470, 755, 470, 470, 470, 470, 470, 470, - 470, 470, 470, 470, 494, 527, 494, 494, 494, 494, - 494, 494, 494, 494, 494, 494, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 833, 833, 456, 833, - - 833, 470, 471, 756, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 524, 756, 524, 524, 524, 524, - 524, 524, 524, 524, 524, 524, 525, 758, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, 455, 758, - 454, 471, 477, 477, 477, 477, 477, 477, 477, 477, - 477, 477, 477, 453, 452, 451, 477, 477, 477, 477, - 477, 477, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 450, 530, 533, 536, 442, 530, 533, 536, - 441, 477, 477, 477, 477, 477, 477, 487, 487, 487, - 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, - - 530, 533, 536, 487, 487, 487, 487, 487, 487, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 440, - 537, 575, 580, 434, 537, 575, 580, 433, 487, 487, - 487, 487, 487, 487, 490, 490, 490, 490, 490, 490, - 490, 490, 490, 490, 490, 490, 490, 537, 575, 580, - 490, 490, 490, 490, 490, 490, 554, 811, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, 585, 811, - 862, 862, 585, 862, 862, 490, 490, 490, 490, 490, - 490, 493, 493, 493, 493, 493, 493, 493, 493, 493, - 493, 493, 493, 431, 430, 585, 493, 493, 493, 493, - - 493, 493, 555, 555, 555, 555, 555, 555, 555, 555, - 555, 555, 559, 429, 559, 559, 559, 559, 559, 559, - 428, 493, 493, 493, 493, 493, 493, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 557, 427, - 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, - 558, 770, 558, 558, 558, 558, 558, 558, 558, 558, - 558, 558, 770, 426, 425, 543, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 563, 563, 564, - 564, 564, 564, 564, 564, 564, 564, 564, 564, 563, - 565, 565, 570, 570, 570, 570, 570, 570, 570, 570, - - 570, 570, 565, 424, 544, 545, 545, 545, 545, 545, - 545, 545, 545, 545, 545, 545, 568, 568, 568, 568, - 568, 568, 568, 568, 423, 420, 419, 573, 568, 573, - 573, 573, 573, 573, 573, 573, 573, 573, 573, 418, - 417, 591, 400, 545, 550, 591, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 638, 638, 399, - 550, 550, 550, 550, 550, 550, 639, 639, 591, 638, - 641, 641, 708, 708, 398, 593, 653, 656, 639, 593, - 653, 656, 641, 397, 708, 550, 550, 550, 550, 550, - 550, 553, 553, 553, 553, 553, 553, 553, 553, 553, - - 553, 553, 593, 653, 656, 553, 553, 553, 553, 553, - 553, 603, 603, 603, 603, 603, 603, 603, 603, 603, - 603, 603, 657, 674, 677, 395, 657, 674, 677, 394, - 553, 553, 553, 553, 553, 553, 566, 566, 566, 566, - 566, 566, 566, 566, 566, 566, 566, 566, 566, 657, - 674, 677, 566, 566, 566, 566, 566, 566, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 671, - 671, 671, 671, 671, 671, 671, 390, 566, 566, 566, - 566, 566, 566, 569, 569, 569, 569, 569, 569, 569, - 569, 569, 569, 569, 569, 569, 389, 388, 386, 569, - - 569, 569, 569, 569, 569, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 678, 716, 385, 384, - 678, 716, 383, 382, 569, 569, 569, 569, 569, 569, - 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, - 572, 381, 380, 678, 716, 572, 572, 572, 572, 572, - 572, 614, 614, 614, 614, 614, 614, 614, 614, 614, - 614, 379, 618, 618, 618, 618, 618, 618, 618, 376, - 572, 572, 572, 572, 572, 572, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 369, 362, 614, 616, - 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, - - 618, 623, 623, 623, 623, 623, 623, 623, 623, 623, - 623, 627, 812, 627, 627, 627, 627, 627, 627, 858, - 858, 858, 858, 627, 812, 361, 360, 616, 617, 617, - 617, 617, 617, 617, 617, 617, 617, 617, 617, 629, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 632, - 814, 632, 632, 632, 632, 632, 632, 632, 632, 632, - 632, 359, 814, 358, 357, 351, 617, 625, 350, 625, - 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, - 628, 853, 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 853, 348, 347, 628, 628, 628, 628, - - 628, 628, 633, 346, 633, 633, 633, 633, 633, 633, - 633, 633, 633, 633, 698, 698, 698, 698, 698, 698, - 345, 628, 628, 628, 628, 628, 628, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, 344, 343, - 342, 631, 631, 631, 631, 631, 631, 634, 341, 634, - 634, 634, 634, 634, 634, 634, 634, 634, 634, 764, - 764, 764, 764, 764, 764, 340, 631, 631, 631, 631, - 631, 631, 635, 339, 635, 635, 635, 635, 635, 635, - 635, 635, 635, 635, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 642, 642, 642, 642, 642, 642, - - 642, 642, 642, 642, 642, 642, 642, 336, 335, 333, - 642, 642, 642, 642, 642, 642, 644, 644, 644, 644, - 644, 644, 644, 644, 324, 323, 320, 705, 644, 705, - 705, 705, 705, 705, 705, 642, 642, 642, 642, 642, - 642, 645, 645, 645, 645, 645, 645, 645, 645, 645, - 645, 645, 645, 319, 309, 307, 306, 645, 645, 645, - 645, 645, 645, 646, 646, 646, 646, 646, 646, 646, - 646, 646, 646, 713, 713, 713, 713, 713, 713, 713, - 713, 305, 645, 645, 645, 645, 645, 645, 648, 304, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - - 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, - 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, - 669, 670, 670, 670, 670, 670, 670, 670, 670, 670, - 670, 670, 680, 303, 680, 680, 680, 680, 680, 680, - 680, 680, 680, 680, 685, 302, 685, 685, 685, 685, - 685, 685, 685, 685, 685, 685, 686, 301, 686, 686, - 686, 686, 686, 686, 686, 686, 686, 686, 300, 299, - 298, 680, 681, 297, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 687, 296, 687, 687, 687, 687, - 687, 687, 687, 687, 687, 687, 691, 691, 691, 691, - - 691, 691, 691, 691, 691, 691, 718, 293, 282, 278, - 718, 681, 682, 277, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 695, 276, 695, 695, 695, 695, - 695, 695, 275, 718, 271, 270, 695, 697, 697, 697, - 697, 697, 697, 697, 697, 697, 697, 269, 268, 267, - 266, 682, 683, 264, 683, 683, 683, 683, 683, 683, - 683, 683, 683, 683, 700, 263, 700, 700, 700, 700, - 700, 700, 700, 700, 700, 700, 701, 701, 701, 701, - 701, 701, 701, 701, 701, 701, 881, 881, 262, 881, - 881, 683, 693, 261, 693, 693, 693, 693, 693, 693, - - 693, 693, 693, 693, 693, 696, 260, 696, 696, 696, - 696, 696, 696, 696, 696, 696, 696, 696, 259, 258, - 257, 696, 696, 696, 696, 696, 696, 703, 256, 703, - 703, 703, 703, 703, 703, 703, 703, 703, 703, 820, - 820, 820, 820, 820, 820, 255, 696, 696, 696, 696, - 696, 696, 699, 699, 699, 699, 699, 699, 699, 699, - 699, 699, 699, 254, 247, 246, 699, 699, 699, 699, - 699, 699, 704, 234, 704, 704, 704, 704, 704, 704, - 704, 704, 704, 704, 722, 724, 233, 232, 722, 724, - 231, 699, 699, 699, 699, 699, 699, 711, 711, 711, - - 711, 711, 711, 711, 711, 711, 711, 711, 711, 732, - 230, 722, 724, 732, 732, 732, 732, 733, 228, 227, - 226, 733, 733, 733, 733, 734, 225, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 735, 223, 735, - 735, 735, 735, 735, 735, 735, 735, 735, 735, 736, - 217, 736, 736, 736, 736, 736, 736, 736, 736, 736, - 736, 738, 209, 732, 205, 738, 200, 199, 197, 193, - 737, 733, 737, 737, 737, 737, 737, 737, 737, 737, - 737, 737, 895, 895, 895, 895, 895, 895, 738, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 188, - - 746, 186, 746, 746, 746, 746, 746, 746, 748, 748, - 748, 748, 748, 748, 748, 748, 748, 748, 752, 181, - 752, 752, 752, 752, 752, 752, 742, 744, 169, 744, - 744, 744, 744, 744, 744, 744, 744, 744, 744, 746, - 750, 168, 750, 750, 750, 750, 750, 750, 750, 750, - 750, 750, 751, 167, 751, 751, 751, 751, 751, 751, - 751, 751, 751, 751, 166, 165, 744, 745, 157, 745, - 745, 745, 745, 745, 745, 745, 745, 745, 745, 757, - 757, 757, 757, 757, 757, 757, 757, 757, 757, 761, - 156, 761, 761, 761, 761, 761, 761, 155, 154, 153, - - 152, 761, 150, 149, 148, 147, 745, 759, 146, 759, - 759, 759, 759, 759, 759, 759, 759, 759, 759, 759, - 762, 145, 762, 762, 762, 762, 762, 762, 762, 762, - 762, 762, 762, 140, 136, 135, 762, 762, 762, 762, - 762, 762, 763, 763, 763, 763, 763, 763, 763, 763, - 763, 763, 775, 777, 131, 128, 775, 777, 121, 118, - 114, 762, 762, 762, 762, 762, 762, 765, 765, 765, - 765, 765, 765, 765, 765, 765, 765, 110, 106, 775, - 777, 765, 765, 765, 765, 765, 765, 766, 105, 766, - 766, 766, 766, 766, 766, 766, 766, 766, 766, 825, - - 825, 825, 825, 825, 825, 825, 765, 765, 765, 765, - 765, 765, 767, 767, 767, 767, 767, 767, 767, 767, - 767, 767, 767, 768, 768, 768, 768, 768, 768, 768, - 768, 768, 768, 768, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 786, 104, 103, 102, 786, - 786, 786, 786, 787, 98, 85, 78, 787, 787, 787, - 787, 788, 71, 70, 66, 788, 788, 788, 788, 789, - 65, 64, 59, 789, 789, 789, 789, 790, 57, 48, - 790, 790, 790, 790, 790, 790, 790, 790, 790, 790, - 47, 791, 45, 44, 791, 39, 34, 28, 800, 786, - - 791, 791, 800, 22, 791, 792, 21, 787, 18, 792, - 792, 792, 792, 17, 0, 788, 0, 0, 791, 791, - 791, 793, 0, 789, 793, 800, 0, 0, 828, 830, - 793, 793, 828, 830, 793, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 0, 0, 0, 793, 793, - 793, 0, 0, 0, 0, 828, 830, 0, 796, 792, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, - 797, 0, 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 798, 0, 798, 798, 798, 798, 798, 798, - 803, 0, 803, 803, 803, 803, 803, 803, 803, 803, - - 803, 803, 806, 0, 806, 806, 806, 806, 806, 806, - 806, 806, 806, 806, 807, 0, 807, 807, 807, 807, - 807, 807, 807, 807, 807, 807, 0, 0, 0, 803, - 804, 0, 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, 808, 0, 808, 808, 808, 808, 808, 808, - 808, 808, 808, 808, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 839, 0, 0, 0, 839, 804, - 805, 0, 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 817, 0, 817, 817, 817, 817, 817, 817, - 0, 839, 0, 0, 817, 819, 819, 819, 819, 819, - - 819, 819, 819, 819, 819, 0, 0, 0, 0, 805, - 815, 0, 815, 815, 815, 815, 815, 815, 815, 815, - 815, 815, 815, 818, 0, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 0, 0, 0, 0, 818, - 818, 818, 818, 818, 818, 821, 0, 821, 821, 821, - 821, 821, 821, 821, 821, 821, 821, 914, 914, 914, - 914, 914, 914, 0, 818, 818, 818, 818, 818, 818, - 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, - 823, 824, 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, 834, 834, 834, 834, 834, 834, 834, 834, - - 834, 834, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 836, 0, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 836, 837, 0, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 838, 0, 838, 838, - 838, 838, 838, 838, 838, 838, 838, 838, 841, 841, - 841, 841, 841, 841, 841, 841, 841, 841, 0, 845, - 0, 845, 845, 845, 845, 845, 845, 846, 846, 846, - 846, 846, 846, 846, 846, 846, 846, 850, 0, 850, - 850, 850, 850, 850, 850, 841, 843, 0, 843, 843, - 843, 843, 843, 843, 843, 843, 843, 843, 845, 848, - - 0, 848, 848, 848, 848, 848, 848, 848, 848, 848, - 848, 849, 0, 849, 849, 849, 849, 849, 849, 849, - 849, 849, 849, 859, 0, 843, 844, 859, 844, 844, - 844, 844, 844, 844, 844, 844, 844, 844, 856, 0, - 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, - 859, 861, 0, 0, 867, 861, 867, 867, 867, 867, - 867, 867, 0, 0, 0, 844, 863, 863, 863, 863, - 863, 863, 863, 863, 863, 863, 0, 865, 861, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, 866, - 0, 866, 866, 866, 866, 866, 866, 866, 866, 866, - - 866, 868, 0, 0, 0, 868, 872, 872, 872, 872, - 872, 872, 872, 872, 872, 872, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 878, 0, 868, 869, - 878, 869, 869, 869, 869, 869, 869, 869, 869, 869, - 869, 874, 874, 874, 874, 874, 874, 874, 874, 874, - 874, 0, 884, 878, 884, 884, 884, 884, 884, 884, - 884, 884, 884, 884, 0, 0, 0, 0, 869, 870, - 0, 870, 870, 870, 870, 870, 870, 870, 870, 870, - 870, 885, 0, 885, 885, 885, 885, 885, 885, 885, - 885, 885, 885, 886, 0, 886, 886, 886, 886, 886, - - 886, 886, 886, 886, 886, 0, 0, 0, 870, 871, - 0, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 887, 887, 887, 887, 887, 887, 887, 887, 887, - 887, 0, 891, 0, 891, 891, 891, 891, 891, 891, - 902, 0, 902, 902, 902, 902, 902, 902, 871, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 887, 889, - 0, 889, 889, 889, 889, 889, 889, 889, 889, 889, - 889, 891, 893, 893, 893, 893, 893, 893, 893, 893, - 893, 893, 894, 894, 894, 894, 894, 894, 894, 894, - 894, 894, 0, 0, 0, 0, 0, 0, 889, 890, - - 0, 890, 890, 890, 890, 890, 890, 890, 890, 890, - 890, 898, 898, 898, 898, 898, 898, 898, 898, 898, - 898, 900, 0, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 0, 0, 0, 0, 901, 890, 901, - 901, 901, 901, 901, 901, 901, 901, 901, 901, 903, - 903, 903, 903, 903, 903, 903, 903, 903, 903, 904, - 904, 904, 904, 904, 904, 904, 904, 904, 904, 905, - 905, 905, 905, 905, 905, 905, 905, 905, 905, 0, - 0, 0, 0, 0, 0, 0, 903, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 904, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 905, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 907, 907, 907, - 907, 907, 907, 907, 907, 907, 907, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 908, 910, 910, 910, - 910, 910, 910, 910, 910, 910, 910, 911, 911, 911, - 911, 911, 911, 913, 913, 913, 913, 913, 913, 913, - 913, 913, 913, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 910, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 911, 916, 916, 916, 916, 916, - 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, - - 916, 916, 916, 916, 917, 917, 917, 917, 917, 917, - 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, - 917, 917, 917, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 919, 919, 919, 919, 919, 919, 919, 919, - 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, - 919, 920, 920, 920, 920, 920, 920, 920, 920, 920, + 13, 13, 13, 13, 13, 13, 17, 17, 17, 17, + + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 26, 261, 26, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 26, 1098, 421, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 33, 421, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33, 33, 340, + 1073, 340, 33, 33, 33, 33, 33, 33, 186, 186, + 261, 186, 186, 138, 138, 138, 138, 138, 202, 138, + 138, 196, 202, 138, 303, 33, 196, 33, 33, 33, + 33, 33, 33, 40, 196, 303, 40, 138, 138, 138, + 204, 523, 40, 229, 204, 40, 40, 229, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 186, 523, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 389, 420, + 389, 45, 45, 45, 45, 45, 45, 341, 195, 420, + 195, 45, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 341, 339, 231, 424, 45, 45, 45, 45, + 45, 45, 53, 53, 424, 53, 53, 53, 53, 53, + 339, 53, 53, 148, 231, 53, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 1071, 232, 209, 53, + 53, 53, 57, 209, 57, 426, 150, 150, 150, 150, + + 150, 231, 150, 150, 195, 57, 150, 232, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 1054, 426, + 150, 150, 150, 152, 152, 152, 152, 152, 412, 152, + 152, 176, 176, 152, 232, 153, 153, 176, 176, 153, + 153, 176, 226, 176, 176, 412, 226, 152, 152, 152, + 201, 390, 290, 390, 201, 57, 78, 290, 78, 153, + 435, 212, 212, 201, 212, 212, 435, 228, 228, 78, + 228, 228, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 95, 305, 153, 95, 260, 305, 95, 95, + 260, 95, 95, 95, 95, 387, 226, 95, 95, 156, + + 156, 156, 156, 156, 156, 156, 156, 156, 156, 387, + 520, 95, 95, 95, 160, 160, 160, 160, 160, 160, + 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 520, 423, 156, 95, 95, 96, + 260, 429, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 423, 429, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 756, 756, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + + 99, 392, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 400, 400, 400, 99, 99, 99, 99, + 99, 99, 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 337, 414, 419, 223, 223, 337, 223, 223, + 392, 99, 99, 99, 99, 99, 99, 100, 419, 445, + 414, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 1045, 445, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 223, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 627, + 418, 443, 104, 104, 104, 104, 104, 104, 418, 344, + 205, 205, 104, 344, 205, 205, 245, 245, 245, 245, + 245, 245, 189, 627, 443, 434, 189, 104, 104, 104, + 104, 104, 104, 121, 205, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 422, 1044, 430, 121, + 121, 121, 121, 121, 121, 189, 189, 208, 208, 205, + 189, 434, 403, 208, 208, 430, 422, 208, 189, 208, + 527, 189, 121, 403, 121, 121, 121, 121, 121, 121, + + 124, 219, 425, 124, 527, 219, 456, 219, 219, 124, + 425, 456, 124, 124, 219, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 219, + 1042, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 744, 410, 744, 128, 128, + 128, 128, 128, 128, 335, 471, 335, 410, 128, 216, + + 216, 216, 216, 216, 216, 216, 216, 216, 216, 328, + 328, 522, 328, 128, 128, 128, 128, 128, 128, 134, + 134, 433, 134, 134, 134, 134, 134, 522, 134, 134, + 364, 364, 134, 364, 471, 233, 233, 233, 233, 516, + 432, 233, 233, 432, 328, 233, 134, 134, 134, 155, + 433, 335, 155, 155, 155, 155, 155, 516, 155, 155, + 233, 233, 155, 240, 240, 240, 240, 240, 240, 240, + 240, 240, 240, 427, 446, 432, 155, 155, 155, 157, + 446, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 442, 427, 442, 157, 157, 157, 157, 157, + + 157, 288, 288, 1041, 288, 288, 237, 237, 237, 237, + 237, 467, 237, 237, 467, 517, 237, 467, 157, 531, + 157, 157, 157, 157, 157, 157, 166, 531, 726, 166, + 237, 237, 237, 468, 468, 166, 517, 468, 166, 166, + 726, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 288, 442, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, + + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 475, 767, 767, 167, 167, 167, 167, 167, 167, + 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 276, 276, 276, 276, 276, 276, 503, 530, 475, 167, + 167, 167, 167, 167, 167, 207, 490, 503, 207, 207, + 207, 207, 207, 235, 207, 207, 235, 530, 207, 537, + 413, 479, 235, 239, 413, 235, 479, 239, 235, 235, + 239, 416, 207, 207, 207, 490, 239, 386, 386, 492, + 386, 537, 235, 416, 235, 492, 528, 413, 416, 1037, + 239, 239, 244, 244, 244, 244, 244, 244, 244, 244, + + 244, 244, 407, 407, 407, 407, 407, 407, 235, 235, + 238, 417, 386, 238, 528, 417, 238, 238, 521, 238, + 238, 238, 238, 254, 254, 238, 238, 454, 457, 254, + 254, 454, 457, 254, 533, 254, 521, 444, 417, 238, + 238, 238, 532, 533, 271, 271, 271, 271, 271, 271, + 271, 271, 271, 271, 454, 457, 268, 268, 1030, 469, + 268, 268, 469, 532, 444, 238, 238, 241, 491, 241, + 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 268, 271, 444, 241, 241, 241, 241, 241, 241, 529, + 628, 263, 263, 263, 263, 263, 489, 263, 263, 489, + + 469, 263, 542, 529, 491, 268, 628, 542, 241, 241, + 241, 241, 241, 241, 246, 263, 263, 263, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 489, 1025, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 539, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, + 247, 247, 247, 247, 247, 247, 621, 539, 1012, 247, + 247, 247, 247, 247, 247, 526, 265, 265, 265, 265, + + 265, 526, 265, 265, 621, 395, 265, 395, 395, 395, + 395, 395, 395, 538, 247, 247, 247, 247, 247, 247, + 265, 265, 265, 267, 267, 267, 267, 267, 536, 267, + 267, 807, 807, 267, 274, 274, 274, 274, 274, 274, + 274, 274, 274, 274, 395, 534, 538, 267, 267, 267, + 270, 536, 534, 270, 270, 270, 270, 270, 624, 270, + 270, 1011, 540, 270, 275, 275, 275, 275, 275, 275, + 275, 275, 275, 275, 591, 624, 549, 270, 270, 270, + 272, 549, 272, 272, 272, 272, 272, 272, 272, 272, + 272, 272, 272, 505, 505, 540, 272, 272, 272, 272, + + 272, 272, 284, 284, 547, 505, 477, 480, 284, 284, + 477, 480, 284, 591, 284, 547, 507, 507, 548, 272, + 600, 272, 272, 272, 272, 272, 272, 277, 507, 548, + 277, 600, 1007, 477, 480, 566, 277, 566, 566, 277, + 277, 745, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 995, 745, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, + + 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 546, 620, 546, 278, 278, 278, 278, 278, + 278, 294, 294, 294, 294, 294, 294, 294, 294, 294, + 294, 451, 620, 451, 451, 451, 451, 451, 451, 994, + 278, 278, 278, 278, 278, 278, 295, 295, 295, 295, + 295, 295, 295, 295, 295, 295, 296, 541, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, 345, 986, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 586, 342, 589, 546, 667, 342, 567, 589, 342, 567, + 567, 718, 541, 978, 342, 296, 297, 718, 297, 297, + + 297, 297, 297, 297, 297, 297, 297, 297, 342, 342, + 346, 586, 346, 346, 346, 346, 346, 346, 346, 346, + 346, 346, 347, 667, 347, 347, 347, 347, 347, 347, + 347, 347, 347, 347, 570, 297, 298, 570, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, 399, 638, + 366, 604, 518, 763, 366, 763, 518, 366, 568, 638, + 568, 568, 604, 366, 570, 298, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 366, 366, 518, + 299, 299, 299, 299, 299, 299, 391, 391, 391, 391, + + 391, 391, 391, 391, 391, 391, 513, 513, 513, 513, + 513, 513, 806, 299, 806, 299, 299, 299, 299, 299, + 299, 302, 302, 302, 302, 302, 302, 302, 302, 302, + 302, 302, 622, 391, 977, 302, 302, 302, 302, 302, + 302, 404, 404, 404, 404, 404, 404, 404, 404, 404, + 404, 524, 617, 622, 655, 524, 810, 617, 810, 655, + 302, 302, 302, 302, 302, 302, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 524, 588, + 585, 304, 304, 304, 304, 304, 304, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 614, 614, 614, + + 614, 614, 614, 630, 605, 605, 304, 304, 304, 304, + 304, 304, 306, 585, 588, 306, 605, 723, 629, 661, + 630, 306, 661, 723, 306, 306, 629, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 841, 841, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 307, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 633, 877, 877, + + 307, 307, 307, 307, 307, 307, 409, 625, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 633, 625, + 662, 878, 878, 662, 625, 307, 307, 307, 307, 307, + 307, 348, 348, 348, 348, 348, 348, 348, 348, 348, + 348, 348, 885, 975, 885, 348, 348, 348, 348, 348, + 348, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 619, 623, 676, 587, 619, 623, 971, 676, 643, + 348, 348, 348, 348, 348, 348, 350, 350, 350, 350, + 350, 350, 350, 350, 350, 350, 643, 950, 619, 623, + 350, 350, 350, 350, 350, 350, 449, 587, 449, 449, + + 449, 449, 449, 449, 449, 449, 449, 449, 731, 663, + 606, 606, 663, 731, 947, 350, 350, 350, 350, 350, + 350, 367, 606, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 450, 930, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 664, 888, 888, 664, 819, + 367, 368, 704, 368, 368, 368, 368, 368, 368, 368, + 368, 368, 368, 704, 474, 819, 474, 474, 474, 474, + 474, 474, 470, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 727, 641, 764, 641, 727, 929, + + 368, 369, 764, 369, 369, 369, 369, 369, 369, 369, + 369, 369, 369, 474, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 665, 733, 925, 665, 740, 746, + 369, 370, 733, 370, 370, 370, 370, 370, 370, 370, + 370, 370, 370, 641, 915, 740, 746, 370, 370, 370, + 370, 370, 370, 510, 510, 510, 510, 510, 510, 510, + 510, 642, 626, 631, 632, 510, 626, 631, 632, 665, + 770, 642, 370, 370, 370, 370, 370, 370, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, 909, 626, + + 631, 632, 372, 372, 372, 372, 372, 372, 512, 512, + 512, 512, 512, 512, 512, 512, 512, 512, 770, 594, + 908, 594, 594, 594, 594, 594, 594, 372, 372, 372, + 372, 372, 372, 393, 777, 393, 393, 393, 393, 393, + 393, 393, 393, 393, 393, 515, 777, 515, 515, 515, + 515, 515, 515, 515, 515, 515, 515, 550, 594, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 743, + 762, 743, 393, 394, 762, 394, 394, 394, 394, 394, + 394, 394, 394, 394, 394, 551, 907, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 552, 705, 552, + + 552, 552, 552, 552, 552, 552, 552, 552, 552, 705, + 755, 766, 394, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 766, 755, 743, 405, + 405, 405, 405, 405, 405, 590, 590, 590, 590, 590, + 590, 590, 590, 590, 590, 649, 734, 649, 649, 649, + 649, 649, 649, 734, 405, 405, 405, 405, 405, 405, + 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, + 408, 408, 590, 916, 916, 408, 408, 408, 408, 408, + 408, 601, 899, 601, 601, 601, 601, 601, 601, 601, + 601, 601, 601, 650, 768, 608, 608, 650, 644, 732, + + 408, 408, 408, 408, 408, 408, 411, 608, 644, 411, + 732, 768, 804, 843, 895, 411, 843, 804, 411, 411, + 650, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 948, 948, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, 411, 411, + 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 883, 686, 894, 883, 452, 452, 452, 452, 452, 452, + + 602, 686, 602, 602, 602, 602, 602, 602, 602, 602, + 602, 602, 696, 696, 696, 696, 696, 696, 870, 452, + 452, 452, 452, 452, 452, 453, 453, 453, 453, 453, + 453, 453, 453, 453, 453, 917, 722, 856, 917, 453, + 453, 453, 453, 453, 453, 603, 722, 603, 603, 603, + 603, 603, 603, 603, 603, 603, 603, 715, 715, 715, + 715, 715, 715, 852, 453, 453, 453, 453, 453, 453, + 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, + 466, 954, 847, 954, 466, 466, 466, 466, 466, 466, + 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, + + 703, 814, 703, 703, 703, 703, 703, 703, 844, 466, + 466, 466, 466, 466, 466, 472, 814, 472, 472, 472, + 472, 472, 472, 472, 472, 472, 472, 611, 611, 611, + 611, 611, 611, 611, 611, 955, 955, 949, 779, 611, + 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, + 779, 809, 949, 836, 472, 473, 809, 473, 473, 473, + 473, 473, 473, 473, 473, 473, 473, 616, 831, 616, + 616, 616, 616, 616, 616, 616, 616, 616, 616, 645, + 645, 645, 645, 645, 645, 645, 645, 645, 645, 818, + 818, 836, 818, 818, 473, 493, 857, 493, 493, 493, + + 493, 493, 493, 493, 493, 493, 493, 647, 857, 647, + 647, 647, 647, 647, 647, 647, 647, 647, 647, 648, + 791, 648, 648, 648, 648, 648, 648, 648, 648, 648, + 648, 791, 653, 830, 493, 494, 653, 494, 494, 494, + 494, 494, 494, 494, 494, 494, 494, 728, 818, 656, + 706, 706, 957, 656, 957, 828, 960, 728, 960, 653, + 659, 660, 706, 671, 659, 660, 670, 671, 670, 670, + 670, 670, 670, 670, 494, 495, 656, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 659, 660, 858, + 671, 666, 666, 666, 666, 666, 666, 666, 666, 666, + + 666, 858, 674, 677, 827, 670, 674, 677, 785, 785, + 785, 785, 785, 785, 495, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 666, 674, + 677, 508, 508, 508, 508, 508, 508, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 823, 680, 681, + 719, 821, 680, 681, 719, 817, 508, 508, 508, 508, + 508, 508, 511, 511, 511, 511, 511, 511, 511, 511, + 511, 511, 511, 511, 511, 680, 681, 719, 511, 511, + 511, 511, 511, 511, 695, 695, 695, 695, 695, 695, + 695, 695, 695, 695, 724, 729, 735, 889, 724, 729, + + 735, 816, 889, 511, 511, 511, 511, 511, 511, 514, + 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, + 514, 724, 729, 735, 514, 514, 514, 514, 514, 514, + 698, 792, 698, 698, 698, 698, 698, 698, 698, 698, + 698, 698, 792, 815, 707, 707, 987, 987, 813, 514, + 514, 514, 514, 514, 514, 571, 707, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 701, 860, 701, + 701, 701, 701, 701, 701, 701, 701, 701, 701, 1016, + 860, 1016, 919, 775, 571, 572, 774, 572, 572, 572, + + 572, 572, 572, 572, 572, 572, 572, 702, 820, 702, + 702, 702, 702, 702, 702, 702, 702, 702, 702, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 765, + 820, 919, 820, 820, 572, 573, 757, 573, 573, 573, + 573, 573, 573, 573, 573, 573, 573, 709, 709, 712, + 712, 712, 712, 712, 712, 712, 712, 820, 1076, 709, + 1076, 712, 714, 714, 714, 714, 714, 714, 714, 714, + 714, 714, 737, 923, 573, 592, 737, 592, 592, 592, + 592, 592, 592, 592, 592, 592, 592, 717, 754, 717, + 717, 717, 717, 717, 717, 717, 717, 717, 717, 737, + + 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, + 747, 1079, 923, 1079, 592, 593, 753, 593, 593, 593, + 593, 593, 593, 593, 593, 593, 593, 748, 748, 748, + 748, 748, 748, 748, 748, 748, 748, 748, 749, 749, + 749, 749, 749, 749, 749, 749, 749, 749, 749, 897, + 897, 751, 897, 897, 593, 599, 599, 599, 599, 599, + 599, 599, 599, 599, 599, 599, 1139, 1139, 1139, 599, + 599, 599, 599, 599, 599, 980, 769, 769, 769, 769, + 769, 769, 769, 769, 769, 769, 773, 773, 773, 773, + 773, 773, 773, 750, 599, 599, 599, 599, 599, 599, + + 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, + 609, 609, 609, 769, 980, 742, 609, 609, 609, 609, + 609, 609, 984, 741, 773, 776, 776, 776, 776, 776, + 776, 776, 776, 776, 776, 802, 802, 802, 802, 802, + 802, 609, 609, 609, 609, 609, 609, 612, 612, 612, + 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, + 898, 984, 898, 612, 612, 612, 612, 612, 612, 778, + 778, 778, 778, 778, 778, 778, 778, 778, 778, 832, + 833, 808, 739, 832, 833, 808, 1032, 700, 612, 612, + 612, 612, 612, 612, 615, 615, 615, 615, 615, 615, + + 615, 615, 615, 615, 615, 615, 832, 833, 808, 615, + 615, 615, 615, 615, 615, 782, 882, 782, 782, 782, + 782, 782, 782, 898, 692, 1032, 882, 782, 691, 793, + 793, 808, 690, 685, 615, 615, 615, 615, 615, 615, + 668, 793, 668, 668, 668, 668, 668, 668, 668, 668, + 668, 668, 784, 784, 784, 784, 784, 784, 784, 784, + 784, 784, 787, 874, 787, 787, 787, 787, 787, 787, + 787, 787, 787, 787, 874, 1048, 1048, 1048, 1048, 668, + 669, 931, 669, 669, 669, 669, 669, 669, 669, 669, + 669, 669, 788, 931, 788, 788, 788, 788, 788, 788, + + 788, 788, 788, 788, 789, 875, 789, 789, 789, 789, + 789, 789, 789, 789, 789, 789, 875, 1060, 1087, 669, + 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, + 687, 790, 684, 790, 790, 790, 790, 790, 790, 790, + 790, 790, 790, 794, 794, 795, 795, 795, 795, 795, + 795, 795, 795, 795, 795, 794, 1060, 1087, 687, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 796, 796, 799, 799, 799, 799, 799, 799, 799, 799, + 683, 682, 796, 932, 799, 801, 801, 801, 801, 801, + 801, 801, 801, 801, 801, 932, 679, 688, 689, 689, + + 689, 689, 689, 689, 689, 689, 689, 689, 689, 803, + 934, 803, 803, 803, 803, 803, 803, 803, 803, 803, + 803, 678, 934, 811, 812, 675, 996, 811, 812, 826, + 826, 826, 826, 826, 826, 826, 689, 694, 996, 694, + 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, + 811, 812, 673, 694, 694, 694, 694, 694, 694, 822, + 822, 822, 822, 822, 822, 822, 822, 822, 822, 1136, + 1136, 1157, 1157, 811, 812, 1136, 672, 1157, 694, 694, + 694, 694, 694, 694, 697, 697, 697, 697, 697, 697, + 697, 697, 697, 697, 697, 1163, 1163, 1163, 697, 697, + + 697, 697, 697, 697, 824, 824, 824, 824, 824, 824, + 824, 824, 824, 824, 824, 842, 845, 846, 658, 842, + 845, 846, 657, 697, 697, 697, 697, 697, 697, 710, + 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, + 710, 710, 842, 845, 846, 710, 710, 710, 710, 710, + 710, 825, 825, 825, 825, 825, 825, 825, 825, 825, + 825, 825, 886, 842, 845, 846, 886, 654, 652, 651, + 710, 710, 710, 710, 710, 710, 713, 713, 713, 713, + 713, 713, 713, 713, 713, 713, 713, 713, 713, 886, + 646, 640, 713, 713, 713, 713, 713, 713, 835, 835, + + 835, 835, 835, 835, 835, 835, 835, 835, 839, 839, + 839, 839, 839, 839, 839, 639, 637, 713, 713, 713, + 713, 713, 713, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 1103, 835, 636, 635, 716, 716, + 716, 716, 716, 716, 634, 853, 839, 853, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 866, 866, 866, + 866, 866, 866, 716, 716, 716, 716, 716, 716, 721, + 890, 892, 721, 1103, 890, 892, 958, 958, 721, 958, + 958, 721, 721, 618, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 890, 892, 598, + + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 721, 721, 721, 721, 721, 721, 721, + 721, 721, 721, 752, 597, 596, 997, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 997, 752, + 595, 584, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 583, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + + 752, 752, 752, 752, 758, 758, 758, 758, 758, 758, + 758, 758, 758, 758, 758, 854, 582, 854, 854, 854, + 854, 854, 854, 854, 854, 854, 854, 855, 946, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 946, + 581, 580, 758, 759, 759, 759, 759, 759, 759, 759, + 759, 759, 759, 759, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 863, 999, 863, 863, 863, 863, + 863, 863, 1158, 1158, 1179, 1179, 863, 999, 1158, 579, + 1179, 759, 760, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 865, 865, 865, 865, 865, 865, 865, + + 865, 865, 865, 868, 896, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 876, 876, 1181, 1181, 1043, + 760, 761, 578, 1181, 761, 577, 896, 876, 896, 896, + 761, 1043, 576, 761, 761, 575, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 961, + 574, 961, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 771, 771, 771, 771, 771, + + 771, 771, 771, 771, 771, 771, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 871, 961, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 1018, 1018, + 565, 1018, 1018, 771, 772, 772, 772, 772, 772, 772, + 772, 772, 772, 772, 772, 872, 564, 872, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 873, 563, 873, + 873, 873, 873, 873, 873, 940, 940, 940, 940, 940, + 940, 562, 772, 780, 561, 780, 780, 780, 780, 780, + 780, 780, 780, 780, 780, 780, 783, 560, 783, 783, + 783, 783, 783, 783, 783, 783, 783, 783, 783, 559, + + 558, 557, 783, 783, 783, 783, 783, 783, 881, 881, + 881, 881, 881, 881, 881, 881, 556, 884, 906, 951, + 1227, 884, 906, 951, 555, 554, 1227, 783, 783, 783, + 783, 783, 783, 786, 786, 786, 786, 786, 786, 786, + 786, 786, 786, 786, 884, 906, 951, 786, 786, 786, + 786, 786, 786, 900, 553, 1182, 1182, 900, 900, 900, + 900, 1182, 1052, 1052, 901, 1052, 1052, 884, 901, 901, + 901, 901, 786, 786, 786, 786, 786, 786, 797, 797, + 797, 797, 797, 797, 797, 797, 797, 797, 797, 797, + 797, 545, 544, 543, 797, 797, 797, 797, 797, 797, + + 1005, 1005, 1005, 1005, 1005, 1005, 902, 900, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 901, 797, + 797, 797, 797, 797, 797, 800, 800, 800, 800, 800, + 800, 800, 800, 800, 800, 800, 800, 535, 502, 501, + 500, 800, 800, 800, 800, 800, 800, 903, 499, 903, + 903, 903, 903, 903, 903, 903, 903, 903, 903, 1010, + 1010, 1010, 1010, 1010, 1010, 1010, 800, 800, 800, 800, + 800, 800, 805, 967, 1170, 805, 967, 1170, 497, 1170, + 496, 805, 967, 967, 805, 805, 967, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + + 967, 967, 967, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 805, 805, 805, 805, + 805, 805, 805, 805, 805, 805, 829, 488, 487, 928, + 829, 928, 928, 928, 928, 928, 928, 486, 829, 485, + 484, 483, 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 482, 481, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, + + 478, 829, 829, 829, 829, 829, 829, 829, 829, 829, + 829, 829, 829, 829, 829, 829, 829, 829, 829, 837, + 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, + 904, 476, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 905, 465, 905, 905, 905, 905, 905, 905, + 905, 905, 905, 905, 464, 463, 462, 837, 838, 838, + 838, 838, 838, 838, 838, 838, 838, 838, 838, 922, + 461, 922, 922, 922, 922, 922, 922, 914, 460, 459, + 458, 914, 924, 924, 924, 924, 924, 924, 924, 924, + 924, 924, 1183, 1183, 1221, 1221, 838, 840, 1183, 976, + + 840, 1221, 1186, 976, 914, 1186, 840, 1186, 922, 840, + 840, 455, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 914, 976, 448, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 848, 441, 848, 848, 848, 848, 848, 848, 848, + 848, 848, 848, 440, 439, 438, 918, 918, 918, 918, + 918, 918, 918, 918, 918, 918, 926, 437, 926, 926, + + 926, 926, 926, 926, 926, 926, 926, 926, 436, 431, + 848, 849, 428, 849, 849, 849, 849, 849, 849, 849, + 849, 849, 849, 918, 927, 402, 927, 927, 927, 927, + 927, 927, 927, 927, 927, 927, 933, 933, 933, 933, + 933, 933, 933, 933, 933, 933, 1187, 1187, 401, 398, + 849, 850, 1187, 850, 850, 850, 850, 850, 850, 850, + 850, 850, 850, 937, 397, 937, 937, 937, 937, 937, + 937, 385, 384, 383, 382, 937, 939, 939, 939, 939, + 939, 939, 939, 939, 939, 939, 1188, 1188, 381, 380, + 850, 851, 1188, 851, 851, 851, 851, 851, 851, 851, + + 851, 851, 851, 942, 379, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 943, 943, 943, 943, 943, + 943, 943, 943, 943, 943, 943, 1189, 1189, 378, 377, + 851, 861, 1189, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 864, 376, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 375, 374, 371, + 864, 864, 864, 864, 864, 864, 944, 944, 944, 944, + 944, 944, 944, 944, 944, 944, 944, 953, 365, 1077, + 1077, 953, 1077, 1077, 363, 864, 864, 864, 864, 864, + 864, 867, 867, 867, 867, 867, 867, 867, 867, 867, + + 867, 867, 362, 361, 953, 867, 867, 867, 867, 867, + 867, 945, 945, 945, 945, 945, 945, 945, 945, 945, + 945, 945, 985, 1192, 1192, 360, 985, 953, 359, 1192, + 867, 867, 867, 867, 867, 867, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 910, 985, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 962, 1225, 358, 1225, 962, 962, 962, 962, 963, 1225, + 985, 357, 963, 963, 963, 963, 970, 970, 970, 970, + 970, 970, 970, 970, 970, 970, 356, 910, 911, 355, + 911, 911, 911, 911, 911, 911, 911, 911, 911, 911, + + 964, 354, 1193, 1193, 964, 964, 964, 964, 1193, 353, + 352, 965, 349, 338, 962, 965, 965, 965, 965, 1194, + 1194, 334, 963, 1197, 1197, 1194, 333, 911, 912, 1197, + 912, 912, 912, 912, 912, 912, 912, 912, 912, 912, + 966, 332, 331, 966, 966, 966, 966, 966, 966, 966, + 966, 966, 966, 327, 964, 968, 326, 1198, 1198, 968, + 968, 968, 968, 1198, 325, 965, 324, 912, 913, 323, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 972, 322, 972, 972, 972, 972, 972, 972, 972, 972, + 972, 972, 320, 969, 319, 1202, 969, 1013, 1202, 318, + + 1202, 1013, 969, 969, 317, 316, 969, 913, 920, 968, 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, - 921, 0, 0, 921, 0, 0, 0, 0, 0, 921, - 921, 921, 0, 0, 921, 921, 921, 921, 921, 922, - - 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, - 922, 922, 922, 922, 922, 922, 922, 922, 923, 0, - 0, 923, 0, 0, 923, 0, 0, 923, 923, 923, - 923, 0, 923, 923, 923, 923, 923, 924, 0, 0, - 924, 0, 0, 0, 0, 0, 924, 924, 924, 0, - 0, 924, 924, 924, 924, 924, 925, 0, 0, 925, - 925, 925, 0, 925, 0, 925, 925, 925, 0, 0, - 925, 925, 925, 925, 925, 926, 926, 0, 0, 0, - 0, 926, 927, 0, 0, 927, 927, 927, 0, 927, - 0, 927, 927, 927, 0, 0, 927, 927, 927, 927, - - 927, 928, 0, 0, 928, 928, 928, 0, 928, 0, - 928, 928, 928, 0, 928, 928, 0, 928, 928, 928, - 929, 929, 929, 930, 0, 0, 930, 930, 0, 0, - 930, 0, 930, 930, 930, 930, 0, 930, 930, 930, - 930, 930, 931, 931, 931, 931, 931, 931, 931, 931, - 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, - 931, 932, 932, 0, 932, 932, 0, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, - 933, 0, 0, 933, 0, 0, 933, 0, 0, 933, - 933, 933, 933, 0, 933, 933, 933, 933, 933, 934, - - 0, 0, 934, 0, 0, 0, 0, 0, 934, 934, - 934, 0, 934, 934, 934, 934, 934, 934, 935, 0, - 0, 935, 935, 935, 0, 935, 0, 935, 935, 935, - 0, 935, 935, 935, 935, 935, 935, 936, 0, 0, - 0, 936, 936, 936, 936, 936, 936, 936, 936, 936, - 936, 936, 936, 936, 936, 936, 937, 937, 937, 937, - 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, - 937, 937, 937, 937, 937, 938, 938, 0, 938, 938, - 938, 938, 938, 938, 938, 938, 938, 938, 938, 938, - 938, 938, 938, 938, 939, 0, 0, 939, 939, 939, - - 0, 939, 0, 939, 939, 939, 0, 0, 939, 939, - 939, 939, 939, 940, 940, 0, 0, 0, 0, 940, - 941, 941, 0, 0, 0, 0, 941, 942, 942, 942, - 0, 0, 0, 0, 942, 943, 0, 0, 943, 943, - 943, 0, 943, 0, 943, 943, 943, 0, 0, 943, - 943, 943, 943, 943, 944, 0, 0, 944, 944, 944, - 0, 944, 0, 944, 944, 944, 0, 0, 944, 944, - 944, 944, 944, 945, 0, 0, 945, 945, 945, 0, - 945, 0, 945, 945, 945, 0, 945, 945, 0, 945, - 945, 945, 946, 946, 946, 947, 0, 0, 947, 947, - - 0, 0, 947, 0, 947, 947, 947, 947, 0, 947, - 947, 947, 947, 947, 948, 948, 0, 948, 948, 0, - 948, 948, 948, 948, 948, 948, 948, 948, 948, 948, - 948, 948, 948, 949, 0, 0, 949, 0, 0, 0, - 0, 0, 949, 949, 949, 0, 0, 949, 949, 949, - 949, 949, 950, 0, 0, 950, 0, 0, 0, 0, - 0, 950, 950, 950, 0, 950, 950, 950, 950, 950, - 950, 951, 0, 0, 951, 951, 951, 0, 951, 0, - 951, 951, 951, 0, 951, 951, 951, 951, 951, 951, - 952, 0, 0, 952, 0, 952, 953, 0, 0, 0, - - 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, - 953, 953, 953, 953, 953, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, - 954, 954, 954, 954, 955, 955, 0, 0, 0, 0, - 955, 956, 956, 956, 0, 0, 0, 0, 956, 957, - 957, 0, 0, 0, 0, 957, 958, 958, 0, 0, - 0, 0, 958, 959, 959, 0, 0, 0, 0, 959, - 960, 960, 960, 0, 0, 0, 0, 960, 961, 0, - 0, 961, 0, 961, 962, 962, 0, 0, 0, 0, - 962, 963, 963, 0, 0, 0, 0, 963, 964, 964, - - 0, 0, 0, 0, 964, 965, 965, 965, 0, 0, - 0, 0, 965, 966, 966, 966, 966, 0, 0, 0, - 0, 966, 967, 967, 0, 0, 0, 0, 967, 968, - 968, 0, 0, 0, 0, 968, 969, 969, 0, 0, - 0, 0, 969, 970, 970, 970, 0, 0, 0, 0, - 970, 971, 971, 971, 971, 0, 0, 0, 0, 971, - 972, 972, 0, 0, 0, 0, 972, 973, 973, 0, - 0, 0, 0, 973, 974, 974, 974, 0, 0, 0, - 0, 974, 975, 975, 975, 975, 0, 0, 0, 0, - 975, 976, 976, 0, 0, 0, 0, 976, 977, 0, - - 977, 977, 0, 0, 0, 0, 977, 978, 978, 978, - 0, 0, 0, 0, 978, 979, 979, 979, 979, 0, - 0, 0, 0, 979, 980, 980, 0, 0, 0, 0, - 980, 981, 0, 981, 981, 0, 0, 0, 0, 981, - 982, 982, 982, 0, 0, 0, 0, 982, 983, 983, - 983, 0, 0, 0, 0, 0, 983, 984, 984, 984, - 984, 984, 984, 984, 984, 984, 984, 984, 984, 984, - 984, 984, 984, 984, 984, 984, 985, 985, 0, 985, - 985, 985, 985, 0, 0, 985, 985, 985, 0, 0, - 985, 985, 985, 985, 985, 986, 986, 0, 986, 986, - - 986, 986, 0, 0, 986, 986, 986, 0, 0, 986, - 986, 986, 986, 986, 987, 987, 0, 0, 0, 0, - 987, 988, 0, 988, 988, 0, 0, 0, 0, 988, - 989, 989, 0, 0, 0, 0, 0, 989, 990, 990, - 0, 0, 0, 0, 990, 991, 0, 991, 991, 0, - 0, 0, 0, 991, 992, 992, 0, 0, 0, 0, - 992, 993, 0, 993, 0, 0, 0, 0, 0, 993, - 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, - 994, 994, 994, 994, 994, 994, 994, 994, 994, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, 915, 915, 915 + 969, 969, 969, 973, 1013, 973, 973, 973, 973, 973, + 973, 973, 973, 973, 973, 974, 315, 974, 974, 974, + 974, 974, 974, 1204, 1204, 314, 313, 920, 921, 1204, + 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, + 312, 311, 310, 308, 301, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 983, 300, 983, 983, 983, + 983, 983, 983, 1212, 1212, 286, 285, 921, 935, 1212, + 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, + + 935, 938, 979, 938, 938, 938, 938, 938, 938, 938, + 938, 938, 938, 938, 983, 283, 282, 938, 938, 938, + 938, 938, 938, 991, 281, 991, 991, 991, 991, 991, + 991, 991, 991, 991, 991, 1094, 1094, 1094, 1094, 1094, + 1094, 280, 938, 938, 938, 938, 938, 938, 941, 941, + 941, 941, 941, 941, 941, 941, 941, 941, 279, 273, + 269, 266, 941, 941, 941, 941, 941, 941, 992, 264, + 992, 992, 992, 992, 992, 992, 992, 992, 992, 992, + 1121, 1121, 1121, 1121, 1121, 1121, 262, 941, 941, 941, + 941, 941, 941, 981, 259, 981, 981, 981, 981, 981, + + 981, 981, 981, 981, 981, 993, 258, 993, 993, 993, + 993, 993, 993, 993, 993, 993, 993, 998, 998, 998, + 998, 998, 998, 998, 998, 998, 998, 1024, 1219, 1219, + 257, 1024, 981, 982, 1219, 982, 982, 982, 982, 982, + 982, 982, 982, 982, 982, 1002, 256, 1002, 1002, 1002, + 1002, 1002, 1002, 255, 1024, 253, 252, 1002, 1004, 1004, + 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1222, 1222, + 251, 250, 982, 988, 1222, 988, 988, 988, 988, 988, + 988, 988, 988, 988, 988, 1006, 248, 1006, 1006, 1006, + 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1008, 1008, 1008, + + 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 242, 234, + 1049, 230, 988, 989, 1049, 989, 989, 989, 989, 989, + 989, 989, 989, 989, 989, 1009, 1009, 1009, 1009, 1009, + 1009, 1009, 1009, 1009, 1009, 1009, 225, 1049, 1015, 224, + 222, 1040, 1015, 1040, 1040, 1040, 1040, 1040, 1040, 218, + 213, 211, 989, 990, 206, 990, 990, 990, 990, 990, + 990, 990, 990, 990, 990, 1015, 1019, 1019, 1019, 1019, + 1019, 1019, 1019, 1019, 1019, 1019, 1020, 1020, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 1209, 194, 1015, 1209, + 193, 1209, 990, 1000, 192, 1000, 1000, 1000, 1000, 1000, + + 1000, 1000, 1000, 1000, 1000, 1000, 1003, 191, 1003, 1003, + 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 190, 182, + 181, 180, 1003, 1003, 1003, 1003, 1003, 1003, 1021, 179, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 178, 1118, 1118, 1118, 1118, 1118, 1118, 1003, 1003, 1003, + 1003, 1003, 1003, 1022, 177, 1022, 1022, 1022, 1022, 1022, + 1022, 1022, 1022, 1022, 1022, 1023, 175, 1023, 1023, 1023, + 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1026, 1118, 1026, + 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 174, + 173, 1029, 172, 171, 170, 1029, 1031, 1031, 1031, 1031, + + 1031, 1031, 1031, 1031, 1031, 1031, 1035, 169, 1035, 1035, + 1035, 1035, 1035, 1035, 168, 163, 1026, 1027, 1029, 1027, + 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 159, + 158, 1058, 154, 1031, 151, 1058, 1224, 1224, 147, 1029, + 144, 141, 1224, 137, 133, 1035, 1036, 1036, 1036, 1036, + 1036, 1036, 1036, 1036, 1036, 1036, 1027, 1028, 1058, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1038, + 132, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, 1039, 131, 1039, 1039, 1039, 1039, 1039, 1039, 1039, + 1039, 1039, 1039, 130, 1074, 129, 1028, 1033, 1074, 1033, + + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1046, + 125, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, + 1046, 1074, 1051, 119, 117, 1057, 1051, 1057, 1057, 1057, + 1057, 1057, 1057, 113, 109, 108, 1033, 1034, 107, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1051, + 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, + 1055, 106, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, + 1055, 1055, 1051, 105, 101, 1056, 1034, 1056, 1056, 1056, + 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1059, 1059, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 88, 1063, 81, + + 1063, 1063, 1063, 1063, 1063, 1063, 74, 73, 69, 68, + 67, 1064, 62, 60, 1101, 1064, 1101, 1101, 1101, 1101, + 1101, 1101, 51, 50, 1059, 1061, 48, 1061, 1061, 1061, + 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1063, 1064, 1068, + 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1069, + 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1064, + 47, 41, 36, 30, 1061, 1062, 24, 1062, 1062, 1062, + 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1070, 1070, 1070, + 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1080, 23, 1080, + 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 20, + + 19, 0, 0, 0, 1062, 1065, 0, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1081, 0, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1082, + 0, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, + 1082, 0, 0, 0, 1065, 1066, 0, 1066, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 0, 0, 0, + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1090, 0, 1090, 1090, 1090, 1090, 1090, 1090, 0, 0, + 0, 0, 0, 0, 1066, 1067, 0, 1067, 1067, 1067, + 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1086, 1092, 1092, + + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 0, 1090, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 0, 0, 0, 0, 1067, 1083, 0, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1097, 1097, 1097, + 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1099, 0, 1099, + 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 0, + 0, 0, 0, 0, 1083, 1084, 0, 1084, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1100, 0, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 0, + + 0, 0, 0, 0, 1084, 1085, 0, 1085, 1085, 1085, + 1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 1106, 0, + 1106, 1106, 1106, 1106, 1106, 1106, 1102, 1107, 1107, 1107, + 1107, 1107, 1107, 1107, 1107, 1107, 1107, 0, 1124, 1124, + 1124, 1124, 1124, 1124, 1085, 1088, 0, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1106, 0, 0, + 0, 0, 0, 0, 1107, 1108, 1108, 1108, 1108, 1108, + 1108, 1108, 1108, 1108, 1108, 1124, 0, 0, 0, 0, + 0, 0, 0, 0, 1088, 1089, 0, 1089, 1089, 1089, + 1089, 1089, 1089, 1089, 1089, 1089, 1089, 0, 0, 0, + + 0, 0, 1108, 1109, 1109, 1109, 1109, 1109, 1109, 1109, + 1109, 1109, 1109, 1110, 1110, 1110, 1110, 1110, 1110, 1110, + 1110, 1110, 1110, 0, 1089, 1104, 0, 1104, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1104, 0, 0, 0, + 1109, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, + 1111, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, + 1112, 0, 0, 0, 1104, 1105, 0, 1105, 1105, 1105, + 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1113, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1114, 1114, 1114, + 1114, 1114, 1114, 1114, 1114, 1114, 1114, 0, 0, 0, + + 0, 0, 0, 0, 1105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1114, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1117, 1117, 1117, 1117, 1117, + 1117, 1117, 1117, 1117, 1117, 1120, 1120, 1120, 1120, 1120, + 1120, 1120, 1120, 1120, 1120, 0, 0, 0, 0, 0, + 0, 0, 1115, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1117, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1123, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, + 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, + 1126, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, + 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, + 1128, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, + 1129, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + + 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, 1131, 0, 0, 1131, 0, 0, 0, 0, 1131, + 0, 1131, 1131, 1131, 0, 0, 1131, 1131, 1131, 1131, + 1131, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132, + 1132, 1133, 0, 0, 1133, 0, 0, 1133, 0, 1133, + 0, 1133, 1133, 1133, 1133, 0, 1133, 1133, 1133, 1133, + 1133, 1134, 0, 0, 1134, 0, 0, 0, 0, 1134, + 0, 1134, 1134, 1134, 0, 0, 1134, 1134, 1134, 1134, + 1134, 1135, 0, 0, 1135, 1135, 1135, 0, 1135, 1135, + + 0, 1135, 1135, 1135, 0, 0, 1135, 1135, 1135, 1135, + 1135, 1137, 0, 0, 1137, 1137, 1137, 0, 1137, 1137, + 0, 1137, 1137, 1137, 0, 0, 1137, 1137, 1137, 1137, + 1137, 1138, 0, 0, 1138, 1138, 1138, 0, 1138, 1138, + 0, 1138, 1138, 1138, 0, 1138, 1138, 0, 1138, 1138, + 1138, 1140, 0, 0, 1140, 1140, 0, 0, 1140, 1140, + 0, 1140, 1140, 1140, 1140, 0, 1140, 1140, 1140, 1140, + 1140, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, + 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, + 1141, 1142, 1142, 0, 1142, 1142, 0, 1142, 1142, 1142, + + 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, + 1142, 1143, 0, 0, 1143, 0, 0, 1143, 0, 1143, + 0, 1143, 1143, 1143, 1143, 0, 1143, 1143, 1143, 1143, + 1143, 1144, 0, 0, 1144, 0, 0, 0, 0, 1144, + 0, 1144, 1144, 1144, 0, 1144, 1144, 1144, 1144, 1144, + 1144, 1145, 0, 0, 1145, 1145, 1145, 0, 1145, 1145, + 0, 1145, 1145, 1145, 0, 1145, 1145, 1145, 1145, 1145, + 1145, 1146, 0, 0, 0, 1146, 1146, 1146, 1146, 1146, + 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, + 1146, 1147, 0, 0, 1147, 0, 0, 0, 0, 1147, + + 0, 1147, 1147, 1147, 0, 0, 1147, 1147, 1147, 1147, + 1147, 1148, 0, 0, 1148, 0, 0, 1148, 0, 1148, + 0, 1148, 1148, 1148, 1148, 0, 1148, 1148, 1148, 1148, + 1148, 1149, 0, 0, 1149, 0, 0, 0, 0, 1149, + 0, 1149, 1149, 1149, 0, 0, 1149, 1149, 1149, 1149, + 1149, 1150, 0, 0, 1150, 1150, 1150, 0, 1150, 1150, + 0, 1150, 1150, 1150, 0, 0, 1150, 1150, 1150, 1150, + 1150, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, + 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, + 1151, 1152, 1152, 0, 1152, 1152, 1152, 1152, 1152, 1152, + + 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, + 1152, 1153, 0, 0, 1153, 0, 0, 0, 0, 1153, + 0, 1153, 1153, 1153, 0, 0, 1153, 1153, 1153, 1153, + 1153, 1154, 0, 0, 1154, 0, 0, 0, 0, 1154, + 0, 1154, 1154, 1154, 0, 0, 1154, 1154, 1154, 1154, + 1154, 1155, 0, 0, 1155, 1155, 1155, 0, 1155, 1155, + 0, 1155, 1155, 1155, 0, 0, 1155, 1155, 1155, 1155, + 1155, 1156, 0, 0, 1156, 1156, 1156, 0, 1156, 1156, + 0, 1156, 1156, 1156, 0, 0, 1156, 1156, 1156, 1156, + 1156, 1159, 1159, 1159, 0, 0, 0, 0, 1159, 1160, + + 0, 0, 1160, 1160, 1160, 0, 1160, 1160, 0, 1160, + 1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 1160, 1161, + 0, 0, 1161, 1161, 1161, 0, 1161, 1161, 0, 1161, + 1161, 1161, 0, 0, 1161, 1161, 1161, 1161, 1161, 1162, + 0, 0, 1162, 1162, 1162, 0, 1162, 1162, 0, 1162, + 1162, 1162, 0, 1162, 1162, 0, 1162, 1162, 1162, 1164, + 0, 0, 1164, 1164, 0, 0, 1164, 1164, 0, 1164, + 1164, 1164, 1164, 0, 1164, 1164, 1164, 1164, 1164, 1165, + 1165, 0, 1165, 1165, 0, 1165, 1165, 1165, 1165, 1165, + 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1166, + + 0, 0, 1166, 0, 0, 0, 0, 1166, 0, 1166, + 1166, 1166, 0, 0, 1166, 1166, 1166, 1166, 1166, 1167, + 0, 0, 1167, 0, 0, 0, 0, 1167, 0, 1167, + 1167, 1167, 0, 1167, 1167, 1167, 1167, 1167, 1167, 1168, + 0, 0, 1168, 1168, 0, 1168, 1168, 0, 0, 1168, + 1168, 1169, 0, 0, 1169, 1169, 1169, 0, 1169, 1169, + 0, 1169, 1169, 1169, 0, 1169, 1169, 1169, 1169, 1169, + 1169, 1171, 0, 0, 0, 1171, 1171, 1171, 1171, 1171, + 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, + 1171, 1172, 0, 0, 1172, 0, 0, 0, 0, 1172, + + 0, 1172, 1172, 1172, 0, 0, 1172, 1172, 1172, 1172, + 1172, 1173, 0, 0, 1173, 0, 0, 0, 0, 1173, + 0, 1173, 1173, 1173, 0, 0, 1173, 1173, 1173, 1173, + 1173, 1174, 0, 0, 1174, 0, 0, 0, 0, 1174, + 0, 1174, 1174, 1174, 0, 0, 1174, 1174, 1174, 1174, + 1174, 1175, 0, 0, 1175, 1175, 1175, 0, 1175, 1175, + 0, 1175, 1175, 1175, 0, 0, 1175, 1175, 1175, 1175, + 1175, 1176, 0, 0, 1176, 1176, 1176, 0, 1176, 1176, + 0, 1176, 1176, 1176, 0, 0, 1176, 1176, 1176, 1176, + 1176, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + + 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, + 1178, 1180, 1180, 1180, 0, 0, 0, 0, 1180, 1184, + 1184, 1184, 0, 0, 0, 0, 1184, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, + 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1190, 1190, 1190, + 0, 0, 0, 0, 1190, 1191, 1191, 1191, 1191, 0, + 0, 0, 0, 1191, 1195, 1195, 1195, 0, 0, 0, + 0, 1195, 1196, 1196, 1196, 1196, 0, 0, 0, 0, + + 1196, 1199, 1199, 1199, 0, 0, 0, 0, 1199, 1200, + 1200, 1200, 1200, 0, 0, 0, 0, 1200, 1201, 1201, + 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, + 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1203, 0, + 0, 1203, 1203, 0, 1203, 1203, 0, 0, 1203, 1203, + 1205, 0, 1205, 1205, 0, 0, 0, 0, 1205, 1206, + 1206, 1206, 0, 0, 0, 0, 1206, 1207, 1207, 1207, + 1207, 0, 0, 0, 0, 1207, 1208, 1208, 1208, 1208, + 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, 1208, + 1208, 1208, 1208, 1208, 1208, 1208, 1210, 0, 0, 1210, + + 1210, 0, 1210, 1210, 0, 0, 1210, 1210, 1211, 0, + 0, 1211, 0, 0, 0, 0, 1211, 0, 1211, 1211, + 1211, 0, 0, 1211, 1211, 1211, 1211, 1211, 1213, 0, + 1213, 1213, 0, 0, 0, 0, 1213, 1214, 1214, 1214, + 0, 0, 0, 0, 1214, 1215, 1215, 1215, 0, 0, + 0, 0, 0, 1215, 1216, 1216, 1216, 1216, 1216, 1216, + 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, + 1216, 1216, 1216, 1216, 1217, 1217, 0, 1217, 1217, 1217, + 1217, 0, 1217, 0, 1217, 1217, 1217, 0, 0, 1217, + 1217, 1217, 1217, 1217, 1218, 1218, 0, 1218, 1218, 1218, + + 1218, 0, 1218, 0, 1218, 1218, 1218, 0, 0, 1218, + 1218, 1218, 1218, 1218, 1220, 0, 1220, 1220, 0, 0, + 0, 0, 1220, 1223, 0, 1223, 1223, 0, 0, 0, + 0, 1223, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, 1125, + 1125, 1125, 1125, 1125, 1125, 1125, 1125 } ; static yy_state_type yy_last_accepting_state; @@ -2257,7 +2806,8 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; -#line 2255 "toke.c" + +#line 2805 "toke.c" #define INITIAL 0 #define GOTDEFS 1 @@ -2267,6 +2817,7 @@ int (*trace_print)(const char *msg) = sudoers_trace_print; #define INSTR 5 #define WANTDIGEST 6 #define GOTINC 7 +#define EXPECTPATH 8 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way @@ -2476,9 +3027,9 @@ YY_DECL } { -#line 119 "toke.l" +#line 120 "toke.l" -#line 2476 "toke.c" +#line 3027 "toke.c" while ( 1 ) /* loops until end-of-file is reached */ { @@ -2506,13 +3057,13 @@ YY_DECL while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 916 ) + if ( yy_current_state >= 1126 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 6090 ); + while ( yy_base[yy_current_state] != 8253 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -2538,7 +3089,7 @@ YY_DECL case 1: YY_RULE_SETUP -#line 120 "toke.l" +#line 121 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -2546,12 +3097,12 @@ YY_RULE_SETUP YY_BREAK case 2: YY_RULE_SETUP -#line 125 "toke.l" +#line 126 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 127 "toke.l" +#line 128 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -2563,7 +3114,7 @@ YY_RULE_SETUP case 4: YY_RULE_SETUP -#line 136 "toke.l" +#line 137 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -2572,7 +3123,7 @@ YY_RULE_SETUP YY_BREAK case 5: YY_RULE_SETUP -#line 142 "toke.l" +#line 143 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -2580,7 +3131,7 @@ YY_RULE_SETUP YY_BREAK case 6: YY_RULE_SETUP -#line 147 "toke.l" +#line 148 "toke.l" { LEXTRACE("+= "); LEXRETURN('+'); @@ -2588,7 +3139,7 @@ YY_RULE_SETUP YY_BREAK case 7: YY_RULE_SETUP -#line 152 "toke.l" +#line 153 "toke.l" { LEXTRACE("-= "); LEXRETURN('-'); @@ -2596,7 +3147,7 @@ YY_RULE_SETUP YY_BREAK case 8: YY_RULE_SETUP -#line 157 "toke.l" +#line 158 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2606,7 +3157,7 @@ YY_RULE_SETUP YY_BREAK case 9: YY_RULE_SETUP -#line 164 "toke.l" +#line 165 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -2619,7 +3170,7 @@ YY_RULE_SETUP case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 173 "toke.l" +#line 174 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -2628,7 +3179,7 @@ YY_RULE_SETUP YY_BREAK case 11: YY_RULE_SETUP -#line 179 "toke.l" +#line 180 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -2666,7 +3217,7 @@ YY_RULE_SETUP YY_BREAK case 12: YY_RULE_SETUP -#line 214 "toke.l" +#line 215 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -2675,7 +3226,7 @@ YY_RULE_SETUP YY_BREAK case 13: YY_RULE_SETUP -#line 220 "toke.l" +#line 221 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -2686,7 +3237,7 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP -#line 228 "toke.l" +#line 229 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -2697,7 +3248,7 @@ YY_RULE_SETUP YY_BREAK case 15: YY_RULE_SETUP -#line 236 "toke.l" +#line 237 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -2709,7 +3260,7 @@ YY_RULE_SETUP case 16: /* rule 16 can match eol */ YY_RULE_SETUP -#line 244 "toke.l" +#line 245 "toke.l" { BEGIN INITIAL; sudoersless(0); @@ -2719,7 +3270,7 @@ YY_RULE_SETUP YY_BREAK case 17: YY_RULE_SETUP -#line 251 "toke.l" +#line 252 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2730,7 +3281,7 @@ YY_RULE_SETUP case 18: YY_RULE_SETUP -#line 259 "toke.l" +#line 260 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t digest_len = @@ -2748,7 +3299,7 @@ YY_RULE_SETUP YY_BREAK case 19: YY_RULE_SETUP -#line 274 "toke.l" +#line 275 "toke.l" { /* Only return DIGEST if the length is correct. */ yy_size_t len, digest_len = @@ -2773,7 +3324,7 @@ YY_RULE_SETUP YY_BREAK case 20: YY_RULE_SETUP -#line 296 "toke.l" +#line 297 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2788,7 +3339,7 @@ YY_RULE_SETUP YY_BREAK case 21: YY_RULE_SETUP -#line 308 "toke.l" +#line 309 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2804,7 +3355,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 320 "toke.l" +#line 321 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2824,7 +3375,7 @@ YY_RULE_SETUP case 23: /* rule 23 can match eol */ YY_RULE_SETUP -#line 336 "toke.l" +#line 337 "toke.l" { if (continued) { sudoerserror("invalid line continuation"); @@ -2843,7 +3394,7 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 352 "toke.l" +#line 353 "toke.l" { char deftype; int n; @@ -2887,7 +3438,7 @@ YY_RULE_SETUP YY_BREAK case 25: YY_RULE_SETUP -#line 393 "toke.l" +#line 394 "toke.l" { int n; @@ -2917,7 +3468,7 @@ YY_RULE_SETUP YY_BREAK case 26: YY_RULE_SETUP -#line 420 "toke.l" +#line 421 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2926,7 +3477,7 @@ YY_RULE_SETUP YY_BREAK case 27: YY_RULE_SETUP -#line 426 "toke.l" +#line 427 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2935,7 +3486,7 @@ YY_RULE_SETUP YY_BREAK case 28: YY_RULE_SETUP -#line 432 "toke.l" +#line 433 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2943,7 +3494,7 @@ YY_RULE_SETUP YY_BREAK case 29: YY_RULE_SETUP -#line 437 "toke.l" +#line 438 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2951,7 +3502,7 @@ YY_RULE_SETUP YY_BREAK case 30: YY_RULE_SETUP -#line 442 "toke.l" +#line 443 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2959,7 +3510,7 @@ YY_RULE_SETUP YY_BREAK case 31: YY_RULE_SETUP -#line 447 "toke.l" +#line 448 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2967,7 +3518,7 @@ YY_RULE_SETUP YY_BREAK case 32: YY_RULE_SETUP -#line 452 "toke.l" +#line 453 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2975,7 +3526,7 @@ YY_RULE_SETUP YY_BREAK case 33: YY_RULE_SETUP -#line 457 "toke.l" +#line 458 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2983,7 +3534,7 @@ YY_RULE_SETUP YY_BREAK case 34: YY_RULE_SETUP -#line 462 "toke.l" +#line 463 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2991,7 +3542,7 @@ YY_RULE_SETUP YY_BREAK case 35: YY_RULE_SETUP -#line 467 "toke.l" +#line 468 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2999,7 +3550,7 @@ YY_RULE_SETUP YY_BREAK case 36: YY_RULE_SETUP -#line 472 "toke.l" +#line 473 "toke.l" { LEXTRACE("MAIL "); LEXRETURN(MAIL); @@ -3007,7 +3558,7 @@ YY_RULE_SETUP YY_BREAK case 37: YY_RULE_SETUP -#line 477 "toke.l" +#line 478 "toke.l" { LEXTRACE("NOMAIL "); LEXRETURN(NOMAIL); @@ -3015,7 +3566,7 @@ YY_RULE_SETUP YY_BREAK case 38: YY_RULE_SETUP -#line 482 "toke.l" +#line 483 "toke.l" { LEXTRACE("FOLLOW "); LEXRETURN(FOLLOWLNK); @@ -3023,7 +3574,7 @@ YY_RULE_SETUP YY_BREAK case 39: YY_RULE_SETUP -#line 487 "toke.l" +#line 488 "toke.l" { LEXTRACE("NOFOLLOW "); LEXRETURN(NOFOLLOWLNK); @@ -3031,7 +3582,7 @@ YY_RULE_SETUP YY_BREAK case 40: YY_RULE_SETUP -#line 492 "toke.l" +#line 493 "toke.l" { if (sudoerstext[0] == '+') sudoerserror("empty netgroup"); @@ -3043,7 +3594,7 @@ YY_RULE_SETUP YY_BREAK case 41: YY_RULE_SETUP -#line 501 "toke.l" +#line 502 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -3054,7 +3605,7 @@ YY_RULE_SETUP YY_BREAK case 42: YY_RULE_SETUP -#line 509 "toke.l" +#line 510 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -3065,7 +3616,7 @@ YY_RULE_SETUP YY_BREAK case 43: YY_RULE_SETUP -#line 517 "toke.l" +#line 518 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3075,7 +3626,7 @@ YY_RULE_SETUP YY_BREAK case 44: YY_RULE_SETUP -#line 524 "toke.l" +#line 525 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -3085,7 +3636,7 @@ YY_RULE_SETUP YY_BREAK case 45: YY_RULE_SETUP -#line 531 "toke.l" +#line 532 "toke.l" { if (!ipv6_valid(sudoerstext)) { sudoerserror("invalid IPv6 address"); @@ -3100,7 +3651,7 @@ YY_RULE_SETUP YY_BREAK case 46: YY_RULE_SETUP -#line 543 "toke.l" +#line 544 "toke.l" { if (!ipv6_valid(sudoerstext)) { sudoerserror("invalid IPv6 address"); @@ -3115,7 +3666,7 @@ YY_RULE_SETUP YY_BREAK case 47: YY_RULE_SETUP -#line 555 "toke.l" +#line 556 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); @@ -3124,7 +3675,7 @@ YY_RULE_SETUP YY_BREAK case 48: YY_RULE_SETUP -#line 561 "toke.l" +#line 562 "toke.l" { LEXTRACE("CMND_TIMEOUT "); LEXRETURN(CMND_TIMEOUT); @@ -3132,7 +3683,7 @@ YY_RULE_SETUP YY_BREAK case 49: YY_RULE_SETUP -#line 566 "toke.l" +#line 567 "toke.l" { LEXTRACE("NOTBEFORE "); LEXRETURN(NOTBEFORE); @@ -3140,7 +3691,7 @@ YY_RULE_SETUP YY_BREAK case 50: YY_RULE_SETUP -#line 571 "toke.l" +#line 572 "toke.l" { LEXTRACE("NOTAFTER "); LEXRETURN(NOTAFTER); @@ -3148,7 +3699,27 @@ YY_RULE_SETUP YY_BREAK case 51: YY_RULE_SETUP -#line 576 "toke.l" +#line 577 "toke.l" +{ + LEXTRACE("CWD "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CWD); + } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 584 "toke.l" +{ + LEXTRACE("CHROOT "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CHROOT); + } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 591 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -3158,9 +3729,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 52: +case 54: YY_RULE_SETUP -#line 585 "toke.l" +#line 600 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -3170,9 +3741,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 53: +case 55: YY_RULE_SETUP -#line 593 "toke.l" +#line 608 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -3182,9 +3753,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 54: +case 56: YY_RULE_SETUP -#line 602 "toke.l" +#line 617 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -3194,9 +3765,9 @@ YY_RULE_SETUP #endif } YY_BREAK -case 55: +case 57: YY_RULE_SETUP -#line 611 "toke.l" +#line 626 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -3205,9 +3776,9 @@ YY_RULE_SETUP LEXRETURN(ALIAS); } YY_BREAK -case 56: +case 58: YY_RULE_SETUP -#line 619 "toke.l" +#line 634 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -3217,9 +3788,9 @@ YY_RULE_SETUP LEXRETURN(COMMAND); } YY_BREAK -case 57: +case 59: YY_RULE_SETUP -#line 628 "toke.l" +#line 643 "toke.l" { digest_type = SUDO_DIGEST_SHA224; BEGIN WANTDIGEST; @@ -3227,9 +3798,9 @@ YY_RULE_SETUP LEXRETURN(SHA224_TOK); } YY_BREAK -case 58: +case 60: YY_RULE_SETUP -#line 635 "toke.l" +#line 650 "toke.l" { digest_type = SUDO_DIGEST_SHA256; BEGIN WANTDIGEST; @@ -3237,9 +3808,9 @@ YY_RULE_SETUP LEXRETURN(SHA256_TOK); } YY_BREAK -case 59: +case 61: YY_RULE_SETUP -#line 642 "toke.l" +#line 657 "toke.l" { digest_type = SUDO_DIGEST_SHA384; BEGIN WANTDIGEST; @@ -3247,9 +3818,9 @@ YY_RULE_SETUP LEXRETURN(SHA384_TOK); } YY_BREAK -case 60: +case 62: YY_RULE_SETUP -#line 649 "toke.l" +#line 664 "toke.l" { digest_type = SUDO_DIGEST_SHA512; BEGIN WANTDIGEST; @@ -3257,9 +3828,9 @@ YY_RULE_SETUP LEXRETURN(SHA512_TOK); } YY_BREAK -case 61: +case 63: YY_RULE_SETUP -#line 656 "toke.l" +#line 671 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -3267,9 +3838,20 @@ YY_RULE_SETUP yyterminate(); } /* sudo -e */ YY_BREAK -case 62: +case 64: YY_RULE_SETUP -#line 663 "toke.l" +#line 678 "toke.l" +{ + BEGIN prev_state; + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("WORD(5) "); + LEXRETURN(WORD); + } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 686 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -3277,17 +3859,16 @@ YY_RULE_SETUP if (!fill_cmnd(sudoerstext, sudoersleng)) yyterminate(); LEXRETURN(COMMAND); - } else { - BEGIN GOTCMND; - LEXTRACE("COMMAND "); - if (!fill_cmnd(sudoerstext, sudoersleng)) - yyterminate(); } + BEGIN GOTCMND; + LEXTRACE("COMMAND "); + if (!fill_cmnd(sudoerstext, sudoersleng)) + yyterminate(); } /* a pathname */ YY_BREAK -case 63: +case 66: YY_RULE_SETUP -#line 678 "toke.l" +#line 700 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3295,33 +3876,33 @@ YY_RULE_SETUP BEGIN INSTR; } YY_BREAK -case 64: +case 67: YY_RULE_SETUP -#line 685 "toke.l" +#line 707 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) yyterminate(); - LEXTRACE("WORD(5) "); + LEXTRACE("WORD(6) "); LEXRETURN(WORD); } YY_BREAK -case 65: +case 68: YY_RULE_SETUP -#line 694 "toke.l" +#line 716 "toke.l" { /* include file/directory */ if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; - LEXTRACE("WORD(6) "); + LEXTRACE("WORD(7) "); LEXRETURN(WORD); } YY_BREAK -case 66: +case 69: YY_RULE_SETUP -#line 703 "toke.l" +#line 725 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -3330,49 +3911,49 @@ YY_RULE_SETUP } YY_BREAK -case 67: +case 70: YY_RULE_SETUP -#line 711 "toke.l" +#line 733 "toke.l" { LEXTRACE("( "); LEXRETURN('('); } YY_BREAK -case 68: +case 71: YY_RULE_SETUP -#line 716 "toke.l" +#line 738 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); } YY_BREAK -case 69: +case 72: YY_RULE_SETUP -#line 721 "toke.l" +#line 743 "toke.l" { LEXTRACE(", "); LEXRETURN(','); } /* return ',' */ YY_BREAK -case 70: +case 73: YY_RULE_SETUP -#line 726 "toke.l" +#line 748 "toke.l" { LEXTRACE("= "); LEXRETURN('='); } /* return '=' */ YY_BREAK -case 71: +case 74: YY_RULE_SETUP -#line 731 "toke.l" +#line 753 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); } /* return ':' */ YY_BREAK -case 72: +case 75: YY_RULE_SETUP -#line 736 "toke.l" +#line 758 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3380,10 +3961,10 @@ YY_RULE_SETUP } } YY_BREAK -case 73: -/* rule 73 can match eol */ +case 76: +/* rule 76 can match eol */ YY_RULE_SETUP -#line 743 "toke.l" +#line 765 "toke.l" { if (YY_START == INSTR) { sudoerserror("unexpected line break in string"); @@ -3397,27 +3978,27 @@ YY_RULE_SETUP LEXRETURN('\n'); } /* return newline */ YY_BREAK -case 74: +case 77: YY_RULE_SETUP -#line 756 "toke.l" +#line 778 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } YY_BREAK -case 75: -/* rule 75 can match eol */ +case 78: +/* rule 78 can match eol */ YY_RULE_SETUP -#line 760 "toke.l" +#line 782 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; continued = true; } /* throw away EOL after \ */ YY_BREAK -case 76: -/* rule 76 can match eol */ +case 79: +/* rule 79 can match eol */ YY_RULE_SETUP -#line 766 "toke.l" +#line 788 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3433,9 +4014,9 @@ YY_RULE_SETUP LEXRETURN('\n'); } /* comment, not uid/gid */ YY_BREAK -case 77: +case 80: YY_RULE_SETUP -#line 781 "toke.l" +#line 803 "toke.l" { LEXTRACE("NOMATCH "); LEXRETURN(NOMATCH); @@ -3449,7 +4030,8 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): case YY_STATE_EOF(GOTINC): -#line 786 "toke.l" +case YY_STATE_EOF(EXPECTPATH): +#line 808 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3461,12 +4043,12 @@ case YY_STATE_EOF(GOTINC): yyterminate(); } YY_BREAK -case 78: +case 81: YY_RULE_SETUP -#line 797 "toke.l" +#line 819 "toke.l" ECHO; YY_BREAK -#line 3464 "toke.c" +#line 4046 "toke.c" case YY_END_OF_BUFFER: { @@ -3760,7 +4342,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 916 ) + if ( yy_current_state >= 1126 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3788,11 +4370,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 916 ) + if ( yy_current_state >= 1126 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 915); + yy_is_jam = (yy_current_state == 1125); return yy_is_jam ? 0 : yy_current_state; } @@ -4427,7 +5009,7 @@ void sudoersfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 797 "toke.l" +#line 819 "toke.l" struct path_list { diff --git a/plugins/sudoers/toke.l b/plugins/sudoers/toke.l index f680dd118f..bd266b323e 100644 --- a/plugins/sudoers/toke.l +++ b/plugins/sudoers/toke.l @@ -115,6 +115,7 @@ DEFVAR [a-z_]+ %x INSTR %s WANTDIGEST %x GOTINC +%s EXPECTPATH %% [[:blank:]]*,[[:blank:]]* { @@ -573,6 +574,20 @@ ALL { LEXRETURN(NOTAFTER); } +CWD { + LEXTRACE("CWD "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CWD); + } + +CHROOT { + LEXTRACE("CHROOT "); + prev_state = YY_START; + BEGIN EXPECTPATH; + LEXRETURN(CHROOT); + } + ROLE { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -660,6 +675,14 @@ sudoedit { yyterminate(); } /* sudo -e */ +({PATH}|{WORD}) { + BEGIN prev_state; + if (!fill(sudoerstext, sudoersleng)) + yyterminate(); + LEXTRACE("WORD(5) "); + LEXRETURN(WORD); + } + {PATH} { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -667,12 +690,11 @@ sudoedit { if (!fill_cmnd(sudoerstext, sudoersleng)) yyterminate(); LEXRETURN(COMMAND); - } else { - BEGIN GOTCMND; - LEXTRACE("COMMAND "); - if (!fill_cmnd(sudoerstext, sudoersleng)) - yyterminate(); } + BEGIN GOTCMND; + LEXTRACE("COMMAND "); + if (!fill_cmnd(sudoerstext, sudoersleng)) + yyterminate(); } /* a pathname */ \" { @@ -686,7 +708,7 @@ sudoedit { /* a word */ if (!fill(sudoerstext, sudoersleng)) yyterminate(); - LEXTRACE("WORD(5) "); + LEXTRACE("WORD(6) "); LEXRETURN(WORD); } @@ -696,7 +718,7 @@ sudoedit { if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; - LEXTRACE("WORD(6) "); + LEXTRACE("WORD(7) "); LEXRETURN(WORD); } From 86513c78b6c93b56088526ef731519fa860e3c27 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 1 Sep 2020 06:26:05 -0600 Subject: [PATCH 057/113] Unit test for exptilde --- MANIFEST | 1 + lib/util/Makefile.in | 8 +- plugins/sudoers/Makefile.in | 36 ++++++- plugins/sudoers/exptilde.c | 5 +- .../sudoers/regress/exptilde/check_exptilde.c | 101 ++++++++++++++++++ 5 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 plugins/sudoers/regress/exptilde/check_exptilde.c diff --git a/MANIFEST b/MANIFEST index f3993d9bbd..acd0120caa 100644 --- a/MANIFEST +++ b/MANIFEST @@ -668,6 +668,7 @@ plugins/sudoers/regress/cvtsudoers/test8.sh plugins/sudoers/regress/cvtsudoers/test9.out.ok plugins/sudoers/regress/cvtsudoers/test9.sh plugins/sudoers/regress/env_match/check_env_pattern.c +plugins/sudoers/regress/env_match/check_exptilde.c plugins/sudoers/regress/env_match/data plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c plugins/sudoers/regress/logging/check_wrap.c diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 6988f1847e..7b7358a842 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -1047,9 +1047,13 @@ sha2.i: $(srcdir)/sha2.c $(incdir)/compat/endian.h $(incdir)/compat/sha2.h \ $(CC) -E -o $@ $(CPPFLAGS) $< sha2.plog: sha2.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sha2.c --i-file $< --output-file $@ -sig2str.lo: $(srcdir)/sig2str.c $(incdir)/sudo_compat.h $(top_builddir)/config.h +sig2str.lo: $(srcdir)/sig2str.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) $(SSP_CFLAGS) $(srcdir)/sig2str.c -sig2str.i: $(srcdir)/sig2str.c $(incdir)/sudo_compat.h $(top_builddir)/config.h +sig2str.i: $(srcdir)/sig2str.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h $(CC) -E -o $@ $(CPPFLAGS) $< sig2str.plog: sig2str.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/sig2str.c --i-file $< --output-file $@ diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index 3f69441215..e312695f6c 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -152,9 +152,9 @@ SHELL = @SHELL@ PROGS = sudoers.la visudo sudoreplay cvtsudoers testsudoers -TEST_PROGS = check_addr check_base64 check_digest check_env_pattern check_fill \ - check_gentime check_hexchar check_iolog_plugin check_wrap \ - check_starttime @SUDOERS_TEST_PROGS@ +TEST_PROGS = check_addr check_base64 check_digest check_env_pattern \ + check_exptilde check_fill check_gentime check_hexchar \ + check_iolog_plugin check_wrap check_starttime @SUDOERS_TEST_PROGS@ AUTH_OBJS = sudo_auth.lo @AUTH_OBJS@ @@ -212,6 +212,8 @@ CHECK_DIGEST_OBJS = check_digest.o filedigest.lo digestname.lo sudoers_debug.lo CHECK_ENV_MATCH_OBJS = check_env_pattern.o env_pattern.lo sudoers_debug.lo +CHECK_EXPTILDE_OBJS = check_exptilde.o exptilde.lo pwutil.lo pwutil_impl.lo redblack.lo sudoers_debug.lo + CHECK_FILL_OBJS = check_fill.o hexchar.lo toke_util.lo sudoers_debug.lo CHECK_GENTIME_OBJS = check_gentime.o gentime.lo gmtoff.lo sudoers_debug.lo @@ -306,6 +308,9 @@ check_digest: $(CHECK_DIGEST_OBJS) $(LIBUTIL) check_env_pattern: $(CHECK_ENV_MATCH_OBJS) $(LIBUTIL) $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_ENV_MATCH_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) +check_exptilde: $(CHECK_EXPTILDE_OBJS) $(LIBUTIL) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_EXPTILDE_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) + check_fill: $(CHECK_FILL_OBJS) $(LIBUTIL) $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_FILL_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @@ -464,6 +469,7 @@ check: $(TEST_PROGS) visudo testsudoers cvtsudoers diff regress/parser/check_digest.out $(srcdir)/regress/parser/check_digest.out.ok || rval=`expr $$rval + $$?`; \ fi; \ ./check_env_pattern $(srcdir)/regress/env_match/data || rval=`expr $$rval + $$?`; \ + ./check_exptilde || rval=`expr $$rval + $$?`; \ ./check_fill || rval=`expr $$rval + $$?`; \ ./check_gentime || rval=`expr $$rval + $$?`; \ ./check_hexchar || rval=`expr $$rval + $$?`; \ @@ -893,6 +899,30 @@ check_env_pattern.i: $(srcdir)/regress/env_match/check_env_pattern.c \ $(CC) -E -o $@ $(CPPFLAGS) $< check_env_pattern.plog: check_env_pattern.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/env_match/check_env_pattern.c --i-file $< --output-file $@ +check_exptilde.o: $(srcdir)/regress/exptilde/check_exptilde.c \ + $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/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) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/exptilde/check_exptilde.c +check_exptilde.i: $(srcdir)/regress/exptilde/check_exptilde.c \ + $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/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) $< +check_exptilde.plog: check_exptilde.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/exptilde/check_exptilde.c --i-file $< --output-file $@ check_fill.o: $(srcdir)/regress/parser/check_fill.c $(devdir)/gram.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ diff --git a/plugins/sudoers/exptilde.c b/plugins/sudoers/exptilde.c index c9658e4d71..4a21a3225a 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 = NULL; + opath = ""; } } pw = sudo_getpwnam(user); @@ -86,8 +86,7 @@ expand_tilde(char **path, const char *user) debug_return_bool(false); } - len = asprintf(&npath, "%s%s%s", pw->pw_dir, opath ? "/" : "", - opath ? opath : ""); + len = asprintf(&npath, "%s%s%s", pw->pw_dir, slash ? "/" : "", opath); sudo_pw_delref(pw); if (len == -1) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); diff --git a/plugins/sudoers/regress/exptilde/check_exptilde.c b/plugins/sudoers/regress/exptilde/check_exptilde.c new file mode 100644 index 0000000000..02d4bf087a --- /dev/null +++ b/plugins/sudoers/regress/exptilde/check_exptilde.c @@ -0,0 +1,101 @@ +/* + * SPDX-License-Identifier: ISC + * + * Copyright (c) 2020 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include + +#include +#include +#include +#include +#include +#include + +#define SUDO_ERROR_WRAP 0 + +#include "sudoers.h" + +#include + +struct sudo_user sudo_user; + +struct test_data { + char *input; + char *output; + char *user; + bool result; +} test_data[] = { + { "foo/bar", NULL, NULL, false }, + { "~root", "/", NULL, true }, + { "~", "/home/millert", "millert", true }, + { "~millert", "/home/millert", "millert", true }, + { NULL } +}; + +sudo_dso_public int main(int argc, char *argv[]); + +int +main(int argc, char *argv[]) +{ + int ntests = 0, errors = 0; + struct test_data *td; + struct passwd *pw; + char *path = NULL; + bool result; + + initprogname(argc > 0 ? argv[0] : "check_exptilde"); + + /* Prime the passwd cache */ + pw = sudo_mkpwent("root", 0, 0, "/", "/bin/sh"); + if (pw == NULL) + sudo_fatalx("unable to create passwd entry for root"); + sudo_pw_delref(pw); + + pw = sudo_mkpwent("millert", 8036, 20, "/home/millert", "/bin/tcsh"); + if (pw == NULL) + sudo_fatalx("unable to create passwd entry for millert"); + sudo_pw_delref(pw); + + for (td = test_data; td->input != NULL; td++) { + ntests++; + free(path); + if ((path = strdup(td->input)) == NULL) + sudo_fatal(NULL); + result = expand_tilde(&path, td->user); + if (result != td->result) { + errors++; + if (result) { + sudo_warnx("unexpected success: input %s, output %s", + td->input, path); + } else { + sudo_warnx("unexpected failure: input %s", td->input); + } + continue; + } + if (td->result && strcmp(path, td->output) != 0) { + errors++; + sudo_warnx("incorrect output for input %s: expected %s, got %s", + td->input, td->output, path); + continue; + } + } + + printf("%s: %d tests run, %d errors, %d%% success rate\n", getprogname(), + ntests, errors, (ntests - errors) * 100 / ntests); + + exit(errors); +} From 9ff960457a5a89db56247b70d8049f46fd2bdd02 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 1 Sep 2020 06:26:05 -0600 Subject: [PATCH 058/113] Add support for runchroot and runcwd to "sudo -l" and cvtsudoers. --- MANIFEST | 7 +++ plugins/sudoers/cvtsudoers_json.c | 15 ++++- plugins/sudoers/cvtsudoers_ldif.c | 40 +++++++----- plugins/sudoers/fmtsudoers.c | 4 ++ plugins/sudoers/ldap_util.c | 6 ++ plugins/sudoers/parse.c | 8 +++ plugins/sudoers/regress/sudoers/test24.in | 6 ++ .../sudoers/regress/sudoers/test24.json.ok | 61 +++++++++++++++++++ .../sudoers/regress/sudoers/test24.ldif.ok | 39 ++++++++++++ .../regress/sudoers/test24.ldif2sudo.ok | 8 +++ plugins/sudoers/regress/sudoers/test24.out.ok | 7 +++ .../sudoers/regress/sudoers/test24.sudo.ok | 6 ++ .../sudoers/regress/sudoers/test24.toke.ok | 6 ++ 13 files changed, 195 insertions(+), 18 deletions(-) create mode 100644 plugins/sudoers/regress/sudoers/test24.in create mode 100644 plugins/sudoers/regress/sudoers/test24.json.ok create mode 100644 plugins/sudoers/regress/sudoers/test24.ldif.ok create mode 100644 plugins/sudoers/regress/sudoers/test24.ldif2sudo.ok create mode 100644 plugins/sudoers/regress/sudoers/test24.out.ok create mode 100644 plugins/sudoers/regress/sudoers/test24.sudo.ok create mode 100644 plugins/sudoers/regress/sudoers/test24.toke.ok diff --git a/MANIFEST b/MANIFEST index acd0120caa..68c2a01e9e 100644 --- a/MANIFEST +++ b/MANIFEST @@ -776,6 +776,13 @@ plugins/sudoers/regress/sudoers/test23.ldif2sudo.ok plugins/sudoers/regress/sudoers/test23.out.ok plugins/sudoers/regress/sudoers/test23.sudo.ok plugins/sudoers/regress/sudoers/test23.toke.ok +plugins/sudoers/regress/sudoers/test24.in +plugins/sudoers/regress/sudoers/test24.json.ok +plugins/sudoers/regress/sudoers/test24.ldif.ok +plugins/sudoers/regress/sudoers/test24.ldif2sudo.ok +plugins/sudoers/regress/sudoers/test24.out.ok +plugins/sudoers/regress/sudoers/test24.sudo.ok +plugins/sudoers/regress/sudoers/test24.toke.ok plugins/sudoers/regress/sudoers/test3.in plugins/sudoers/regress/sudoers/test3.json.ok plugins/sudoers/regress/sudoers/test3.ldif.ok diff --git a/plugins/sudoers/cvtsudoers_json.c b/plugins/sudoers/cvtsudoers_json.c index 93224e7fd3..5204d448f5 100644 --- a/plugins/sudoers/cvtsudoers_json.c +++ b/plugins/sudoers/cvtsudoers_json.c @@ -579,7 +579,7 @@ cmndspec_continues(struct cmndspec *cs, struct cmndspec *next) #ifdef HAVE_SELINUX && cs->role == next->role && cs->type == next->type #endif /* HAVE_SELINUX */ - ; + && cs->runchroot == next->runchroot && cs->runcwd == next->runcwd; return ret; } @@ -626,10 +626,21 @@ print_cmndspec_json(struct json_container *json, /* Print options and tags */ if (cs->timeout > 0 || cs->notbefore != UNSPEC || cs->notafter != UNSPEC || - TAGS_SET(cs->tags) || !TAILQ_EMPTY(options)) { + cs->runchroot != NULL || cs->runcwd != NULL || TAGS_SET(cs->tags) || + !TAILQ_EMPTY(options)) { struct cmndtag tag = cs->tags; sudo_json_open_array(json, "Options"); + if (cs->runchroot != NULL) { + value.type = JSON_STRING; + value.u.string = cs->runchroot; + sudo_json_add_value(json, "runchroot", &value); + } + if (cs->runcwd != NULL) { + value.type = JSON_STRING; + value.u.string = cs->runcwd; + sudo_json_add_value(json, "runcwd", &value); + } if (cs->timeout > 0) { value.type = JSON_NUMBER; value.u.number = cs->timeout; diff --git a/plugins/sudoers/cvtsudoers_ldif.c b/plugins/sudoers/cvtsudoers_ldif.c index dfab73ad48..c9261843ae 100644 --- a/plugins/sudoers/cvtsudoers_ldif.c +++ b/plugins/sudoers/cvtsudoers_ldif.c @@ -319,6 +319,7 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, struct cmndspec *next = *nextp; struct member *m; struct tm *tp; + char *attr_val; bool last_one; char timebuf[sizeof("20120727121554Z")]; debug_decl(print_cmndspec_ldif, SUDOERS_DEBUG_UTIL); @@ -365,7 +366,6 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, /* Print timeout as a sudoOption. */ if (cs->timeout > 0) { - char *attr_val; if (asprintf(&attr_val, "command_timeout=%d", cs->timeout) == -1) { sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); @@ -414,22 +414,35 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, } print_options_ldif(fp, options); + /* Print runchroot and runcwd. */ + if (cs->runchroot != NULL) { + if (asprintf(&attr_val, "runchroot=%s", cs->runchroot) == -1) { + sudo_fatalx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + } + print_attribute_ldif(fp, "sudoOption", attr_val); + free(attr_val); + } + if (cs->runcwd != NULL) { + if (asprintf(&attr_val, "runcwd=%s", cs->runcwd) == -1) { + sudo_fatalx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + } + print_attribute_ldif(fp, "sudoOption", attr_val); + free(attr_val); + } + #ifdef HAVE_SELINUX /* Print SELinux role/type */ if (cs->role != NULL && cs->type != NULL) { - char *attr_val; - int len; - - len = asprintf(&attr_val, "role=%s", cs->role); - if (len == -1) { + if (asprintf(&attr_val, "role=%s", cs->role) == -1) { sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } print_attribute_ldif(fp, "sudoOption", attr_val); free(attr_val); - len = asprintf(&attr_val, "type=%s", cs->type); - if (len == -1) { + if (asprintf(&attr_val, "type=%s", cs->type) == -1) { sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } @@ -441,12 +454,8 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, #ifdef HAVE_PRIV_SET /* Print Solaris privs/limitprivs */ if (cs->privs != NULL || cs->limitprivs != NULL) { - char *attr_val; - int len; - if (cs->privs != NULL) { - len = asprintf(&attr_val, "privs=%s", cs->privs); - if (len == -1) { + if (asprintf(&attr_val, "privs=%s", cs->privs) == -1) { sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } @@ -454,8 +463,7 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, free(attr_val); } if (cs->limitprivs != NULL) { - len = asprintf(&attr_val, "limitprivs=%s", cs->limitprivs); - if (len == -1) { + if (asprintf(&attr_val, "limitprivs=%s", cs->limitprivs) == -1) { sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } @@ -481,7 +489,7 @@ print_cmndspec_ldif(FILE *fp, struct sudoers_parse_tree *parse_tree, #ifdef HAVE_SELINUX || cs->role != next->role || cs->type != next->type #endif /* HAVE_SELINUX */ - ; + || cs->runchroot != next->runchroot || cs->runcwd != next->runcwd; print_member_ldif(fp, parse_tree, cs->cmnd->name, cs->cmnd->type, cs->cmnd->negated, CMNDALIAS, "sudoCommand"); diff --git a/plugins/sudoers/fmtsudoers.c b/plugins/sudoers/fmtsudoers.c index 43f68e1483..e14bac0541 100644 --- a/plugins/sudoers/fmtsudoers.c +++ b/plugins/sudoers/fmtsudoers.c @@ -228,6 +228,10 @@ sudoers_format_cmndspec(struct sudo_lbuf *lbuf, if (cs->type != NULL && FIELD_CHANGED(prev_cs, cs, type)) sudo_lbuf_append(lbuf, "TYPE=%s ", cs->type); #endif /* HAVE_SELINUX */ + if (cs->runchroot != NULL && FIELD_CHANGED(prev_cs, cs, runchroot)) + sudo_lbuf_append(lbuf, "CHROOT=%s ", cs->runchroot); + if (cs->runcwd != NULL && FIELD_CHANGED(prev_cs, cs, runcwd)) + sudo_lbuf_append(lbuf, "CWD=%s ", cs->runcwd); if (cs->timeout > 0 && FIELD_CHANGED(prev_cs, cs, timeout)) { char numbuf[(((sizeof(int) * 8) + 2) / 3) + 2]; (void)snprintf(numbuf, sizeof(numbuf), "%d", cs->timeout); diff --git a/plugins/sudoers/ldap_util.c b/plugins/sudoers/ldap_util.c index 62163905d7..8e3278f228 100644 --- a/plugins/sudoers/ldap_util.c +++ b/plugins/sudoers/ldap_util.c @@ -516,6 +516,12 @@ sudo_ldap_role_to_priv(const char *cn, void *hosts, void *runasusers, op = sudo_ldap_parse_option(opt, &var, &val); if (strcmp(var, "command_timeout") == 0 && val != NULL) { cmndspec->timeout = parse_timeout(val); + } else if (strcmp(var, "runchroot") == 0 && val != NULL) { + if ((cmndspec->runchroot = strdup(val)) == NULL) + break; + } else if (strcmp(var, "runcwd") == 0 && val != NULL) { + if ((cmndspec->runcwd = strdup(val)) == NULL) + break; #ifdef HAVE_SELINUX } else if (strcmp(var, "role") == 0 && val != NULL) { if ((cmndspec->role = strdup(val)) == NULL) diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index f01bb93e35..3307677a28 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -426,6 +426,10 @@ new_long_entry(struct cmndspec *cs, struct cmndspec *prev_cs) if (cs->type && (!prev_cs->type || strcmp(cs->type, prev_cs->type) != 0)) debug_return_bool(true); #endif /* HAVE_SELINUX */ + if (cs->runchroot && (!prev_cs->runchroot || strcmp(cs->runchroot, prev_cs->runchroot) != 0)) + debug_return_bool(true); + if (cs->runcwd && (!prev_cs->runcwd || strcmp(cs->runcwd, prev_cs->runcwd) != 0)) + debug_return_bool(true); if (cs->timeout != prev_cs->timeout) debug_return_bool(true); if (cs->notbefore != prev_cs->notbefore) @@ -520,6 +524,10 @@ display_priv_long(struct sudoers_parse_tree *parse_tree, struct passwd *pw, if (cs->type) sudo_lbuf_append(lbuf, " Type: %s\n", cs->type); #endif /* HAVE_SELINUX */ + if (cs->runchroot != NULL) + sudo_lbuf_append(lbuf, " Chroot: %s\n", cs->runchroot); + if (cs->runcwd != NULL) + sudo_lbuf_append(lbuf, " Cwd: %s\n", cs->runcwd); if (cs->timeout > 0) { char numbuf[(((sizeof(int) * 8) + 2) / 3) + 2]; (void)snprintf(numbuf, sizeof(numbuf), "%d", cs->timeout); diff --git a/plugins/sudoers/regress/sudoers/test24.in b/plugins/sudoers/regress/sudoers/test24.in new file mode 100644 index 0000000000..3fc3bbc8e8 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test24.in @@ -0,0 +1,6 @@ +# Test parsing of CHROOT and CWD syntax +Defaults runcwd=~ +Defaults runchroot=/ +# +user0 ALL = CHROOT=/var/www CWD=/htdocs /bin/ksh +user1 ALL = CWD=~root /usr/bin/id, CWD=/tmp /bin/ls diff --git a/plugins/sudoers/regress/sudoers/test24.json.ok b/plugins/sudoers/regress/sudoers/test24.json.ok new file mode 100644 index 0000000000..964359caf4 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test24.json.ok @@ -0,0 +1,61 @@ +{ + "Defaults": [ + { + "Options": [ + { "runcwd": "~" } + ] + }, + { + "Options": [ + { "runchroot": "/" } + ] + } + ], + "User_Specs": [ + { + "User_List": [ + { "username": "user0" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + "runchroot": "/var/www", + "runcwd": "/htdocs" + ], + "Commands": [ + { "command": "/bin/ksh" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user1" } + ], + "Host_List": [ + { "hostname": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + "runcwd": "~root" + ], + "Commands": [ + { "command": "/usr/bin/id" } + ] + }, + { + "Options": [ + "runcwd": "/tmp" + ], + "Commands": [ + { "command": "/bin/ls" } + ] + } + ] + } + ] +} diff --git a/plugins/sudoers/regress/sudoers/test24.ldif.ok b/plugins/sudoers/regress/sudoers/test24.ldif.ok new file mode 100644 index 0000000000..aeb5f7a492 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test24.ldif.ok @@ -0,0 +1,39 @@ +dn: cn=defaults,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: defaults +description: Default sudoOption's go here +sudoOption: runcwd=~ +sudoOption: runchroot=/ + +dn: cn=user0,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user0 +sudoUser: user0 +sudoHost: ALL +sudoOption: runchroot=/var/www +sudoOption: runcwd=/htdocs +sudoCommand: /bin/ksh +sudoOrder: 1 + +dn: cn=user1,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user1 +sudoUser: user1 +sudoHost: ALL +sudoOption: runcwd=~root +sudoCommand: /usr/bin/id +sudoOrder: 2 + +dn: cn=user1_1,ou=SUDOers,dc=sudo,dc=ws +objectClass: top +objectClass: sudoRole +cn: user1_1 +sudoUser: user1 +sudoHost: ALL +sudoOption: runcwd=/tmp +sudoCommand: /bin/ls +sudoOrder: 3 + diff --git a/plugins/sudoers/regress/sudoers/test24.ldif2sudo.ok b/plugins/sudoers/regress/sudoers/test24.ldif2sudo.ok new file mode 100644 index 0000000000..4c096575cf --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test24.ldif2sudo.ok @@ -0,0 +1,8 @@ +Defaults runcwd=~ +Defaults runchroot=/ + +# sudoRole user0 +user0 ALL = CHROOT=/var/www CWD=/htdocs /bin/ksh + +# sudoRole user1, user1_1 +user1 ALL = CWD=~root /usr/bin/id, CWD=/tmp /bin/ls diff --git a/plugins/sudoers/regress/sudoers/test24.out.ok b/plugins/sudoers/regress/sudoers/test24.out.ok new file mode 100644 index 0000000000..530b7005a9 --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test24.out.ok @@ -0,0 +1,7 @@ +Parses OK + +Defaults runcwd=~ +Defaults runchroot=/ + +user0 ALL = CHROOT=/var/www CWD=/htdocs /bin/ksh +user1 ALL = CWD=~root /usr/bin/id, CWD=/tmp /bin/ls diff --git a/plugins/sudoers/regress/sudoers/test24.sudo.ok b/plugins/sudoers/regress/sudoers/test24.sudo.ok new file mode 100644 index 0000000000..8203b0c48b --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test24.sudo.ok @@ -0,0 +1,6 @@ +Defaults runcwd=~ +Defaults runchroot=/ + +user0 ALL = CHROOT=/var/www CWD=/htdocs /bin/ksh + +user1 ALL = CWD=~root /usr/bin/id, CWD=/tmp /bin/ls diff --git a/plugins/sudoers/regress/sudoers/test24.toke.ok b/plugins/sudoers/regress/sudoers/test24.toke.ok new file mode 100644 index 0000000000..47842f4dcd --- /dev/null +++ b/plugins/sudoers/regress/sudoers/test24.toke.ok @@ -0,0 +1,6 @@ +# +DEFAULTS DEFVAR = WORD(2) +DEFAULTS DEFVAR = WORD(2) +# +WORD(6) ALL = CHROOT = WORD(5) CWD = WORD(5) COMMAND +WORD(6) ALL = CWD = WORD(5) COMMAND , CWD = WORD(5) COMMAND From bd254e104296f4ae42fc894ffe93965b4e1d729d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 1 Sep 2020 06:26:05 -0600 Subject: [PATCH 059/113] Read/write runchroot and runcwd entries in the JSON event log. --- include/sudo_iolog.h | 2 ++ lib/iolog/iolog_fileio.c | 14 ++++++++++++++ lib/iolog/iolog_json.c | 22 ++++++++++++++++++++++ lib/iolog/iolog_util.c | 2 ++ logsrvd/iolog_writer.c | 32 ++++++++++++++++++++++++++++++++ logsrvd/logsrvd.h | 2 ++ plugins/sudoers/iolog.c | 10 ++++++++++ plugins/sudoers/iolog_client.c | 16 +++++++++++++++- plugins/sudoers/iolog_plugin.h | 2 ++ 9 files changed, 101 insertions(+), 1 deletion(-) diff --git a/include/sudo_iolog.h b/include/sudo_iolog.h index de37b6ca66..54786c4bee 100644 --- a/include/sudo_iolog.h +++ b/include/sudo_iolog.h @@ -64,6 +64,8 @@ struct iolog_info { char *user; char *runas_user; char *runas_group; + char *runchroot; + char *runcwd; char *tty; char *cmd; char *host; diff --git a/lib/iolog/iolog_fileio.c b/lib/iolog/iolog_fileio.c index 2fa61cbc15..288ae7df9a 100644 --- a/lib/iolog/iolog_fileio.c +++ b/lib/iolog/iolog_fileio.c @@ -1035,6 +1035,20 @@ iolog_write_info_file_json(int dfd, const char *parent, struct iolog_info *info) goto oom; } + if (info->runchroot != NULL) { + json_value.type = JSON_STRING; + json_value.u.string = info->runchroot; + if (!sudo_json_add_value(&json, "runchroot", &json_value)) + goto oom; + } + + if (info->runcwd != NULL) { + json_value.type = JSON_STRING; + json_value.u.string = info->runcwd; + if (!sudo_json_add_value(&json, "runcwd", &json_value)) + goto oom; + } + /* Required */ json_value.type = JSON_STRING; json_value.u.string = info->runas_user; diff --git a/lib/iolog/iolog_json.c b/lib/iolog/iolog_json.c index 2a8b8d2f1d..da7f40f9a3 100644 --- a/lib/iolog/iolog_json.c +++ b/lib/iolog/iolog_json.c @@ -187,6 +187,26 @@ json_store_runuser(struct json_item *item, struct iolog_info *li) debug_return_bool(true); } +static bool +json_store_runchroot(struct json_item *item, struct iolog_info *li) +{ + debug_decl(json_store_runchroot, SUDO_DEBUG_UTIL); + + li->runchroot = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + +static bool +json_store_runcwd(struct json_item *item, struct iolog_info *li) +{ + debug_decl(json_store_runcwd, SUDO_DEBUG_UTIL); + + li->runcwd = item->u.string; + item->u.string = NULL; + debug_return_bool(true); +} + static bool json_store_submitcwd(struct json_item *item, struct iolog_info *li) { @@ -263,6 +283,8 @@ static struct iolog_json_key { { "rungroup", JSON_STRING, json_store_rungroup }, { "runuid", JSON_ID, json_store_runuid }, { "runuser", JSON_STRING, json_store_runuser }, + { "runchroot", JSON_STRING, json_store_runchroot }, + { "runcwd", JSON_STRING, json_store_runcwd }, { "submitcwd", JSON_STRING, json_store_submitcwd }, { "submithost", JSON_STRING, json_store_submithost }, { "submituser", JSON_STRING, json_store_submituser }, diff --git a/lib/iolog/iolog_util.c b/lib/iolog/iolog_util.c index c1339d5dcf..5a0c0c9ec5 100644 --- a/lib/iolog/iolog_util.c +++ b/lib/iolog/iolog_util.c @@ -449,6 +449,8 @@ iolog_free_loginfo(struct iolog_info *li) free(li->user); free(li->runas_user); free(li->runas_group); + free(li->runchroot); + free(li->runcwd); free(li->tty); free(li->cmd); free(li->host); diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 18287cb163..050d792557 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -116,6 +116,8 @@ iolog_details_free(struct iolog_details *details) free(details->iolog_path); free(details->command); free(details->cwd); + free(details->runchroot); + free(details->runcwd); free(details->rungroup); free(details->runuser); free(details->submithost); @@ -220,6 +222,34 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, } continue; } + if (strcmp(key, "runchroot") == 0) { + if (has_strval(info)) { + if ((details->runchroot = strdup(info->strval)) == NULL) { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "strdup"); + goto done; + } + } else { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "runchroot specified but not a string"); + } + continue; + } + if (strcmp(key, "runcwd") == 0) { + if (has_strval(info)) { + if ((details->runcwd = strdup(info->strval)) == NULL) { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "strdup"); + goto done; + } + } else { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "runcwd specified but not a string"); + } + continue; + } if (strcmp(key, "runenv") == 0) { if (has_strlistval(info)) { details->envp = strlist_copy(info->strlistval); @@ -635,6 +665,8 @@ iolog_details_write(struct iolog_details *details, memset(&log_info, 0, sizeof(log_info)); log_info.cwd = details->cwd; log_info.user = details->submituser; + log_info.runchroot = details->runchroot; + log_info.runcwd = details->runcwd; log_info.runas_user = details->runuser; log_info.runas_group = details->rungroup; log_info.tty = details->ttyname; diff --git a/logsrvd/logsrvd.h b/logsrvd/logsrvd.h index a0c26847ba..2701eb1c18 100644 --- a/logsrvd/logsrvd.h +++ b/logsrvd/logsrvd.h @@ -48,6 +48,8 @@ struct iolog_details { char *iolog_file; /* substring of iolog_path, do not free */ char *command; char *cwd; + char *runchroot; + char *runcwd; char *rungroup; char *runuser; char *submithost; diff --git a/plugins/sudoers/iolog.c b/plugins/sudoers/iolog.c index fa8896521b..c4efad1786 100644 --- a/plugins/sudoers/iolog.c +++ b/plugins/sudoers/iolog.c @@ -269,6 +269,10 @@ iolog_deserialize_info(struct iolog_details *details, char * const user_info[], details->command = *cur + sizeof("command=") - 1; continue; } + if (strncmp(*cur, "chroot=", sizeof("chroot=") - 1) == 0) { + details->runchroot = *cur + sizeof("chroot=") - 1; + continue; + } break; case 'i': if (strncmp(*cur, "ignore_iolog_errors=", sizeof("ignore_iolog_errors=") - 1) == 0) { @@ -434,6 +438,10 @@ iolog_deserialize_info(struct iolog_details *details, char * const user_info[], runas_euid_str = *cur + sizeof("runas_euid=") - 1; continue; } + if (strncmp(*cur, "runcwd=", sizeof("runcwd=") - 1) == 0) { + details->runcwd = *cur + sizeof("runcwd=") - 1; + continue; + } break; } } @@ -499,6 +507,8 @@ write_info_log(int dfd, char *iolog_dir, struct iolog_details *details) memset(&iolog_info, 0, sizeof(iolog_info)); iolog_info.cwd = (char *)details->cwd; iolog_info.user = (char *)details->user; + iolog_info.runchroot = (char *)details->runchroot; + iolog_info.runcwd = (char *)details->runcwd; iolog_info.runas_user = details->runas_pw->pw_name; iolog_info.runas_group = details->runas_gr ? details->runas_gr->gr_name: NULL; iolog_info.tty = (char *)details->tty; diff --git a/plugins/sudoers/iolog_client.c b/plugins/sudoers/iolog_client.c index 7cc54f0f4b..85a90b73cd 100644 --- a/plugins/sudoers/iolog_client.c +++ b/plugins/sudoers/iolog_client.c @@ -781,7 +781,7 @@ fmt_accept_message(struct client_closure *closure) runenv.n_strings++; /* XXX - realloc as needed instead of preallocating */ - info_msgs_size = 22; + info_msgs_size = 24; accept_msg.info_msgs = calloc(info_msgs_size, sizeof(InfoMessage *)); if (accept_msg.info_msgs == NULL) { info_msgs_size = 0; @@ -861,6 +861,20 @@ fmt_accept_message(struct client_closure *closure) n++; } + if (details->runcwd != NULL) { + accept_msg.info_msgs[n]->key = "runcwd"; + accept_msg.info_msgs[n]->strval = (char *)details->runcwd; + accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; + n++; + } + + if (details->runchroot != NULL) { + accept_msg.info_msgs[n]->key = "runchroot"; + accept_msg.info_msgs[n]->strval = (char *)details->runchroot; + accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; + n++; + } + /* TODO - submitenv */ /* TODO - submitgid */ /* TODO - submitgids */ diff --git a/plugins/sudoers/iolog_plugin.h b/plugins/sudoers/iolog_plugin.h index 9ef3c843bc..467c773242 100644 --- a/plugins/sudoers/iolog_plugin.h +++ b/plugins/sudoers/iolog_plugin.h @@ -61,6 +61,8 @@ struct iolog_details { struct passwd *runas_pw; struct group *runas_gr; char * const *argv; + const char *runcwd; + const char *runchroot; char **user_env; struct sudoers_str_list *log_servers; struct timespec server_timeout; From 1676f0ceebbc251d8fd4fca0fb6f86e8fc3ea52e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 1 Sep 2020 14:10:02 -0600 Subject: [PATCH 060/113] Support "*" for CWD/CHROOT to allow user to specify cwd or chroot. Adds two new command line options, -D (--chdir) and -R (--chroot) that can only be used when sudoers sets runcwd or runchroot to "*". --- doc/sudo.man.in | 24 +++++- doc/sudo.mdoc.in | 24 +++++- doc/sudo_plugin.man.in | 36 +++++++-- doc/sudo_plugin.mdoc.in | 33 ++++++-- doc/sudoers.man.in | 34 ++++++++- doc/sudoers.mdoc.in | 34 ++++++++- plugins/sudoers/def_data.c | 4 +- plugins/sudoers/def_data.in | 4 +- plugins/sudoers/defaults.c | 61 +++++++++++---- plugins/sudoers/defaults.h | 4 +- plugins/sudoers/gram.c | 148 ++++++++++++++++++++---------------- plugins/sudoers/gram.y | 14 ++++ plugins/sudoers/policy.c | 14 +++- plugins/sudoers/sudoers.c | 22 ++++++ plugins/sudoers/sudoers.h | 4 + src/parse_args.c | 29 ++++++- src/sudo_usage.h.in | 6 +- 17 files changed, 382 insertions(+), 113 deletions(-) diff --git a/doc/sudo.man.in b/doc/sudo.man.in index 4ab3300657..46dcc679c0 100644 --- a/doc/sudo.man.in +++ b/doc/sudo.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDO" "@mansectsu@" "August 11, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "@mansectsu@" "September 1, 2020" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -66,9 +66,11 @@ .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-C\fR\ \fInum\fR] .if \n(LC [\fB\-c\fR\ \fIclass\fR] +[\fB\-D\fR\ \fIdirectory\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] +[\fB\-R\fR\ \fIdirectory\fR] .if \n(SL [\fB\-r\fR\ \fIrole\fR] .if \n(SL [\fB\-t\fR\ \fItype\fR] [\fB\-T\fR\ \fItimeout\fR] @@ -83,9 +85,13 @@ .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-C\fR\ \fInum\fR] .if \n(LC [\fB\-c\fR\ \fIclass\fR] +[\fB\-D\fR\ \fIdirectory\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] [\fB\-p\fR\ \fIprompt\fR] +[\fB\-R\fR\ \fIdirectory\fR] +.if \n(SL [\fB\-r\fR\ \fIrole\fR] +.if \n(SL [\fB\-t\fR\ \fItype\fR] [\fB\-T\fR\ \fItimeout\fR] [\fB\-u\fR\ \fIuser\fR] \fIfile\ ...\fR @@ -288,6 +294,13 @@ BSD login classes. .\} .TP 12n +\fB\-D\fR \fIdirectory\fR, \fB\--chdir\fR=\fIdirectory\fR +Run the command in the specified +\fIdirectory\fR +instead of the current working directory. +The security policy may return an error if the user does not have +permission to specify the working directory. +.TP 12n \fB\-E\fR, \fB\--preserve-env\fR Indicates to the security policy that the user wishes to preserve their existing environment variables. @@ -584,6 +597,15 @@ specified by a PAM module unless the flag is disabled in \fIsudoers\fR. .RE +.TP 12n +\fB\-R\fR \fIdirectory\fR, \fB\--chroot\fR=\fIdirectory\fR +Change to the specified root +\fIdirectory\fR +(see +chroot(@mansectsu@)) +before running the command. +The security policy may return an error if the user does not have +permission to specify the root directory. .if \n(SL \{\ .TP 12n \fB\-r\fR \fIrole\fR, \fB\--role\fR=\fIrole\fR diff --git a/doc/sudo.mdoc.in b/doc/sudo.mdoc.in index d597dd519e..fd2d20518f 100644 --- a/doc/sudo.mdoc.in +++ b/doc/sudo.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 11, 2020 +.Dd September 1, 2020 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -65,9 +65,11 @@ .if \n(LC \{\ .Op Fl c Ar class .\} +.Op Fl D Ar directory .Op Fl g Ar group .Op Fl h Ar host .Op Fl p Ar prompt +.Op Fl R Ar directory .if \n(SL \{\ .Op Fl r Ar role .Op Fl t Ar type @@ -86,9 +88,15 @@ .if \n(LC \{\ .Op Fl c Ar class .\} +.Op Fl D Ar directory .Op Fl g Ar group .Op Fl h Ar host .Op Fl p Ar prompt +.Op Fl R Ar directory +.if \n(SL \{\ +.Op Fl r Ar role +.Op Fl t Ar type +.\} .Op Fl T Ar timeout .Op Fl u Ar user .Ar @@ -279,6 +287,12 @@ This option is only available on systems with .Bx login classes. .\} +.It Fl D Ar directory , Fl -chdir Ns = Ns Ar directory +Run the command in the specified +.Ar directory +instead of the current working directory. +The security policy may return an error if the user does not have +permission to specify the working directory. .It Fl E , -preserve-env Indicates to the security policy that the user wishes to preserve their existing environment variables. @@ -545,6 +559,14 @@ specified by a PAM module unless the .Em passprompt_override flag is disabled in .Em sudoers . +.It Fl R Ar directory , Fl -chroot Ns = Ns Ar directory +Change to the specified root +.Ar directory +(see +.Xr chroot @mansectsu@ ) +before running the command. +The security policy may return an error if the user does not have +permission to specify the root directory. .if \n(SL \{\ .It Fl r Ar role , Fl -role Ns = Ns Ar role Run the command with an SELinux security context that includes diff --git a/doc/sudo_plugin.man.in b/doc/sudo_plugin.man.in index 0413914671..2d6be70ced 100644 --- a/doc/sudo_plugin.man.in +++ b/doc/sudo_plugin.man.in @@ -215,6 +215,24 @@ The plugin may optionally pass this, or another value, back in the \fIcommand_info\fR list. .TP 6n +cmnd_chroot=string +The root directory (see +chroot(2)) +to run the command in, as specified by the user via the +\fB\-R\fR +option. +The plugin may ignore or restrict the user's ability to specify a new +root directory. +Only available starting with API version 1.16. +.TP 6n +cmnd_cwd=string +The working directory to run the command in, as specified by the user via the +\fB\-D\fR +option. +The plugin may ignore or restrict the user's ability to specify a new +working directory. +Only available starting with API version 1.16. +.TP 6n 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 @@ -250,10 +268,6 @@ contains a plugin-specific \fRDebug\fR entry. .TP 6n -debug_level=number -This setting has been deprecated in favor of -\fIdebug_flags\fR. -.TP 6n ignore_ticket=bool Set to true if the user specified the \fB\-k\fR @@ -425,8 +439,10 @@ For more information, see the section. .TP 6n timeout=string -User-specified command timeout. -Not all plugins support command timeouts and the ability for the +Command timeout specified by the user via the +\fB\-T\fR +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. .PP @@ -5038,6 +5054,14 @@ Version 1.16 (sudo 1.9.3) Initial resource limit values were added to the \fRuser_info\fR list. +.sp +The +\fIcmnd_chroot\fR +and +\fIcmnd_cwd\fR +enties were added to the +\fRsettings\fR +list. .SH "SEE ALSO" sudo.conf(@mansectform@), sudoers(@mansectform@), diff --git a/doc/sudo_plugin.mdoc.in b/doc/sudo_plugin.mdoc.in index f29e549d82..7288d18ed1 100644 --- a/doc/sudo_plugin.mdoc.in +++ b/doc/sudo_plugin.mdoc.in @@ -197,6 +197,22 @@ or higher. The plugin may optionally pass this, or another value, back in the .Em command_info list. +.It cmnd_chroot=string +The root directory (see +.Xr chroot 2 ) +to run the command in, as specified by the user via the +.Fl R +option. +The plugin may ignore or restrict the user's ability to specify a new +root directory. +Only available starting with API version 1.16. +.It cmnd_cwd=string +The working directory to run the command in, as specified by the user via the +.Fl D +option. +The plugin may ignore or restrict the user's ability to specify a new +working directory. +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 @@ -231,9 +247,6 @@ if contains a plugin-specific .Li Debug entry. -.It debug_level=number -This setting has been deprecated in favor of -.Em debug_flags . .It ignore_ticket=bool Set to true if the user specified the .Fl k @@ -384,8 +397,10 @@ For more information, see the .Em check_policy section. .It timeout=string -User-specified command timeout. -Not all plugins support command timeouts and the ability for the +Command timeout specified by the user via the +.Fl T +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. .El @@ -4451,6 +4466,14 @@ Support for audit and approval plugins was added. Initial resource limit values were added to the .Li user_info list. +.Pp +The +.Em cmnd_chroot +and +.Em cmnd_cwd +enties were added to the +.Li settings +list. .El .Sh SEE ALSO .Xr sudo.conf @mansectform@ , diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index c82ae74fc2..0b57e4ca57 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "August 28, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "September 1, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -1517,7 +1517,15 @@ must be a fully-qualified path name beginning with a \(oq/\(cq or \(oq~\(cq -character. +character, or the special value +\(lq*\(rq. +A value of +\(lq*\(rq +indicates that the user may specify the working directory by running +\fBsudo\fR +with the +\fB\-D\fR +option. By default, commands are run from the invoking user's current working directory, unless the \fB\-i\fR @@ -1540,7 +1548,15 @@ must be a fully-qualified path name beginning with a \(oq/\(cq or \(oq~\(cq -character. +character, or the special value +\(lq*\(rq. +A value of +\(lq*\(rq +indicates that the user may specify the root directory by running +\fBsudo\fR +with the +\fB\-R\fR +option . This setting can be used to run the command in a chroot(2) \(lqsandbox\(rq @@ -4455,6 +4471,12 @@ runchroot If set, \fBsudo\fR will use this value for the root directory when running a command. +The special value +\(lq*\(rq +will allow the user to specify the root directory via +\fBsudo\fR's +\fB\-R\fR +option. See the \fIChroot_Spec\fR section for more details. @@ -4465,6 +4487,12 @@ runcwd If set, \fBsudo\fR will use this value for the working directory when running a command. +The special value +\(lq*\(rq +will allow the user to specify the working directory via +\fBsudo\fR's +\fB\-D\fR +option. See the \fIChdir_Spec\fR section for more details. diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index 95a4d04b2a..d0c6ef463f 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd August 28, 2020 +.Dd September 1, 2020 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -1437,7 +1437,15 @@ must be a fully-qualified path name beginning with a .Sq / or .Sq ~ -character. +character, or the special value +.Dq * . +A value of +.Dq * +indicates that the user may specify the working directory by running +.Nm sudo +with the +.Fl D +option. By default, commands are run from the invoking user's current working directory, unless the .Fl i @@ -1460,7 +1468,15 @@ must be a fully-qualified path name beginning with a .Sq / or .Sq ~ -character. +character, or the special value +.Dq * . +A value of +.Dq * +indicates that the user may specify the root directory by running +.Nm sudo +with the +.Fl R +option . This setting can be used to run the command in a .Xr chroot 2 .Dq sandbox @@ -4166,6 +4182,12 @@ are processed before the contents of If set, .Nm sudo will use this value for the root directory when running a command. +The special value +.Dq * +will allow the user to specify the root directory via +.Nm sudo Ns 's +.Fl R +option. See the .Sx Chroot_Spec section for more details. @@ -4175,6 +4197,12 @@ This setting is only supported by version 1.9.3 or higher. If set, .Nm sudo will use this value for the working directory when running a command. +The special value +.Dq * +will allow the user to specify the working directory via +.Nm sudo Ns 's +.Fl D +option. See the .Sx Chdir_Spec section for more details. diff --git a/plugins/sudoers/def_data.c b/plugins/sudoers/def_data.c index d8f30b8fba..3eab739ecd 100644 --- a/plugins/sudoers/def_data.c +++ b/plugins/sudoers/def_data.c @@ -552,11 +552,11 @@ struct sudo_defs_types sudo_defs_table[] = { N_("Set the pam remote host to the local host name"), NULL, }, { - "runcwd", T_STR|T_BOOL|T_PATH|T_TILDE, + "runcwd", T_STR|T_BOOL|T_CHPATH, N_("Working directory to change to before executing the command: %s"), NULL, }, { - "runchroot", T_STR|T_BOOL|T_PATH|T_TILDE, + "runchroot", T_STR|T_BOOL|T_CHPATH, N_("Root directory to change to before executing the command: %s"), NULL, }, { diff --git a/plugins/sudoers/def_data.in b/plugins/sudoers/def_data.in index 918c2bd93b..e730aee4d5 100644 --- a/plugins/sudoers/def_data.in +++ b/plugins/sudoers/def_data.in @@ -400,8 +400,8 @@ pam_rhost T_FLAG "Set the pam remote host to the local host name" runcwd - T_STR|T_BOOL|T_PATH|T_TILDE + T_STR|T_BOOL|T_CHPATH "Working directory to change to before executing the command: %s" runchroot - T_STR|T_BOOL|T_PATH|T_TILDE + T_STR|T_BOOL|T_CHPATH "Root directory to change to before executing the command: %s" diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 0dbdff5ac6..5a3d184856 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -67,6 +67,7 @@ static bool store_tuple(const char *str, union sudo_defs_val *sd_un, struct def_ static bool store_uint(const char *str, union sudo_defs_val *sd_un); static bool store_timespec(const char *str, union sudo_defs_val *sd_un); static bool list_op(const char *str, size_t, union sudo_defs_val *sd_un, enum list_ops op); +static bool valid_path(struct sudo_defs_types *def, const char *val, const char *file, int lineno, bool quiet); /* * Table describing compile-time and run-time options. @@ -249,21 +250,13 @@ parse_default_entry(struct sudo_defs_types *def, const char *val, int op, rc = store_syslogpri(val, &def->sd_un); break; case T_STR: - if (ISSET(def->type, T_PATH) && val != NULL && *val != '/' && - (!ISSET(def->type, T_TILDE) || *val != '~')) { - if (!quiet) { - if (lineno > 0) { - sudo_warnx(U_("%s:%d: values for \"%s\" must start with a '/'"), - file, lineno, def->name); - } else { - sudo_warnx(U_("%s: values for \"%s\" must start with a '/'"), - file, def->name); - } + if (val != NULL && ISSET(def->type, T_PATH|T_CHPATH)) { + if (!valid_path(def, val, file, lineno, quiet)) { + rc = -1; + break; } - rc = -1; - break; } - rc = store_str(val, &def->sd_un); + rc = store_str(val, &def->sd_un); break; case T_INT: rc = store_int(val, &def->sd_un); @@ -1017,6 +1010,48 @@ store_timeout(const char *str, union sudo_defs_val *sd_un) debug_return_bool(true); } +static bool +valid_path(struct sudo_defs_types *def, const char *val, + const char *file, int lineno, bool quiet) +{ + bool ret = true; + debug_decl(valid_path, SUDOERS_DEBUG_DEFAULTS); + + if (ISSET(def->type, T_CHPATH)) { + if (val[0] != '/' && val[0] != '~' && (val[0] != '*' || val[1] != '\0')) { + if (!quiet) { + if (lineno > 0) { + sudo_warnx( + U_("%s:%d: values for \"%s\" must start with a '/', '*', or '*'"), + file, lineno, def->name); + } else { + sudo_warnx( + U_("%s: values for \"%s\" must start with a '/', '*', or '*'"), + file, def->name); + } + } + ret = false; + } + } else { + if (val[0] != '/') { + if (!quiet) { + if (lineno > 0) { + sudo_warnx( + U_("%s:%d: values for \"%s\" must start with a '/'"), + file, lineno, def->name); + } else { + sudo_warnx( + U_("%s: values for \"%s\" must start with a '/'"), + file, def->name); + } + } + ret = false; + } + + } + debug_return_bool(ret); +} + static bool list_op(const char *str, size_t len, union sudo_defs_val *sd_un, enum list_ops op) diff --git a/plugins/sudoers/defaults.h b/plugins/sudoers/defaults.h index c31516113e..5ff4118174 100644 --- a/plugins/sudoers/defaults.h +++ b/plugins/sudoers/defaults.h @@ -111,8 +111,8 @@ struct early_default { #define T_BOOL 0x100 #undef T_PATH #define T_PATH 0x200 -#undef T_TILDE -#define T_TILDE 0x400 +#undef T_CHPATH +#define T_CHPATH 0x400 /* * Argument to update_defaults() diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index a722832c2a..d52c661d3b 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -583,7 +583,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; int yyparse(void); -#line 1004 "gram.y" +#line 1018 "gram.y" void sudoerserror(const char *s) { @@ -1746,71 +1746,85 @@ break; case 54: #line 576 "gram.y" { + if (yyvsp[0].string[0] != '/' && yyvsp[0].string[0] != '~') { + if (strcmp(yyvsp[0].string, "*") != 0) { + sudoerserror(N_("values for \"CWD\" must" + " start with a '/', '~', or '*'")); + YYERROR; + } + } yyval.string = yyvsp[0].string; } break; case 55: -#line 581 "gram.y" +#line 588 "gram.y" { + if (yyvsp[0].string[0] != '/' && yyvsp[0].string[0] != '~') { + if (strcmp(yyvsp[0].string, "*") != 0) { + sudoerserror(N_("values for \"CHROOT\" must" + " start with a '/', '~', or '*'")); + YYERROR; + } + } yyval.string = yyvsp[0].string; } break; case 56: -#line 586 "gram.y" +#line 600 "gram.y" { yyval.string = yyvsp[0].string; } break; case 57: -#line 591 "gram.y" +#line 605 "gram.y" { yyval.string = yyvsp[0].string; } break; case 58: -#line 595 "gram.y" +#line 609 "gram.y" { yyval.string = yyvsp[0].string; } break; case 59: -#line 600 "gram.y" +#line 614 "gram.y" { yyval.string = yyvsp[0].string; } break; case 60: -#line 605 "gram.y" +#line 619 "gram.y" { yyval.string = yyvsp[0].string; } break; case 61: -#line 610 "gram.y" +#line 624 "gram.y" { yyval.string = yyvsp[0].string; } break; case 62: -#line 614 "gram.y" +#line 628 "gram.y" { yyval.string = yyvsp[0].string; } break; case 63: -#line 619 "gram.y" +#line 633 "gram.y" { yyval.runas = NULL; } break; case 64: -#line 622 "gram.y" +#line 636 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; case 65: -#line 627 "gram.y" +#line 641 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1828,7 +1842,7 @@ case 65: } break; case 66: -#line 642 "gram.y" +#line 656 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1840,7 +1854,7 @@ case 66: } break; case 67: -#line 651 "gram.y" +#line 665 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1852,7 +1866,7 @@ case 67: } break; case 68: -#line 660 "gram.y" +#line 674 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas == NULL) { @@ -1864,7 +1878,7 @@ case 68: } break; case 69: -#line 669 "gram.y" +#line 683 "gram.y" { yyval.runas = calloc(1, sizeof(struct runascontainer)); if (yyval.runas != NULL) { @@ -1882,27 +1896,27 @@ case 69: } break; case 70: -#line 686 "gram.y" +#line 700 "gram.y" { init_options(&yyval.options); } break; case 71: -#line 689 "gram.y" +#line 703 "gram.y" { free(yyval.options.runcwd); yyval.options.runcwd = yyvsp[0].string; } break; case 72: -#line 693 "gram.y" +#line 707 "gram.y" { free(yyval.options.runchroot); yyval.options.runchroot = yyvsp[0].string; } break; case 73: -#line 697 "gram.y" +#line 711 "gram.y" { yyval.options.notbefore = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1913,7 +1927,7 @@ case 73: } break; case 74: -#line 705 "gram.y" +#line 719 "gram.y" { yyval.options.notafter = parse_gentime(yyvsp[0].string); free(yyvsp[0].string); @@ -1924,7 +1938,7 @@ case 74: } break; case 75: -#line 713 "gram.y" +#line 727 "gram.y" { yyval.options.timeout = parse_timeout(yyvsp[0].string); free(yyvsp[0].string); @@ -1938,7 +1952,7 @@ case 75: } break; case 76: -#line 724 "gram.y" +#line 738 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.role); @@ -1947,7 +1961,7 @@ case 76: } break; case 77: -#line 730 "gram.y" +#line 744 "gram.y" { #ifdef HAVE_SELINUX free(yyval.options.type); @@ -1956,7 +1970,7 @@ case 77: } break; case 78: -#line 736 "gram.y" +#line 750 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.privs); @@ -1965,7 +1979,7 @@ case 78: } break; case 79: -#line 742 "gram.y" +#line 756 "gram.y" { #ifdef HAVE_PRIV_SET free(yyval.options.limitprivs); @@ -1974,97 +1988,97 @@ case 79: } break; case 80: -#line 750 "gram.y" +#line 764 "gram.y" { TAGS_INIT(yyval.tag); } break; case 81: -#line 753 "gram.y" +#line 767 "gram.y" { yyval.tag.nopasswd = true; } break; case 82: -#line 756 "gram.y" +#line 770 "gram.y" { yyval.tag.nopasswd = false; } break; case 83: -#line 759 "gram.y" +#line 773 "gram.y" { yyval.tag.noexec = true; } break; case 84: -#line 762 "gram.y" +#line 776 "gram.y" { yyval.tag.noexec = false; } break; case 85: -#line 765 "gram.y" +#line 779 "gram.y" { yyval.tag.setenv = true; } break; case 86: -#line 768 "gram.y" +#line 782 "gram.y" { yyval.tag.setenv = false; } break; case 87: -#line 771 "gram.y" +#line 785 "gram.y" { yyval.tag.log_input = true; } break; case 88: -#line 774 "gram.y" +#line 788 "gram.y" { yyval.tag.log_input = false; } break; case 89: -#line 777 "gram.y" +#line 791 "gram.y" { yyval.tag.log_output = true; } break; case 90: -#line 780 "gram.y" +#line 794 "gram.y" { yyval.tag.log_output = false; } break; case 91: -#line 783 "gram.y" +#line 797 "gram.y" { yyval.tag.follow = true; } break; case 92: -#line 786 "gram.y" +#line 800 "gram.y" { yyval.tag.follow = false; } break; case 93: -#line 789 "gram.y" +#line 803 "gram.y" { yyval.tag.send_mail = true; } break; case 94: -#line 792 "gram.y" +#line 806 "gram.y" { yyval.tag.send_mail = false; } break; case 95: -#line 797 "gram.y" +#line 811 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2074,7 +2088,7 @@ case 95: } break; case 96: -#line 804 "gram.y" +#line 818 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2084,7 +2098,7 @@ case 96: } break; case 97: -#line 811 "gram.y" +#line 825 "gram.y" { struct sudo_command *c; @@ -2101,7 +2115,7 @@ case 97: } break; case 100: -#line 831 "gram.y" +#line 845 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, @@ -2113,14 +2127,14 @@ case 100: } break; case 102: -#line 843 "gram.y" +#line 857 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 105: -#line 853 "gram.y" +#line 867 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, @@ -2132,14 +2146,14 @@ case 105: } break; case 107: -#line 865 "gram.y" +#line 879 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 110: -#line 875 "gram.y" +#line 889 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, @@ -2151,7 +2165,7 @@ case 110: } break; case 113: -#line 890 "gram.y" +#line 904 "gram.y" { const char *s; s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, @@ -2163,28 +2177,28 @@ case 113: } break; case 115: -#line 902 "gram.y" +#line 916 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 116: -#line 908 "gram.y" +#line 922 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 117: -#line 912 "gram.y" +#line 926 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 118: -#line 918 "gram.y" +#line 932 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2194,7 +2208,7 @@ case 118: } break; case 119: -#line 925 "gram.y" +#line 939 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2204,7 +2218,7 @@ case 119: } break; case 120: -#line 932 "gram.y" +#line 946 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); if (yyval.member == NULL) { @@ -2214,7 +2228,7 @@ case 120: } break; case 121: -#line 939 "gram.y" +#line 953 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); if (yyval.member == NULL) { @@ -2224,7 +2238,7 @@ case 121: } break; case 122: -#line 946 "gram.y" +#line 960 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2234,28 +2248,28 @@ case 122: } break; case 124: -#line 956 "gram.y" +#line 970 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; case 125: -#line 962 "gram.y" +#line 976 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 126: -#line 966 "gram.y" +#line 980 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 127: -#line 972 "gram.y" +#line 986 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); if (yyval.member == NULL) { @@ -2265,7 +2279,7 @@ case 127: } break; case 128: -#line 979 "gram.y" +#line 993 "gram.y" { yyval.member = new_member(NULL, ALL); if (yyval.member == NULL) { @@ -2275,7 +2289,7 @@ case 128: } break; case 129: -#line 986 "gram.y" +#line 1000 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); if (yyval.member == NULL) { @@ -2285,18 +2299,18 @@ case 129: } break; case 130: -#line 995 "gram.y" +#line 1009 "gram.y" { ; } break; case 131: -#line 998 "gram.y" +#line 1012 "gram.y" { ; /* EOF */ } break; -#line 2286 "gram.c" +#line 2300 "gram.c" } yyssp -= yym; yystate = *yyssp; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 2aafa4e844..4b29a6164d 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -574,11 +574,25 @@ opcmnd : cmnd { ; chdirspec : CWD '=' WORD { + if ($3[0] != '/' && $3[0] != '~') { + if (strcmp($3, "*") != 0) { + sudoerserror(N_("values for \"CWD\" must" + " start with a '/', '~', or '*'")); + YYERROR; + } + } $$ = $3; } ; chrootspec : CHROOT '=' WORD { + if ($3[0] != '/' && $3[0] != '~') { + if (strcmp($3, "*") != 0) { + sudoerserror(N_("values for \"CHROOT\" must" + " start with a '/', '~', or '*'")); + YYERROR; + } + } $$ = $3; } ; diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index 57da0f7d23..bf85891c22 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -180,6 +180,16 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group) } continue; } + if (MATCHES(*cur, "cmnd_chroot=")) { + CHECK(*cur, "cmnd_chroot="); + user_runchroot = *cur + sizeof("cmnd_chroot=") - 1; + continue; + } + if (MATCHES(*cur, "cmnd_cwd=")) { + CHECK(*cur, "cmnd_cwd="); + user_runcwd = *cur + sizeof("cmnd_cwd=") - 1; + continue; + } if (MATCHES(*cur, "runas_user=")) { CHECK(*cur, "runas_user="); *runas_user = *cur + sizeof("runas_user=") - 1; @@ -618,7 +628,7 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, goto oom; } } - if (def_runcwd) { + if (def_runcwd && strcmp(def_runcwd, "*") != 0) { /* Set cwd to explicit value in sudoers. */ if (!expand_tilde(&def_runcwd, runas_pw->pw_name)) { sudo_warnx(U_("invalid working directory: %s"), def_runcwd); @@ -787,7 +797,7 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], mode_t cmnd_umask, if (asprintf(&command_info[info_len++], "timeout=%u", timeout) == -1) goto oom; } - if (def_runchroot != NULL) { + if (def_runchroot != NULL && strcmp(def_runchroot, "*") != 0) { if (!expand_tilde(&def_runchroot, runas_pw->pw_name)) { sudo_warnx(U_("invalid chroot directory: %s"), def_runchroot); goto bad; diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 786c013132..c7f78f8afe 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -396,6 +396,28 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], } } + if (user_runchroot != NULL) { + if (def_runchroot == NULL || strcmp(def_runchroot, "*") != 0) { + audit_failure(NewArgv, + N_("user not allowed to change root directory to %s"), + user_runchroot); + sudo_warnx("%s", U_("you are not permitted to use the -R option")); + goto bad; + } + free(def_runchroot); + def_runchroot = user_runchroot; + } + if (user_runcwd != NULL) { + if (def_runcwd == NULL || strcmp(def_runcwd, "*") != 0) { + audit_failure(NewArgv, + N_("user not allowed to change directory to %s"), user_runcwd); + sudo_warnx("%s", U_("you are not permitted to use the -D option")); + goto bad; + } + free(def_runcwd); + def_runcwd = user_runcwd; + } + /* * Look up the timestamp dir owner if one is specified. */ diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 9ef52afe47..d86e65e5e2 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -90,6 +90,8 @@ struct sudo_user { char *shost; char *runhost; char *srunhost; + char *runchroot; + char *runcwd; char *prompt; char *cmnd; char *cmnd_args; @@ -236,6 +238,8 @@ struct sudo_user { #define runas_privs (sudo_user.privs) #define runas_limitprivs (sudo_user.limitprivs) #define user_timeout (sudo_user.timeout) +#define user_runchroot (sudo_user.runchroot) +#define user_runcwd (sudo_user.runcwd) /* Default sudoers uid/gid/mode if not set by the Makefile. */ #ifndef SUDOERS_UID diff --git a/src/parse_args.c b/src/parse_args.c index ebdcc4e7b9..e932b5fbc5 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -100,7 +100,11 @@ static struct sudo_settings sudo_settings[] = { { "remote_host" }, #define ARG_TIMEOUT 22 { "timeout" }, -#define NUM_SETTINGS 23 +#define ARG_CHROOT 23 + { "cmnd_chroot" }, +#define ARG_CWD 24 + { "cmnd_cwd" }, +#define NUM_SETTINGS 25 { NULL } }; @@ -123,7 +127,7 @@ struct environment { * Note that we must disable arg permutation to support setting environment * variables and to better support the optional arg of the -h flag. */ -static const char short_opts[] = "+Aa:BbC:c:D:Eeg:Hh::iKklnPp:r:SsT:t:U:u:Vv"; +static const char short_opts[] = "+Aa:BbC:c:D:Eeg:Hh::iKklnPp:R:r:SsT:t:U:u:Vv"; static struct option long_opts[] = { { "askpass", no_argument, NULL, 'A' }, { "auth-type", required_argument, NULL, 'a' }, @@ -131,6 +135,7 @@ static struct option long_opts[] = { { "bell", no_argument, NULL, 'B' }, { "close-from", required_argument, NULL, 'C' }, { "login-class", required_argument, NULL, 'c' }, + { "chdir", required_argument, NULL, 'D' }, { "preserve-env", optional_argument, NULL, 'E' }, { "edit", no_argument, NULL, 'e' }, { "group", required_argument, NULL, 'g' }, @@ -144,6 +149,7 @@ static struct option long_opts[] = { { "non-interactive", no_argument, NULL, 'n' }, { "preserve-groups", no_argument, NULL, 'P' }, { "prompt", required_argument, NULL, 'p' }, + { "chroot", required_argument, NULL, 'R' }, { "role", required_argument, NULL, 'r' }, { "stdin", no_argument, NULL, 'S' }, { "shell", no_argument, NULL, 's' }, @@ -334,7 +340,12 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, break; #endif case 'D': - /* Ignored for backwards compatibility. */ + assert(optarg != NULL); + if (*optarg == '\0') + usage(); + if (sudo_settings[ARG_CWD].value != NULL) + usage(); + sudo_settings[ARG_CWD].value = optarg; break; case 'E': /* @@ -436,6 +447,14 @@ parse_args(int argc, char **argv, int *old_optind, int *nargc, char ***nargv, usage(); sudo_settings[ARG_PROMPT].value = optarg; break; + case 'R': + assert(optarg != NULL); + if (*optarg == '\0') + usage(); + if (sudo_settings[ARG_CHROOT].value != NULL) + usage(); + sudo_settings[ARG_CHROOT].value = optarg; + break; #ifdef HAVE_SELINUX case 'r': assert(optarg != NULL); @@ -775,6 +794,8 @@ help(void) sudo_lbuf_append(&lbuf, " -c, --login-class=class %s\n", _("run command with the specified BSD login class")); #endif + sudo_lbuf_append(&lbuf, " -D, --chdir=directory %s\n", + _("change the working directory before running command")); sudo_lbuf_append(&lbuf, " -E, --preserve-env %s\n", _("preserve user environment when running command")); sudo_lbuf_append(&lbuf, " --preserve-env=list %s\n", @@ -803,6 +824,8 @@ help(void) _("preserve group vector instead of setting to target's")); sudo_lbuf_append(&lbuf, " -p, --prompt=prompt %s\n", _("use the specified password prompt")); + sudo_lbuf_append(&lbuf, " -R, --chroot=directory %s\n", + _("change the root directory before running command")); #ifdef HAVE_SELINUX sudo_lbuf_append(&lbuf, " -r, --role=role %s\n", _("create SELinux security context with specified role")); diff --git a/src/sudo_usage.h.in b/src/sudo_usage.h.in index d37c49a4f2..afccc15828 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 + * Copyright (c) 2007-2010, 2013, 2015, 2017, 2020 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -27,8 +27,8 @@ #define SUDO_USAGE1 " -h | -K | -k | -V" #define SUDO_USAGE2 " -v [-AknS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-u user]" #define SUDO_USAGE3 " -l [-AknS] @BSDAUTH_USAGE@[-g group] [-h host] [-p prompt] [-U user] [-u user] [command]" -#define SUDO_USAGE4 " [-AbEHknPS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] []" -#define SUDO_USAGE5 " -e [-AknS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ..." +#define SUDO_USAGE4 " [-AbEHknPS] @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 [-AknS] @BSDAUTH_USAGE@@SELINUX_USAGE@[-C num] @LOGINCAP_USAGE@[-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] file ..." /* * Configure script arguments used to build sudo. From b7130775f16ce5ac3ed0948acee94f1d0fdaf354 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 1 Sep 2020 15:06:14 -0600 Subject: [PATCH 061/113] Add chroot/chdir changes. --- NEWS | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/NEWS b/NEWS index 2ae665a1a0..859fe0e180 100644 --- a/NEWS +++ b/NEWS @@ -49,6 +49,17 @@ What's new in Sudo 1.9.3 itself because sudo changes the limits while it runs to prevent resource starvation. + * It is now possible to set the working directory or change the + root directory on a per-command basis using the CWD and CHROOT + options. There are also new Defaults settings, runchroot and + runcwd, that can be used to set the working directory or root + directory on a more global basis. + + * New -D (--chdir) and -R (--chroot) command line options can be + used to set the working directory or root directory if the sudoers + file allows it. This functionality is not enabled by default + and must be explicitly enabled in the sudoers file. + What's new in Sudo 1.9.2 * Fixed package builds on RedHat Enterprise Linux 8. From e3b85171f8ed65ecace0670a774649cfc64565b9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Tue, 1 Sep 2020 21:34:30 -0600 Subject: [PATCH 062/113] Regenerate the parser with "bison -y" for verbose syntax error messages. --- plugins/sudoers/gram.c | 4871 +++++++++++++++++++++++++--------------- plugins/sudoers/gram.h | 232 +- 2 files changed, 3218 insertions(+), 1885 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index d52c661d3b..9ab492f996 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -4,44 +4,84 @@ */ #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 yyparse sudoersparse -#define yylex sudoerslex -#define yyerror sudoerserror -#define yychar sudoerschar -#define yyval sudoersval -#define yylval sudoerslval -#define yydebug sudoersdebug -#define yynerrs sudoersnerrs -#define yyerrflag sudoerserrflag -#define yyss sudoersss -#define yysslim sudoerssslim -#define yyssp sudoersssp -#define yyvs sudoersvs -#define yyvsp sudoersvsp -#define yystacksize sudoersstacksize -#define yylhs sudoerslhs -#define yylen sudoerslen -#define yydefred sudoersdefred -#define yydgoto sudoersdgoto -#define yysindex sudoerssindex -#define yyrindex sudoersrindex -#define yygindex sudoersgindex -#define yytable sudoerstable -#define yycheck sudoerscheck -#define yyname sudoersname -#define yyrule sudoersrule -#define YYPREFIX "sudoers" -#line 2 "gram.y" +/* A Bison parser, made by GNU Bison 3.3.2. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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. */ + +/* 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. */ + +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "3.3.2" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +/* Substitute the variable and function names. */ +#define yyparse sudoersparse +#define yylex sudoerslex +#define yyerror sudoerserror +#define yydebug sudoersdebug +#define yynerrs sudoersnerrs + +#define yylval sudoerslval +#define yychar sudoerschar + +/* First part of user prologue. */ +#line 1 "gram.y" /* yacc.c:337 */ + /* * SPDX-License-Identifier: ISC * @@ -115,10 +155,158 @@ static struct defaults *new_default(char *, char *, short); static struct member *new_member(char *, int); static struct sudo_command *new_command(char *, char *); static struct command_digest *new_digest(int, char *); -#line 77 "gram.y" -#ifndef YYSTYPE_DEFINED -#define YYSTYPE_DEFINED -typedef union { + +#line 154 "gram.c" /* yacc.c:337 */ +# 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 + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* In a future release of Bison, this section will be replaced + by #include "y.tab.h". */ +#ifndef YY_SUDOERS_Y_TAB_H_INCLUDED +# define YY_SUDOERS_Y_TAB_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int sudoersdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + END = 0, + COMMAND = 258, + ALIAS = 259, + DEFVAR = 260, + NTWKADDR = 261, + NETGROUP = 262, + USERGROUP = 263, + WORD = 264, + DIGEST = 265, + INCLUDE = 266, + INCLUDEDIR = 267, + DEFAULTS = 268, + DEFAULTS_HOST = 269, + DEFAULTS_USER = 270, + DEFAULTS_RUNAS = 271, + DEFAULTS_CMND = 272, + NOPASSWD = 273, + PASSWD = 274, + NOEXEC = 275, + EXEC = 276, + SETENV = 277, + NOSETENV = 278, + LOG_INPUT = 279, + NOLOG_INPUT = 280, + LOG_OUTPUT = 281, + NOLOG_OUTPUT = 282, + MAIL = 283, + NOMAIL = 284, + FOLLOWLNK = 285, + NOFOLLOWLNK = 286, + ALL = 287, + HOSTALIAS = 288, + CMNDALIAS = 289, + USERALIAS = 290, + RUNASALIAS = 291, + ERROR = 292, + NOMATCH = 293, + CHROOT = 294, + CWD = 295, + TYPE = 296, + ROLE = 297, + PRIVS = 298, + LIMITPRIVS = 299, + CMND_TIMEOUT = 300, + NOTBEFORE = 301, + NOTAFTER = 302, + MYSELF = 303, + SHA224_TOK = 304, + SHA256_TOK = 305, + SHA384_TOK = 306, + SHA512_TOK = 307 + }; +#endif +/* Tokens. */ +#define END 0 +#define COMMAND 258 +#define ALIAS 259 +#define DEFVAR 260 +#define NTWKADDR 261 +#define NETGROUP 262 +#define USERGROUP 263 +#define WORD 264 +#define DIGEST 265 +#define INCLUDE 266 +#define INCLUDEDIR 267 +#define DEFAULTS 268 +#define DEFAULTS_HOST 269 +#define DEFAULTS_USER 270 +#define DEFAULTS_RUNAS 271 +#define DEFAULTS_CMND 272 +#define NOPASSWD 273 +#define PASSWD 274 +#define NOEXEC 275 +#define EXEC 276 +#define SETENV 277 +#define NOSETENV 278 +#define LOG_INPUT 279 +#define NOLOG_INPUT 280 +#define LOG_OUTPUT 281 +#define NOLOG_OUTPUT 282 +#define MAIL 283 +#define NOMAIL 284 +#define FOLLOWLNK 285 +#define NOFOLLOWLNK 286 +#define ALL 287 +#define HOSTALIAS 288 +#define CMNDALIAS 289 +#define USERALIAS 290 +#define RUNASALIAS 291 +#define ERROR 292 +#define NOMATCH 293 +#define CHROOT 294 +#define CWD 295 +#define TYPE 296 +#define ROLE 297 +#define PRIVS 298 +#define LIMITPRIVS 299 +#define CMND_TIMEOUT 300 +#define NOTBEFORE 301 +#define NOTAFTER 302 +#define MYSELF 303 +#define SHA224_TOK 304 +#define SHA256_TOK 305 +#define SHA384_TOK 306 +#define SHA512_TOK 307 + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + +union YYSTYPE +{ +#line 77 "gram.y" /* yacc.c:352 */ + struct cmndspec *cmndspec; struct defaults *defaults; struct member *member; @@ -130,1484 +318,1706 @@ typedef union { struct cmndtag tag; char *string; int tok; -} YYSTYPE; -#endif /* YYSTYPE_DEFINED */ -#line 130 "gram.c" -#define END 0 -#define COMMAND 257 -#define ALIAS 258 -#define DEFVAR 259 -#define NTWKADDR 260 -#define NETGROUP 261 -#define USERGROUP 262 -#define WORD 263 -#define DIGEST 264 -#define INCLUDE 265 -#define INCLUDEDIR 266 -#define DEFAULTS 267 -#define DEFAULTS_HOST 268 -#define DEFAULTS_USER 269 -#define DEFAULTS_RUNAS 270 -#define DEFAULTS_CMND 271 -#define NOPASSWD 272 -#define PASSWD 273 -#define NOEXEC 274 -#define EXEC 275 -#define SETENV 276 -#define NOSETENV 277 -#define LOG_INPUT 278 -#define NOLOG_INPUT 279 -#define LOG_OUTPUT 280 -#define NOLOG_OUTPUT 281 -#define MAIL 282 -#define NOMAIL 283 -#define FOLLOWLNK 284 -#define NOFOLLOWLNK 285 -#define ALL 286 -#define HOSTALIAS 287 -#define CMNDALIAS 288 -#define USERALIAS 289 -#define RUNASALIAS 290 -#define ERROR 291 -#define NOMATCH 292 -#define CHROOT 293 -#define CWD 294 -#define TYPE 295 -#define ROLE 296 -#define PRIVS 297 -#define LIMITPRIVS 298 -#define CMND_TIMEOUT 299 -#define NOTBEFORE 300 -#define NOTAFTER 301 -#define MYSELF 302 -#define SHA224_TOK 303 -#define SHA256_TOK 304 -#define SHA384_TOK 305 -#define SHA512_TOK 306 -#define YYERRCODE 256 -const short sudoerslhs[] = - { -1, - 0, 0, 37, 37, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 33, 33, - 34, 34, 4, 4, 3, 3, 3, 3, 3, 21, - 21, 21, 20, 11, 11, 9, 9, 9, 9, 9, - 2, 2, 1, 35, 35, 35, 35, 36, 36, 7, - 7, 6, 6, 24, 25, 30, 31, 32, 26, 27, - 28, 29, 18, 18, 19, 19, 19, 19, 19, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 5, 5, 5, 41, 41, 44, - 10, 10, 42, 42, 45, 8, 8, 43, 43, 46, - 40, 40, 47, 14, 14, 12, 12, 13, 13, 13, - 13, 13, 17, 17, 15, 15, 16, 16, 16, 39, - 39, + +#line 317 "gram.c" /* yacc.c:352 */ }; -const short sudoerslen[] = - { 2, - 0, 1, 1, 2, 1, 2, 1, 1, 3, 3, - 3, 3, 3, 3, 4, 4, 4, 4, 3, 4, - 3, 4, 1, 3, 1, 2, 3, 3, 3, 1, - 3, 4, 3, 1, 2, 1, 1, 1, 1, 1, - 1, 3, 4, 3, 3, 3, 3, 1, 3, 1, - 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 0, 3, 0, 1, 3, 2, 1, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, - 1, 3, 1, 3, 3, 1, 3, 1, 3, 3, - 1, 3, 3, 1, 3, 1, 2, 1, 1, 1, - 1, 1, 1, 3, 1, 2, 1, 1, 1, 1, - 1, + +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + +extern YYSTYPE sudoerslval; + +int sudoersparse (void); + +#endif /* !YY_SUDOERS_Y_TAB_H_INCLUDED */ + + + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#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 +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# define YYUSE(E) /* empty */ +#endif + +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# 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 yyoverflow || YYERROR_VERBOSE + +/* 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 || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; }; -const short sudoersdefred[] = - { 0, - 0, 118, 120, 121, 122, 0, 0, 0, 0, 0, - 0, 0, 119, 0, 0, 0, 0, 0, 5, 0, - 114, 116, 0, 7, 8, 0, 3, 131, 130, 6, - 0, 0, 0, 0, 23, 0, 36, 39, 38, 40, - 37, 0, 34, 0, 101, 0, 0, 97, 96, 95, - 0, 0, 0, 0, 0, 52, 50, 106, 0, 48, - 0, 0, 0, 98, 0, 0, 103, 0, 0, 111, - 0, 0, 108, 117, 0, 0, 30, 0, 4, 0, - 19, 0, 21, 0, 0, 0, 26, 0, 14, 35, - 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, - 0, 0, 51, 0, 0, 11, 0, 0, 12, 0, - 0, 10, 0, 0, 13, 115, 0, 0, 9, 20, - 22, 27, 28, 29, 24, 102, 17, 15, 16, 44, - 45, 46, 47, 107, 18, 49, 0, 99, 0, 104, - 0, 112, 0, 109, 0, 41, 0, 70, 0, 31, - 0, 0, 0, 0, 0, 32, 127, 129, 128, 0, - 123, 125, 0, 0, 64, 42, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 71, 72, 76, 77, - 78, 79, 75, 73, 74, 126, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 93, 94, 91, - 92, 43, 124, 55, 54, 60, 59, 61, 62, 56, - 57, 58, + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (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 \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*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, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_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 75 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 285 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 62 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 49 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 132 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 224 + +#define YYUNDEFTOK 2 +#define YYMAXUTOK 307 + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 45, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 40, 2, 2, 2, 2, 2, 2, + 43, 44, 2, 41, 39, 42, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 37, 2, + 2, 38, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 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, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61 }; -const short sudoersdgoto[] = - { 20, - 146, 147, 35, 36, 56, 57, 58, 59, 43, 76, - 45, 21, 22, 23, 161, 162, 163, 148, 153, 77, - 78, 176, 155, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 24, 25, 60, 61, 26, 27, 30, 69, - 63, 66, 72, 64, 67, 73, 70, + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 186, 186, 189, 192, 193, 196, 199, 202, 209, + 216, 222, 225, 228, 231, 234, 238, 242, 246, 250, + 256, 259, 265, 268, 274, 275, 281, 288, 295, 302, + 309, 318, 319, 323, 329, 343, 347, 353, 360, 367, + 374, 381, 390, 391, 450, 505, 512, 519, 526, 535, + 536, 542, 545, 566, 570, 576, 588, 600, 605, 609, + 614, 619, 624, 628, 633, 636, 641, 656, 665, 674, + 683, 700, 703, 707, 711, 719, 727, 738, 744, 750, + 756, 764, 767, 770, 773, 776, 779, 782, 785, 788, + 791, 794, 797, 800, 803, 806, 811, 818, 825, 841, + 842, 845, 856, 857, 863, 864, 867, 878, 879, 885, + 886, 889, 900, 901, 904, 915, 916, 922, 926, 932, + 939, 946, 953, 960, 969, 970, 976, 980, 986, 993, + 1000, 1009, 1012 }; -const short sudoerssindex[] = - { -10, - 48, 0, 0, 0, 0, -245, -233, -29, 38, 95, - 95, -32, 0, -205, -197, -195, -191, -144, 0, 0, - 0, 0, -22, 0, 0, -10, 0, 0, 0, 0, - 6, 7, 32, -189, 0, 50, 0, 0, 0, 0, - 0, -138, 0, -31, 0, -30, -30, 0, 0, 0, - -220, 15, 22, 27, 43, 0, 0, 0, -25, 0, - 69, 35, 21, 0, 49, 24, 0, 55, 25, 0, - 60, 26, 0, 0, 95, 8, 0, 29, 0, 48, - 0, 48, 0, -157, -156, -155, 0, -29, 0, 0, - 38, 50, 50, 50, 0, -153, -140, -135, -134, -32, - 50, -168, 0, 38, -205, 0, -32, -197, 0, 95, - -195, 0, 95, -191, 0, 0, 86, 62, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 88, 0, 96, 0, - 97, 0, 97, 0, -18, 0, 99, 0, 48, 0, - -21, 42, 98, 86, -143, 0, 0, 0, 0, -214, - 0, 0, 103, -21, 0, 0, 100, 101, 102, 104, - 105, 106, 107, 108, 109, 59, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -21, 103, -114, -104, - -103, -99, -92, -91, -90, -89, -88, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,}; -const short sudoersrindex[] = - { 176, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 33, 0, 41, 0, - 45, 0, 46, 0, 137, 0, 47, 0, 0, 0, - 138, 139, 0, 9, 94, 0, 0, 0, 0, 0, - 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0,}; -const short sudoersgindex[] = - { 0, - 30, 0, 110, 87, 132, 124, -95, 79, 145, 11, - 111, 113, 171, -1, 3, 31, 28, 0, 0, 75, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 169, -4, 0, - 0, 0, 0, 91, 89, 85, 90, +#endif + +#if YYDEBUG || YYERROR_VERBOSE || 0 +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "END", "error", "$undefined", "COMMAND", "ALIAS", "DEFVAR", "NTWKADDR", + "NETGROUP", "USERGROUP", "WORD", "DIGEST", "INCLUDE", "INCLUDEDIR", + "DEFAULTS", "DEFAULTS_HOST", "DEFAULTS_USER", "DEFAULTS_RUNAS", + "DEFAULTS_CMND", "NOPASSWD", "PASSWD", "NOEXEC", "EXEC", "SETENV", + "NOSETENV", "LOG_INPUT", "NOLOG_INPUT", "LOG_OUTPUT", "NOLOG_OUTPUT", + "MAIL", "NOMAIL", "FOLLOWLNK", "NOFOLLOWLNK", "ALL", "HOSTALIAS", + "CMNDALIAS", "USERALIAS", "RUNASALIAS", "':'", "'='", "','", "'!'", + "'+'", "'-'", "'('", "')'", "'\\n'", "ERROR", "NOMATCH", "CHROOT", "CWD", + "TYPE", "ROLE", "PRIVS", "LIMITPRIVS", "CMND_TIMEOUT", "NOTBEFORE", + "NOTAFTER", "MYSELF", "SHA224_TOK", "SHA256_TOK", "SHA384_TOK", + "SHA512_TOK", "$accept", "file", "line", "entry", "include", + "includedir", "defaults_list", "defaults_entry", "privileges", + "privilege", "ophost", "host", "cmndspeclist", "cmndspec", "digestspec", + "digestlist", "digcmnd", "opcmnd", "chdirspec", "chrootspec", + "timeoutspec", "notbeforespec", "notafterspec", "rolespec", "typespec", + "privsspec", "limitprivsspec", "runasspec", "runaslist", "options", + "cmndtag", "cmnd", "hostaliases", "hostalias", "hostlist", "cmndaliases", + "cmndalias", "cmndlist", "runasaliases", "runasalias", "useraliases", + "useralias", "userlist", "opuser", "user", "grouplist", "opgroup", + "group", "eol", YY_NULLPTR }; -#define YYTABLESIZE 400 -const short sudoerstable[] = - { 19, - 51, 34, 34, 34, 134, 28, 28, 34, 46, 47, - 42, 160, 91, 75, 18, 29, 29, 31, 100, 44, - 28, 75, 18, 28, 28, 28, 81, 83, 28, 32, - 29, 89, 100, 29, 29, 29, 48, 49, 29, 151, - 105, 63, 100, 157, 113, 110, 33, 28, 158, 28, - 105, 91, 62, 25, 113, 110, 33, 29, 106, 29, - 65, 109, 68, 25, 112, 50, 71, 115, 117, 87, - 42, 159, 96, 119, 85, 120, 86, 121, 105, 97, - 212, 108, 111, 114, 98, 75, 118, 127, 128, 129, - 100, 51, 84, 88, 42, 104, 135, 25, 105, 164, - 99, 51, 113, 110, 33, 122, 123, 124, 141, 107, - 130, 143, 102, 2, 137, 110, 3, 4, 5, 37, - 113, 38, 39, 131, 40, 145, 80, 18, 132, 133, - 92, 91, 93, 94, 52, 53, 54, 55, 165, 100, - 75, 13, 154, 152, 156, 101, 187, 41, 214, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 215, 216, - 189, 190, 191, 217, 192, 193, 194, 195, 196, 197, - 218, 219, 220, 221, 222, 1, 2, 65, 69, 66, - 68, 67, 95, 166, 103, 139, 90, 116, 74, 213, - 186, 188, 150, 136, 79, 138, 140, 125, 144, 0, - 142, 126, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 48, 49, 0, 33, 33, 33, - 0, 0, 0, 33, 0, 37, 157, 38, 39, 2, - 40, 158, 3, 4, 5, 1, 0, 2, 0, 0, - 3, 4, 5, 50, 6, 7, 8, 9, 10, 11, - 12, 80, 82, 41, 159, 63, 63, 13, 0, 0, - 52, 53, 54, 55, 0, 13, 14, 15, 16, 17, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 37, 0, 38, 39, 0, - 40, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 0, 63, 63, 63, 63, 48, 49, 149, 0, 37, - 0, 38, 39, 41, 40, 48, 49, 0, 0, 0, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 50, 0, 0, 41, 0, 0, - 80, 80, 2, 0, 50, 3, 4, 5, 0, 0, - 0, 52, 53, 54, 55, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, +#endif + +# ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 58, 61, 44, + 33, 43, 45, 40, 41, 10, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307 }; -const short sudoerscheck[] = - { 10, - 33, 33, 33, 33, 100, 0, 0, 33, 10, 11, - 33, 33, 44, 44, 33, 10, 10, 263, 44, 9, - 0, 44, 33, 0, 0, 0, 31, 32, 0, 263, - 10, 36, 0, 10, 10, 10, 257, 258, 10, 58, - 0, 33, 10, 258, 0, 0, 0, 0, 263, 0, - 10, 44, 258, 0, 10, 10, 10, 10, 63, 10, - 258, 66, 258, 10, 69, 286, 258, 72, 61, 259, - 33, 286, 58, 78, 43, 80, 45, 82, 58, 58, - 176, 58, 58, 58, 58, 44, 58, 92, 93, 94, - 58, 33, 61, 44, 33, 61, 101, 44, 58, 58, - 58, 33, 58, 58, 58, 263, 263, 263, 110, 61, - 264, 113, 44, 258, 104, 61, 261, 262, 263, 258, - 61, 260, 261, 264, 263, 40, 33, 33, 264, 264, - 44, 44, 46, 47, 303, 304, 305, 306, 41, 44, - 44, 286, 44, 145, 149, 59, 44, 286, 263, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 263, 263, - 61, 61, 61, 263, 61, 61, 61, 61, 61, 61, - 263, 263, 263, 263, 263, 0, 0, 41, 41, 41, - 41, 41, 51, 154, 61, 107, 42, 75, 18, 187, - 160, 164, 118, 102, 26, 105, 108, 88, 114, -1, - 111, 91, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 257, 258, -1, 259, 259, 259, - -1, -1, -1, 259, -1, 258, 258, 260, 261, 258, - 263, 263, 261, 262, 263, 256, -1, 258, -1, -1, - 261, 262, 263, 286, 265, 266, 267, 268, 269, 270, - 271, 256, 256, 286, 286, 257, 258, 286, -1, -1, - 303, 304, 305, 306, -1, 286, 287, 288, 289, 290, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 258, -1, 260, 261, -1, - 263, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, 303, 304, 305, 306, 257, 258, 256, -1, 258, - -1, 260, 261, 286, 263, 257, 258, -1, -1, -1, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, -1, -1, 286, -1, -1, - 257, 258, 258, -1, 286, 261, 262, 263, -1, -1, - -1, 303, 304, 305, 306, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 286, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 303, 304, 305, 306, +# endif + +#define YYPACT_NINF -99 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-99))) + +#define YYTABLE_NINF -4 + +#define yytable_value_is_error(Yytable_value) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = +{ + 136, 15, -99, -99, -99, -99, -2, 29, 43, 236, + 221, 221, 10, -99, 75, 81, 90, 91, 247, -99, + 47, 178, -99, -99, -99, 199, -99, -99, -99, -99, + -99, 8, 11, 55, 97, 16, -99, -99, -99, -99, + -99, -99, 253, -99, -99, 5, 18, 18, -99, -99, + -99, 86, 66, 76, 82, 98, -99, 59, -99, -99, + -99, 72, 101, 22, -99, 103, 35, -99, 108, 36, + -99, 116, 39, -99, -99, -99, -99, 221, 41, -99, + -18, 15, -99, 15, -99, 146, 147, 148, -99, 43, + -99, -99, 236, 16, 16, 16, -99, 149, 154, 155, + 156, 49, -99, 10, 16, 236, 75, -99, 10, 81, + -99, 221, 90, -99, 221, 91, -99, -99, 195, -99, + 115, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, 128, -99, + 134, -99, 135, -99, 135, -99, 15, -99, 212, 138, + -99, -99, -99, 42, 131, 77, 115, -24, -99, -99, + -99, 83, 141, -99, -99, -99, 42, -99, 145, 150, + 159, 160, 162, 169, 171, 177, 179, -99, -99, -99, + -99, -99, -99, -99, -99, -99, 102, -99, 42, 141, + 175, 213, 215, 217, 223, 224, 225, 227, 228, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99 }; -#define YYFINAL 20 -#ifndef YYDEBUG -#define YYDEBUG 0 -#endif -#define YYMAXTOKEN 306 -#if YYDEBUG -const char * const sudoersname[] = - { -"end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,"'!'",0,0,0,0,0,0,"'('","')'",0,"'+'","','","'-'",0,0,0,0,0,0,0,0,0,0,0,0, -"':'",0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,"COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD", -"DIGEST","INCLUDE","INCLUDEDIR","DEFAULTS","DEFAULTS_HOST","DEFAULTS_USER", -"DEFAULTS_RUNAS","DEFAULTS_CMND","NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV", -"NOSETENV","LOG_INPUT","NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","MAIL", -"NOMAIL","FOLLOWLNK","NOFOLLOWLNK","ALL","HOSTALIAS","CMNDALIAS","USERALIAS", -"RUNASALIAS","ERROR","NOMATCH","CHROOT","CWD","TYPE","ROLE","PRIVS", -"LIMITPRIVS","CMND_TIMEOUT","NOTBEFORE","NOTAFTER","MYSELF","SHA224_TOK", -"SHA256_TOK","SHA384_TOK","SHA512_TOK", + + /* 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_uint8 yydefact[] = +{ + 0, 0, 119, 121, 122, 123, 0, 0, 0, 0, + 0, 0, 0, 120, 0, 0, 0, 0, 0, 6, + 0, 0, 4, 8, 9, 0, 115, 117, 132, 131, + 7, 0, 0, 26, 0, 0, 24, 37, 40, 39, + 41, 38, 0, 102, 35, 0, 0, 0, 98, 97, + 96, 0, 0, 0, 0, 0, 49, 0, 107, 51, + 53, 0, 0, 0, 99, 0, 0, 104, 0, 0, + 112, 0, 0, 109, 118, 1, 5, 0, 0, 31, + 0, 0, 20, 0, 22, 0, 0, 0, 27, 0, + 15, 36, 0, 0, 0, 0, 54, 0, 0, 0, + 0, 0, 52, 0, 0, 0, 0, 12, 0, 0, + 13, 0, 0, 11, 0, 0, 14, 116, 0, 10, + 64, 21, 23, 28, 29, 30, 25, 103, 18, 16, + 17, 45, 46, 47, 48, 50, 108, 19, 101, 100, + 106, 105, 114, 113, 111, 110, 0, 32, 66, 34, + 42, 71, 33, 70, 0, 67, 64, 81, 128, 130, + 129, 0, 69, 124, 126, 65, 0, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 73, 76, + 74, 75, 77, 78, 79, 80, 0, 127, 0, 68, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 94, + 95, 92, 93, 44, 125, 56, 55, 61, 60, 62, + 63, 57, 58, 59 }; -const char * const sudoersrule[] = - {"$accept : file", -"file :", -"file : line", -"line : entry", -"line : line entry", -"entry : '\\n'", -"entry : error eol", -"entry : include", -"entry : includedir", -"entry : userlist privileges eol", -"entry : USERALIAS useraliases eol", -"entry : HOSTALIAS hostaliases eol", -"entry : CMNDALIAS cmndaliases eol", -"entry : RUNASALIAS runasaliases eol", -"entry : DEFAULTS defaults_list eol", -"entry : DEFAULTS_USER userlist defaults_list eol", -"entry : DEFAULTS_RUNAS userlist defaults_list eol", -"entry : DEFAULTS_HOST hostlist defaults_list eol", -"entry : DEFAULTS_CMND cmndlist defaults_list eol", -"include : INCLUDE WORD eol", -"include : INCLUDE WORD error eol", -"includedir : INCLUDEDIR WORD eol", -"includedir : INCLUDEDIR WORD error eol", -"defaults_list : defaults_entry", -"defaults_list : defaults_list ',' defaults_entry", -"defaults_entry : DEFVAR", -"defaults_entry : '!' DEFVAR", -"defaults_entry : DEFVAR '=' WORD", -"defaults_entry : DEFVAR '+' WORD", -"defaults_entry : DEFVAR '-' WORD", -"privileges : privilege", -"privileges : privileges ':' privilege", -"privileges : privileges ':' error eol", -"privilege : hostlist '=' cmndspeclist", -"ophost : host", -"ophost : '!' host", -"host : ALIAS", -"host : ALL", -"host : NETGROUP", -"host : NTWKADDR", -"host : WORD", -"cmndspeclist : cmndspec", -"cmndspeclist : cmndspeclist ',' cmndspec", -"cmndspec : runasspec options cmndtag digcmnd", -"digestspec : SHA224_TOK ':' DIGEST", -"digestspec : SHA256_TOK ':' DIGEST", -"digestspec : SHA384_TOK ':' DIGEST", -"digestspec : SHA512_TOK ':' DIGEST", -"digestlist : digestspec", -"digestlist : digestlist ',' digestspec", -"digcmnd : opcmnd", -"digcmnd : digestlist opcmnd", -"opcmnd : cmnd", -"opcmnd : '!' cmnd", -"chdirspec : CWD '=' WORD", -"chrootspec : CHROOT '=' WORD", -"timeoutspec : CMND_TIMEOUT '=' WORD", -"notbeforespec : NOTBEFORE '=' WORD", -"notafterspec : NOTAFTER '=' WORD", -"rolespec : ROLE '=' WORD", -"typespec : TYPE '=' WORD", -"privsspec : PRIVS '=' WORD", -"limitprivsspec : LIMITPRIVS '=' WORD", -"runasspec :", -"runasspec : '(' runaslist ')'", -"runaslist :", -"runaslist : userlist", -"runaslist : userlist ':' grouplist", -"runaslist : ':' grouplist", -"runaslist : ':'", -"options :", -"options : options chdirspec", -"options : options chrootspec", -"options : options notbeforespec", -"options : options notafterspec", -"options : options timeoutspec", -"options : options rolespec", -"options : options typespec", -"options : options privsspec", -"options : options limitprivsspec", -"cmndtag :", -"cmndtag : cmndtag NOPASSWD", -"cmndtag : cmndtag PASSWD", -"cmndtag : cmndtag NOEXEC", -"cmndtag : cmndtag EXEC", -"cmndtag : cmndtag SETENV", -"cmndtag : cmndtag NOSETENV", -"cmndtag : cmndtag LOG_INPUT", -"cmndtag : cmndtag NOLOG_INPUT", -"cmndtag : cmndtag LOG_OUTPUT", -"cmndtag : cmndtag NOLOG_OUTPUT", -"cmndtag : cmndtag FOLLOWLNK", -"cmndtag : cmndtag NOFOLLOWLNK", -"cmndtag : cmndtag MAIL", -"cmndtag : cmndtag NOMAIL", -"cmnd : ALL", -"cmnd : ALIAS", -"cmnd : COMMAND", -"hostaliases : hostalias", -"hostaliases : hostaliases ':' hostalias", -"hostalias : ALIAS '=' hostlist", -"hostlist : ophost", -"hostlist : hostlist ',' ophost", -"cmndaliases : cmndalias", -"cmndaliases : cmndaliases ':' cmndalias", -"cmndalias : ALIAS '=' cmndlist", -"cmndlist : digcmnd", -"cmndlist : cmndlist ',' digcmnd", -"runasaliases : runasalias", -"runasaliases : runasaliases ':' runasalias", -"runasalias : ALIAS '=' userlist", -"useraliases : useralias", -"useraliases : useraliases ':' useralias", -"useralias : ALIAS '=' userlist", -"userlist : opuser", -"userlist : userlist ',' opuser", -"opuser : user", -"opuser : '!' user", -"user : ALIAS", -"user : ALL", -"user : NETGROUP", -"user : USERGROUP", -"user : WORD", -"grouplist : opgroup", -"grouplist : grouplist ',' opgroup", -"opgroup : group", -"opgroup : '!' group", -"group : ALIAS", -"group : ALL", -"group : WORD", -"eol : '\\n'", -"eol : END", + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int16 yypgoto[] = +{ + -99, -99, -99, 220, -99, -99, -28, 157, -99, 129, + 158, 206, -99, 107, 163, -99, -98, 201, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, 214, -99, 161, -5, -99, 164, 166, -99, 151, + -99, 165, -10, 192, 252, 105, 84, 114, -29 }; -#endif -#ifdef YYSTACKSIZE -#undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE -#else -#ifdef YYMAXDEPTH -#define YYSTACKSIZE YYMAXDEPTH -#else -#define YYSTACKSIZE 10000 -#define YYMAXDEPTH 10000 -#endif -#endif -#define YYINITSTACKSIZE 200 -/* LINTUSED */ -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; -YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short *yyss; -short *yysslim; -YYSTYPE *yyvs; -unsigned int yystacksize; -int yyparse(void); -#line 1018 "gram.y" -void -sudoerserror(const char *s) + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int16 yydefgoto[] = { - debug_decl(sudoerserror, SUDOERS_DEBUG_PARSER); + -1, 20, 21, 22, 23, 24, 35, 36, 78, 79, + 43, 44, 149, 150, 56, 57, 58, 59, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 151, 154, 157, + 186, 60, 63, 64, 80, 66, 67, 61, 72, 73, + 69, 70, 25, 26, 27, 162, 163, 164, 30 +}; - /* The lexer displays more detailed messages for ERROR tokens. */ - if (last_token == ERROR) - debug_return; + /* 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_int16 yytable[] = +{ + 46, 47, 82, 84, 45, 136, 90, 31, 28, 81, + 33, 28, 83, 48, 49, 28, 28, 93, 94, 95, + 120, 92, 28, 33, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 104, 107, 28, 28, 110, 32, 28, + 113, 28, 50, 116, 92, 34, 158, 75, 33, 119, + 51, 159, 121, 29, 122, 89, 29, 77, 34, 106, + 29, 29, 48, 49, 128, 129, 130, 29, 52, 53, + 54, 55, 109, 112, 160, 137, 115, 33, 118, 62, + 29, 29, 161, 34, 29, 65, 29, 158, 213, 48, + 49, 50, 159, 85, 68, 71, 86, 87, 101, 51, + 138, 142, 88, 97, 144, 48, 49, 52, 53, 54, + 55, 103, 34, 98, 166, 160, 77, 152, 50, 99, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 50, 100, -2, 1, 155, 105, + 2, 108, 51, 3, 4, 5, 111, 6, 7, 8, + 9, 10, 11, 12, 114, 123, 124, 125, 148, 131, + 52, 53, 54, 55, 132, 133, 134, 92, 13, 14, + 15, 16, 17, 103, 77, 165, 18, 156, -3, 1, + 188, 19, 2, 190, 215, 3, 4, 5, 191, 6, + 7, 8, 9, 10, 11, 12, 146, 192, 193, 37, + 194, 38, 39, 37, 40, 38, 39, 195, 40, 196, + 13, 14, 15, 16, 17, 197, 2, 198, 18, 3, + 4, 5, 216, 19, 217, 2, 218, 41, 3, 4, + 5, 41, 219, 220, 221, 42, 222, 223, 77, 42, + 37, 76, 38, 39, 13, 40, 126, 147, 91, 153, + 127, 2, 18, 13, 3, 4, 5, 37, 102, 38, + 39, 18, 40, 167, 135, 96, 145, 139, 41, 117, + 74, 189, 214, 141, 140, 187, 42, 143, 0, 13, + 0, 0, 0, 0, 0, 41 +}; - /* Save the line the first error occurred on. */ - if (errorlineno == -1) { - errorlineno = this_lineno; - rcstr_delref(errorfile); - errorfile = rcstr_addref(sudoers); - } - if (sudoers_warnings && s != NULL) { - LEXTRACE("<*> "); -#ifndef TRACELEXER - if (trace_print == NULL || trace_print == sudoers_trace_print) { - int oldlocale; +static const yytype_int16 yycheck[] = +{ + 10, 11, 31, 32, 9, 103, 35, 9, 0, 1, + 5, 0, 1, 3, 4, 0, 0, 45, 46, 47, + 38, 39, 0, 5, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 61, 63, 0, 0, 66, 9, 0, + 69, 0, 32, 72, 39, 40, 4, 0, 5, 78, + 40, 9, 81, 45, 83, 39, 45, 39, 40, 37, + 45, 45, 3, 4, 93, 94, 95, 45, 58, 59, + 60, 61, 37, 37, 32, 104, 37, 5, 37, 4, + 45, 45, 40, 40, 45, 4, 45, 4, 186, 3, + 4, 32, 9, 38, 4, 4, 41, 42, 39, 40, + 105, 111, 5, 37, 114, 3, 4, 58, 59, 60, + 61, 39, 40, 37, 37, 32, 39, 146, 32, 37, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 37, 0, 1, 148, 38, + 4, 38, 40, 7, 8, 9, 38, 11, 12, 13, + 14, 15, 16, 17, 38, 9, 9, 9, 43, 10, + 58, 59, 60, 61, 10, 10, 10, 39, 32, 33, + 34, 35, 36, 39, 39, 44, 40, 39, 0, 1, + 39, 45, 4, 38, 9, 7, 8, 9, 38, 11, + 12, 13, 14, 15, 16, 17, 1, 38, 38, 4, + 38, 6, 7, 4, 9, 6, 7, 38, 9, 38, + 32, 33, 34, 35, 36, 38, 4, 38, 40, 7, + 8, 9, 9, 45, 9, 4, 9, 32, 7, 8, + 9, 32, 9, 9, 9, 40, 9, 9, 39, 40, + 4, 21, 6, 7, 32, 9, 89, 118, 42, 37, + 92, 4, 40, 32, 7, 8, 9, 4, 57, 6, + 7, 40, 9, 156, 101, 51, 115, 106, 32, 77, + 18, 166, 188, 109, 108, 161, 40, 112, -1, 32, + -1, -1, -1, -1, -1, 32 +}; - /* Warnings are displayed in the user's locale. */ - sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); - sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d: %s\n"), sudoers, - this_lineno, _(s)); - sudoers_setlocale(oldlocale, NULL); + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 1, 4, 7, 8, 9, 11, 12, 13, 14, + 15, 16, 17, 32, 33, 34, 35, 36, 40, 45, + 63, 64, 65, 66, 67, 104, 105, 106, 0, 45, + 110, 9, 9, 5, 40, 68, 69, 4, 6, 7, + 9, 32, 40, 72, 73, 96, 104, 104, 3, 4, + 32, 40, 58, 59, 60, 61, 76, 77, 78, 79, + 93, 99, 4, 94, 95, 4, 97, 98, 4, 102, + 103, 4, 100, 101, 106, 0, 65, 39, 70, 71, + 96, 1, 110, 1, 110, 38, 41, 42, 5, 39, + 110, 73, 39, 68, 68, 68, 93, 37, 37, 37, + 37, 39, 79, 39, 68, 38, 37, 110, 38, 37, + 110, 38, 37, 110, 38, 37, 110, 105, 37, 110, + 38, 110, 110, 9, 9, 9, 69, 72, 110, 110, + 110, 10, 10, 10, 10, 76, 78, 110, 96, 95, + 99, 98, 104, 103, 104, 101, 1, 71, 43, 74, + 75, 89, 110, 37, 90, 104, 39, 91, 4, 9, + 32, 40, 107, 108, 109, 44, 37, 75, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 92, 109, 39, 107, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 78, 108, 9, 9, 9, 9, 9, + 9, 9, 9, 9 +}; - /* Display the offending line and token if possible. */ - if (sudolinebuf.len != 0) { - char tildes[128]; - size_t tlen = 0; + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 62, 63, 63, 64, 64, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 66, 66, 67, 67, 68, 68, 69, 69, 69, 69, + 69, 70, 70, 70, 71, 72, 72, 73, 73, 73, + 73, 73, 74, 74, 75, 76, 76, 76, 76, 77, + 77, 78, 78, 79, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 89, 90, 90, 90, 90, + 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 93, 93, 93, 94, + 94, 95, 96, 96, 97, 97, 98, 99, 99, 100, + 100, 101, 102, 102, 103, 104, 104, 105, 105, 106, + 106, 106, 106, 106, 107, 107, 108, 108, 109, 109, + 109, 110, 110 +}; - sudo_printf(SUDO_CONV_ERROR_MSG, "%s%s", sudolinebuf.buf, - sudolinebuf.buf[sudolinebuf.len - 1] == '\n' ? "" : "\n"); - if (sudolinebuf.toke_end > sudolinebuf.toke_start) { - tlen = sudolinebuf.toke_end - sudolinebuf.toke_start - 1; - if (tlen >= sizeof(tildes)) - tlen = sizeof(tildes) - 1; - memset(tildes, '~', tlen); - } - tildes[tlen] = '\0'; - sudo_printf(SUDO_CONV_ERROR_MSG, "%*s^%s\n", - (int)sudolinebuf.toke_start, "", tildes); - } - } + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 1, 1, 2, 1, 2, 1, 1, + 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, + 3, 4, 3, 4, 1, 3, 1, 2, 3, 3, + 3, 1, 3, 4, 3, 1, 2, 1, 1, 1, + 1, 1, 1, 3, 4, 3, 3, 3, 3, 1, + 3, 1, 2, 1, 2, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 0, 3, 0, 1, 3, 2, + 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 3, 3, 1, 3, 1, 3, 3, 1, 3, 1, + 3, 3, 1, 3, 3, 1, 3, 1, 2, 1, + 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, + 1, 1, 1 +}; + + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#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) + +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 + + + +/* 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) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif - } - parse_error = true; - debug_return; -} -static struct defaults * -new_default(char *var, char *val, short op) -{ - struct defaults *d; - debug_decl(new_default, SUDOERS_DEBUG_PARSER); - if ((d = calloc(1, sizeof(struct defaults))) == NULL) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to allocate memory"); - debug_return_ptr(NULL); - } +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) - d->var = var; - d->val = val; - /* d->type = 0; */ - d->op = op; - /* d->binding = NULL */ - d->lineno = this_lineno; - d->file = rcstr_addref(sudoers); - HLTQ_INIT(d, entries); - debug_return_ptr(d); +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +{ + FILE *yyoutput = yyo; + YYUSE (yyoutput); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyo, yytoknum[yytype], *yyvaluep); +# endif + YYUSE (yytype); } -static struct member * -new_member(char *name, int type) -{ - struct member *m; - debug_decl(new_member, SUDOERS_DEBUG_PARSER); - if ((m = calloc(1, sizeof(struct member))) == NULL) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to allocate memory"); - debug_return_ptr(NULL); - } +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ - m->name = name; - m->type = type; - HLTQ_INIT(m, entries); +static void +yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) +{ + YYFPRINTF (yyo, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); - debug_return_ptr(m); + yy_symbol_value_print (yyo, yytype, yyvaluep); + YYFPRINTF (yyo, ")"); } -static struct sudo_command * -new_command(char *cmnd, char *args) +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { - struct sudo_command *c; - debug_decl(new_command, SUDOERS_DEBUG_PARSER); + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} - if ((c = calloc(1, sizeof(*c))) == NULL) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to allocate memory"); - debug_return_ptr(NULL); +# 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 (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +{ + unsigned long yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &yyvsp[(yyi + 1) - (yynrhs)] + ); + YYFPRINTF (stderr, "\n"); } +} - c->cmnd = cmnd; - c->args = args; - TAILQ_INIT(&c->digests); +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule); \ +} while (0) - debug_return_ptr(c); +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, 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 + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +yystrlen (const char *yystr) +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; } +# endif +# endif -static struct command_digest * -new_digest(int digest_type, char *digest_str) +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +yystpcpy (char *yydest, const char *yysrc) { - struct command_digest *digest; - debug_decl(new_digest, SUDOERS_DEBUG_PARSER); + char *yyd = yydest; + const char *yys = yysrc; - if ((digest = malloc(sizeof(*digest))) == NULL) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to allocate memory"); - debug_return_ptr(NULL); + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + else + goto append; + + append: + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; } - HLTQ_INIT(digest, entries); - digest->digest_type = digest_type; - digest->digest_str = digest_str; - if (digest->digest_str == NULL) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to allocate memory"); - free(digest); - digest = NULL; - } + if (! yyres) + return yystrlen (yystr); - debug_return_ptr(digest); + return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); } +# endif + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) +{ + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else + return 2; + } + } + } + } -/* - * Add a list of defaults structures to the defaults list. - * The binding, if non-NULL, specifies a list of hosts, users, or - * runas users the entries apply to (specified by the type). - */ -static bool -add_defaults(int type, struct member *bmem, struct defaults *defs) -{ - struct defaults *d, *next; - struct member_list *binding; - bool ret = true; - debug_decl(add_defaults, SUDOERS_DEBUG_PARSER); + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + default: /* Avoid compiler warnings. */ + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } - if (defs != NULL) { - /* - * We use a single binding for each entry in defs. - */ - if ((binding = malloc(sizeof(*binding))) == NULL) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to allocate memory"); - sudoerserror(N_("unable to allocate memory")); - debug_return_bool(false); - } - if (bmem != NULL) - HLTQ_TO_TAILQ(binding, bmem, entries); - else - TAILQ_INIT(binding); + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else + return 2; + } - /* - * Set type and binding (who it applies to) for new entries. - * Then add to the global defaults list. - */ - HLTQ_FOREACH_SAFE(d, defs, entries, next) { - d->type = type; - d->binding = binding; - TAILQ_INSERT_TAIL(&parsed_policy.defaults, d, entries); - } + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; } - debug_return_bool(ret); + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; } +#endif /* YYERROR_VERBOSE */ -/* - * Allocate a new struct userspec, populate it, and insert it at the - * end of the userspecs list. - */ -static bool -add_userspec(struct member *members, struct privilege *privs) -{ - struct userspec *u; - debug_decl(add_userspec, SUDOERS_DEBUG_PARSER); +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ - if ((u = calloc(1, sizeof(*u))) == NULL) { - sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "unable to allocate memory"); - debug_return_bool(false); - } - u->lineno = this_lineno; - u->file = rcstr_addref(sudoers); - HLTQ_TO_TAILQ(&u->users, members, entries); - HLTQ_TO_TAILQ(&u->privileges, privs, entries); - STAILQ_INIT(&u->comments); - TAILQ_INSERT_TAIL(&parsed_policy.userspecs, u, entries); +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) +{ + YYUSE (yyvaluep); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - debug_return_bool(true); + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/* - * Free a member struct and its contents. - */ -void -free_member(struct member *m) -{ - debug_decl(free_member, SUDOERS_DEBUG_PARSER); - if (m->type == COMMAND || (m->type == ALL && m->name != NULL)) { - struct command_digest *digest; - struct sudo_command *c = (struct sudo_command *)m->name; - free(c->cmnd); - free(c->args); - while ((digest = TAILQ_FIRST(&c->digests)) != NULL) { - TAILQ_REMOVE(&c->digests, digest, entries); - free(digest->digest_str); - free(digest); - } - } - free(m->name); - free(m); - debug_return; -} -/* - * Free a tailq of members but not the struct member_list container itself. - */ -void -free_members(struct member_list *members) -{ - struct member *m; - debug_decl(free_members, SUDOERS_DEBUG_PARSER); +/* The lookahead symbol. */ +int yychar; - while ((m = TAILQ_FIRST(members)) != NULL) { - TAILQ_REMOVE(members, m, entries); - free_member(m); - } +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; +/* Number of syntax errors so far. */ +int yynerrs; - debug_return; -} -void -free_defaults(struct defaults_list *defs) -{ - struct member_list *prev_binding = NULL; - struct defaults *def; - debug_decl(free_defaults, SUDOERS_DEBUG_PARSER); +/*----------. +| yyparse. | +`----------*/ - while ((def = TAILQ_FIRST(defs)) != NULL) { - TAILQ_REMOVE(defs, def, entries); - free_default(def, &prev_binding); - } +int +yyparse (void) +{ + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + 'yyss': related to states. + 'yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif - debug_return; -} +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) -void -free_default(struct defaults *def, struct member_list **binding) -{ - debug_decl(free_default, SUDOERS_DEBUG_PARSER); + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; - if (def->binding != *binding) { - *binding = def->binding; - if (def->binding != NULL) { - free_members(def->binding); - free(def->binding); - } - } - rcstr_delref(def->file); - free(def->var); - free(def->val); - free(def); + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; - debug_return; -} + YYDPRINTF ((stderr, "Starting parse\n")); -void -free_privilege(struct privilege *priv) -{ - struct member_list *runasuserlist = NULL, *runasgrouplist = NULL; - struct member_list *prev_binding = NULL; - struct cmndspec *cs; - struct defaults *def; - char *runcwd = NULL, *runchroot = NULL; -#ifdef HAVE_SELINUX - char *role = NULL, *type = NULL; -#endif /* HAVE_SELINUX */ -#ifdef HAVE_PRIV_SET - char *privs = NULL, *limitprivs = NULL; -#endif /* HAVE_PRIV_SET */ - debug_decl(free_privilege, SUDOERS_DEBUG_PARSER); + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; - free(priv->ldap_role); - free_members(&priv->hostlist); - while ((cs = TAILQ_FIRST(&priv->cmndlist)) != NULL) { - TAILQ_REMOVE(&priv->cmndlist, cs, entries); - /* Only free the first instance of runcwd/runchroot. */ - if (cs->runcwd != runcwd) { - runcwd = cs->runcwd; - free(cs->runcwd); - } - if (cs->runchroot != runchroot) { - runcwd = cs->runchroot; - free(cs->runchroot); - } -#ifdef HAVE_SELINUX - /* Only free the first instance of a role/type. */ - if (cs->role != role) { - role = cs->role; - free(cs->role); - } - if (cs->type != type) { - type = cs->type; - free(cs->type); - } -#endif /* HAVE_SELINUX */ -#ifdef HAVE_PRIV_SET - /* Only free the first instance of privs/limitprivs. */ - if (cs->privs != privs) { - privs = cs->privs; - free(cs->privs); - } - if (cs->limitprivs != limitprivs) { - limitprivs = cs->limitprivs; - free(cs->limitprivs); - } -#endif /* HAVE_PRIV_SET */ - /* Only free the first instance of runas user/group lists. */ - if (cs->runasuserlist && cs->runasuserlist != runasuserlist) { - runasuserlist = cs->runasuserlist; - free_members(runasuserlist); - free(runasuserlist); - } - if (cs->runasgrouplist && cs->runasgrouplist != runasgrouplist) { - runasgrouplist = cs->runasgrouplist; - free_members(runasgrouplist); - free(runasgrouplist); - } - free_member(cs->cmnd); - free(cs); - } - while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) { - TAILQ_REMOVE(&priv->defaults, def, entries); - free_default(def, &prev_binding); - } - free(priv); - debug_return; -} +/*------------------------------------------------------------. +| 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++; -void -free_userspecs(struct userspec_list *usl) -{ - struct userspec *us; - debug_decl(free_userspecs, SUDOERS_DEBUG_PARSER); - while ((us = TAILQ_FIRST(usl)) != NULL) { - TAILQ_REMOVE(usl, us, entries); - free_userspec(us); +/*--------------------------------------------------------------------. +| yynewstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + *yyssp = (yytype_int16) yystate; + + if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = (YYSIZE_T) (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. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* 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 * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; + } +# else /* defined YYSTACK_RELOCATE */ + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + 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; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - debug_return; -} + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); -void -free_userspec(struct userspec *us) -{ - struct privilege *priv; - struct sudoers_comment *comment; - debug_decl(free_userspec, SUDOERS_DEBUG_PARSER); + if (yystate == YYFINAL) + YYACCEPT; - free_members(&us->users); - while ((priv = TAILQ_FIRST(&us->privileges)) != NULL) { - TAILQ_REMOVE(&us->privileges, priv, entries); - free_privilege(priv); - } - while ((comment = STAILQ_FIRST(&us->comments)) != NULL) { - STAILQ_REMOVE_HEAD(&us->comments, entries); - free(comment->str); - free(comment); - } - rcstr_delref(us->file); - free(us); + goto yybackup; - debug_return; -} -/* - * Initialized a sudoers parse tree. - */ -void -init_parse_tree(struct sudoers_parse_tree *parse_tree, const char *lhost, - const char *shost) -{ - TAILQ_INIT(&parse_tree->userspecs); - TAILQ_INIT(&parse_tree->defaults); - parse_tree->aliases = NULL; - parse_tree->shost = shost; - parse_tree->lhost = lhost; -} - -/* - * Move the contents of parsed_policy to new_tree. - */ -void -reparent_parse_tree(struct sudoers_parse_tree *new_tree) -{ - TAILQ_CONCAT(&new_tree->userspecs, &parsed_policy.userspecs, entries); - TAILQ_CONCAT(&new_tree->defaults, &parsed_policy.defaults, entries); - new_tree->aliases = parsed_policy.aliases; - parsed_policy.aliases = NULL; -} +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ -/* - * Free the contents of a sudoers parse tree and initialize it. - */ -void -free_parse_tree(struct sudoers_parse_tree *parse_tree) -{ - free_userspecs(&parse_tree->userspecs); - free_defaults(&parse_tree->defaults); - free_aliases(parse_tree->aliases); - parse_tree->aliases = NULL; -} + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; -/* - * Free up space used by data structures from a previous parser run and sets - * the current sudoers file to path. - */ -bool -init_parser(const char *path, bool quiet, bool strict) -{ - bool ret = true; - debug_decl(init_parser, SUDOERS_DEBUG_PARSER); + /* Not known => get a lookahead token if don't already have one. */ - free_parse_tree(&parsed_policy); - init_lexer(); + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = yylex (); + } - rcstr_delref(sudoers); - if (path != NULL) { - if ((sudoers = rcstr_dup(path)) == NULL) { - sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - ret = false; - } - } else { - sudoers = NULL; + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } - parse_error = false; - errorlineno = -1; - rcstr_delref(errorfile); - errorfile = NULL; - sudoers_warnings = !quiet; - sudoers_strict = strict; + /* 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; + } - debug_return_bool(ret); -} + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; -/* - * Initialize all options in a cmndspec. - */ -static void -init_options(struct command_options *opts) -{ - opts->notbefore = UNSPEC; - opts->notafter = UNSPEC; - opts->timeout = UNSPEC; -#ifdef HAVE_SELINUX - opts->role = NULL; - opts->type = NULL; -#endif -#ifdef HAVE_PRIV_SET - opts->privs = NULL; - opts->limitprivs = NULL; -#endif -} -#line 1056 "gram.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; -} + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); -#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; + /* Discard the shifted token. */ + yychar = YYEMPTY; - if ((yys = getenv("YYDEBUG"))) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') - yydebug = yyn - '0'; - } -#endif /* YYDEBUG */ + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END - yynerrs = 0; - yyerrflag = 0; - yychar = (-1); + goto yynewstate; - 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__) +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) 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; - } + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- do a reduction. | +`-----------------------------*/ 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) + /* 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 2: +#line 186 "gram.y" /* yacc.c:1652 */ { -case 1: -#line 186 "gram.y" -{ ; /* empty file */ } -break; -case 5: -#line 196 "gram.y" -{ +#line 1597 "gram.c" /* yacc.c:1652 */ + break; + + case 6: +#line 196 "gram.y" /* yacc.c:1652 */ + { ; /* blank line */ } -break; -case 6: -#line 199 "gram.y" -{ +#line 1605 "gram.c" /* yacc.c:1652 */ + break; + + case 7: +#line 199 "gram.y" /* yacc.c:1652 */ + { yyerrok; } -break; -case 7: -#line 202 "gram.y" -{ - if (!push_include(yyvsp[0].string, false)) { - free(yyvsp[0].string); +#line 1613 "gram.c" /* yacc.c:1652 */ + break; + + case 8: +#line 202 "gram.y" /* yacc.c:1652 */ + { + if (!push_include((yyvsp[0].string), false)) { + free((yyvsp[0].string)); YYERROR; } - free(yyvsp[0].string); + free((yyvsp[0].string)); } -break; -case 8: -#line 209 "gram.y" -{ - if (!push_include(yyvsp[0].string, true)) { - free(yyvsp[0].string); +#line 1625 "gram.c" /* yacc.c:1652 */ + break; + + case 9: +#line 209 "gram.y" /* yacc.c:1652 */ + { + if (!push_include((yyvsp[0].string), true)) { + free((yyvsp[0].string)); YYERROR; } - free(yyvsp[0].string); + free((yyvsp[0].string)); } -break; -case 9: -#line 216 "gram.y" -{ - if (!add_userspec(yyvsp[-2].member, yyvsp[-1].privilege)) { +#line 1637 "gram.c" /* yacc.c:1652 */ + break; + + case 10: +#line 216 "gram.y" /* yacc.c:1652 */ + { + if (!add_userspec((yyvsp[-2].member), (yyvsp[-1].privilege))) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 10: -#line 222 "gram.y" -{ +#line 1648 "gram.c" /* yacc.c:1652 */ + break; + + case 11: +#line 222 "gram.y" /* yacc.c:1652 */ + { ; } -break; -case 11: -#line 225 "gram.y" -{ +#line 1656 "gram.c" /* yacc.c:1652 */ + break; + + case 12: +#line 225 "gram.y" /* yacc.c:1652 */ + { ; } -break; -case 12: -#line 228 "gram.y" -{ +#line 1664 "gram.c" /* yacc.c:1652 */ + break; + + case 13: +#line 228 "gram.y" /* yacc.c:1652 */ + { ; } -break; -case 13: -#line 231 "gram.y" -{ +#line 1672 "gram.c" /* yacc.c:1652 */ + break; + + case 14: +#line 231 "gram.y" /* yacc.c:1652 */ + { ; } -break; -case 14: -#line 234 "gram.y" -{ - if (!add_defaults(DEFAULTS, NULL, yyvsp[-1].defaults)) +#line 1680 "gram.c" /* yacc.c:1652 */ + break; + + case 15: +#line 234 "gram.y" /* yacc.c:1652 */ + { + if (!add_defaults(DEFAULTS, NULL, (yyvsp[-1].defaults))) YYERROR; } -break; -case 15: -#line 238 "gram.y" -{ - if (!add_defaults(DEFAULTS_USER, yyvsp[-2].member, yyvsp[-1].defaults)) +#line 1689 "gram.c" /* yacc.c:1652 */ + break; + + case 16: +#line 238 "gram.y" /* yacc.c:1652 */ + { + if (!add_defaults(DEFAULTS_USER, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -break; -case 16: -#line 242 "gram.y" -{ - if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-2].member, yyvsp[-1].defaults)) +#line 1698 "gram.c" /* yacc.c:1652 */ + break; + + case 17: +#line 242 "gram.y" /* yacc.c:1652 */ + { + if (!add_defaults(DEFAULTS_RUNAS, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -break; -case 17: -#line 246 "gram.y" -{ - if (!add_defaults(DEFAULTS_HOST, yyvsp[-2].member, yyvsp[-1].defaults)) +#line 1707 "gram.c" /* yacc.c:1652 */ + break; + + case 18: +#line 246 "gram.y" /* yacc.c:1652 */ + { + if (!add_defaults(DEFAULTS_HOST, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -break; -case 18: -#line 250 "gram.y" -{ - if (!add_defaults(DEFAULTS_CMND, yyvsp[-2].member, yyvsp[-1].defaults)) +#line 1716 "gram.c" /* yacc.c:1652 */ + break; + + case 19: +#line 250 "gram.y" /* yacc.c:1652 */ + { + if (!add_defaults(DEFAULTS_CMND, (yyvsp[-2].member), (yyvsp[-1].defaults))) YYERROR; } -break; -case 19: -#line 256 "gram.y" -{ - yyval.string = yyvsp[-1].string; +#line 1725 "gram.c" /* yacc.c:1652 */ + break; + + case 20: +#line 256 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[-1].string); } -break; -case 20: -#line 259 "gram.y" -{ +#line 1733 "gram.c" /* yacc.c:1652 */ + break; + + case 21: +#line 259 "gram.y" /* yacc.c:1652 */ + { yyerrok; - yyval.string = yyvsp[-2].string; + (yyval.string) = (yyvsp[-2].string); } -break; -case 21: -#line 265 "gram.y" -{ - yyval.string = yyvsp[-1].string; +#line 1742 "gram.c" /* yacc.c:1652 */ + break; + + case 22: +#line 265 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[-1].string); } -break; -case 22: -#line 268 "gram.y" -{ +#line 1750 "gram.c" /* yacc.c:1652 */ + break; + + case 23: +#line 268 "gram.y" /* yacc.c:1652 */ + { yyerrok; - yyval.string = yyvsp[-2].string; + (yyval.string) = (yyvsp[-2].string); } -break; -case 24: -#line 275 "gram.y" -{ - HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); - yyval.defaults = yyvsp[-2].defaults; +#line 1759 "gram.c" /* yacc.c:1652 */ + break; + + case 25: +#line 275 "gram.y" /* yacc.c:1652 */ + { + HLTQ_CONCAT((yyvsp[-2].defaults), (yyvsp[0].defaults), entries); + (yyval.defaults) = (yyvsp[-2].defaults); } -break; -case 25: -#line 281 "gram.y" -{ - yyval.defaults = new_default(yyvsp[0].string, NULL, true); - if (yyval.defaults == NULL) { +#line 1768 "gram.c" /* yacc.c:1652 */ + break; + + case 26: +#line 281 "gram.y" /* yacc.c:1652 */ + { + (yyval.defaults) = new_default((yyvsp[0].string), NULL, true); + if ((yyval.defaults) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 26: -#line 288 "gram.y" -{ - yyval.defaults = new_default(yyvsp[0].string, NULL, false); - if (yyval.defaults == NULL) { +#line 1780 "gram.c" /* yacc.c:1652 */ + break; + + case 27: +#line 288 "gram.y" /* yacc.c:1652 */ + { + (yyval.defaults) = new_default((yyvsp[0].string), NULL, false); + if ((yyval.defaults) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 27: -#line 295 "gram.y" -{ - yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); - if (yyval.defaults == NULL) { +#line 1792 "gram.c" /* yacc.c:1652 */ + break; + + case 28: +#line 295 "gram.y" /* yacc.c:1652 */ + { + (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), true); + if ((yyval.defaults) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 28: -#line 302 "gram.y" -{ - yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); - if (yyval.defaults == NULL) { +#line 1804 "gram.c" /* yacc.c:1652 */ + break; + + case 29: +#line 302 "gram.y" /* yacc.c:1652 */ + { + (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), '+'); + if ((yyval.defaults) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 29: -#line 309 "gram.y" -{ - yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); - if (yyval.defaults == NULL) { +#line 1816 "gram.c" /* yacc.c:1652 */ + break; + + case 30: +#line 309 "gram.y" /* yacc.c:1652 */ + { + (yyval.defaults) = new_default((yyvsp[-2].string), (yyvsp[0].string), '-'); + if ((yyval.defaults) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 31: -#line 319 "gram.y" -{ - HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); - yyval.privilege = yyvsp[-2].privilege; +#line 1828 "gram.c" /* yacc.c:1652 */ + break; + + case 32: +#line 319 "gram.y" /* yacc.c:1652 */ + { + HLTQ_CONCAT((yyvsp[-2].privilege), (yyvsp[0].privilege), entries); + (yyval.privilege) = (yyvsp[-2].privilege); } -break; -case 32: -#line 323 "gram.y" -{ +#line 1837 "gram.c" /* yacc.c:1652 */ + break; + + case 33: +#line 323 "gram.y" /* yacc.c:1652 */ + { yyerrok; - yyval.privilege = yyvsp[-3].privilege; + (yyval.privilege) = (yyvsp[-3].privilege); } -break; -case 33: -#line 329 "gram.y" -{ +#line 1846 "gram.c" /* yacc.c:1652 */ + break; + + case 34: +#line 329 "gram.y" /* yacc.c:1652 */ + { struct privilege *p = calloc(1, sizeof(*p)); if (p == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } TAILQ_INIT(&p->defaults); - HLTQ_TO_TAILQ(&p->hostlist, yyvsp[-2].member, entries); - HLTQ_TO_TAILQ(&p->cmndlist, yyvsp[0].cmndspec, entries); + HLTQ_TO_TAILQ(&p->hostlist, (yyvsp[-2].member), entries); + HLTQ_TO_TAILQ(&p->cmndlist, (yyvsp[0].cmndspec), entries); HLTQ_INIT(p, entries); - yyval.privilege = p; + (yyval.privilege) = p; } -break; -case 34: -#line 343 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = false; +#line 1863 "gram.c" /* yacc.c:1652 */ + break; + + case 35: +#line 343 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = false; } -break; -case 35: -#line 347 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = true; +#line 1872 "gram.c" /* yacc.c:1652 */ + break; + + case 36: +#line 347 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = true; } -break; -case 36: -#line 353 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, ALIAS); - if (yyval.member == NULL) { +#line 1881 "gram.c" /* yacc.c:1652 */ + break; + + case 37: +#line 353 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), ALIAS); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 37: -#line 360 "gram.y" -{ - yyval.member = new_member(NULL, ALL); - if (yyval.member == NULL) { +#line 1893 "gram.c" /* yacc.c:1652 */ + break; + + case 38: +#line 360 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member(NULL, ALL); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 38: -#line 367 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, NETGROUP); - if (yyval.member == NULL) { +#line 1905 "gram.c" /* yacc.c:1652 */ + break; + + case 39: +#line 367 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), NETGROUP); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 39: -#line 374 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, NTWKADDR); - if (yyval.member == NULL) { +#line 1917 "gram.c" /* yacc.c:1652 */ + break; + + case 40: +#line 374 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), NTWKADDR); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 40: -#line 381 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, WORD); - if (yyval.member == NULL) { +#line 1929 "gram.c" /* yacc.c:1652 */ + break; + + case 41: +#line 381 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), WORD); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 42: -#line 391 "gram.y" -{ +#line 1941 "gram.c" /* yacc.c:1652 */ + break; + + case 43: +#line 391 "gram.y" /* yacc.c:1652 */ + { struct cmndspec *prev; - prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); - HLTQ_CONCAT(yyvsp[-2].cmndspec, yyvsp[0].cmndspec, entries); + prev = HLTQ_LAST((yyvsp[-2].cmndspec), cmndspec, entries); + HLTQ_CONCAT((yyvsp[-2].cmndspec), (yyvsp[0].cmndspec), entries); /* propagate runcwd and runchroot */ - if (yyvsp[0].cmndspec->runcwd == NULL) - yyvsp[0].cmndspec->runcwd = prev->runcwd; - if (yyvsp[0].cmndspec->runchroot == NULL) - yyvsp[0].cmndspec->runchroot = prev->runchroot; + if ((yyvsp[0].cmndspec)->runcwd == NULL) + (yyvsp[0].cmndspec)->runcwd = prev->runcwd; + if ((yyvsp[0].cmndspec)->runchroot == NULL) + (yyvsp[0].cmndspec)->runchroot = prev->runchroot; #ifdef HAVE_SELINUX /* propagate role and type */ - if (yyvsp[0].cmndspec->role == NULL && yyvsp[0].cmndspec->type == NULL) { - yyvsp[0].cmndspec->role = prev->role; - yyvsp[0].cmndspec->type = prev->type; + if ((yyvsp[0].cmndspec)->role == NULL && (yyvsp[0].cmndspec)->type == NULL) { + (yyvsp[0].cmndspec)->role = prev->role; + (yyvsp[0].cmndspec)->type = prev->type; } #endif /* HAVE_SELINUX */ #ifdef HAVE_PRIV_SET /* propagate privs & limitprivs */ - if (yyvsp[0].cmndspec->privs == NULL && yyvsp[0].cmndspec->limitprivs == NULL) { - yyvsp[0].cmndspec->privs = prev->privs; - yyvsp[0].cmndspec->limitprivs = prev->limitprivs; + if ((yyvsp[0].cmndspec)->privs == NULL && (yyvsp[0].cmndspec)->limitprivs == NULL) { + (yyvsp[0].cmndspec)->privs = prev->privs; + (yyvsp[0].cmndspec)->limitprivs = prev->limitprivs; } #endif /* HAVE_PRIV_SET */ /* propagate command time restrictions */ - if (yyvsp[0].cmndspec->notbefore == UNSPEC) - yyvsp[0].cmndspec->notbefore = prev->notbefore; - if (yyvsp[0].cmndspec->notafter == UNSPEC) - yyvsp[0].cmndspec->notafter = prev->notafter; + if ((yyvsp[0].cmndspec)->notbefore == UNSPEC) + (yyvsp[0].cmndspec)->notbefore = prev->notbefore; + if ((yyvsp[0].cmndspec)->notafter == UNSPEC) + (yyvsp[0].cmndspec)->notafter = prev->notafter; /* propagate command timeout */ - if (yyvsp[0].cmndspec->timeout == UNSPEC) - yyvsp[0].cmndspec->timeout = prev->timeout; + if ((yyvsp[0].cmndspec)->timeout == UNSPEC) + (yyvsp[0].cmndspec)->timeout = prev->timeout; /* propagate tags and runas list */ - if (yyvsp[0].cmndspec->tags.nopasswd == UNSPEC) - yyvsp[0].cmndspec->tags.nopasswd = prev->tags.nopasswd; - if (yyvsp[0].cmndspec->tags.noexec == UNSPEC) - yyvsp[0].cmndspec->tags.noexec = prev->tags.noexec; - if (yyvsp[0].cmndspec->tags.setenv == UNSPEC && + if ((yyvsp[0].cmndspec)->tags.nopasswd == UNSPEC) + (yyvsp[0].cmndspec)->tags.nopasswd = prev->tags.nopasswd; + if ((yyvsp[0].cmndspec)->tags.noexec == UNSPEC) + (yyvsp[0].cmndspec)->tags.noexec = prev->tags.noexec; + if ((yyvsp[0].cmndspec)->tags.setenv == UNSPEC && prev->tags.setenv != IMPLIED) - yyvsp[0].cmndspec->tags.setenv = prev->tags.setenv; - if (yyvsp[0].cmndspec->tags.log_input == UNSPEC) - yyvsp[0].cmndspec->tags.log_input = prev->tags.log_input; - if (yyvsp[0].cmndspec->tags.log_output == UNSPEC) - yyvsp[0].cmndspec->tags.log_output = prev->tags.log_output; - if (yyvsp[0].cmndspec->tags.send_mail == UNSPEC) - yyvsp[0].cmndspec->tags.send_mail = prev->tags.send_mail; - if (yyvsp[0].cmndspec->tags.follow == UNSPEC) - yyvsp[0].cmndspec->tags.follow = prev->tags.follow; - if ((yyvsp[0].cmndspec->runasuserlist == NULL && - yyvsp[0].cmndspec->runasgrouplist == NULL) && + (yyvsp[0].cmndspec)->tags.setenv = prev->tags.setenv; + if ((yyvsp[0].cmndspec)->tags.log_input == UNSPEC) + (yyvsp[0].cmndspec)->tags.log_input = prev->tags.log_input; + if ((yyvsp[0].cmndspec)->tags.log_output == UNSPEC) + (yyvsp[0].cmndspec)->tags.log_output = prev->tags.log_output; + if ((yyvsp[0].cmndspec)->tags.send_mail == UNSPEC) + (yyvsp[0].cmndspec)->tags.send_mail = prev->tags.send_mail; + if ((yyvsp[0].cmndspec)->tags.follow == UNSPEC) + (yyvsp[0].cmndspec)->tags.follow = prev->tags.follow; + if (((yyvsp[0].cmndspec)->runasuserlist == NULL && + (yyvsp[0].cmndspec)->runasgrouplist == NULL) && (prev->runasuserlist != NULL || prev->runasgrouplist != NULL)) { - yyvsp[0].cmndspec->runasuserlist = prev->runasuserlist; - yyvsp[0].cmndspec->runasgrouplist = prev->runasgrouplist; + (yyvsp[0].cmndspec)->runasuserlist = prev->runasuserlist; + (yyvsp[0].cmndspec)->runasgrouplist = prev->runasgrouplist; } - yyval.cmndspec = yyvsp[-2].cmndspec; + (yyval.cmndspec) = (yyvsp[-2].cmndspec); } -break; -case 43: -#line 450 "gram.y" -{ +#line 2003 "gram.c" /* yacc.c:1652 */ + break; + + case 44: +#line 450 "gram.y" /* yacc.c:1652 */ + { struct cmndspec *cs = calloc(1, sizeof(*cs)); if (cs == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } - if (yyvsp[-3].runas != NULL) { - if (yyvsp[-3].runas->runasusers != NULL) { + if ((yyvsp[-3].runas) != NULL) { + if ((yyvsp[-3].runas)->runasusers != NULL) { cs->runasuserlist = malloc(sizeof(*cs->runasuserlist)); if (cs->runasuserlist == NULL) { @@ -1616,9 +2026,9 @@ case 43: YYERROR; } HLTQ_TO_TAILQ(cs->runasuserlist, - yyvsp[-3].runas->runasusers, entries); + (yyvsp[-3].runas)->runasusers, entries); } - if (yyvsp[-3].runas->runasgroups != NULL) { + if ((yyvsp[-3].runas)->runasgroups != NULL) { cs->runasgrouplist = malloc(sizeof(*cs->runasgrouplist)); if (cs->runasgrouplist == NULL) { @@ -1627,93 +2037,107 @@ case 43: YYERROR; } HLTQ_TO_TAILQ(cs->runasgrouplist, - yyvsp[-3].runas->runasgroups, entries); + (yyvsp[-3].runas)->runasgroups, entries); } - free(yyvsp[-3].runas); + free((yyvsp[-3].runas)); } #ifdef HAVE_SELINUX - cs->role = yyvsp[-2].options.role; - cs->type = yyvsp[-2].options.type; + cs->role = (yyvsp[-2].options).role; + cs->type = (yyvsp[-2].options).type; #endif #ifdef HAVE_PRIV_SET - cs->privs = yyvsp[-2].options.privs; - cs->limitprivs = yyvsp[-2].options.limitprivs; + cs->privs = (yyvsp[-2].options).privs; + cs->limitprivs = (yyvsp[-2].options).limitprivs; #endif - cs->notbefore = yyvsp[-2].options.notbefore; - cs->notafter = yyvsp[-2].options.notafter; - cs->timeout = yyvsp[-2].options.timeout; - cs->runcwd = yyvsp[-2].options.runcwd; - cs->runchroot = yyvsp[-2].options.runchroot; - cs->tags = yyvsp[-1].tag; - cs->cmnd = yyvsp[0].member; + cs->notbefore = (yyvsp[-2].options).notbefore; + cs->notafter = (yyvsp[-2].options).notafter; + cs->timeout = (yyvsp[-2].options).timeout; + cs->runcwd = (yyvsp[-2].options).runcwd; + cs->runchroot = (yyvsp[-2].options).runchroot; + cs->tags = (yyvsp[-1].tag); + cs->cmnd = (yyvsp[0].member); HLTQ_INIT(cs, entries); /* sudo "ALL" implies the SETENV tag */ if (cs->cmnd->type == ALL && !cs->cmnd->negated && cs->tags.setenv == UNSPEC) cs->tags.setenv = IMPLIED; - yyval.cmndspec = cs; + (yyval.cmndspec) = cs; } -break; -case 44: -#line 505 "gram.y" -{ - yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); - if (yyval.digest == NULL) { +#line 2061 "gram.c" /* yacc.c:1652 */ + break; + + case 45: +#line 505 "gram.y" /* yacc.c:1652 */ + { + (yyval.digest) = new_digest(SUDO_DIGEST_SHA224, (yyvsp[0].string)); + if ((yyval.digest) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 45: -#line 512 "gram.y" -{ - yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); - if (yyval.digest == NULL) { +#line 2073 "gram.c" /* yacc.c:1652 */ + break; + + case 46: +#line 512 "gram.y" /* yacc.c:1652 */ + { + (yyval.digest) = new_digest(SUDO_DIGEST_SHA256, (yyvsp[0].string)); + if ((yyval.digest) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 46: -#line 519 "gram.y" -{ - yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); - if (yyval.digest == NULL) { +#line 2085 "gram.c" /* yacc.c:1652 */ + break; + + case 47: +#line 519 "gram.y" /* yacc.c:1652 */ + { + (yyval.digest) = new_digest(SUDO_DIGEST_SHA384, (yyvsp[0].string)); + if ((yyval.digest) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 47: -#line 526 "gram.y" -{ - yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); - if (yyval.digest == NULL) { +#line 2097 "gram.c" /* yacc.c:1652 */ + break; + + case 48: +#line 526 "gram.y" /* yacc.c:1652 */ + { + (yyval.digest) = new_digest(SUDO_DIGEST_SHA512, (yyvsp[0].string)); + if ((yyval.digest) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 49: -#line 536 "gram.y" -{ - HLTQ_CONCAT(yyvsp[-2].digest, yyvsp[0].digest, entries); - yyval.digest = yyvsp[-2].digest; +#line 2109 "gram.c" /* yacc.c:1652 */ + break; + + case 50: +#line 536 "gram.y" /* yacc.c:1652 */ + { + HLTQ_CONCAT((yyvsp[-2].digest), (yyvsp[0].digest), entries); + (yyval.digest) = (yyvsp[-2].digest); } -break; -case 50: -#line 542 "gram.y" -{ - yyval.member = yyvsp[0].member; +#line 2118 "gram.c" /* yacc.c:1652 */ + break; + + case 51: +#line 542 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); } -break; -case 51: -#line 545 "gram.y" -{ +#line 2126 "gram.c" /* yacc.c:1652 */ + break; + + case 52: +#line 545 "gram.y" /* yacc.c:1652 */ + { struct sudo_command *c = - (struct sudo_command *) yyvsp[0].member->name; + (struct sudo_command *) (yyvsp[0].member)->name; - if (yyvsp[0].member->type != COMMAND && yyvsp[0].member->type != ALL) { + if ((yyvsp[0].member)->type != COMMAND && (yyvsp[0].member)->type != ALL) { sudoerserror(N_("a digest requires a path name")); YYERROR; } @@ -1723,226 +2147,274 @@ case 51: sudoerserror(N_("unable to allocate memory")); YYERROR; } - yyvsp[0].member->name = (char *)c; + (yyvsp[0].member)->name = (char *)c; } - HLTQ_TO_TAILQ(&c->digests, yyvsp[-1].digest, entries); - yyval.member = yyvsp[0].member; + HLTQ_TO_TAILQ(&c->digests, (yyvsp[-1].digest), entries); + (yyval.member) = (yyvsp[0].member); } -break; -case 52: -#line 566 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = false; +#line 2150 "gram.c" /* yacc.c:1652 */ + break; + + case 53: +#line 566 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = false; } -break; -case 53: -#line 570 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = true; +#line 2159 "gram.c" /* yacc.c:1652 */ + break; + + case 54: +#line 570 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = true; } -break; -case 54: -#line 576 "gram.y" -{ - if (yyvsp[0].string[0] != '/' && yyvsp[0].string[0] != '~') { - if (strcmp(yyvsp[0].string, "*") != 0) { +#line 2168 "gram.c" /* yacc.c:1652 */ + break; + + case 55: +#line 576 "gram.y" /* yacc.c:1652 */ + { + if ((yyvsp[0].string)[0] != '/' && (yyvsp[0].string)[0] != '~') { + if (strcmp((yyvsp[0].string), "*") != 0) { sudoerserror(N_("values for \"CWD\" must" " start with a '/', '~', or '*'")); YYERROR; } } - yyval.string = yyvsp[0].string; + (yyval.string) = (yyvsp[0].string); } -break; -case 55: -#line 588 "gram.y" -{ - if (yyvsp[0].string[0] != '/' && yyvsp[0].string[0] != '~') { - if (strcmp(yyvsp[0].string, "*") != 0) { +#line 2183 "gram.c" /* yacc.c:1652 */ + break; + + case 56: +#line 588 "gram.y" /* yacc.c:1652 */ + { + if ((yyvsp[0].string)[0] != '/' && (yyvsp[0].string)[0] != '~') { + if (strcmp((yyvsp[0].string), "*") != 0) { sudoerserror(N_("values for \"CHROOT\" must" " start with a '/', '~', or '*'")); YYERROR; } } - yyval.string = yyvsp[0].string; + (yyval.string) = (yyvsp[0].string); } -break; -case 56: -#line 600 "gram.y" -{ - yyval.string = yyvsp[0].string; +#line 2198 "gram.c" /* yacc.c:1652 */ + break; + + case 57: +#line 600 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[0].string); } -break; -case 57: -#line 605 "gram.y" -{ - yyval.string = yyvsp[0].string; +#line 2206 "gram.c" /* yacc.c:1652 */ + break; + + case 58: +#line 605 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[0].string); } -break; -case 58: -#line 609 "gram.y" -{ - yyval.string = yyvsp[0].string; +#line 2214 "gram.c" /* yacc.c:1652 */ + break; + + case 59: +#line 609 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[0].string); } -break; -case 59: -#line 614 "gram.y" -{ - yyval.string = yyvsp[0].string; +#line 2222 "gram.c" /* yacc.c:1652 */ + break; + + case 60: +#line 614 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[0].string); } -break; -case 60: -#line 619 "gram.y" -{ - yyval.string = yyvsp[0].string; +#line 2230 "gram.c" /* yacc.c:1652 */ + break; + + case 61: +#line 619 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[0].string); } -break; -case 61: -#line 624 "gram.y" -{ - yyval.string = yyvsp[0].string; +#line 2238 "gram.c" /* yacc.c:1652 */ + break; + + case 62: +#line 624 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[0].string); } -break; -case 62: -#line 628 "gram.y" -{ - yyval.string = yyvsp[0].string; +#line 2246 "gram.c" /* yacc.c:1652 */ + break; + + case 63: +#line 628 "gram.y" /* yacc.c:1652 */ + { + (yyval.string) = (yyvsp[0].string); } -break; -case 63: -#line 633 "gram.y" -{ - yyval.runas = NULL; +#line 2254 "gram.c" /* yacc.c:1652 */ + break; + + case 64: +#line 633 "gram.y" /* yacc.c:1652 */ + { + (yyval.runas) = NULL; } -break; -case 64: -#line 636 "gram.y" -{ - yyval.runas = yyvsp[-1].runas; +#line 2262 "gram.c" /* yacc.c:1652 */ + break; + + case 65: +#line 636 "gram.y" /* yacc.c:1652 */ + { + (yyval.runas) = (yyvsp[-1].runas); } -break; -case 65: -#line 641 "gram.y" -{ - yyval.runas = calloc(1, sizeof(struct runascontainer)); - if (yyval.runas != NULL) { - yyval.runas->runasusers = new_member(NULL, MYSELF); +#line 2270 "gram.c" /* yacc.c:1652 */ + break; + + case 66: +#line 641 "gram.y" /* yacc.c:1652 */ + { + (yyval.runas) = calloc(1, sizeof(struct runascontainer)); + if ((yyval.runas) != NULL) { + (yyval.runas)->runasusers = new_member(NULL, MYSELF); /* $$->runasgroups = NULL; */ - if (yyval.runas->runasusers == NULL) { - free(yyval.runas); - yyval.runas = NULL; + if ((yyval.runas)->runasusers == NULL) { + free((yyval.runas)); + (yyval.runas) = NULL; } } - if (yyval.runas == NULL) { + if ((yyval.runas) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 66: -#line 656 "gram.y" -{ - yyval.runas = calloc(1, sizeof(struct runascontainer)); - if (yyval.runas == NULL) { +#line 2290 "gram.c" /* yacc.c:1652 */ + break; + + case 67: +#line 656 "gram.y" /* yacc.c:1652 */ + { + (yyval.runas) = calloc(1, sizeof(struct runascontainer)); + if ((yyval.runas) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } - yyval.runas->runasusers = yyvsp[0].member; + (yyval.runas)->runasusers = (yyvsp[0].member); /* $$->runasgroups = NULL; */ } -break; -case 67: -#line 665 "gram.y" -{ - yyval.runas = calloc(1, sizeof(struct runascontainer)); - if (yyval.runas == NULL) { +#line 2304 "gram.c" /* yacc.c:1652 */ + break; + + case 68: +#line 665 "gram.y" /* yacc.c:1652 */ + { + (yyval.runas) = calloc(1, sizeof(struct runascontainer)); + if ((yyval.runas) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } - yyval.runas->runasusers = yyvsp[-2].member; - yyval.runas->runasgroups = yyvsp[0].member; + (yyval.runas)->runasusers = (yyvsp[-2].member); + (yyval.runas)->runasgroups = (yyvsp[0].member); } -break; -case 68: -#line 674 "gram.y" -{ - yyval.runas = calloc(1, sizeof(struct runascontainer)); - if (yyval.runas == NULL) { +#line 2318 "gram.c" /* yacc.c:1652 */ + break; + + case 69: +#line 674 "gram.y" /* yacc.c:1652 */ + { + (yyval.runas) = calloc(1, sizeof(struct runascontainer)); + if ((yyval.runas) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } /* $$->runasusers = NULL; */ - yyval.runas->runasgroups = yyvsp[0].member; + (yyval.runas)->runasgroups = (yyvsp[0].member); } -break; -case 69: -#line 683 "gram.y" -{ - yyval.runas = calloc(1, sizeof(struct runascontainer)); - if (yyval.runas != NULL) { - yyval.runas->runasusers = new_member(NULL, MYSELF); +#line 2332 "gram.c" /* yacc.c:1652 */ + break; + + case 70: +#line 683 "gram.y" /* yacc.c:1652 */ + { + (yyval.runas) = calloc(1, sizeof(struct runascontainer)); + if ((yyval.runas) != NULL) { + (yyval.runas)->runasusers = new_member(NULL, MYSELF); /* $$->runasgroups = NULL; */ - if (yyval.runas->runasusers == NULL) { - free(yyval.runas); - yyval.runas = NULL; + if ((yyval.runas)->runasusers == NULL) { + free((yyval.runas)); + (yyval.runas) = NULL; } } - if (yyval.runas == NULL) { + if ((yyval.runas) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 70: -#line 700 "gram.y" -{ - init_options(&yyval.options); +#line 2352 "gram.c" /* yacc.c:1652 */ + break; + + case 71: +#line 700 "gram.y" /* yacc.c:1652 */ + { + init_options(&(yyval.options)); } -break; -case 71: -#line 703 "gram.y" -{ - free(yyval.options.runcwd); - yyval.options.runcwd = yyvsp[0].string; +#line 2360 "gram.c" /* yacc.c:1652 */ + break; + + case 72: +#line 703 "gram.y" /* yacc.c:1652 */ + { + free((yyval.options).runcwd); + (yyval.options).runcwd = (yyvsp[0].string); } -break; -case 72: -#line 707 "gram.y" -{ - free(yyval.options.runchroot); - yyval.options.runchroot = yyvsp[0].string; +#line 2369 "gram.c" /* yacc.c:1652 */ + break; + + case 73: +#line 707 "gram.y" /* yacc.c:1652 */ + { + free((yyval.options).runchroot); + (yyval.options).runchroot = (yyvsp[0].string); } -break; -case 73: -#line 711 "gram.y" -{ - yyval.options.notbefore = parse_gentime(yyvsp[0].string); - free(yyvsp[0].string); - if (yyval.options.notbefore == -1) { +#line 2378 "gram.c" /* yacc.c:1652 */ + break; + + case 74: +#line 711 "gram.y" /* yacc.c:1652 */ + { + (yyval.options).notbefore = parse_gentime((yyvsp[0].string)); + free((yyvsp[0].string)); + if ((yyval.options).notbefore == -1) { sudoerserror(N_("invalid notbefore value")); YYERROR; } } -break; -case 74: -#line 719 "gram.y" -{ - yyval.options.notafter = parse_gentime(yyvsp[0].string); - free(yyvsp[0].string); - if (yyval.options.notafter == -1) { +#line 2391 "gram.c" /* yacc.c:1652 */ + break; + + case 75: +#line 719 "gram.y" /* yacc.c:1652 */ + { + (yyval.options).notafter = parse_gentime((yyvsp[0].string)); + free((yyvsp[0].string)); + if ((yyval.options).notafter == -1) { sudoerserror(N_("invalid notafter value")); YYERROR; } } -break; -case 75: -#line 727 "gram.y" -{ - yyval.options.timeout = parse_timeout(yyvsp[0].string); - free(yyvsp[0].string); - if (yyval.options.timeout == -1) { +#line 2404 "gram.c" /* yacc.c:1652 */ + break; + + case 76: +#line 727 "gram.y" /* yacc.c:1652 */ + { + (yyval.options).timeout = parse_timeout((yyvsp[0].string)); + free((yyvsp[0].string)); + if ((yyval.options).timeout == -1) { if (errno == ERANGE) sudoerserror(N_("timeout value too large")); else @@ -1950,430 +2422,1169 @@ case 75: YYERROR; } } -break; -case 76: -#line 738 "gram.y" -{ +#line 2420 "gram.c" /* yacc.c:1652 */ + break; + + case 77: +#line 738 "gram.y" /* yacc.c:1652 */ + { #ifdef HAVE_SELINUX - free(yyval.options.role); - yyval.options.role = yyvsp[0].string; + free((yyval.options).role); + (yyval.options).role = (yyvsp[0].string); #endif } -break; -case 77: -#line 744 "gram.y" -{ +#line 2431 "gram.c" /* yacc.c:1652 */ + break; + + case 78: +#line 744 "gram.y" /* yacc.c:1652 */ + { #ifdef HAVE_SELINUX - free(yyval.options.type); - yyval.options.type = yyvsp[0].string; + free((yyval.options).type); + (yyval.options).type = (yyvsp[0].string); #endif } -break; -case 78: -#line 750 "gram.y" -{ +#line 2442 "gram.c" /* yacc.c:1652 */ + break; + + case 79: +#line 750 "gram.y" /* yacc.c:1652 */ + { #ifdef HAVE_PRIV_SET - free(yyval.options.privs); - yyval.options.privs = yyvsp[0].string; + free((yyval.options).privs); + (yyval.options).privs = (yyvsp[0].string); #endif } -break; -case 79: -#line 756 "gram.y" -{ +#line 2453 "gram.c" /* yacc.c:1652 */ + break; + + case 80: +#line 756 "gram.y" /* yacc.c:1652 */ + { #ifdef HAVE_PRIV_SET - free(yyval.options.limitprivs); - yyval.options.limitprivs = yyvsp[0].string; + free((yyval.options).limitprivs); + (yyval.options).limitprivs = (yyvsp[0].string); #endif } -break; -case 80: -#line 764 "gram.y" -{ - TAGS_INIT(yyval.tag); +#line 2464 "gram.c" /* yacc.c:1652 */ + break; + + case 81: +#line 764 "gram.y" /* yacc.c:1652 */ + { + TAGS_INIT((yyval.tag)); } -break; -case 81: -#line 767 "gram.y" -{ - yyval.tag.nopasswd = true; +#line 2472 "gram.c" /* yacc.c:1652 */ + break; + + case 82: +#line 767 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).nopasswd = true; } -break; -case 82: -#line 770 "gram.y" -{ - yyval.tag.nopasswd = false; +#line 2480 "gram.c" /* yacc.c:1652 */ + break; + + case 83: +#line 770 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).nopasswd = false; } -break; -case 83: -#line 773 "gram.y" -{ - yyval.tag.noexec = true; +#line 2488 "gram.c" /* yacc.c:1652 */ + break; + + case 84: +#line 773 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).noexec = true; } -break; -case 84: -#line 776 "gram.y" -{ - yyval.tag.noexec = false; +#line 2496 "gram.c" /* yacc.c:1652 */ + break; + + case 85: +#line 776 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).noexec = false; } -break; -case 85: -#line 779 "gram.y" -{ - yyval.tag.setenv = true; +#line 2504 "gram.c" /* yacc.c:1652 */ + break; + + case 86: +#line 779 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).setenv = true; } -break; -case 86: -#line 782 "gram.y" -{ - yyval.tag.setenv = false; +#line 2512 "gram.c" /* yacc.c:1652 */ + break; + + case 87: +#line 782 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).setenv = false; } -break; -case 87: -#line 785 "gram.y" -{ - yyval.tag.log_input = true; +#line 2520 "gram.c" /* yacc.c:1652 */ + break; + + case 88: +#line 785 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).log_input = true; } -break; -case 88: -#line 788 "gram.y" -{ - yyval.tag.log_input = false; +#line 2528 "gram.c" /* yacc.c:1652 */ + break; + + case 89: +#line 788 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).log_input = false; } -break; -case 89: -#line 791 "gram.y" -{ - yyval.tag.log_output = true; +#line 2536 "gram.c" /* yacc.c:1652 */ + break; + + case 90: +#line 791 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).log_output = true; } -break; -case 90: -#line 794 "gram.y" -{ - yyval.tag.log_output = false; +#line 2544 "gram.c" /* yacc.c:1652 */ + break; + + case 91: +#line 794 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).log_output = false; } -break; -case 91: -#line 797 "gram.y" -{ - yyval.tag.follow = true; +#line 2552 "gram.c" /* yacc.c:1652 */ + break; + + case 92: +#line 797 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).follow = true; } -break; -case 92: -#line 800 "gram.y" -{ - yyval.tag.follow = false; +#line 2560 "gram.c" /* yacc.c:1652 */ + break; + + case 93: +#line 800 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).follow = false; } -break; -case 93: -#line 803 "gram.y" -{ - yyval.tag.send_mail = true; +#line 2568 "gram.c" /* yacc.c:1652 */ + break; + + case 94: +#line 803 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).send_mail = true; } -break; -case 94: -#line 806 "gram.y" -{ - yyval.tag.send_mail = false; +#line 2576 "gram.c" /* yacc.c:1652 */ + break; + + case 95: +#line 806 "gram.y" /* yacc.c:1652 */ + { + (yyval.tag).send_mail = false; } -break; -case 95: -#line 811 "gram.y" -{ - yyval.member = new_member(NULL, ALL); - if (yyval.member == NULL) { +#line 2584 "gram.c" /* yacc.c:1652 */ + break; + + case 96: +#line 811 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member(NULL, ALL); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 96: -#line 818 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, ALIAS); - if (yyval.member == NULL) { +#line 2596 "gram.c" /* yacc.c:1652 */ + break; + + case 97: +#line 818 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), ALIAS); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 97: -#line 825 "gram.y" -{ +#line 2608 "gram.c" /* yacc.c:1652 */ + break; + + case 98: +#line 825 "gram.y" /* yacc.c:1652 */ + { struct sudo_command *c; - if ((c = new_command(yyvsp[0].command.cmnd, yyvsp[0].command.args)) == NULL) { + if ((c = new_command((yyvsp[0].command).cmnd, (yyvsp[0].command).args)) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } - yyval.member = new_member((char *)c, COMMAND); - if (yyval.member == NULL) { + (yyval.member) = new_member((char *)c, COMMAND); + if ((yyval.member) == NULL) { free(c); sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 100: -#line 845 "gram.y" -{ +#line 2627 "gram.c" /* yacc.c:1652 */ + break; + + case 101: +#line 845 "gram.y" /* yacc.c:1652 */ + { const char *s; - s = alias_add(&parsed_policy, yyvsp[-2].string, HOSTALIAS, - sudoers, this_lineno, yyvsp[0].member); + s = alias_add(&parsed_policy, (yyvsp[-2].string), HOSTALIAS, + sudoers, this_lineno, (yyvsp[0].member)); if (s != NULL) { sudoerserror(s); YYERROR; } } -break; -case 102: -#line 857 "gram.y" -{ - HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); - yyval.member = yyvsp[-2].member; +#line 2641 "gram.c" /* yacc.c:1652 */ + break; + + case 103: +#line 857 "gram.y" /* yacc.c:1652 */ + { + HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); + (yyval.member) = (yyvsp[-2].member); } -break; -case 105: -#line 867 "gram.y" -{ +#line 2650 "gram.c" /* yacc.c:1652 */ + break; + + case 106: +#line 867 "gram.y" /* yacc.c:1652 */ + { const char *s; - s = alias_add(&parsed_policy, yyvsp[-2].string, CMNDALIAS, - sudoers, this_lineno, yyvsp[0].member); + s = alias_add(&parsed_policy, (yyvsp[-2].string), CMNDALIAS, + sudoers, this_lineno, (yyvsp[0].member)); if (s != NULL) { sudoerserror(s); YYERROR; } } -break; -case 107: -#line 879 "gram.y" -{ - HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); - yyval.member = yyvsp[-2].member; +#line 2664 "gram.c" /* yacc.c:1652 */ + break; + + case 108: +#line 879 "gram.y" /* yacc.c:1652 */ + { + HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); + (yyval.member) = (yyvsp[-2].member); } -break; -case 110: -#line 889 "gram.y" -{ +#line 2673 "gram.c" /* yacc.c:1652 */ + break; + + case 111: +#line 889 "gram.y" /* yacc.c:1652 */ + { const char *s; - s = alias_add(&parsed_policy, yyvsp[-2].string, RUNASALIAS, - sudoers, this_lineno, yyvsp[0].member); + s = alias_add(&parsed_policy, (yyvsp[-2].string), RUNASALIAS, + sudoers, this_lineno, (yyvsp[0].member)); if (s != NULL) { sudoerserror(s); YYERROR; } } -break; -case 113: -#line 904 "gram.y" -{ +#line 2687 "gram.c" /* yacc.c:1652 */ + break; + + case 114: +#line 904 "gram.y" /* yacc.c:1652 */ + { const char *s; - s = alias_add(&parsed_policy, yyvsp[-2].string, USERALIAS, - sudoers, this_lineno, yyvsp[0].member); + s = alias_add(&parsed_policy, (yyvsp[-2].string), USERALIAS, + sudoers, this_lineno, (yyvsp[0].member)); if (s != NULL) { sudoerserror(s); YYERROR; } } -break; -case 115: -#line 916 "gram.y" -{ - HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); - yyval.member = yyvsp[-2].member; +#line 2701 "gram.c" /* yacc.c:1652 */ + break; + + case 116: +#line 916 "gram.y" /* yacc.c:1652 */ + { + HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); + (yyval.member) = (yyvsp[-2].member); } -break; -case 116: -#line 922 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = false; +#line 2710 "gram.c" /* yacc.c:1652 */ + break; + + case 117: +#line 922 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = false; } -break; -case 117: -#line 926 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = true; +#line 2719 "gram.c" /* yacc.c:1652 */ + break; + + case 118: +#line 926 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = true; } -break; -case 118: -#line 932 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, ALIAS); - if (yyval.member == NULL) { +#line 2728 "gram.c" /* yacc.c:1652 */ + break; + + case 119: +#line 932 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), ALIAS); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 119: -#line 939 "gram.y" -{ - yyval.member = new_member(NULL, ALL); - if (yyval.member == NULL) { +#line 2740 "gram.c" /* yacc.c:1652 */ + break; + + case 120: +#line 939 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member(NULL, ALL); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 120: -#line 946 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, NETGROUP); - if (yyval.member == NULL) { +#line 2752 "gram.c" /* yacc.c:1652 */ + break; + + case 121: +#line 946 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), NETGROUP); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 121: -#line 953 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, USERGROUP); - if (yyval.member == NULL) { +#line 2764 "gram.c" /* yacc.c:1652 */ + break; + + case 122: +#line 953 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), USERGROUP); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 122: -#line 960 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, WORD); - if (yyval.member == NULL) { +#line 2776 "gram.c" /* yacc.c:1652 */ + break; + + case 123: +#line 960 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), WORD); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 124: -#line 970 "gram.y" -{ - HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); - yyval.member = yyvsp[-2].member; +#line 2788 "gram.c" /* yacc.c:1652 */ + break; + + case 125: +#line 970 "gram.y" /* yacc.c:1652 */ + { + HLTQ_CONCAT((yyvsp[-2].member), (yyvsp[0].member), entries); + (yyval.member) = (yyvsp[-2].member); } -break; -case 125: -#line 976 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = false; +#line 2797 "gram.c" /* yacc.c:1652 */ + break; + + case 126: +#line 976 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = false; } -break; -case 126: -#line 980 "gram.y" -{ - yyval.member = yyvsp[0].member; - yyval.member->negated = true; +#line 2806 "gram.c" /* yacc.c:1652 */ + break; + + case 127: +#line 980 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = (yyvsp[0].member); + (yyval.member)->negated = true; } -break; -case 127: -#line 986 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, ALIAS); - if (yyval.member == NULL) { +#line 2815 "gram.c" /* yacc.c:1652 */ + break; + + case 128: +#line 986 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), ALIAS); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 128: -#line 993 "gram.y" -{ - yyval.member = new_member(NULL, ALL); - if (yyval.member == NULL) { +#line 2827 "gram.c" /* yacc.c:1652 */ + break; + + case 129: +#line 993 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member(NULL, ALL); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 129: -#line 1000 "gram.y" -{ - yyval.member = new_member(yyvsp[0].string, WORD); - if (yyval.member == NULL) { +#line 2839 "gram.c" /* yacc.c:1652 */ + break; + + case 130: +#line 1000 "gram.y" /* yacc.c:1652 */ + { + (yyval.member) = new_member((yyvsp[0].string), WORD); + if ((yyval.member) == NULL) { sudoerserror(N_("unable to allocate memory")); YYERROR; } } -break; -case 130: -#line 1009 "gram.y" -{ +#line 2851 "gram.c" /* yacc.c:1652 */ + break; + + case 131: +#line 1009 "gram.y" /* yacc.c:1652 */ + { ; } -break; -case 131: -#line 1012 "gram.y" -{ +#line 2859 "gram.c" /* yacc.c:1652 */ + break; + + case 132: +#line 1012 "gram.y" /* yacc.c:1652 */ + { ; /* EOF */ } -break; -#line 2300 "gram.c" +#line 2867 "gram.c" /* yacc.c:1652 */ + break; + + +#line 2871 "gram.c" /* yacc.c:1652 */ + default: break; } - yyssp -= yym; - yystate = *yyssp; - yyvsp -= yym; - yym = yylhs[yyn]; - if (yystate == 0 && yym == 0) + /* 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 ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++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 ? YYEMPTY : YYTRANSLATE (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) { -#if YYDEBUG - if (yydebug) - printf("%sdebug: after reduction, shifting from state 0 to\ - state %d\n", YYPREFIX, YYFINAL); + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) + { + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; + } +# undef YYSYNTAX_ERROR #endif - yystate = YYFINAL; - *++yyssp = YYFINAL; - *++yyvsp = yyval; - if (yychar < 0) + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) { - if ((yychar = yylex()) < 0) yychar = 0; -#if YYDEBUG - if (yydebug) + /* 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; + + /* 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. */ + + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { - 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); + yyn = yytable[yyn]; + if (0 < yyn) + break; } -#endif } - if (yychar == 0) goto yyaccept; - goto yyloop; + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); } - 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; + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + + +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + + +/*-----------------------------------------------------. +| yyreturn -- parsing is finished, return the result. | +`-----------------------------------------------------*/ +yyreturn: + 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", + yystos[*yyssp], yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + return yyresult; +} +#line 1017 "gram.y" /* yacc.c:1918 */ + +void +sudoerserror(const char *s) +{ + debug_decl(sudoerserror, SUDOERS_DEBUG_PARSER); + + /* The lexer displays more detailed messages for ERROR tokens. */ + if (last_token == ERROR) + debug_return; + + /* Save the line the first error occurred on. */ + if (errorlineno == -1) { + errorlineno = this_lineno; + rcstr_delref(errorfile); + errorfile = rcstr_addref(sudoers); + } + if (sudoers_warnings && s != NULL) { + LEXTRACE("<*> "); +#ifndef TRACELEXER + if (trace_print == NULL || trace_print == sudoers_trace_print) { + int oldlocale; + + /* Warnings are displayed in the user's locale. */ + sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); + sudo_printf(SUDO_CONV_ERROR_MSG, _("%s:%d: %s\n"), sudoers, + this_lineno, _(s)); + sudoers_setlocale(oldlocale, NULL); + + /* Display the offending line and token if possible. */ + if (sudolinebuf.len != 0) { + char tildes[128]; + size_t tlen = 0; + + sudo_printf(SUDO_CONV_ERROR_MSG, "%s%s", sudolinebuf.buf, + sudolinebuf.buf[sudolinebuf.len - 1] == '\n' ? "" : "\n"); + if (sudolinebuf.toke_end > sudolinebuf.toke_start) { + tlen = sudolinebuf.toke_end - sudolinebuf.toke_start - 1; + if (tlen >= sizeof(tildes)) + tlen = sizeof(tildes) - 1; + memset(tildes, '~', tlen); + } + tildes[tlen] = '\0'; + sudo_printf(SUDO_CONV_ERROR_MSG, "%*s^%s\n", + (int)sudolinebuf.toke_start, "", tildes); + } + } +#endif + } + parse_error = true; + debug_return; +} + +static struct defaults * +new_default(char *var, char *val, short op) +{ + struct defaults *d; + debug_decl(new_default, SUDOERS_DEBUG_PARSER); + + if ((d = calloc(1, sizeof(struct defaults))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); } - *++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); + + d->var = var; + d->val = val; + /* d->type = 0; */ + d->op = op; + /* d->binding = NULL */ + d->lineno = this_lineno; + d->file = rcstr_addref(sudoers); + HLTQ_INIT(d, entries); + + debug_return_ptr(d); +} + +static struct member * +new_member(char *name, int type) +{ + struct member *m; + debug_decl(new_member, SUDOERS_DEBUG_PARSER); + + if ((m = calloc(1, sizeof(struct member))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } + + m->name = name; + m->type = type; + HLTQ_INIT(m, entries); + + debug_return_ptr(m); +} + +static struct sudo_command * +new_command(char *cmnd, char *args) +{ + struct sudo_command *c; + debug_decl(new_command, SUDOERS_DEBUG_PARSER); + + if ((c = calloc(1, sizeof(*c))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } + + c->cmnd = cmnd; + c->args = args; + TAILQ_INIT(&c->digests); + + debug_return_ptr(c); +} + +static struct command_digest * +new_digest(int digest_type, char *digest_str) +{ + struct command_digest *digest; + debug_decl(new_digest, SUDOERS_DEBUG_PARSER); + + if ((digest = malloc(sizeof(*digest))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } + + HLTQ_INIT(digest, entries); + digest->digest_type = digest_type; + digest->digest_str = digest_str; + if (digest->digest_str == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + free(digest); + digest = NULL; + } + + debug_return_ptr(digest); +} + +/* + * Add a list of defaults structures to the defaults list. + * The binding, if non-NULL, specifies a list of hosts, users, or + * runas users the entries apply to (specified by the type). + */ +static bool +add_defaults(int type, struct member *bmem, struct defaults *defs) +{ + struct defaults *d, *next; + struct member_list *binding; + bool ret = true; + debug_decl(add_defaults, SUDOERS_DEBUG_PARSER); + + if (defs != NULL) { + /* + * We use a single binding for each entry in defs. + */ + if ((binding = malloc(sizeof(*binding))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + sudoerserror(N_("unable to allocate memory")); + debug_return_bool(false); + } + if (bmem != NULL) + HLTQ_TO_TAILQ(binding, bmem, entries); + else + TAILQ_INIT(binding); + + /* + * Set type and binding (who it applies to) for new entries. + * Then add to the global defaults list. + */ + HLTQ_FOREACH_SAFE(d, defs, entries, next) { + d->type = type; + d->binding = binding; + TAILQ_INSERT_TAIL(&parsed_policy.defaults, d, entries); + } + } + + debug_return_bool(ret); +} + +/* + * Allocate a new struct userspec, populate it, and insert it at the + * end of the userspecs list. + */ +static bool +add_userspec(struct member *members, struct privilege *privs) +{ + struct userspec *u; + debug_decl(add_userspec, SUDOERS_DEBUG_PARSER); + + if ((u = calloc(1, sizeof(*u))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_bool(false); + } + u->lineno = this_lineno; + u->file = rcstr_addref(sudoers); + HLTQ_TO_TAILQ(&u->users, members, entries); + HLTQ_TO_TAILQ(&u->privileges, privs, entries); + STAILQ_INIT(&u->comments); + TAILQ_INSERT_TAIL(&parsed_policy.userspecs, u, entries); + + debug_return_bool(true); +} + +/* + * Free a member struct and its contents. + */ +void +free_member(struct member *m) +{ + debug_decl(free_member, SUDOERS_DEBUG_PARSER); + + if (m->type == COMMAND || (m->type == ALL && m->name != NULL)) { + struct command_digest *digest; + struct sudo_command *c = (struct sudo_command *)m->name; + free(c->cmnd); + free(c->args); + while ((digest = TAILQ_FIRST(&c->digests)) != NULL) { + TAILQ_REMOVE(&c->digests, digest, entries); + free(digest->digest_str); + free(digest); + } + } + free(m->name); + free(m); + + debug_return; +} + +/* + * Free a tailq of members but not the struct member_list container itself. + */ +void +free_members(struct member_list *members) +{ + struct member *m; + debug_decl(free_members, SUDOERS_DEBUG_PARSER); + + while ((m = TAILQ_FIRST(members)) != NULL) { + TAILQ_REMOVE(members, m, entries); + free_member(m); + } + + debug_return; +} + +void +free_defaults(struct defaults_list *defs) +{ + struct member_list *prev_binding = NULL; + struct defaults *def; + debug_decl(free_defaults, SUDOERS_DEBUG_PARSER); + + while ((def = TAILQ_FIRST(defs)) != NULL) { + TAILQ_REMOVE(defs, def, entries); + free_default(def, &prev_binding); + } + + debug_return; +} + +void +free_default(struct defaults *def, struct member_list **binding) +{ + debug_decl(free_default, SUDOERS_DEBUG_PARSER); + + if (def->binding != *binding) { + *binding = def->binding; + if (def->binding != NULL) { + free_members(def->binding); + free(def->binding); + } + } + rcstr_delref(def->file); + free(def->var); + free(def->val); + free(def); + + debug_return; +} + +void +free_privilege(struct privilege *priv) +{ + struct member_list *runasuserlist = NULL, *runasgrouplist = NULL; + struct member_list *prev_binding = NULL; + struct cmndspec *cs; + struct defaults *def; + char *runcwd = NULL, *runchroot = NULL; +#ifdef HAVE_SELINUX + char *role = NULL, *type = NULL; +#endif /* HAVE_SELINUX */ +#ifdef HAVE_PRIV_SET + char *privs = NULL, *limitprivs = NULL; +#endif /* HAVE_PRIV_SET */ + debug_decl(free_privilege, SUDOERS_DEBUG_PARSER); + + free(priv->ldap_role); + free_members(&priv->hostlist); + while ((cs = TAILQ_FIRST(&priv->cmndlist)) != NULL) { + TAILQ_REMOVE(&priv->cmndlist, cs, entries); + /* Only free the first instance of runcwd/runchroot. */ + if (cs->runcwd != runcwd) { + runcwd = cs->runcwd; + free(cs->runcwd); + } + if (cs->runchroot != runchroot) { + runcwd = cs->runchroot; + free(cs->runchroot); + } +#ifdef HAVE_SELINUX + /* Only free the first instance of a role/type. */ + if (cs->role != role) { + role = cs->role; + free(cs->role); + } + if (cs->type != type) { + type = cs->type; + free(cs->type); + } +#endif /* HAVE_SELINUX */ +#ifdef HAVE_PRIV_SET + /* Only free the first instance of privs/limitprivs. */ + if (cs->privs != privs) { + privs = cs->privs; + free(cs->privs); + } + if (cs->limitprivs != limitprivs) { + limitprivs = cs->limitprivs; + free(cs->limitprivs); + } +#endif /* HAVE_PRIV_SET */ + /* Only free the first instance of runas user/group lists. */ + if (cs->runasuserlist && cs->runasuserlist != runasuserlist) { + runasuserlist = cs->runasuserlist; + free_members(runasuserlist); + free(runasuserlist); + } + if (cs->runasgrouplist && cs->runasgrouplist != runasgrouplist) { + runasgrouplist = cs->runasgrouplist; + free_members(runasgrouplist); + free(runasgrouplist); + } + free_member(cs->cmnd); + free(cs); + } + while ((def = TAILQ_FIRST(&priv->defaults)) != NULL) { + TAILQ_REMOVE(&priv->defaults, def, entries); + free_default(def, &prev_binding); + } + free(priv); + + debug_return; +} + +void +free_userspecs(struct userspec_list *usl) +{ + struct userspec *us; + debug_decl(free_userspecs, SUDOERS_DEBUG_PARSER); + + while ((us = TAILQ_FIRST(usl)) != NULL) { + TAILQ_REMOVE(usl, us, entries); + free_userspec(us); + } + + debug_return; +} + +void +free_userspec(struct userspec *us) +{ + struct privilege *priv; + struct sudoers_comment *comment; + debug_decl(free_userspec, SUDOERS_DEBUG_PARSER); + + free_members(&us->users); + while ((priv = TAILQ_FIRST(&us->privileges)) != NULL) { + TAILQ_REMOVE(&us->privileges, priv, entries); + free_privilege(priv); + } + while ((comment = STAILQ_FIRST(&us->comments)) != NULL) { + STAILQ_REMOVE_HEAD(&us->comments, entries); + free(comment->str); + free(comment); + } + rcstr_delref(us->file); + free(us); + + debug_return; +} + +/* + * Initialized a sudoers parse tree. + */ +void +init_parse_tree(struct sudoers_parse_tree *parse_tree, const char *lhost, + const char *shost) +{ + TAILQ_INIT(&parse_tree->userspecs); + TAILQ_INIT(&parse_tree->defaults); + parse_tree->aliases = NULL; + parse_tree->shost = shost; + parse_tree->lhost = lhost; +} + +/* + * Move the contents of parsed_policy to new_tree. + */ +void +reparent_parse_tree(struct sudoers_parse_tree *new_tree) +{ + TAILQ_CONCAT(&new_tree->userspecs, &parsed_policy.userspecs, entries); + TAILQ_CONCAT(&new_tree->defaults, &parsed_policy.defaults, entries); + new_tree->aliases = parsed_policy.aliases; + parsed_policy.aliases = NULL; +} + +/* + * Free the contents of a sudoers parse tree and initialize it. + */ +void +free_parse_tree(struct sudoers_parse_tree *parse_tree) +{ + free_userspecs(&parse_tree->userspecs); + free_defaults(&parse_tree->defaults); + free_aliases(parse_tree->aliases); + parse_tree->aliases = NULL; +} + +/* + * Free up space used by data structures from a previous parser run and sets + * the current sudoers file to path. + */ +bool +init_parser(const char *path, bool quiet, bool strict) +{ + bool ret = true; + debug_decl(init_parser, SUDOERS_DEBUG_PARSER); + + free_parse_tree(&parsed_policy); + init_lexer(); + + rcstr_delref(sudoers); + if (path != NULL) { + if ((sudoers = rcstr_dup(path)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + ret = false; + } + } else { + sudoers = NULL; + } + + parse_error = false; + errorlineno = -1; + rcstr_delref(errorfile); + errorfile = NULL; + sudoers_warnings = !quiet; + sudoers_strict = strict; + + debug_return_bool(ret); +} + +/* + * Initialize all options in a cmndspec. + */ +static void +init_options(struct command_options *opts) +{ + opts->notbefore = UNSPEC; + opts->notafter = UNSPEC; + opts->timeout = UNSPEC; +#ifdef HAVE_SELINUX + opts->role = NULL; + opts->type = NULL; +#endif +#ifdef HAVE_PRIV_SET + opts->privs = NULL; + opts->limitprivs = NULL; +#endif } diff --git a/plugins/sudoers/gram.h b/plugins/sudoers/gram.h index 4b0d9fe5f8..aeac3f2272 100644 --- a/plugins/sudoers/gram.h +++ b/plugins/sudoers/gram.h @@ -1,57 +1,167 @@ +/* A Bison parser, made by GNU Bison 3.3.2. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 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. */ + +/* Undocumented macros, especially those whose name start with YY_, + are private implementation details. Do not rely on them. */ + +#ifndef YY_SUDOERS_Y_TAB_H_INCLUDED +# define YY_SUDOERS_Y_TAB_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int sudoersdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + END = 0, + COMMAND = 258, + ALIAS = 259, + DEFVAR = 260, + NTWKADDR = 261, + NETGROUP = 262, + USERGROUP = 263, + WORD = 264, + DIGEST = 265, + INCLUDE = 266, + INCLUDEDIR = 267, + DEFAULTS = 268, + DEFAULTS_HOST = 269, + DEFAULTS_USER = 270, + DEFAULTS_RUNAS = 271, + DEFAULTS_CMND = 272, + NOPASSWD = 273, + PASSWD = 274, + NOEXEC = 275, + EXEC = 276, + SETENV = 277, + NOSETENV = 278, + LOG_INPUT = 279, + NOLOG_INPUT = 280, + LOG_OUTPUT = 281, + NOLOG_OUTPUT = 282, + MAIL = 283, + NOMAIL = 284, + FOLLOWLNK = 285, + NOFOLLOWLNK = 286, + ALL = 287, + HOSTALIAS = 288, + CMNDALIAS = 289, + USERALIAS = 290, + RUNASALIAS = 291, + ERROR = 292, + NOMATCH = 293, + CHROOT = 294, + CWD = 295, + TYPE = 296, + ROLE = 297, + PRIVS = 298, + LIMITPRIVS = 299, + CMND_TIMEOUT = 300, + NOTBEFORE = 301, + NOTAFTER = 302, + MYSELF = 303, + SHA224_TOK = 304, + SHA256_TOK = 305, + SHA384_TOK = 306, + SHA512_TOK = 307 + }; +#endif +/* Tokens. */ #define END 0 -#define COMMAND 257 -#define ALIAS 258 -#define DEFVAR 259 -#define NTWKADDR 260 -#define NETGROUP 261 -#define USERGROUP 262 -#define WORD 263 -#define DIGEST 264 -#define INCLUDE 265 -#define INCLUDEDIR 266 -#define DEFAULTS 267 -#define DEFAULTS_HOST 268 -#define DEFAULTS_USER 269 -#define DEFAULTS_RUNAS 270 -#define DEFAULTS_CMND 271 -#define NOPASSWD 272 -#define PASSWD 273 -#define NOEXEC 274 -#define EXEC 275 -#define SETENV 276 -#define NOSETENV 277 -#define LOG_INPUT 278 -#define NOLOG_INPUT 279 -#define LOG_OUTPUT 280 -#define NOLOG_OUTPUT 281 -#define MAIL 282 -#define NOMAIL 283 -#define FOLLOWLNK 284 -#define NOFOLLOWLNK 285 -#define ALL 286 -#define HOSTALIAS 287 -#define CMNDALIAS 288 -#define USERALIAS 289 -#define RUNASALIAS 290 -#define ERROR 291 -#define NOMATCH 292 -#define CHROOT 293 -#define CWD 294 -#define TYPE 295 -#define ROLE 296 -#define PRIVS 297 -#define LIMITPRIVS 298 -#define CMND_TIMEOUT 299 -#define NOTBEFORE 300 -#define NOTAFTER 301 -#define MYSELF 302 -#define SHA224_TOK 303 -#define SHA256_TOK 304 -#define SHA384_TOK 305 -#define SHA512_TOK 306 -#ifndef YYSTYPE_DEFINED -#define YYSTYPE_DEFINED -typedef union { +#define COMMAND 258 +#define ALIAS 259 +#define DEFVAR 260 +#define NTWKADDR 261 +#define NETGROUP 262 +#define USERGROUP 263 +#define WORD 264 +#define DIGEST 265 +#define INCLUDE 266 +#define INCLUDEDIR 267 +#define DEFAULTS 268 +#define DEFAULTS_HOST 269 +#define DEFAULTS_USER 270 +#define DEFAULTS_RUNAS 271 +#define DEFAULTS_CMND 272 +#define NOPASSWD 273 +#define PASSWD 274 +#define NOEXEC 275 +#define EXEC 276 +#define SETENV 277 +#define NOSETENV 278 +#define LOG_INPUT 279 +#define NOLOG_INPUT 280 +#define LOG_OUTPUT 281 +#define NOLOG_OUTPUT 282 +#define MAIL 283 +#define NOMAIL 284 +#define FOLLOWLNK 285 +#define NOFOLLOWLNK 286 +#define ALL 287 +#define HOSTALIAS 288 +#define CMNDALIAS 289 +#define USERALIAS 290 +#define RUNASALIAS 291 +#define ERROR 292 +#define NOMATCH 293 +#define CHROOT 294 +#define CWD 295 +#define TYPE 296 +#define ROLE 297 +#define PRIVS 298 +#define LIMITPRIVS 299 +#define CMND_TIMEOUT 300 +#define NOTBEFORE 301 +#define NOTAFTER 302 +#define MYSELF 303 +#define SHA224_TOK 304 +#define SHA256_TOK 305 +#define SHA384_TOK 306 +#define SHA512_TOK 307 + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + +union YYSTYPE +{ +#line 77 "gram.y" /* yacc.c:1921 */ + struct cmndspec *cmndspec; struct defaults *defaults; struct member *member; @@ -63,6 +173,18 @@ typedef union { struct cmndtag tag; char *string; int tok; -} YYSTYPE; -#endif /* YYSTYPE_DEFINED */ + +#line 178 "y.tab.h" /* yacc.c:1921 */ +}; + +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + extern YYSTYPE sudoerslval; + +int sudoersparse (void); + +#endif /* !YY_SUDOERS_Y_TAB_H_INCLUDED */ From 965ad74482e01c21c48bd946b22800c12d7cd706 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 2 Sep 2020 09:06:29 -0600 Subject: [PATCH 063/113] Update to protobuf-c 1.3.3 --- include/log_server.pb-c.h | 2 +- include/protobuf-c/protobuf-c.h | 4 ++-- lib/logsrv/protobuf-c.c | 26 ++++++++++---------------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/include/log_server.pb-c.h b/include/log_server.pb-c.h index f68a3375b5..e3b1fbb517 100644 --- a/include/log_server.pb-c.h +++ b/include/log_server.pb-c.h @@ -10,7 +10,7 @@ PROTOBUF_C__BEGIN_DECLS #if PROTOBUF_C_VERSION_NUMBER < 1003000 # error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. -#elif 1003002 < PROTOBUF_C_MIN_COMPILER_VERSION +#elif 1003003 < PROTOBUF_C_MIN_COMPILER_VERSION # error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. #endif diff --git a/include/protobuf-c/protobuf-c.h b/include/protobuf-c/protobuf-c.h index ef579b7e0a..8348cf1993 100644 --- a/include/protobuf-c/protobuf-c.h +++ b/include/protobuf-c/protobuf-c.h @@ -790,13 +790,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.3.2" +#define PROTOBUF_C_VERSION "1.3.3" /** * 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 1003002 +#define PROTOBUF_C_VERSION_NUMBER 1003003 /** * The minimum protoc-c version which works with the current version of the diff --git a/lib/logsrv/protobuf-c.c b/lib/logsrv/protobuf-c.c index 7a6b56d322..23fe295db8 100644 --- a/lib/logsrv/protobuf-c.c +++ b/lib/logsrv/protobuf-c.c @@ -312,10 +312,9 @@ int32_size(int32_t v) static inline uint32_t zigzag32(int32_t v) { - if (v < 0) - return (-(uint32_t)v) * 2 - 1; - else - return (uint32_t)(v) * 2; + // Note: the right-shift must be arithmetic + // Note: left shift must be unsigned because of overflow + return ((uint32_t)(v) << 1) ^ (uint32_t)(v >> 31); } /** @@ -377,10 +376,9 @@ uint64_size(uint64_t v) static inline uint64_t zigzag64(int64_t v) { - if (v < 0) - return (-(uint64_t)v) * 2 - 1; - else - return (uint64_t)(v) * 2; + // Note: the right-shift must be arithmetic + // Note: left shift must be unsigned because of overflow + return ((uint64_t)(v) << 1) ^ (uint64_t)(v >> 63); } /** @@ -2423,10 +2421,8 @@ parse_int32(unsigned len, const uint8_t *data) static inline int32_t unzigzag32(uint32_t v) { - if (v & 1) - return -(v >> 1) - 1; - else - return v >> 1; + // Note: Using unsigned types prevents undefined behavior + return (int32_t)((v >> 1) ^ (~(v & 1) + 1)); } static inline uint32_t @@ -2467,10 +2463,8 @@ parse_uint64(unsigned len, const uint8_t *data) static inline int64_t unzigzag64(uint64_t v) { - if (v & 1) - return -(v >> 1) - 1; - else - return v >> 1; + // Note: Using unsigned types prevents undefined behavior + return (int64_t)((v >> 1) ^ (~(v & 1) + 1)); } static inline uint64_t From 2adde428c562aac12ea3d739d9b763420cdf5125 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 2 Sep 2020 09:20:19 -0600 Subject: [PATCH 064/113] Fix path to check_exptilde.c --- MANIFEST | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MANIFEST b/MANIFEST index 68c2a01e9e..9a32a6e9b6 100644 --- a/MANIFEST +++ b/MANIFEST @@ -668,8 +668,8 @@ plugins/sudoers/regress/cvtsudoers/test8.sh plugins/sudoers/regress/cvtsudoers/test9.out.ok plugins/sudoers/regress/cvtsudoers/test9.sh plugins/sudoers/regress/env_match/check_env_pattern.c -plugins/sudoers/regress/env_match/check_exptilde.c plugins/sudoers/regress/env_match/data +plugins/sudoers/regress/exptilde/check_exptilde.c plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c plugins/sudoers/regress/logging/check_wrap.c plugins/sudoers/regress/logging/check_wrap.in From fc563286ff6a5f10d4556ee66477841d7c5e63c1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 2 Sep 2020 09:34:43 -0600 Subject: [PATCH 065/113] Initialize runchroot and runcwd in init_options() --- plugins/sudoers/gram.c | 2 ++ plugins/sudoers/gram.y | 2 ++ 2 files changed, 4 insertions(+) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 9ab492f996..0ef2254223 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -3579,6 +3579,8 @@ init_options(struct command_options *opts) opts->notbefore = UNSPEC; opts->notafter = UNSPEC; opts->timeout = UNSPEC; + opts->runchroot = NULL; + opts->runcwd = NULL; #ifdef HAVE_SELINUX opts->role = NULL; opts->type = NULL; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 4b29a6164d..64a11b18be 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -1488,6 +1488,8 @@ init_options(struct command_options *opts) opts->notbefore = UNSPEC; opts->notafter = UNSPEC; opts->timeout = UNSPEC; + opts->runchroot = NULL; + opts->runcwd = NULL; #ifdef HAVE_SELINUX opts->role = NULL; opts->type = NULL; From 578789c56f7c0e326c525017473e4bdb476e443f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 2 Sep 2020 11:01:09 -0600 Subject: [PATCH 066/113] Fix error recovery in a privilege after a ':' separator. --- plugins/sudoers/gram.c | 226 ++++++++++++++++++++--------------------- plugins/sudoers/gram.y | 2 +- 2 files changed, 114 insertions(+), 114 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 0ef2254223..564378018d 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -567,7 +567,7 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 75 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 285 +#define YYLAST 287 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 62 @@ -576,7 +576,7 @@ union yyalloc /* YYNRULES -- Number of rules. */ #define YYNRULES 132 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 224 +#define YYNSTATES 223 #define YYUNDEFTOK 2 #define YYMAXUTOK 307 @@ -687,10 +687,10 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -99 +#define YYPACT_NINF -101 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-99))) + (!!((Yystate) == (-101))) #define YYTABLE_NINF -4 @@ -701,29 +701,29 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 136, 15, -99, -99, -99, -99, -2, 29, 43, 236, - 221, 221, 10, -99, 75, 81, 90, 91, 247, -99, - 47, 178, -99, -99, -99, 199, -99, -99, -99, -99, - -99, 8, 11, 55, 97, 16, -99, -99, -99, -99, - -99, -99, 253, -99, -99, 5, 18, 18, -99, -99, - -99, 86, 66, 76, 82, 98, -99, 59, -99, -99, - -99, 72, 101, 22, -99, 103, 35, -99, 108, 36, - -99, 116, 39, -99, -99, -99, -99, 221, 41, -99, - -18, 15, -99, 15, -99, 146, 147, 148, -99, 43, - -99, -99, 236, 16, 16, 16, -99, 149, 154, 155, - 156, 49, -99, 10, 16, 236, 75, -99, 10, 81, - -99, 221, 90, -99, 221, 91, -99, -99, 195, -99, - 115, -99, -99, -99, -99, -99, -99, -99, -99, -99, - -99, -99, -99, -99, -99, -99, -99, -99, 128, -99, - 134, -99, 135, -99, 135, -99, 15, -99, 212, 138, - -99, -99, -99, 42, 131, 77, 115, -24, -99, -99, - -99, 83, 141, -99, -99, -99, 42, -99, 145, 150, - 159, 160, 162, 169, 171, 177, 179, -99, -99, -99, - -99, -99, -99, -99, -99, -99, 102, -99, 42, 141, - 175, 213, 215, 217, 223, 224, 225, 227, 228, -99, - -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, - -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, - -99, -99, -99, -99 + 75, 48, -101, -101, -101, -101, 0, 9, 76, 176, + 180, 180, 12, -101, 34, 49, 70, 91, 210, -101, + 80, 117, -101, -101, -101, 160, -101, -101, -101, -101, + -101, 10, 13, -1, 98, 20, -101, -101, -101, -101, + -101, -101, 217, -101, -101, 7, 73, 73, -101, -101, + -101, 139, 59, 82, 85, 86, -101, 136, -101, -101, + -101, 151, 89, 57, -101, 97, 60, -101, 103, 69, + -101, 108, 99, -101, -101, -101, -101, 180, 100, -101, + 11, 48, -101, 48, -101, 138, 145, 163, -101, 76, + -101, -101, 176, 20, 20, 20, -101, 149, 171, 188, + 193, 169, -101, 12, 20, 176, 34, -101, 12, 49, + -101, 180, 70, -101, 180, 91, -101, -101, 154, -101, + 105, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, 134, -101, + 166, -101, 167, -101, 167, -101, -101, -101, 170, 174, + -101, -101, 161, 178, -20, 105, 185, -101, -101, -101, + 200, 186, -101, -101, -101, 161, -101, 177, 205, 206, + 207, 208, 209, 212, 213, 214, -101, -101, -101, -101, + -101, -101, -101, -101, -101, 3, -101, 161, 186, 222, + 239, 244, 245, 246, 247, 248, 249, 250, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -745,35 +745,35 @@ static const yytype_uint8 yydefact[] = 13, 0, 0, 11, 0, 0, 14, 116, 0, 10, 64, 21, 23, 28, 29, 30, 25, 103, 18, 16, 17, 45, 46, 47, 48, 50, 108, 19, 101, 100, - 106, 105, 114, 113, 111, 110, 0, 32, 66, 34, - 42, 71, 33, 70, 0, 67, 64, 81, 128, 130, - 129, 0, 69, 124, 126, 65, 0, 43, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 73, 76, - 74, 75, 77, 78, 79, 80, 0, 127, 0, 68, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 94, - 95, 92, 93, 44, 125, 56, 55, 61, 60, 62, - 63, 57, 58, 59 + 106, 105, 114, 113, 111, 110, 33, 32, 66, 34, + 42, 71, 70, 0, 67, 64, 81, 128, 130, 129, + 0, 69, 124, 126, 65, 0, 43, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 72, 73, 76, 74, + 75, 77, 78, 79, 80, 0, 127, 0, 68, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 94, 95, + 92, 93, 44, 125, 56, 55, 61, 60, 62, 63, + 57, 58, 59 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -99, -99, -99, 220, -99, -99, -28, 157, -99, 129, - 158, 206, -99, 107, 163, -99, -98, 201, -99, -99, - -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, - -99, 214, -99, 161, -5, -99, 164, 166, -99, 151, - -99, 165, -10, 192, 252, 105, 84, 114, -29 + -101, -101, -101, 240, -101, -101, 150, 173, -101, 142, + 172, 221, -101, 110, 165, -101, -100, 211, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, 216, -101, 164, -7, -101, 162, 168, -101, 157, + -101, 175, -10, 192, 255, 109, 88, 118, -27 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { -1, 20, 21, 22, 23, 24, 35, 36, 78, 79, - 43, 44, 149, 150, 56, 57, 58, 59, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 151, 154, 157, - 186, 60, 63, 64, 80, 66, 67, 61, 72, 73, - 69, 70, 25, 26, 27, 162, 163, 164, 30 + 43, 44, 149, 150, 56, 57, 58, 59, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 151, 153, 156, + 185, 60, 63, 64, 80, 66, 67, 61, 72, 73, + 69, 70, 25, 26, 27, 161, 162, 163, 30 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -781,68 +781,68 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 46, 47, 82, 84, 45, 136, 90, 31, 28, 81, - 33, 28, 83, 48, 49, 28, 28, 93, 94, 95, - 120, 92, 28, 33, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 104, 107, 28, 28, 110, 32, 28, - 113, 28, 50, 116, 92, 34, 158, 75, 33, 119, - 51, 159, 121, 29, 122, 89, 29, 77, 34, 106, - 29, 29, 48, 49, 128, 129, 130, 29, 52, 53, - 54, 55, 109, 112, 160, 137, 115, 33, 118, 62, - 29, 29, 161, 34, 29, 65, 29, 158, 213, 48, - 49, 50, 159, 85, 68, 71, 86, 87, 101, 51, - 138, 142, 88, 97, 144, 48, 49, 52, 53, 54, - 55, 103, 34, 98, 166, 160, 77, 152, 50, 99, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 50, 100, -2, 1, 155, 105, - 2, 108, 51, 3, 4, 5, 111, 6, 7, 8, - 9, 10, 11, 12, 114, 123, 124, 125, 148, 131, - 52, 53, 54, 55, 132, 133, 134, 92, 13, 14, - 15, 16, 17, 103, 77, 165, 18, 156, -3, 1, - 188, 19, 2, 190, 215, 3, 4, 5, 191, 6, - 7, 8, 9, 10, 11, 12, 146, 192, 193, 37, - 194, 38, 39, 37, 40, 38, 39, 195, 40, 196, - 13, 14, 15, 16, 17, 197, 2, 198, 18, 3, - 4, 5, 216, 19, 217, 2, 218, 41, 3, 4, - 5, 41, 219, 220, 221, 42, 222, 223, 77, 42, - 37, 76, 38, 39, 13, 40, 126, 147, 91, 153, - 127, 2, 18, 13, 3, 4, 5, 37, 102, 38, - 39, 18, 40, 167, 135, 96, 145, 139, 41, 117, - 74, 189, 214, 141, 140, 187, 42, 143, 0, 13, - 0, 0, 0, 0, 0, 41 + 46, 47, 45, 136, 82, 84, 48, 49, 90, 31, + 28, 81, 33, 28, 83, 48, 49, 165, 32, 77, + 28, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 50, 107, 85, 62, 110, + 86, 87, 113, 51, 50, 116, 92, 34, 28, 120, + 92, 119, 51, 65, 121, 29, 122, 28, 29, 89, + 28, 52, 53, 54, 55, 29, 128, 129, 130, 28, + 52, 53, 54, 55, 68, -2, 1, 137, 33, 2, + 75, 33, 3, 4, 5, 212, 6, 7, 8, 9, + 10, 11, 12, 29, 106, 71, 97, 109, 138, 28, + 28, 142, 29, 88, 144, 29, 112, 13, 14, 15, + 16, 17, 77, 34, 29, 18, 34, -3, 1, 98, + 19, 2, 99, 100, 3, 4, 5, 105, 6, 7, + 8, 9, 10, 11, 12, 108, 115, 118, 154, 48, + 49, 111, 48, 49, 29, 29, 114, 123, 148, 13, + 14, 15, 16, 17, 124, 146, 33, 18, 37, 131, + 38, 39, 19, 40, 37, 157, 38, 39, 50, 40, + 158, 50, 125, 92, 2, 101, 51, 3, 4, 5, + 37, 132, 38, 39, 2, 40, 41, 3, 4, 5, + 103, 34, 41, 159, 42, 93, 94, 95, 133, 77, + 42, 160, 13, 134, 157, 103, 77, 152, 41, 158, + 18, 104, 13, 155, 2, 189, 42, 3, 4, 5, + 18, 37, 164, 38, 39, 187, 40, 52, 53, 54, + 55, 214, 159, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 13, 190, 191, 192, 193, 194, 215, 41, + 195, 196, 197, 216, 217, 218, 219, 220, 221, 222, + 147, 76, 126, 91, 127, 166, 135, 96, 102, 117, + 139, 141, 145, 74, 188, 213, 140, 0, 186, 0, + 0, 0, 0, 0, 0, 0, 0, 143 }; static const yytype_int16 yycheck[] = { - 10, 11, 31, 32, 9, 103, 35, 9, 0, 1, - 5, 0, 1, 3, 4, 0, 0, 45, 46, 47, - 38, 39, 0, 5, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 61, 63, 0, 0, 66, 9, 0, - 69, 0, 32, 72, 39, 40, 4, 0, 5, 78, - 40, 9, 81, 45, 83, 39, 45, 39, 40, 37, - 45, 45, 3, 4, 93, 94, 95, 45, 58, 59, - 60, 61, 37, 37, 32, 104, 37, 5, 37, 4, - 45, 45, 40, 40, 45, 4, 45, 4, 186, 3, - 4, 32, 9, 38, 4, 4, 41, 42, 39, 40, - 105, 111, 5, 37, 114, 3, 4, 58, 59, 60, - 61, 39, 40, 37, 37, 32, 39, 146, 32, 37, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 37, 0, 1, 148, 38, - 4, 38, 40, 7, 8, 9, 38, 11, 12, 13, - 14, 15, 16, 17, 38, 9, 9, 9, 43, 10, - 58, 59, 60, 61, 10, 10, 10, 39, 32, 33, - 34, 35, 36, 39, 39, 44, 40, 39, 0, 1, - 39, 45, 4, 38, 9, 7, 8, 9, 38, 11, - 12, 13, 14, 15, 16, 17, 1, 38, 38, 4, - 38, 6, 7, 4, 9, 6, 7, 38, 9, 38, - 32, 33, 34, 35, 36, 38, 4, 38, 40, 7, - 8, 9, 9, 45, 9, 4, 9, 32, 7, 8, - 9, 32, 9, 9, 9, 40, 9, 9, 39, 40, - 4, 21, 6, 7, 32, 9, 89, 118, 42, 37, - 92, 4, 40, 32, 7, 8, 9, 4, 57, 6, - 7, 40, 9, 156, 101, 51, 115, 106, 32, 77, - 18, 166, 188, 109, 108, 161, 40, 112, -1, 32, - -1, -1, -1, -1, -1, 32 + 10, 11, 9, 103, 31, 32, 3, 4, 35, 9, + 0, 1, 5, 0, 1, 3, 4, 37, 9, 39, + 0, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 63, 38, 4, 66, + 41, 42, 69, 40, 32, 72, 39, 40, 0, 38, + 39, 78, 40, 4, 81, 45, 83, 0, 45, 39, + 0, 58, 59, 60, 61, 45, 93, 94, 95, 0, + 58, 59, 60, 61, 4, 0, 1, 104, 5, 4, + 0, 5, 7, 8, 9, 185, 11, 12, 13, 14, + 15, 16, 17, 45, 37, 4, 37, 37, 105, 0, + 0, 111, 45, 5, 114, 45, 37, 32, 33, 34, + 35, 36, 39, 40, 45, 40, 40, 0, 1, 37, + 45, 4, 37, 37, 7, 8, 9, 38, 11, 12, + 13, 14, 15, 16, 17, 38, 37, 37, 148, 3, + 4, 38, 3, 4, 45, 45, 38, 9, 43, 32, + 33, 34, 35, 36, 9, 1, 5, 40, 4, 10, + 6, 7, 45, 9, 4, 4, 6, 7, 32, 9, + 9, 32, 9, 39, 4, 39, 40, 7, 8, 9, + 4, 10, 6, 7, 4, 9, 32, 7, 8, 9, + 39, 40, 32, 32, 40, 45, 46, 47, 10, 39, + 40, 40, 32, 10, 4, 39, 39, 37, 32, 9, + 40, 61, 32, 39, 4, 38, 40, 7, 8, 9, + 40, 4, 44, 6, 7, 39, 9, 58, 59, 60, + 61, 9, 32, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 32, 38, 38, 38, 38, 38, 9, 32, + 38, 38, 38, 9, 9, 9, 9, 9, 9, 9, + 118, 21, 89, 42, 92, 155, 101, 51, 57, 77, + 106, 109, 115, 18, 165, 187, 108, -1, 160, -1, + -1, -1, -1, -1, -1, -1, -1, 112 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -864,14 +864,14 @@ static const yytype_uint8 yystos[] = 38, 110, 110, 9, 9, 9, 69, 72, 110, 110, 110, 10, 10, 10, 10, 76, 78, 110, 96, 95, 99, 98, 104, 103, 104, 101, 1, 71, 43, 74, - 75, 89, 110, 37, 90, 104, 39, 91, 4, 9, - 32, 40, 107, 108, 109, 44, 37, 75, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 92, 109, 39, 107, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 78, 108, 9, 9, 9, 9, 9, - 9, 9, 9, 9 + 75, 89, 37, 90, 104, 39, 91, 4, 9, 32, + 40, 107, 108, 109, 44, 37, 75, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 92, 109, 39, 107, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 78, 108, 9, 9, 9, 9, 9, 9, + 9, 9, 9 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -899,7 +899,7 @@ static const yytype_uint8 yyr2[] = 0, 2, 0, 1, 1, 2, 1, 2, 1, 1, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 3, 4, 3, 4, 1, 3, 1, 2, 3, 3, - 3, 1, 3, 4, 3, 1, 2, 1, 1, 1, + 3, 1, 3, 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, 3, 4, 3, 3, 3, 3, 1, 3, 1, 2, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 0, 1, 3, 2, @@ -1846,7 +1846,7 @@ yyparse (void) #line 323 "gram.y" /* yacc.c:1652 */ { yyerrok; - (yyval.privilege) = (yyvsp[-3].privilege); + (yyval.privilege) = (yyvsp[-2].privilege); } #line 1846 "gram.c" /* yacc.c:1652 */ break; diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index 64a11b18be..e8923d3b84 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -320,7 +320,7 @@ privileges : privilege HLTQ_CONCAT($1, $3, entries); $$ = $1; } - | privileges ':' error eol { + | privileges ':' error { yyerrok; $$ = $1; } From a51d194a73e57aff1c0d8cd35cbc77b660374b72 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 2 Sep 2020 12:40:39 -0600 Subject: [PATCH 067/113] Add test of multiple syntax errors. Where possible, the portion of the line before the error should be still be interpreted. --- MANIFEST | 2 ++ .../sudoers/regress/testsudoers/test12.out.ok | 15 +++++++++++++++ plugins/sudoers/regress/testsudoers/test12.sh | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 plugins/sudoers/regress/testsudoers/test12.out.ok create mode 100755 plugins/sudoers/regress/testsudoers/test12.sh diff --git a/MANIFEST b/MANIFEST index 9a32a6e9b6..4bea0a5f46 100644 --- a/MANIFEST +++ b/MANIFEST @@ -827,6 +827,8 @@ plugins/sudoers/regress/testsudoers/test10.out.ok plugins/sudoers/regress/testsudoers/test10.sh plugins/sudoers/regress/testsudoers/test11.out.ok plugins/sudoers/regress/testsudoers/test11.sh +plugins/sudoers/regress/testsudoers/test12.out.ok +plugins/sudoers/regress/testsudoers/test12.sh plugins/sudoers/regress/testsudoers/test2.inc plugins/sudoers/regress/testsudoers/test2.out.ok plugins/sudoers/regress/testsudoers/test2.sh diff --git a/plugins/sudoers/regress/testsudoers/test12.out.ok b/plugins/sudoers/regress/testsudoers/test12.out.ok new file mode 100644 index 0000000000..5dd75fb195 --- /dev/null +++ b/plugins/sudoers/regress/testsudoers/test12.out.ok @@ -0,0 +1,15 @@ +Testing sudoers with multiple syntax errors + +sudoers:1: syntax error +User_Alias A1 = u1 u2 : A2 = u3, u4 + ^~ +sudoers:3: syntax error +millert ALL = /fail : foo + ^ +sudoers:5: syntax error +root ALL = ALL bar + ^~~ + +User_Alias A1 = u1 + +millert ALL = /fail diff --git a/plugins/sudoers/regress/testsudoers/test12.sh b/plugins/sudoers/regress/testsudoers/test12.sh new file mode 100755 index 0000000000..0a1510c5cc --- /dev/null +++ b/plugins/sudoers/regress/testsudoers/test12.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# +# Test sudoers file with multiple syntax errors +# The standard error output is dup'd to the standard output. +# + +# Avoid warnings about memory leaks when there is a syntax error +ASAN_OPTIONS=detect_leaks=0; export ASAN_OPTIONS + +echo "Testing sudoers with multiple syntax errors" +echo "" +./testsudoers -d <&1 | sed 's/\(syntax error\), .*/\1/' +User_Alias A1 = u1 u2 : A2 = u3, u4 + +millert ALL = /fail : foo + +root ALL = ALL bar +EOF From 226307591cb4a583783459ab2b33f56d7ccd5ef7 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 2 Sep 2020 11:23:26 -0600 Subject: [PATCH 068/113] Log the runcwd not submitcwd in the sudo-style log file. The log entry should reflect the working directory the command actually ran in. --- logsrvd/eventlog.c | 4 ++-- logsrvd/iolog_writer.c | 8 ++++++++ plugins/sudoers/logging.c | 4 ++-- plugins/sudoers/policy.c | 4 ++++ plugins/sudoers/sudoers.c | 12 +++++++++--- plugins/sudoers/sudoers.h | 2 +- 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/logsrvd/eventlog.c b/logsrvd/eventlog.c index 227b90b198..9b138631ec 100644 --- a/logsrvd/eventlog.c +++ b/logsrvd/eventlog.c @@ -114,7 +114,7 @@ new_logline(const char *message, const char *errstr, len += strlen(errstr) + 3; len += sizeof(LL_HOST_STR) + 2 + strlen(details->submithost); len += sizeof(LL_TTY_STR) + 2 + strlen(details->ttyname); - len += sizeof(LL_CWD_STR) + 2 + strlen(details->cwd); + len += sizeof(LL_CWD_STR) + 2 + strlen(details->runcwd); if (details->runuser != NULL) len += sizeof(LL_USER_STR) + 2 + strlen(details->runuser); if (details->rungroup != NULL) @@ -175,7 +175,7 @@ new_logline(const char *message, const char *errstr, strlcat(line, " ; ", len) >= len) goto toobig; if (strlcat(line, LL_CWD_STR, len) >= len || - strlcat(line, details->cwd, len) >= len || + strlcat(line, details->runcwd, len) >= len || strlcat(line, " ; ", len) >= len) goto toobig; if (details->runuser != NULL) { diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index 050d792557..c1128f8c60 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -422,6 +422,14 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, goto done; } } + if (details->runcwd == NULL) { + if ((details->runcwd = strdup(details->cwd)) == NULL) { + sudo_debug_printf( + SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "strdup"); + goto done; + } + } if (details->submitgroup == NULL) { /* TODO: make submitgroup required */ if ((details->submitgroup = strdup("unknown")) == NULL) { diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 4a04be0b9c..0bbcb831f3 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -978,7 +978,7 @@ new_logline(const char *message, const char *errstr) if (errstr != NULL) len += strlen(errstr) + 3; len += sizeof(LL_TTY_STR) + 2 + strlen(user_tty); - len += sizeof(LL_CWD_STR) + 2 + strlen(user_cwd); + len += sizeof(LL_CWD_STR) + 2 + strlen(user_runcwd); if (runas_pw != NULL) len += sizeof(LL_USER_STR) + 2 + strlen(runas_pw->pw_name); if (runas_gr != NULL) @@ -1033,7 +1033,7 @@ new_logline(const char *message, const char *errstr) strlcat(line, " ; ", len) >= len) goto toobig; if (strlcat(line, LL_CWD_STR, len) >= len || - strlcat(line, user_cwd, len) >= len || + strlcat(line, user_runcwd, len) >= len || strlcat(line, " ; ", len) >= len) goto toobig; if (runas_pw != NULL) { diff --git a/plugins/sudoers/policy.c b/plugins/sudoers/policy.c index bf85891c22..c4749a6044 100644 --- a/plugins/sudoers/policy.c +++ b/plugins/sudoers/policy.c @@ -476,6 +476,10 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group) if ((user_cwd = strdup("unknown")) == NULL) goto oom; } + if (user_runcwd == NULL) { + if ((user_runcwd = strdup(user_cwd)) == NULL) + goto oom; + } if (user_tty == NULL) { if ((user_tty = strdup("unknown")) == NULL) goto oom; diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index c7f78f8afe..593c4ff597 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -405,9 +405,12 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], goto bad; } free(def_runchroot); - def_runchroot = user_runchroot; + if ((def_runchroot = strdup(user_runchroot)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } } - if (user_runcwd != NULL) { + if (strcmp(user_cwd, user_runcwd) != 0) { if (def_runcwd == NULL || strcmp(def_runcwd, "*") != 0) { audit_failure(NewArgv, N_("user not allowed to change directory to %s"), user_runcwd); @@ -415,7 +418,10 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], goto bad; } free(def_runcwd); - def_runcwd = user_runcwd; + if ((def_runcwd = strdup(user_runcwd)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } } /* diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index d86e65e5e2..0c493cc82d 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -82,6 +82,7 @@ struct sudo_user { struct passwd *_runas_pw; struct group *_runas_gr; struct stat *cmnd_stat; + char *cwd; char *name; char *path; char *tty; @@ -109,7 +110,6 @@ struct sudo_user { char *privs; char *limitprivs; #endif - const char *cwd; char *iolog_file; GETGROUPS_T *gids; int execfd; From fd06e588ee4a3dc30943699a1bbbafba201a8266 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 2 Sep 2020 16:57:55 -0600 Subject: [PATCH 069/113] If the command was run in a chroot, add it to the log. --- logsrvd/eventlog.c | 9 +++++++++ plugins/sudoers/logging.c | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/logsrvd/eventlog.c b/logsrvd/eventlog.c index 9b138631ec..3566cb9ce0 100644 --- a/logsrvd/eventlog.c +++ b/logsrvd/eventlog.c @@ -59,6 +59,7 @@ #define LL_HOST_STR "HOST=" #define LL_TTY_STR "TTY=" +#define LL_CHROOT_STR "CHROOT=" #define LL_CWD_STR "PWD=" #define LL_USER_STR "USER=" #define LL_GROUP_STR "GROUP=" @@ -114,6 +115,8 @@ new_logline(const char *message, const char *errstr, len += strlen(errstr) + 3; len += sizeof(LL_HOST_STR) + 2 + strlen(details->submithost); len += sizeof(LL_TTY_STR) + 2 + strlen(details->ttyname); + if (details->runchroot != NULL) + len += sizeof(LL_CHROOT_STR) + 2 + strlen(details->runchroot); len += sizeof(LL_CWD_STR) + 2 + strlen(details->runcwd); if (details->runuser != NULL) len += sizeof(LL_USER_STR) + 2 + strlen(details->runuser); @@ -174,6 +177,12 @@ new_logline(const char *message, const char *errstr, strlcat(line, details->ttyname, len) >= len || strlcat(line, " ; ", len) >= len) goto toobig; + if (details->runchroot != NULL) { + if (strlcat(line, LL_CHROOT_STR, len) >= len || + strlcat(line, details->runchroot, len) >= len || + strlcat(line, " ; ", len) >= len) + goto toobig; + } if (strlcat(line, LL_CWD_STR, len) >= len || strlcat(line, details->runcwd, len) >= len || strlcat(line, " ; ", len) >= len) diff --git a/plugins/sudoers/logging.c b/plugins/sudoers/logging.c index 0bbcb831f3..0230984c91 100644 --- a/plugins/sudoers/logging.c +++ b/plugins/sudoers/logging.c @@ -923,6 +923,7 @@ should_mail(int status) } #define LL_TTY_STR "TTY=" +#define LL_CHROOT_STR "CHROOT=" #define LL_CWD_STR "PWD=" /* XXX - should be CWD= */ #define LL_USER_STR "USER=" #define LL_GROUP_STR "GROUP=" @@ -978,6 +979,8 @@ new_logline(const char *message, const char *errstr) if (errstr != NULL) len += strlen(errstr) + 3; len += sizeof(LL_TTY_STR) + 2 + strlen(user_tty); + if (user_runchroot != NULL) + len += sizeof(LL_CHROOT_STR) + 2 + strlen(user_runchroot); len += sizeof(LL_CWD_STR) + 2 + strlen(user_runcwd); if (runas_pw != NULL) len += sizeof(LL_USER_STR) + 2 + strlen(runas_pw->pw_name); @@ -1032,6 +1035,12 @@ new_logline(const char *message, const char *errstr) strlcat(line, user_tty, len) >= len || strlcat(line, " ; ", len) >= len) goto toobig; + if (user_runchroot != NULL) { + if (strlcat(line, LL_CHROOT_STR, len) >= len || + strlcat(line, user_runchroot, len) >= len || + strlcat(line, " ; ", len) >= len) + goto toobig; + } if (strlcat(line, LL_CWD_STR, len) >= len || strlcat(line, user_runcwd, len) >= len || strlcat(line, " ; ", len) >= len) From 21a2dce506c3d1dae39ee5f13a83330bf0a297a9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 3 Sep 2020 06:03:28 -0600 Subject: [PATCH 070/113] Remove obsolete mansrcdir variable, add _SRC suffix to LOGSRV and LOGSRVD --- Makefile.in | 2 +- configure | 17 ++++---- configure.ac | 16 ++++---- doc/Makefile.in | 104 +++++++++++++++++++++++------------------------- 4 files changed, 64 insertions(+), 75 deletions(-) diff --git a/Makefile.in b/Makefile.in index 3bf13a6aa6..be8f44a93a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -56,7 +56,7 @@ shlib_mode = @SHLIB_MODE@ # Version of python detected by configure (major.minor) python_version = @PYTHON_VERSION@ -SUBDIRS = lib/util @ZLIB_SRC@ lib/iolog @LOGSRV@ @LOGSRVD@ \ +SUBDIRS = lib/util @ZLIB_SRC@ lib/iolog @LOGSRV_SRC@ @LOGSRVD_SRC@ \ plugins/audit_json plugins/group_file plugins/sample_approval \ plugins/sudoers plugins/system_group @PYTHON_PLUGIN_SRC@ src \ include doc examples diff --git a/configure b/configure index 0f3bd7fefc..103cf224f3 100755 --- a/configure +++ b/configure @@ -738,9 +738,9 @@ log_dir iolog_dir PPFILES LOGSRVD_CONF -LOGSRVD +LOGSRVD_SRC LIBLOGSRV -LOGSRV +LOGSRV_SRC PYTHON_PLUGIN_SRC SIGNAME devsearch @@ -784,7 +784,6 @@ sesh_file noexec_file NOEXECDIR NOEXECFILE -mansrcdir mansectform mansectsu devdir @@ -3135,7 +3134,6 @@ $as_echo "$as_me: Configuring Sudo version $PACKAGE_VERSION" >&6;} - # @@ -3196,7 +3194,6 @@ exampledir='$(docdir)/examples' devdir='$(srcdir)' PROGS="sudo" : ${MANDIRTYPE='man'} -: ${mansrcdir='.'} : ${SHLIB_MODE='0644'} : ${SUDOERS_MODE='0440'} : ${SUDOERS_UID='0'} @@ -3234,9 +3231,9 @@ shadow_funcs= shadow_libs= TMPFILES_D= CONFIGURE_ARGS="$@" -LOGSRVD=logsrvd +LOGSRVD_SRC=logsrvd LOGSRVD_CONF='$(srcdir)/sudo_logsrvd.conf' -LOGSRV=lib/logsrv +LOGSRV_SRC=lib/logsrv LIBLOGSRV='$(top_builddir)/lib/logsrv/liblogsrv.la' PPFILES='$(srcdir)/etc/sudo.pp' @@ -6745,7 +6742,7 @@ if test "${enable_log_server+set}" = set; then : yes) ;; no) - LOGSRVD= + LOGSRVD_SRC= LOGSRVD_CONF= ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring unknown argument to --enable-log-server: $enableval" >&5 @@ -6778,10 +6775,10 @@ fi if test X"$enable_log_server" = X"no" -a X"$enable_log_client" = X"no"; then # No need for liblogsrv.la - LOGSRV= + LOGSRV_SRC= LIBLOGSRV= fi -if test X"$LOGSRVD" != X""; then +if test X"$LOGSRVD_SRC" != X""; then PPFILES="$PPFILES "'$(srcdir)/etc/sudo-logsrvd.pp' fi diff --git a/configure.ac b/configure.ac index 8ad43c00c0..6d3744f20d 100644 --- a/configure.ac +++ b/configure.ac @@ -72,7 +72,6 @@ AC_SUBST([SEMAN]) AC_SUBST([devdir]) AC_SUBST([mansectsu]) AC_SUBST([mansectform]) -AC_SUBST([mansrcdir]) AC_SUBST([NOEXECFILE]) AC_SUBST([NOEXECDIR]) AC_SUBST([noexec_file]) @@ -116,9 +115,9 @@ AC_SUBST([DIGEST]) AC_SUBST([devsearch]) AC_SUBST([SIGNAME]) AC_SUBST([PYTHON_PLUGIN_SRC]) -AC_SUBST([LOGSRV]) +AC_SUBST([LOGSRV_SRC]) AC_SUBST([LIBLOGSRV]) -AC_SUBST([LOGSRVD]) +AC_SUBST([LOGSRVD_SRC]) AC_SUBST([LOGSRVD_CONF]) AC_SUBST([PPFILES]) @@ -229,7 +228,6 @@ exampledir='$(docdir)/examples' devdir='$(srcdir)' PROGS="sudo" : ${MANDIRTYPE='man'} -: ${mansrcdir='.'} : ${SHLIB_MODE='0644'} : ${SUDOERS_MODE='0440'} : ${SUDOERS_UID='0'} @@ -270,9 +268,9 @@ shadow_funcs= shadow_libs= TMPFILES_D= CONFIGURE_ARGS="$@" -LOGSRVD=logsrvd +LOGSRVD_SRC=logsrvd LOGSRVD_CONF='$(srcdir)/sudo_logsrvd.conf' -LOGSRV=lib/logsrv +LOGSRV_SRC=lib/logsrv LIBLOGSRV='$(top_builddir)/lib/logsrv/liblogsrv.la' PPFILES='$(srcdir)/etc/sudo.pp' @@ -1642,7 +1640,7 @@ AC_ARG_ENABLE(log-server, yes) ;; no) - LOGSRVD= + LOGSRVD_SRC= LOGSRVD_CONF= ;; *) AC_MSG_WARN([Ignoring unknown argument to --enable-log-server: $enableval]) @@ -1665,10 +1663,10 @@ AC_ARG_ENABLE(log-client, if test X"$enable_log_server" = X"no" -a X"$enable_log_client" = X"no"; then # No need for liblogsrv.la - LOGSRV= + LOGSRV_SRC= LIBLOGSRV= fi -if test X"$LOGSRVD" != X""; then +if test X"$LOGSRVD_SRC" != X""; then PPFILES="$PPFILES "'$(srcdir)/etc/sudo-logsrvd.pp' fi diff --git a/doc/Makefile.in b/doc/Makefile.in index eed67a1484..fb25bea0b8 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -52,9 +52,6 @@ datarootdir = @datarootdir@ localstatedir = @localstatedir@ mandir = @mandir@ -# Directory to copy man pages from -mansrcdir = @mansrcdir@ - # Directory in which to install the man page mantype = @MANTYPE@ mansectsu = @mansectsu@ @@ -74,16 +71,13 @@ DEVEL = @DEVEL@ SHELL = @SHELL@ -DOCS = $(mansrcdir)/cvtsudoers.$(mantype) $(mansrcdir)/sudo.$(mantype) \ - $(mansrcdir)/sudo.conf.$(mantype) $(mansrcdir)/sudo_logsrvd.$(mantype) \ - $(mansrcdir)/sudo_logsrv.proto.$(mantype) \ - $(mansrcdir)/sudo_logsrvd.conf.$(mantype) \ - $(mansrcdir)/sudo_plugin.$(mantype) \ - $(mansrcdir)/sudo_plugin_python.$(mantype) \ - $(mansrcdir)/sudo_sendlog.$(mantype) \ - $(mansrcdir)/sudoers.$(mantype) $(mansrcdir)/sudoers.ldap.$(mantype) \ - $(mansrcdir)/sudoers_timestamp.$(mantype) \ - $(mansrcdir)/sudoreplay.$(mantype) $(mansrcdir)/visudo.$(mantype) +DOCS = ./cvtsudoers.$(mantype) ./sudo.$(mantype) ./sudo.conf.$(mantype) \ + ./sudo_logsrvd.$(mantype) ./sudo_logsrv.proto.$(mantype) \ + ./sudo_logsrvd.conf.$(mantype) ./sudo_plugin.$(mantype) \ + ./sudo_plugin_python.$(mantype) ./sudo_sendlog.$(mantype) \ + ./sudoers.$(mantype) ./sudoers.ldap.$(mantype) \ + ./sudoers_timestamp.$(mantype) \ + ./sudoreplay.$(mantype) ./visudo.$(mantype) DEVDOCS = $(srcdir)/cvtsudoers.man.in $(srcdir)/sudo.conf.man.in \ $(srcdir)/sudo.man.in $(srcdir)/sudo_logsrvd.man.in \ @@ -149,10 +143,10 @@ $(srcdir)/sudo.man.in: $(srcdir)/sudo.mdoc.in $(srcdir)/sudo.man.in.sed fixman.sed: $(srcdir)/fixman.sh $(SHELL) $(srcdir)/fixman.sh $@ -$(mansrcdir)/sudo.man: $(top_builddir)/config.status $(srcdir)/sudo.man.in fixman.sed +./sudo.man: $(top_builddir)/config.status $(srcdir)/sudo.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.mdoc.in +./sudo.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/visudo.man.in: $(srcdir)/visudo.mdoc.in @@ -163,10 +157,10 @@ $(srcdir)/visudo.man.in: $(srcdir)/visudo.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/visudo.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "VISUDO" \)"8"\(.*\)/\1"'$$mansectsu'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/visudo.man: $(top_builddir)/config.status $(srcdir)/visudo.man.in fixman.sed +./visudo.man: $(top_builddir)/config.status $(srcdir)/visudo.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/visudo.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/visudo.mdoc: $(top_builddir)/config.status $(srcdir)/visudo.mdoc.in +./visudo.mdoc: $(top_builddir)/config.status $(srcdir)/visudo.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudo.conf.man.in: $(srcdir)/sudo.conf.mdoc.in @@ -177,10 +171,10 @@ $(srcdir)/sudo.conf.man.in: $(srcdir)/sudo.conf.mdoc.in $(SED) -e 's/^\(\.nr [A-Z][A-Z]\) .[A-Z][A-Z]MAN./\1 1/' -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo.conf.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO.CONF" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" -f $(srcdir)/sudo.conf.man.in.sed > $@; \ fi -$(mansrcdir)/sudo.conf.man: $(top_builddir)/config.status $(srcdir)/sudo.conf.man.in fixman.sed +./sudo.conf.man: $(top_builddir)/config.status $(srcdir)/sudo.conf.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo.conf.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo.conf.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.conf.mdoc.in +./sudo.conf.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.conf.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudoers.man.in: $(srcdir)/sudoers.mdoc.in $(srcdir)/sudoers.man.in.sed @@ -191,10 +185,10 @@ $(srcdir)/sudoers.man.in: $(srcdir)/sudoers.mdoc.in $(srcdir)/sudoers.man.in.sed $(SED) -e 's/^\(\.nr [A-Z][A-Z]\) .[A-Z][A-Z]MAN./\1 1/' -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudoers.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDOERS" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" -f $(srcdir)/sudoers.man.in.sed> $@; \ fi -$(mansrcdir)/sudoers.man: $(top_builddir)/config.status $(srcdir)/sudoers.man.in fixman.sed +./sudoers.man: $(top_builddir)/config.status $(srcdir)/sudoers.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoers.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudoers.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.mdoc.in $(srcdir)/fixmdoc.sed +./sudoers.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.mdoc.in $(srcdir)/fixmdoc.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoers.mdoc.in | $(SED) -f $(srcdir)/fixmdoc.sed > $@ $(srcdir)/sudoers.ldap.man.in: $(srcdir)/sudoers.ldap.mdoc.in @@ -205,10 +199,10 @@ $(srcdir)/sudoers.ldap.man.in: $(srcdir)/sudoers.ldap.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudoers.ldap.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDOERS.LDAP" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/sudoers.ldap.man: $(top_builddir)/config.status $(srcdir)/sudoers.ldap.man.in fixman.sed +./sudoers.ldap.man: $(top_builddir)/config.status $(srcdir)/sudoers.ldap.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoers.ldap.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudoers.ldap.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.ldap.mdoc.in +./sudoers.ldap.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.ldap.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudoers_timestamp.man.in: $(srcdir)/sudoers_timestamp.mdoc.in @@ -219,10 +213,10 @@ $(srcdir)/sudoers_timestamp.man.in: $(srcdir)/sudoers_timestamp.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudoers_timestamp.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDOERS_TIMESTAMP" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/sudoers_timestamp.man: $(top_builddir)/config.status $(srcdir)/sudoers_timestamp.man.in fixman.sed +./sudoers_timestamp.man: $(top_builddir)/config.status $(srcdir)/sudoers_timestamp.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoers_timestamp.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudoers_timestamp.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers_timestamp.mdoc.in +./sudoers_timestamp.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers_timestamp.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/cvtsudoers.man.in: $(srcdir)/cvtsudoers.mdoc.in @@ -233,10 +227,10 @@ $(srcdir)/cvtsudoers.man.in: $(srcdir)/cvtsudoers.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/cvtsudoers.mdoc.in | $(MANDOC) -Tman | $(SED) -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/cvtsudoers.man: $(top_builddir)/config.status $(srcdir)/cvtsudoers.man.in fixman.sed +./cvtsudoers.man: $(top_builddir)/config.status $(srcdir)/cvtsudoers.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/cvtsudoers.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/cvtsudoers.mdoc: $(top_builddir)/config.status $(srcdir)/cvtsudoers.mdoc.in +./cvtsudoers.mdoc: $(top_builddir)/config.status $(srcdir)/cvtsudoers.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudoreplay.man.in: $(srcdir)/sudoreplay.mdoc.in @@ -247,10 +241,10 @@ $(srcdir)/sudoreplay.man.in: $(srcdir)/sudoreplay.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudoreplay.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDOREPLAY" \)"8"\(.*\)/\1"'$$mansectsu'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/sudoreplay.man: $(top_builddir)/config.status $(srcdir)/sudoreplay.man.in fixman.sed +./sudoreplay.man: $(top_builddir)/config.status $(srcdir)/sudoreplay.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoreplay.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudoreplay.mdoc: $(top_builddir)/config.status $(srcdir)/sudoreplay.mdoc.in +./sudoreplay.mdoc: $(top_builddir)/config.status $(srcdir)/sudoreplay.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudo_logsrvd.man.in: $(srcdir)/sudo_logsrvd.mdoc.in @@ -261,10 +255,10 @@ $(srcdir)/sudo_logsrvd.man.in: $(srcdir)/sudo_logsrvd.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo_logsrvd.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO_LOGSRVD" \)"8"\(.*\)/\1"'$$mansectsu'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/sudo_logsrvd.man: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.man.in fixman.sed +./sudo_logsrvd.man: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo_logsrvd.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo_logsrvd.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.mdoc.in +./sudo_logsrvd.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudo_logsrv.proto.man.in: $(srcdir)/sudo_logsrv.proto.mdoc.in @@ -275,10 +269,10 @@ $(srcdir)/sudo_logsrv.proto.man.in: $(srcdir)/sudo_logsrv.proto.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo_logsrv.proto.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO_LOGSRV.PROTO" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(5)/($$mansectform)/g" > $@; \ fi -$(mansrcdir)/sudo_logsrv.proto.man: $(top_builddir)/config.status $(srcdir)/sudo_logsrv.proto.man.in fixman.sed +./sudo_logsrv.proto.man: $(top_builddir)/config.status $(srcdir)/sudo_logsrv.proto.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo_logsrv.proto.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo_logsrv.proto.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_logsrv.proto.mdoc.in +./sudo_logsrv.proto.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_logsrv.proto.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudo_logsrvd.conf.man.in: $(srcdir)/sudo_logsrvd.conf.mdoc.in @@ -289,10 +283,10 @@ $(srcdir)/sudo_logsrvd.conf.man.in: $(srcdir)/sudo_logsrvd.conf.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo_logsrvd.conf.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO_LOGSRVD.CONF" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(5)/($$mansectform)/g" > $@; \ fi -$(mansrcdir)/sudo_logsrvd.conf.man: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.conf.man.in fixman.sed +./sudo_logsrvd.conf.man: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.conf.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo_logsrvd.conf.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo_logsrvd.conf.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.conf.mdoc.in +./sudo_logsrvd.conf.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_logsrvd.conf.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudo_plugin.man.in: $(srcdir)/sudo_plugin.mdoc.in @@ -303,10 +297,10 @@ $(srcdir)/sudo_plugin.man.in: $(srcdir)/sudo_plugin.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo_plugin.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO_PLUGIN" \)"8"\(.*\)/\1"'$$mansectsu'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/sudo_plugin.man: $(top_builddir)/config.status $(srcdir)/sudo_plugin.man.in fixman.sed +./sudo_plugin.man: $(top_builddir)/config.status $(srcdir)/sudo_plugin.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo_plugin.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo_plugin.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_plugin.mdoc.in +./sudo_plugin.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_plugin.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudo_plugin_python.man.in: $(srcdir)/sudo_plugin_python.mdoc.in @@ -317,10 +311,10 @@ $(srcdir)/sudo_plugin_python.man.in: $(srcdir)/sudo_plugin_python.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo_plugin_python.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO_PLUGIN" \)"8"\(.*\)/\1"'$$mansectsu'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/sudo_plugin_python.man: $(top_builddir)/config.status $(srcdir)/sudo_plugin_python.man.in fixman.sed +./sudo_plugin_python.man: $(top_builddir)/config.status $(srcdir)/sudo_plugin_python.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo_plugin_python.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo_plugin_python.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_plugin_python.mdoc.in +./sudo_plugin_python.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_plugin_python.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ $(srcdir)/sudo_sendlog.man.in: $(srcdir)/sudo_sendlog.mdoc.in @@ -331,10 +325,10 @@ $(srcdir)/sudo_sendlog.man.in: $(srcdir)/sudo_sendlog.mdoc.in $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo_sendlog.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO_SENDLOG" \)"8"\(.*\)/\1"'$$mansectsu'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \ fi -$(mansrcdir)/sudo_sendlog.man: $(top_builddir)/config.status $(srcdir)/sudo_sendlog.man.in fixman.sed +./sudo_sendlog.man: $(top_builddir)/config.status $(srcdir)/sudo_sendlog.man.in fixman.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo_sendlog.man.in | $(SED) -f fixman.sed > $@ -$(mansrcdir)/sudo_sendlog.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_sendlog.mdoc.in +./sudo_sendlog.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_sendlog.mdoc.in cd $(top_builddir) && $(SHELL) config.status --file=doc/$@ pre-install: @@ -352,20 +346,20 @@ install-includes: install-doc: install-dirs for f in $(OTHER_DOCS); do $(INSTALL) $(INSTALL_OWNER) -m 0644 $$f $(DESTDIR)$(docdir); done @LDAP@for f in $(OTHER_DOCS_LDAP); do $(INSTALL) $(INSTALL_OWNER) -m 0644 $$f $(DESTDIR)$(docdir); done - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/cvtsudoers.$(mantype) $(DESTDIR)$(mandirexe)/cvtsudoers.1 - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo.$(mantype) $(DESTDIR)$(mandirsu)/sudo.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo_logsrvd.$(mantype) $(DESTDIR)$(mandirsu)/sudo_logsrvd.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo_plugin.$(mantype) $(DESTDIR)$(mandirsu)/sudo_plugin.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo_plugin_python.$(mantype) $(DESTDIR)$(mandirsu)/sudo_plugin_python.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo_sendlog.$(mantype) $(DESTDIR)$(mandirsu)/sudo_sendlog.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudoreplay.$(mantype) $(DESTDIR)$(mandirsu)/sudoreplay.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/visudo.$(mantype) $(DESTDIR)$(mandirsu)/visudo.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo.conf.$(mantype) $(DESTDIR)$(mandirform)/sudo.conf.$(mansectform) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo_logsrv.proto.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrv.proto.$(mansectform) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudo_logsrvd.conf.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrvd.conf.$(mansectform) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudoers.$(mantype) $(DESTDIR)$(mandirform)/sudoers.$(mansectform) - $(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudoers_timestamp.$(mantype) $(DESTDIR)$(mandirform)/sudoers_timestamp.$(mansectform) - @LDAP@$(INSTALL) $(INSTALL_OWNER) -m 0644 $(mansrcdir)/sudoers.ldap.$(mantype) $(DESTDIR)$(mandirform)/sudoers.ldap.$(mansectform) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./cvtsudoers.$(mantype) $(DESTDIR)$(mandirexe)/cvtsudoers.1 + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo.$(mantype) $(DESTDIR)$(mandirsu)/sudo.$(mansectsu) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrvd.$(mantype) $(DESTDIR)$(mandirsu)/sudo_logsrvd.$(mansectsu) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_plugin.$(mantype) $(DESTDIR)$(mandirsu)/sudo_plugin.$(mansectsu) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_plugin_python.$(mantype) $(DESTDIR)$(mandirsu)/sudo_plugin_python.$(mansectsu) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_sendlog.$(mantype) $(DESTDIR)$(mandirsu)/sudo_sendlog.$(mansectsu) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoreplay.$(mantype) $(DESTDIR)$(mandirsu)/sudoreplay.$(mansectsu) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./visudo.$(mantype) $(DESTDIR)$(mandirsu)/visudo.$(mansectsu) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo.conf.$(mantype) $(DESTDIR)$(mandirform)/sudo.conf.$(mansectform) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrv.proto.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrv.proto.$(mansectform) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrvd.conf.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrvd.conf.$(mansectform) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoers.$(mantype) $(DESTDIR)$(mandirform)/sudoers.$(mansectform) + $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoers_timestamp.$(mantype) $(DESTDIR)$(mandirform)/sudoers_timestamp.$(mansectform) + @LDAP@$(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoers.ldap.$(mantype) $(DESTDIR)$(mandirform)/sudoers.ldap.$(mansectform) @if test -n "$(MANCOMPRESS)"; then \ for f in $(mandirexe)/cvtsudoers.1 $(mandirsu)/sudo.$(mansectsu) $(mandirsu)/sudo_logsrvd.$(mansectsu) $(mandirsu)/sudo_plugin.$(mansectsu) $(mandirsu)/sudo_plugin_python.$(mansectsu) $(mandirsu)/sudo_sendlog.$(mansectsu) $(mandirsu)/sudoreplay.$(mansectsu) $(mandirsu)/visudo.$(mansectsu) $(mandirform)/sudo.conf.$(mansectform) $(mandirform)/sudo_logsrv.proto.$(mansectform) $(mandirform)/sudo_logsrvd.conf.$(mansectform) $(mandirform)/sudoers.$(mansectform) $(mandirform)/sudoers_timestamp.$(mansectform) $(mandirform)/sudoers.ldap.$(mansectform); do \ if test -f $(DESTDIR)$$f; then \ From 049430ee5bafbb068c6b044b2f1793290d0e85de Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 3 Sep 2020 06:44:43 -0600 Subject: [PATCH 071/113] Only install man pages for logsrvd and python plugin if we build them. GitHub issue #58 --- configure | 12 ++++++++++-- configure.ac | 10 ++++++++-- doc/Makefile.in | 8 ++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 103cf224f3..c4f8da94e3 100755 --- a/configure +++ b/configure @@ -737,11 +737,13 @@ logpath log_dir iolog_dir PPFILES +LIBLOGSRV LOGSRVD_CONF LOGSRVD_SRC -LIBLOGSRV LOGSRV_SRC +LOGSRV PYTHON_PLUGIN_SRC +PYTHON_PLUGIN SIGNAME devsearch DIGEST @@ -3133,6 +3135,8 @@ $as_echo "$as_me: Configuring Sudo version $PACKAGE_VERSION" >&6;} + + @@ -3231,9 +3235,11 @@ shadow_funcs= shadow_libs= TMPFILES_D= CONFIGURE_ARGS="$@" +PYTHON_PLUGIN=# +LOGSRVD= LOGSRVD_SRC=logsrvd -LOGSRVD_CONF='$(srcdir)/sudo_logsrvd.conf' LOGSRV_SRC=lib/logsrv +LOGSRVD_CONF='$(srcdir)/sudo_logsrvd.conf' LIBLOGSRV='$(top_builddir)/lib/logsrv/liblogsrv.la' PPFILES='$(srcdir)/etc/sudo.pp' @@ -6742,6 +6748,7 @@ if test "${enable_log_server+set}" = set; then : yes) ;; no) + LOGSRV=# LOGSRVD_SRC= LOGSRVD_CONF= ;; @@ -19188,6 +19195,7 @@ fi PPFILES="$PPFILES "'$(srcdir)/etc/sudo-python.pp' PYTHON_PLUGIN_SRC=plugins/python + PYTHON_PLUGIN= ac_config_files="$ac_config_files $PYTHON_PLUGIN_SRC/Makefile" fi diff --git a/configure.ac b/configure.ac index 6d3744f20d..49e8bfdf38 100644 --- a/configure.ac +++ b/configure.ac @@ -114,11 +114,13 @@ AC_SUBST([exampledir]) AC_SUBST([DIGEST]) AC_SUBST([devsearch]) AC_SUBST([SIGNAME]) +AC_SUBST([PYTHON_PLUGIN]) AC_SUBST([PYTHON_PLUGIN_SRC]) +AC_SUBST([LOGSRV]) AC_SUBST([LOGSRV_SRC]) -AC_SUBST([LIBLOGSRV]) AC_SUBST([LOGSRVD_SRC]) AC_SUBST([LOGSRVD_CONF]) +AC_SUBST([LIBLOGSRV]) AC_SUBST([PPFILES]) dnl @@ -268,9 +270,11 @@ shadow_funcs= shadow_libs= TMPFILES_D= CONFIGURE_ARGS="$@" +PYTHON_PLUGIN=# +LOGSRVD= LOGSRVD_SRC=logsrvd -LOGSRVD_CONF='$(srcdir)/sudo_logsrvd.conf' LOGSRV_SRC=lib/logsrv +LOGSRVD_CONF='$(srcdir)/sudo_logsrvd.conf' LIBLOGSRV='$(top_builddir)/lib/logsrv/liblogsrv.la' PPFILES='$(srcdir)/etc/sudo.pp' @@ -1640,6 +1644,7 @@ AC_ARG_ENABLE(log-server, yes) ;; no) + LOGSRV=# LOGSRVD_SRC= LOGSRVD_CONF= ;; @@ -2593,6 +2598,7 @@ if test ${USE_PYTHON-'no'} = "yes"; then PPFILES="$PPFILES "'$(srcdir)/etc/sudo-python.pp' PYTHON_PLUGIN_SRC=plugins/python + PYTHON_PLUGIN= AC_CONFIG_FILES([$PYTHON_PLUGIN_SRC/Makefile]) fi diff --git a/doc/Makefile.in b/doc/Makefile.in index fb25bea0b8..e5e89de362 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -348,15 +348,15 @@ install-doc: install-dirs @LDAP@for f in $(OTHER_DOCS_LDAP); do $(INSTALL) $(INSTALL_OWNER) -m 0644 $$f $(DESTDIR)$(docdir); done $(INSTALL) $(INSTALL_OWNER) -m 0644 ./cvtsudoers.$(mantype) $(DESTDIR)$(mandirexe)/cvtsudoers.1 $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo.$(mantype) $(DESTDIR)$(mandirsu)/sudo.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrvd.$(mantype) $(DESTDIR)$(mandirsu)/sudo_logsrvd.$(mansectsu) + @LOGSRV@$(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrvd.$(mantype) $(DESTDIR)$(mandirsu)/sudo_logsrvd.$(mansectsu) $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_plugin.$(mantype) $(DESTDIR)$(mandirsu)/sudo_plugin.$(mansectsu) - $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_plugin_python.$(mantype) $(DESTDIR)$(mandirsu)/sudo_plugin_python.$(mansectsu) + @PYTHON_PLUGIN@$(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_plugin_python.$(mantype) $(DESTDIR)$(mandirsu)/sudo_plugin_python.$(mansectsu) $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_sendlog.$(mantype) $(DESTDIR)$(mandirsu)/sudo_sendlog.$(mansectsu) $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoreplay.$(mantype) $(DESTDIR)$(mandirsu)/sudoreplay.$(mansectsu) $(INSTALL) $(INSTALL_OWNER) -m 0644 ./visudo.$(mantype) $(DESTDIR)$(mandirsu)/visudo.$(mansectsu) $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo.conf.$(mantype) $(DESTDIR)$(mandirform)/sudo.conf.$(mansectform) - $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrv.proto.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrv.proto.$(mansectform) - $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrvd.conf.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrvd.conf.$(mansectform) + @LOGSRV@$(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrv.proto.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrv.proto.$(mansectform) + @LOGSRV@$(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudo_logsrvd.conf.$(mantype) $(DESTDIR)$(mandirform)/sudo_logsrvd.conf.$(mansectform) $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoers.$(mantype) $(DESTDIR)$(mandirform)/sudoers.$(mansectform) $(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoers_timestamp.$(mantype) $(DESTDIR)$(mandirform)/sudoers_timestamp.$(mansectform) @LDAP@$(INSTALL) $(INSTALL_OWNER) -m 0644 ./sudoers.ldap.$(mantype) $(DESTDIR)$(mandirform)/sudoers.ldap.$(mansectform) From 01063430326b67366e4e900d6457d85a64851cab Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 3 Sep 2020 10:20:28 -0600 Subject: [PATCH 072/113] Use correct size for curlim and maxlim. --- src/limits.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/limits.c b/src/limits.c index ec0c4eded1..9ce475a8d1 100644 --- a/src/limits.c +++ b/src/limits.c @@ -352,8 +352,8 @@ serialize_limits(char **info, size_t info_max) for (idx = 0; idx < nitems(saved_limits); idx++) { const struct saved_limit *lim = &saved_limits[idx]; const struct rlimit *rl = &lim->oldlimit; - char curlim[(((sizeof(int) * 8) + 2) / 3) + 2]; - char maxlim[(((sizeof(int) * 8) + 2) / 3) + 2]; + char curlim[(((sizeof(long long) * 8) + 2) / 3) + 2]; + char maxlim[(((sizeof(long long) * 8) + 2) / 3) + 2]; if (!lim->saved) continue; From 24d5ee5893965632600a496e3cddd840b7bd0a9c Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 3 Sep 2020 13:07:38 -0600 Subject: [PATCH 073/113] Fix memory leak on error found by the clang 10.01 analyzer. --- plugins/sudoers/visudo.c | 69 ++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/plugins/sudoers/visudo.c b/plugins/sudoers/visudo.c index 84c93300e7..f8e7c96c1b 100644 --- a/plugins/sudoers/visudo.c +++ b/plugins/sudoers/visudo.c @@ -987,50 +987,65 @@ lock_sudoers(struct sudoersfile *entry) } /* - * Used to open (and lock) the initial sudoers file and to also open - * any subsequent files #included via a callback from the parser. + * Open (and lock) a new sudoers file. + * Returns a new struct sudoersfile on success or NULL on failure. */ -FILE * -open_sudoers(const char *path, bool doedit, bool *keepopen) +static struct sudoersfile * +new_sudoers(const char *path, bool doedit) { struct sudoersfile *entry; struct stat sb; - FILE *fp; int open_flags; - debug_decl(open_sudoers, SUDOERS_DEBUG_UTIL); + debug_decl(new_sudoersfile, SUDOERS_DEBUG_UTIL); if (checkonly) open_flags = O_RDONLY; else open_flags = O_RDWR | O_CREAT; + entry = calloc(1, sizeof(*entry)); + if (entry == NULL || (entry->path = strdup(path)) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + /* entry->tpath = NULL; */ + /* entry->modified = false; */ + entry->doedit = doedit; + entry->fd = open(entry->path, open_flags, sudoers_mode); + if (entry->fd == -1 || fstat(entry->fd, &sb) == -1) { + sudo_warn("%s", entry->path); + goto bad; + } + if (!S_ISREG(sb.st_mode)) { + sudo_warnx(U_("%s is not a regular file"), entry->path); + goto bad; + } + if (!checkonly && !lock_sudoers(entry)) + goto bad; + debug_return_ptr(entry); +bad: + if (entry->fd != -1) + close(entry->fd); + free(entry); + debug_return_ptr(NULL); +} + +/* + * Used to open (and lock) the initial sudoers file and to also open + * any subsequent files #included via a callback from the parser. + */ +FILE * +open_sudoers(const char *path, bool doedit, bool *keepopen) +{ + struct sudoersfile *entry; + FILE *fp; + debug_decl(open_sudoers, SUDOERS_DEBUG_UTIL); + /* Check for existing entry */ TAILQ_FOREACH(entry, &sudoerslist, entries) { if (strcmp(path, entry->path) == 0) break; } if (entry == NULL) { - entry = calloc(1, sizeof(*entry)); - if (entry == NULL || (entry->path = strdup(path)) == NULL) - sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - /* entry->tpath = NULL; */ - /* entry->modified = false; */ - entry->doedit = doedit; - entry->fd = open(entry->path, open_flags, sudoers_mode); - if (entry->fd == -1 || fstat(entry->fd, &sb) == -1) { - sudo_warn("%s", entry->path); - if (entry->fd != -1) - close(entry->fd); - free(entry); - debug_return_ptr(NULL); - } - if (!S_ISREG(sb.st_mode)) { - sudo_warnx(U_("%s is not a regular file"), entry->path); - close(entry->fd); - free(entry); - debug_return_ptr(NULL); - } - if (!checkonly && !lock_sudoers(entry)) + if ((entry = new_sudoers(path, doedit)) == NULL) debug_return_ptr(NULL); if ((fp = fdopen(entry->fd, "r")) == NULL) sudo_fatal("%s", entry->path); From 8a8a24560e8c20f8432e5a0f48f15e73ccee92ad Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 3 Sep 2020 13:23:27 -0600 Subject: [PATCH 074/113] Fix copy and paste error; Coverity CID 214191 --- plugins/sudoers/gram.c | 2 +- plugins/sudoers/gram.y | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/gram.c b/plugins/sudoers/gram.c index 564378018d..6c87f80ef3 100644 --- a/plugins/sudoers/gram.c +++ b/plugins/sudoers/gram.c @@ -3414,7 +3414,7 @@ free_privilege(struct privilege *priv) free(cs->runcwd); } if (cs->runchroot != runchroot) { - runcwd = cs->runchroot; + runchroot = cs->runchroot; free(cs->runchroot); } #ifdef HAVE_SELINUX diff --git a/plugins/sudoers/gram.y b/plugins/sudoers/gram.y index e8923d3b84..6de76f9b3d 100644 --- a/plugins/sudoers/gram.y +++ b/plugins/sudoers/gram.y @@ -1323,7 +1323,7 @@ free_privilege(struct privilege *priv) free(cs->runcwd); } if (cs->runchroot != runchroot) { - runcwd = cs->runchroot; + runchroot = cs->runchroot; free(cs->runchroot); } #ifdef HAVE_SELINUX From 24b35393e3c38c483efb10c8e45a3ba0d1522bf5 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 10:59:41 -0600 Subject: [PATCH 075/113] Add sudoers_audit to sudo_sudoers_plugin_symbols[] array. Fixes loading of sudoers_audit when configured with --enable-static-sudoers. GitHub issue #61 --- src/preload.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/preload.c b/src/preload.c index 01d30ccdd6..250ee7efb6 100644 --- a/src/preload.c +++ b/src/preload.c @@ -42,6 +42,7 @@ extern struct policy_plugin sudoers_policy; extern struct io_plugin sudoers_io; +extern struct io_plugin sudoers_audit; static struct sudo_preload_symbol sudo_rtld_default_symbols[] = { # ifdef HAVE_GSS_KRB5_CCACHE_NAME @@ -54,6 +55,7 @@ static struct sudo_preload_symbol sudo_rtld_default_symbols[] = { static struct sudo_preload_symbol sudo_sudoers_plugin_symbols[] = { { "sudoers_policy", (void *)&sudoers_policy }, { "sudoers_io", (void *)&sudoers_io }, + { "sudoers_audit", (void *)&sudoers_audit }, { (const char *)0, (void *)0 } }; From eaa95acb316696283a740c4aa67ab92ac405c831 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 13:17:51 -0600 Subject: [PATCH 076/113] Post-process protoc-c files to avoid depending on anonymous unions. Based on a patch from Michael Osipov. GitHub issue #60 --- MANIFEST | 1 + include/log_server.pb-c.h | 6 ++-- lib/logsrv/Makefile.in | 2 ++ lib/logsrv/log_server.pb-c.c | 44 ++++++++++++++-------------- logsrvd/eventlog.c | 6 ++-- logsrvd/iolog_writer.c | 50 ++++++++++++++++---------------- logsrvd/logsrvd.c | 34 +++++++++++----------- logsrvd/sendlog.c | 50 ++++++++++++++++---------------- plugins/sudoers/iolog_client.c | 52 +++++++++++++++++----------------- scripts/unanon | 50 ++++++++++++++++++++++++++++++++ 10 files changed, 174 insertions(+), 121 deletions(-) create mode 100755 scripts/unanon diff --git a/MANIFEST b/MANIFEST index 4bea0a5f46..2cfcd80da2 100644 --- a/MANIFEST +++ b/MANIFEST @@ -981,6 +981,7 @@ scripts/mkdep.pl scripts/mkinstalldirs scripts/mkpkg scripts/pp +scripts/unanon src/Makefile.in src/conversation.c src/copy_file.c diff --git a/include/log_server.pb-c.h b/include/log_server.pb-c.h index e3b1fbb517..f18e0e3aef 100644 --- a/include/log_server.pb-c.h +++ b/include/log_server.pb-c.h @@ -78,7 +78,7 @@ struct _ClientMessage ChangeWindowSize *winsize_event; CommandSuspend *suspend_event; ClientHello *hello_msg; - }; + } u; }; #define CLIENT_MESSAGE__INIT \ { PROTOBUF_C_MESSAGE_INIT (&client_message__descriptor) \ @@ -170,7 +170,7 @@ struct _InfoMessage char *strval; InfoMessage__StringList *strlistval; InfoMessage__NumberList *numlistval; - }; + } u; }; #define INFO_MESSAGE__INIT \ { PROTOBUF_C_MESSAGE_INIT (&info_message__descriptor) \ @@ -398,7 +398,7 @@ struct _ServerMessage * abort message, kill command */ char *abort; - }; + } u; }; #define SERVER_MESSAGE__INIT \ { PROTOBUF_C_MESSAGE_INIT (&server_message__descriptor) \ diff --git a/lib/logsrv/Makefile.in b/lib/logsrv/Makefile.in index 63d1d2444d..b2476792f7 100644 --- a/lib/logsrv/Makefile.in +++ b/lib/logsrv/Makefile.in @@ -111,6 +111,8 @@ $(devdir)/log_server.pb-c.c: $(srcdir)/log_server.proto @if [ -n "$(DEVEL)" ]; then \ cmd='protoc-c --c_out=$(devdir) --proto_path=$(srcdir) $(srcdir)/log_server.proto'; \ echo "$$cmd"; eval $$cmd; \ + cmd='$(scriptdir)/unanon $(devdir)/log_server.pb-c.h $(devdir)/log_server.pb-c.c'; \ + echo "$$cmd"; eval $$cmd; \ if [ "$(devdir)" == "$(srcdir)" ]; then \ cmd='mv -f $(devdir)/log_server.pb-c.h $(incdir)/log_server.pb-c.h'; \ else \ diff --git a/lib/logsrv/log_server.pb-c.c b/lib/logsrv/log_server.pb-c.c index fb13a5343c..6d5bbd1c85 100644 --- a/lib/logsrv/log_server.pb-c.c +++ b/lib/logsrv/log_server.pb-c.c @@ -657,7 +657,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, accept_msg), + offsetof(ClientMessage, u.accept_msg), &accept_message__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -669,7 +669,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, reject_msg), + offsetof(ClientMessage, u.reject_msg), &reject_message__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -681,7 +681,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, exit_msg), + offsetof(ClientMessage, u.exit_msg), &exit_message__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -693,7 +693,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, restart_msg), + offsetof(ClientMessage, u.restart_msg), &restart_message__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -705,7 +705,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, alert_msg), + offsetof(ClientMessage, u.alert_msg), &alert_message__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -717,7 +717,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, ttyin_buf), + offsetof(ClientMessage, u.ttyin_buf), &io_buffer__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -729,7 +729,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, ttyout_buf), + offsetof(ClientMessage, u.ttyout_buf), &io_buffer__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -741,7 +741,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, stdin_buf), + offsetof(ClientMessage, u.stdin_buf), &io_buffer__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -753,7 +753,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, stdout_buf), + offsetof(ClientMessage, u.stdout_buf), &io_buffer__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -765,7 +765,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, stderr_buf), + offsetof(ClientMessage, u.stderr_buf), &io_buffer__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -777,7 +777,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, winsize_event), + offsetof(ClientMessage, u.winsize_event), &change_window_size__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -789,7 +789,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, suspend_event), + offsetof(ClientMessage, u.suspend_event), &command_suspend__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -801,7 +801,7 @@ static const ProtobufCFieldDescriptor client_message__field_descriptors[13] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ClientMessage, type_case), - offsetof(ClientMessage, hello_msg), + offsetof(ClientMessage, u.hello_msg), &client_hello__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1041,7 +1041,7 @@ static const ProtobufCFieldDescriptor info_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_INT64, offsetof(InfoMessage, value_case), - offsetof(InfoMessage, numval), + offsetof(InfoMessage, u.numval), NULL, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1053,7 +1053,7 @@ static const ProtobufCFieldDescriptor info_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_STRING, offsetof(InfoMessage, value_case), - offsetof(InfoMessage, strval), + offsetof(InfoMessage, u.strval), NULL, &protobuf_c_empty_string, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1065,7 +1065,7 @@ static const ProtobufCFieldDescriptor info_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(InfoMessage, value_case), - offsetof(InfoMessage, strlistval), + offsetof(InfoMessage, u.strlistval), &info_message__string_list__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1077,7 +1077,7 @@ static const ProtobufCFieldDescriptor info_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(InfoMessage, value_case), - offsetof(InfoMessage, numlistval), + offsetof(InfoMessage, u.numlistval), &info_message__number_list__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1592,7 +1592,7 @@ static const ProtobufCFieldDescriptor server_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ServerMessage, type_case), - offsetof(ServerMessage, hello), + offsetof(ServerMessage, u.hello), &server_hello__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1604,7 +1604,7 @@ static const ProtobufCFieldDescriptor server_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_MESSAGE, offsetof(ServerMessage, type_case), - offsetof(ServerMessage, commit_point), + offsetof(ServerMessage, u.commit_point), &time_spec__descriptor, NULL, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1616,7 +1616,7 @@ static const ProtobufCFieldDescriptor server_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_STRING, offsetof(ServerMessage, type_case), - offsetof(ServerMessage, log_id), + offsetof(ServerMessage, u.log_id), NULL, &protobuf_c_empty_string, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1628,7 +1628,7 @@ static const ProtobufCFieldDescriptor server_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_STRING, offsetof(ServerMessage, type_case), - offsetof(ServerMessage, error), + offsetof(ServerMessage, u.error), NULL, &protobuf_c_empty_string, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ @@ -1640,7 +1640,7 @@ static const ProtobufCFieldDescriptor server_message__field_descriptors[5] = PROTOBUF_C_LABEL_NONE, PROTOBUF_C_TYPE_STRING, offsetof(ServerMessage, type_case), - offsetof(ServerMessage, abort), + offsetof(ServerMessage, u.abort), NULL, &protobuf_c_empty_string, 0 | PROTOBUF_C_FIELD_FLAG_ONEOF, /* flags */ diff --git a/logsrvd/eventlog.c b/logsrvd/eventlog.c index 3566cb9ce0..1f1b2080fa 100644 --- a/logsrvd/eventlog.c +++ b/logsrvd/eventlog.c @@ -371,18 +371,18 @@ format_json(ClientMessage__TypeCase event_type, const char *reason, switch (info->value_case) { case INFO_MESSAGE__VALUE_NUMVAL: json_value.type = JSON_NUMBER; - json_value.u.number = info->numval; + json_value.u.number = info->u.numval; if (!sudo_json_add_value(&json, info->key, &json_value)) goto bad; break; case INFO_MESSAGE__VALUE_STRVAL: json_value.type = JSON_STRING; - json_value.u.string = info->strval; + json_value.u.string = info->u.strval; if (!sudo_json_add_value(&json, info->key, &json_value)) goto bad; break; case INFO_MESSAGE__VALUE_STRLISTVAL: { - InfoMessage__StringList *strlist = info->strlistval; + InfoMessage__StringList *strlist = info->u.strlistval; size_t n; if (!sudo_json_open_array(&json, info->key)) diff --git a/logsrvd/iolog_writer.c b/logsrvd/iolog_writer.c index c1128f8c60..c578b2554e 100644 --- a/logsrvd/iolog_writer.c +++ b/logsrvd/iolog_writer.c @@ -172,17 +172,17 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, if (!has_numval(info)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "columns specified but not a number"); - } else if (info->numval <= 0 || info->numval > INT_MAX) { + } else if (info->u.numval <= 0 || info->u.numval > INT_MAX) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "columns (%" PRId64 ") out of range", info->numval); + "columns (%" PRId64 ") out of range", info->u.numval); } else { - details->columns = info->numval; + details->columns = info->u.numval; } continue; } if (strcmp(key, "command") == 0) { if (has_strval(info)) { - if ((details->command = strdup(info->strval)) == NULL) { + if ((details->command = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -200,11 +200,11 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, if (!has_numval(info)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "lines specified but not a number"); - } else if (info->numval <= 0 || info->numval > INT_MAX) { + } else if (info->u.numval <= 0 || info->u.numval > INT_MAX) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "lines (%" PRId64 ") out of range", info->numval); + "lines (%" PRId64 ") out of range", info->u.numval); } else { - details->lines = info->numval; + details->lines = info->u.numval; } continue; } @@ -212,10 +212,10 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, case 'r': if (strcmp(key, "runargv") == 0) { if (has_strlistval(info)) { - details->argv = strlist_copy(info->strlistval); + details->argv = strlist_copy(info->u.strlistval); if (details->argv == NULL) goto done; - details->argc = info->strlistval->n_strings; + details->argc = info->u.strlistval->n_strings; } else { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "runargv specified but not a string list"); @@ -224,7 +224,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, } if (strcmp(key, "runchroot") == 0) { if (has_strval(info)) { - if ((details->runchroot = strdup(info->strval)) == NULL) { + if ((details->runchroot = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -238,7 +238,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, } if (strcmp(key, "runcwd") == 0) { if (has_strval(info)) { - if ((details->runcwd = strdup(info->strval)) == NULL) { + if ((details->runcwd = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -252,7 +252,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, } if (strcmp(key, "runenv") == 0) { if (has_strlistval(info)) { - details->envp = strlist_copy(info->strlistval); + details->envp = strlist_copy(info->u.strlistval); if (details->envp == NULL) goto done; } else { @@ -265,17 +265,17 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, if (!has_numval(info)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "rungid specified but not a number"); - } else if (info->numval < 0 || info->numval > INT_MAX) { + } else if (info->u.numval < 0 || info->u.numval > INT_MAX) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "rungid (%" PRId64 ") out of range", info->numval); + "rungid (%" PRId64 ") out of range", info->u.numval); } else { - details->rungid = info->numval; + details->rungid = info->u.numval; } continue; } if (strcmp(key, "rungroup") == 0) { if (has_strval(info)) { - if ((details->rungroup = strdup(info->strval)) == NULL) { + if ((details->rungroup = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -291,17 +291,17 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, if (!has_numval(info)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "runuid specified but not a number"); - } else if (info->numval < 0 || info->numval > INT_MAX) { + } else if (info->u.numval < 0 || info->u.numval > INT_MAX) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, - "runuid (%" PRId64 ") out of range", info->numval); + "runuid (%" PRId64 ") out of range", info->u.numval); } else { - details->runuid = info->numval; + details->runuid = info->u.numval; } continue; } if (strcmp(key, "runuser") == 0) { if (has_strval(info)) { - if ((details->runuser = strdup(info->strval)) == NULL) { + if ((details->runuser = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -317,7 +317,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, case 's': if (strcmp(key, "submitcwd") == 0) { if (has_strval(info)) { - if ((details->cwd = strdup(info->strval)) == NULL) { + if ((details->cwd = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -331,7 +331,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, } if (strcmp(key, "submitgroup") == 0) { if (has_strval(info)) { - if ((details->submitgroup = strdup(info->strval)) == NULL) { + if ((details->submitgroup = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -345,7 +345,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, } if (strcmp(key, "submithost") == 0) { if (has_strval(info)) { - if ((details->submithost = strdup(info->strval)) == NULL) { + if ((details->submithost = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -359,7 +359,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, } if (strcmp(key, "submituser") == 0) { if (has_strval(info)) { - if ((details->submituser = strdup(info->strval)) == NULL) { + if ((details->submituser = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); @@ -375,7 +375,7 @@ iolog_details_fill(struct iolog_details *details, TimeSpec *submit_time, case 't': if (strcmp(key, "ttyname") == 0) { if (has_strval(info)) { - if ((details->ttyname = strdup(info->strval)) == NULL) { + if ((details->ttyname = strdup(info->u.strval)) == NULL) { sudo_debug_printf( SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "strdup"); diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index dcce1dd865..62e7d5e7a1 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -186,7 +186,7 @@ fmt_hello_message(struct connection_buffer *buf, bool tls) /* TODO: implement redirect and servers array. */ hello.server_id = (char *)server_id; - msg.hello = &hello; + msg.u.hello = &hello; msg.type_case = SERVER_MESSAGE__TYPE_HELLO; debug_return_bool(fmt_server_message(buf, &msg)); @@ -198,7 +198,7 @@ fmt_log_id_message(const char *id, struct connection_buffer *buf) ServerMessage msg = SERVER_MESSAGE__INIT; debug_decl(fmt_log_id_message, SUDO_DEBUG_UTIL); - msg.log_id = (char *)id; + msg.u.log_id = (char *)id; msg.type_case = SERVER_MESSAGE__TYPE_LOG_ID; debug_return_bool(fmt_server_message(buf, &msg)); @@ -210,7 +210,7 @@ fmt_error_message(const char *errstr, struct connection_buffer *buf) ServerMessage msg = SERVER_MESSAGE__INIT; debug_decl(fmt_error_message, SUDO_DEBUG_UTIL); - msg.error = (char *)errstr; + msg.u.error = (char *)errstr; msg.type_case = SERVER_MESSAGE__TYPE_ERROR; debug_return_bool(fmt_server_message(buf, &msg)); @@ -586,43 +586,43 @@ handle_client_message(uint8_t *buf, size_t len, switch (msg->type_case) { case CLIENT_MESSAGE__TYPE_ACCEPT_MSG: - ret = handle_accept(msg->accept_msg, closure); + ret = handle_accept(msg->u.accept_msg, closure); break; case CLIENT_MESSAGE__TYPE_REJECT_MSG: - ret = handle_reject(msg->reject_msg, closure); + ret = handle_reject(msg->u.reject_msg, closure); break; case CLIENT_MESSAGE__TYPE_EXIT_MSG: - ret = handle_exit(msg->exit_msg, closure); + ret = handle_exit(msg->u.exit_msg, closure); break; case CLIENT_MESSAGE__TYPE_RESTART_MSG: - ret = handle_restart(msg->restart_msg, closure); + ret = handle_restart(msg->u.restart_msg, closure); break; case CLIENT_MESSAGE__TYPE_ALERT_MSG: - ret = handle_alert(msg->alert_msg, closure); + ret = handle_alert(msg->u.alert_msg, closure); break; case CLIENT_MESSAGE__TYPE_TTYIN_BUF: - ret = handle_iobuf(IOFD_TTYIN, msg->ttyin_buf, closure); + ret = handle_iobuf(IOFD_TTYIN, msg->u.ttyin_buf, closure); break; case CLIENT_MESSAGE__TYPE_TTYOUT_BUF: - ret = handle_iobuf(IOFD_TTYOUT, msg->ttyout_buf, closure); + ret = handle_iobuf(IOFD_TTYOUT, msg->u.ttyout_buf, closure); break; case CLIENT_MESSAGE__TYPE_STDIN_BUF: - ret = handle_iobuf(IOFD_STDIN, msg->stdin_buf, closure); + ret = handle_iobuf(IOFD_STDIN, msg->u.stdin_buf, closure); break; case CLIENT_MESSAGE__TYPE_STDOUT_BUF: - ret = handle_iobuf(IOFD_STDOUT, msg->stdout_buf, closure); + ret = handle_iobuf(IOFD_STDOUT, msg->u.stdout_buf, closure); break; case CLIENT_MESSAGE__TYPE_STDERR_BUF: - ret = handle_iobuf(IOFD_STDERR, msg->stderr_buf, closure); + ret = handle_iobuf(IOFD_STDERR, msg->u.stderr_buf, closure); break; case CLIENT_MESSAGE__TYPE_WINSIZE_EVENT: - ret = handle_winsize(msg->winsize_event, closure); + ret = handle_winsize(msg->u.winsize_event, closure); break; case CLIENT_MESSAGE__TYPE_SUSPEND_EVENT: - ret = handle_suspend(msg->suspend_event, closure); + ret = handle_suspend(msg->u.suspend_event, closure); break; case CLIENT_MESSAGE__TYPE_HELLO_MSG: - ret = handle_client_hello(msg->hello_msg, closure); + ret = handle_client_hello(msg->u.hello_msg, closure); break; default: sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, @@ -952,7 +952,7 @@ server_commit_cb(int unused, int what, void *v) /* Send the client an acknowledgement of what has been committed to disk. */ commit_point.tv_sec = closure->elapsed_time.tv_sec; commit_point.tv_nsec = closure->elapsed_time.tv_nsec; - msg.commit_point = &commit_point; + msg.u.commit_point = &commit_point; msg.type_case = SERVER_MESSAGE__TYPE_COMMIT_POINT; sudo_debug_printf(SUDO_DEBUG_INFO, "%s: sending commit point [%lld, %ld]", diff --git a/logsrvd/sendlog.c b/logsrvd/sendlog.c index 8db72c6957..993fa0492c 100644 --- a/logsrvd/sendlog.c +++ b/logsrvd/sendlog.c @@ -332,7 +332,7 @@ fmt_client_hello(struct client_closure *closure) hello_msg.client_id = "Sudo Sendlog " PACKAGE_VERSION; /* Schedule ClientMessage */ - client_msg.hello_msg = &hello_msg; + client_msg.u.hello_msg = &hello_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_HELLO_MSG; ret = fmt_client_message(&closure->write_buf, &client_msg); if (ret) { @@ -354,8 +354,8 @@ free_info_messages(InfoMessage **info_msgs, size_t n_info_msgs) while (n_info_msgs-- > 0) { if (info_msgs[n_info_msgs]->value_case == INFO_MESSAGE__VALUE_STRLISTVAL) { /* Only strlistval was dynamically allocated */ - free(info_msgs[n_info_msgs]->strlistval->strings); - free(info_msgs[n_info_msgs]->strlistval); + free(info_msgs[n_info_msgs]->u.strlistval->strings); + free(info_msgs[n_info_msgs]->u.strlistval); } free(info_msgs[n_info_msgs]); } @@ -398,55 +398,55 @@ fmt_info_messages(struct iolog_info *log_info, char *hostname, /* Fill in info_msgs */ n = 0; info_msgs[n]->key = "command"; - info_msgs[n]->strval = log_info->cmd; + info_msgs[n]->u.strval = log_info->cmd; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; info_msgs[n]->key = "columns"; - info_msgs[n]->numval = log_info->cols; + info_msgs[n]->u.numval = log_info->cols; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; n++; info_msgs[n]->key = "lines"; - info_msgs[n]->numval = log_info->lines; + info_msgs[n]->u.numval = log_info->lines; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; n++; info_msgs[n]->key = "runargv"; - info_msgs[n]->strlistval = runargv; + info_msgs[n]->u.strlistval = runargv; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; runargv = NULL; n++; if (log_info->runas_group != NULL) { info_msgs[n]->key = "rungroup"; - info_msgs[n]->strval = log_info->runas_group; + info_msgs[n]->u.strval = log_info->runas_group; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; } info_msgs[n]->key = "runuser"; - info_msgs[n]->strval = log_info->runas_user; + info_msgs[n]->u.strval = log_info->runas_user; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; info_msgs[n]->key = "submitcwd"; - info_msgs[n]->strval = log_info->cwd; + info_msgs[n]->u.strval = log_info->cwd; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; info_msgs[n]->key = "submithost"; - info_msgs[n]->strval = hostname; + info_msgs[n]->u.strval = hostname; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; info_msgs[n]->key = "submituser"; - info_msgs[n]->strval = log_info->user; + info_msgs[n]->u.strval = log_info->user; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; info_msgs[n]->key = "ttyname"; - info_msgs[n]->strval = log_info->tty; + info_msgs[n]->u.strval = log_info->tty; info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; @@ -515,7 +515,7 @@ fmt_reject_message(struct client_closure *closure) "%s: sending RejectMessage, array length %zu", __func__, n_info_msgs); /* Schedule ClientMessage */ - client_msg.reject_msg = &reject_msg; + client_msg.u.reject_msg = &reject_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_REJECT_MSG; ret = fmt_client_message(&closure->write_buf, &client_msg); if (ret) { @@ -574,7 +574,7 @@ fmt_accept_message(struct client_closure *closure) "%s: sending AcceptMessage, array length %zu", __func__, n_info_msgs); /* Schedule ClientMessage */ - client_msg.accept_msg = &accept_msg; + client_msg.u.accept_msg = &accept_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_ACCEPT_MSG; ret = fmt_client_message(&closure->write_buf, &client_msg); if (ret) { @@ -613,7 +613,7 @@ fmt_restart_message(struct client_closure *closure) restart_msg.log_id = (char *)closure->iolog_id; /* Schedule ClientMessage */ - client_msg.restart_msg = &restart_msg; + client_msg.u.restart_msg = &restart_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_RESTART_MSG; ret = fmt_client_message(&closure->write_buf, &client_msg); if (ret) { @@ -649,7 +649,7 @@ fmt_exit_message(struct client_closure *closure) __func__, exit_msg.exit_value); /* Send ClientMessage */ - client_msg.exit_msg = &exit_msg; + client_msg.u.exit_msg = &exit_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_EXIT_MSG; if (!fmt_client_message(&closure->write_buf, &client_msg)) goto done; @@ -691,7 +691,7 @@ fmt_io_buf(int type, struct client_closure *closure, iobuf_msg.data.len, type, io_buffer__get_packed_size(&iobuf_msg)); /* Send ClientMessage, it doesn't matter which IoBuffer we set. */ - client_msg.ttyout_buf = &iobuf_msg; + client_msg.u.ttyout_buf = &iobuf_msg; client_msg.type_case = type; if (!fmt_client_message(buf, &client_msg)) goto done; @@ -728,7 +728,7 @@ fmt_winsize(struct client_closure *closure, struct connection_buffer *buf) __func__, winsize_msg.rows, winsize_msg.cols); /* Send ClientMessage */ - client_msg.winsize_event = &winsize_msg; + client_msg.u.winsize_event = &winsize_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_WINSIZE_EVENT; if (!fmt_client_message(buf, &client_msg)) goto done; @@ -766,7 +766,7 @@ fmt_suspend(struct client_closure *closure, struct connection_buffer *buf) "%s: sending CommandSuspend, SIG%s", __func__, suspend_msg.signal); /* Send ClientMessage */ - client_msg.suspend_event = &suspend_msg; + client_msg.u.suspend_event = &suspend_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_SUSPEND_EVENT; if (!fmt_client_message(buf, &client_msg)) goto done; @@ -1014,7 +1014,7 @@ handle_server_message(uint8_t *buf, size_t len, switch (msg->type_case) { case SERVER_MESSAGE__TYPE_HELLO: - if ((ret = handle_server_hello(msg->hello, closure))) { + if ((ret = handle_server_hello(msg->u.hello, closure))) { if (sudo_timespecisset(&closure->restart)) { closure->state = SEND_RESTART; ret = fmt_restart_message(closure); @@ -1028,7 +1028,7 @@ handle_server_message(uint8_t *buf, size_t len, } break; case SERVER_MESSAGE__TYPE_COMMIT_POINT: - ret = handle_commit_point(msg->commit_point, closure); + ret = handle_commit_point(msg->u.commit_point, closure); if (sudo_timespeccmp(&closure->elapsed, &closure->committed, ==)) { sudo_ev_del(closure->evbase, closure->read_ev); closure->state = FINISHED; @@ -1037,14 +1037,14 @@ handle_server_message(uint8_t *buf, size_t len, } break; case SERVER_MESSAGE__TYPE_LOG_ID: - ret = handle_log_id(msg->log_id, closure); + ret = handle_log_id(msg->u.log_id, closure); break; case SERVER_MESSAGE__TYPE_ERROR: - ret = handle_server_error(msg->error, closure); + ret = handle_server_error(msg->u.error, closure); closure->state = ERROR; break; case SERVER_MESSAGE__TYPE_ABORT: - ret = handle_server_abort(msg->abort, closure); + ret = handle_server_abort(msg->u.abort, closure); closure->state = ERROR; break; default: diff --git a/plugins/sudoers/iolog_client.c b/plugins/sudoers/iolog_client.c index 85a90b73cd..f208def0dc 100644 --- a/plugins/sudoers/iolog_client.c +++ b/plugins/sudoers/iolog_client.c @@ -733,7 +733,7 @@ fmt_client_hello(struct client_closure *closure) hello_msg.client_id = "sudoers " PACKAGE_VERSION; /* Schedule ClientMessage */ - client_msg.hello_msg = &hello_msg; + client_msg.u.hello_msg = &hello_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_HELLO_MSG; ret = fmt_client_message(closure, &client_msg); @@ -805,38 +805,38 @@ fmt_accept_message(struct client_closure *closure) /* TODO: clientsid */ accept_msg.info_msgs[n]->key = "columns"; - accept_msg.info_msgs[n]->numval = details->cols; + accept_msg.info_msgs[n]->u.numval = details->cols; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; n++; accept_msg.info_msgs[n]->key = "command"; - accept_msg.info_msgs[n]->strval = (char *)details->command; + accept_msg.info_msgs[n]->u.strval = (char *)details->command; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; accept_msg.info_msgs[n]->key = "lines"; - accept_msg.info_msgs[n]->numval = details->lines; + accept_msg.info_msgs[n]->u.numval = details->lines; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; n++; accept_msg.info_msgs[n]->key = "runargv"; - accept_msg.info_msgs[n]->strlistval = &runargv; + accept_msg.info_msgs[n]->u.strlistval = &runargv; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; n++; accept_msg.info_msgs[n]->key = "runenv"; - accept_msg.info_msgs[n]->strlistval = &runenv; + accept_msg.info_msgs[n]->u.strlistval = &runenv; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRLISTVAL; n++; if (details->runas_gr!= NULL) { accept_msg.info_msgs[n]->key = "rungid"; - accept_msg.info_msgs[n]->numval = details->runas_gr->gr_gid; + accept_msg.info_msgs[n]->u.numval = details->runas_gr->gr_gid; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; n++; accept_msg.info_msgs[n]->key = "rungroup"; - accept_msg.info_msgs[n]->strval = details->runas_gr->gr_name; + accept_msg.info_msgs[n]->u.strval = details->runas_gr->gr_name; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; } @@ -845,32 +845,32 @@ fmt_accept_message(struct client_closure *closure) /* TODO - rungroups */ accept_msg.info_msgs[n]->key = "runuid"; - accept_msg.info_msgs[n]->numval = details->runas_pw->pw_uid; + accept_msg.info_msgs[n]->u.numval = details->runas_pw->pw_uid; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_NUMVAL; n++; accept_msg.info_msgs[n]->key = "runuser"; - accept_msg.info_msgs[n]->strval = details->runas_pw->pw_name; + accept_msg.info_msgs[n]->u.strval = details->runas_pw->pw_name; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; if (details->cwd != NULL) { accept_msg.info_msgs[n]->key = "submitcwd"; - accept_msg.info_msgs[n]->strval = (char *)details->cwd; + accept_msg.info_msgs[n]->u.strval = (char *)details->cwd; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; } if (details->runcwd != NULL) { accept_msg.info_msgs[n]->key = "runcwd"; - accept_msg.info_msgs[n]->strval = (char *)details->runcwd; + accept_msg.info_msgs[n]->u.strval = (char *)details->runcwd; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; } if (details->runchroot != NULL) { accept_msg.info_msgs[n]->key = "runchroot"; - accept_msg.info_msgs[n]->strval = (char *)details->runchroot; + accept_msg.info_msgs[n]->u.strval = (char *)details->runchroot; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; } @@ -882,20 +882,20 @@ fmt_accept_message(struct client_closure *closure) /* TODO - submitgroups */ accept_msg.info_msgs[n]->key = "submithost"; - accept_msg.info_msgs[n]->strval = (char *)details->host; + accept_msg.info_msgs[n]->u.strval = (char *)details->host; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; /* TODO - submituid */ accept_msg.info_msgs[n]->key = "submituser"; - accept_msg.info_msgs[n]->strval = (char *)details->user; + accept_msg.info_msgs[n]->u.strval = (char *)details->user; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; if (details->tty != NULL) { accept_msg.info_msgs[n]->key = "ttyname"; - accept_msg.info_msgs[n]->strval = (char *)details->tty; + accept_msg.info_msgs[n]->u.strval = (char *)details->tty; accept_msg.info_msgs[n]->value_case = INFO_MESSAGE__VALUE_STRVAL; n++; } @@ -907,7 +907,7 @@ fmt_accept_message(struct client_closure *closure) "%s: sending AcceptMessage, array length %zu", __func__, n); /* Schedule ClientMessage */ - client_msg.accept_msg = &accept_msg; + client_msg.u.accept_msg = &accept_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_ACCEPT_MSG; ret = fmt_client_message(closure, &client_msg); @@ -1009,7 +1009,7 @@ fmt_exit_message(struct client_closure *closure, int exit_status, int error) exit_msg.dumped_core ? "yes" : "no"); /* Send ClientMessage */ - client_msg.exit_msg = &exit_msg; + client_msg.u.exit_msg = &exit_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_EXIT_MSG; if (!fmt_client_message(closure, &client_msg)) goto done; @@ -1048,7 +1048,7 @@ fmt_io_buf(struct client_closure *closure, int type, const char *buf, iobuf_msg.data.len, type, io_buffer__get_packed_size(&iobuf_msg)); /* Schedule ClientMessage, it doesn't matter which IoBuffer we set. */ - client_msg.ttyout_buf = &iobuf_msg; + client_msg.u.ttyout_buf = &iobuf_msg; client_msg.type_case = type; if (!fmt_client_message(closure, &client_msg)) goto done; @@ -1085,7 +1085,7 @@ fmt_winsize(struct client_closure *closure, unsigned int lines, __func__, winsize_msg.rows, winsize_msg.cols); /* Send ClientMessage */ - client_msg.winsize_event = &winsize_msg; + client_msg.u.winsize_event = &winsize_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_WINSIZE_EVENT; if (!fmt_client_message(closure, &client_msg)) goto done; @@ -1120,7 +1120,7 @@ fmt_suspend(struct client_closure *closure, const char *signame, struct timespec "%s: sending CommandSuspend, SIG%s", __func__, suspend_msg.signal); /* Send ClientMessage */ - client_msg.suspend_event = &suspend_msg; + client_msg.u.suspend_event = &suspend_msg; client_msg.type_case = CLIENT_MESSAGE__TYPE_SUSPEND_EVENT; if (!fmt_client_message(closure, &client_msg)) goto done; @@ -1365,7 +1365,7 @@ handle_server_message(uint8_t *buf, size_t len, switch (msg->type_case) { case SERVER_MESSAGE__TYPE_HELLO: - if (handle_server_hello(msg->hello, closure)) { + if (handle_server_hello(msg->u.hello, closure)) { /* Format and schedule accept message. */ closure->state = SEND_ACCEPT; if ((ret = fmt_accept_message(closure))) { @@ -1378,17 +1378,17 @@ handle_server_message(uint8_t *buf, size_t len, } break; case SERVER_MESSAGE__TYPE_COMMIT_POINT: - ret = handle_commit_point(msg->commit_point, closure); + ret = handle_commit_point(msg->u.commit_point, closure); break; case SERVER_MESSAGE__TYPE_LOG_ID: - ret = handle_log_id(msg->log_id, closure); + ret = handle_log_id(msg->u.log_id, closure); break; case SERVER_MESSAGE__TYPE_ERROR: - ret = handle_server_error(msg->error, closure); + ret = handle_server_error(msg->u.error, closure); closure->state = ERROR; break; case SERVER_MESSAGE__TYPE_ABORT: - ret = handle_server_abort(msg->abort, closure); + ret = handle_server_abort(msg->u.abort, closure); closure->state = ERROR; break; default: diff --git a/scripts/unanon b/scripts/unanon new file mode 100755 index 0000000000..5336825470 --- /dev/null +++ b/scripts/unanon @@ -0,0 +1,50 @@ +#!/usr/bin/env perl +# +# Post-process files generated by protoc-c to remove anonymous unions. +# Works on the generated files but probably little else. + +use warnings; +use strict; + +sub unanon { + my $hfile = shift; + my $cfile = shift; + my ($fh, $content); + my %members; + + open $fh, "<", $hfile or die $!; + local $/; # enable localized slurp mode + $content = <$fh>; + close $fh; + + # Detect and replace anonymous unions in .h file. + # Assumes there is only one anonymous union in scope. + while ($content =~ s/^(struct\s+_(\w+)[^}]+)(union\s+{([^}]+)}\s*);/$1$3 u;/sm) { + my $s = $2; + my $u = $4; + $u =~ s:/\*((?!\*/).)*\*/::sg; + foreach (split(/\n+/, $u)) { + if (/^.*\s+\**([^;]+);/) { + $members{$1} = $s; + } + } + } + open $fh, ">", $hfile or die $!; + print $fh $content; + close $fh; + + # Replace anonymous union access in generated .c file. + open $fh, "<", $cfile or die $!; + $content = <$fh>; + close $fh; + + while (my ($key, $val) = each %members) { + # We only support access via offsetof() + $content =~ s/offsetof\($val, $key\)/offsetof($val, u.$key)/g; + } + open $fh, ">", $cfile or die $!; + print $fh $content; + close $fh; +} + +unanon(@ARGV); From 0576eb0105253c266da0429307c6b6d5bff3a594 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 13:52:46 -0600 Subject: [PATCH 077/113] Replace "static inline" with "static __inline" for older compilers. --- lib/logsrv/protobuf-c.c | 60 ++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/lib/logsrv/protobuf-c.c b/lib/logsrv/protobuf-c.c index 23fe295db8..fd406636b2 100644 --- a/lib/logsrv/protobuf-c.c +++ b/lib/logsrv/protobuf-c.c @@ -157,13 +157,13 @@ system_free(void *allocator_data, void *data) free(data); } -static inline void * +static __inline void * do_alloc(ProtobufCAllocator *allocator, size_t size) { return allocator->alloc(allocator->allocator_data, size); } -static inline void +static __inline void do_free(ProtobufCAllocator *allocator, void *data) { if (data != NULL) @@ -232,7 +232,7 @@ protobuf_c_buffer_simple_append(ProtobufCBuffer *buffer, * \return * Number of bytes required. */ -static inline size_t +static __inline size_t get_tag_size(uint32_t number) { if (number < (1UL << 4)) { @@ -257,7 +257,7 @@ get_tag_size(uint32_t number) * \return * Number of bytes required. */ -static inline size_t +static __inline size_t uint32_size(uint32_t v) { if (v < (1UL << 7)) { @@ -282,7 +282,7 @@ uint32_size(uint32_t v) * \return * Number of bytes required. */ -static inline size_t +static __inline size_t int32_size(int32_t v) { if (v < 0) { @@ -309,7 +309,7 @@ int32_size(int32_t v) * \return * ZigZag encoded integer. */ -static inline uint32_t +static __inline uint32_t zigzag32(int32_t v) { // Note: the right-shift must be arithmetic @@ -327,7 +327,7 @@ zigzag32(int32_t v) * \return * Number of bytes required. */ -static inline size_t +static __inline size_t sint32_size(int32_t v) { return uint32_size(zigzag32(v)); @@ -342,7 +342,7 @@ sint32_size(int32_t v) * \return * Number of bytes required. */ -static inline size_t +static __inline size_t uint64_size(uint64_t v) { uint32_t upper_v = (uint32_t) (v >> 32); @@ -373,7 +373,7 @@ uint64_size(uint64_t v) * \return * ZigZag encoded integer. */ -static inline uint64_t +static __inline uint64_t zigzag64(int64_t v) { // Note: the right-shift must be arithmetic @@ -391,7 +391,7 @@ zigzag64(int64_t v) * \return * Number of bytes required. */ -static inline size_t +static __inline size_t sint64_size(int64_t v) { return uint64_size(zigzag64(v)); @@ -692,7 +692,7 @@ repeated_field_get_packed_size(const ProtobufCFieldDescriptor *field, * \return * Number of bytes required. */ -static inline size_t +static __inline size_t unknown_field_get_packed_size(const ProtobufCMessageUnknownField *field) { return get_tag_size(field->tag) + field->len; @@ -771,7 +771,7 @@ size_t protobuf_c_message_get_packed_size(const ProtobufCMessage *message) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t uint32_pack(uint32_t value, uint8_t *out) { unsigned rv = 0; @@ -808,7 +808,7 @@ uint32_pack(uint32_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t int32_pack(int32_t value, uint8_t *out) { if (value < 0) { @@ -836,7 +836,7 @@ int32_pack(int32_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t sint32_pack(int32_t value, uint8_t *out) { return uint32_pack(zigzag32(value), out); @@ -893,7 +893,7 @@ uint64_pack(uint64_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t sint64_pack(int64_t value, uint8_t *out) { return uint64_pack(zigzag64(value), out); @@ -910,7 +910,7 @@ sint64_pack(int64_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t fixed32_pack(uint32_t value, void *out) { #if !defined(WORDS_BIGENDIAN) @@ -941,7 +941,7 @@ fixed32_pack(uint32_t value, void *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t fixed64_pack(uint64_t value, void *out) { #if !defined(WORDS_BIGENDIAN) @@ -966,7 +966,7 @@ fixed64_pack(uint64_t value, void *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t boolean_pack(protobuf_c_boolean value, uint8_t *out) { *out = value ? TRUE : FALSE; @@ -988,7 +988,7 @@ boolean_pack(protobuf_c_boolean value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t string_pack(const char *str, uint8_t *out) { if (str == NULL) { @@ -1013,7 +1013,7 @@ string_pack(const char *str, uint8_t *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t binary_data_pack(const ProtobufCBinaryData *bd, uint8_t *out) { size_t len = bd->len; @@ -1033,7 +1033,7 @@ binary_data_pack(const ProtobufCBinaryData *bd, uint8_t *out) * \return * Number of bytes written to `out`. */ -static inline size_t +static __inline size_t prefixed_message_pack(const ProtobufCMessage *message, uint8_t *out) { if (message == NULL) { @@ -1230,7 +1230,7 @@ unlabeled_field_pack(const ProtobufCFieldDescriptor *field, * \return * Size of the field. */ -static inline size_t +static __inline size_t sizeof_elt_in_repeated_array(ProtobufCType type) { switch (type) { @@ -2018,7 +2018,7 @@ protobuf_c_message_pack_to_buffer(const ProtobufCMessage *message, * @{ */ -static inline int +static __inline int int_range_lookup(unsigned n_ranges, const ProtobufCIntRange *ranges, int value) { unsigned n; @@ -2106,7 +2106,7 @@ struct _ScannedMember { const uint8_t *data; /**< Pointer to field data. */ }; -static inline size_t +static __inline size_t scan_length_prefixed_data(size_t len, const uint8_t *data, size_t *prefix_len_out) { @@ -2394,7 +2394,7 @@ count_packed_elements(ProtobufCType type, } } -static inline uint32_t +static __inline uint32_t parse_uint32(unsigned len, const uint8_t *data) { uint32_t rv = data[0] & 0x7f; @@ -2412,20 +2412,20 @@ parse_uint32(unsigned len, const uint8_t *data) return rv; } -static inline uint32_t +static __inline uint32_t parse_int32(unsigned len, const uint8_t *data) { return parse_uint32(len, data); } -static inline int32_t +static __inline int32_t unzigzag32(uint32_t v) { // Note: Using unsigned types prevents undefined behavior return (int32_t)((v >> 1) ^ (~(v & 1) + 1)); } -static inline uint32_t +static __inline uint32_t parse_fixed_uint32(const uint8_t *data) { #if !defined(WORDS_BIGENDIAN) @@ -2460,14 +2460,14 @@ parse_uint64(unsigned len, const uint8_t *data) return rv; } -static inline int64_t +static __inline int64_t unzigzag64(uint64_t v) { // Note: Using unsigned types prevents undefined behavior return (int64_t)((v >> 1) ^ (~(v & 1) + 1)); } -static inline uint64_t +static __inline uint64_t parse_fixed_uint64(const uint8_t *data) { #if !defined(WORDS_BIGENDIAN) From fb64210f75ada89a6f24d66956f0f7267789d01b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 15:28:56 -0600 Subject: [PATCH 078/113] Be consistent and use __hpux not __hpux__ like the rest of sudo. --- plugins/sudoers/auth/pam.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/sudoers/auth/pam.c b/plugins/sudoers/auth/pam.c index 526675f534..af183483b2 100644 --- a/plugins/sudoers/auth/pam.c +++ b/plugins/sudoers/auth/pam.c @@ -43,7 +43,7 @@ # include #endif -#ifdef __hpux__ +#ifdef __hpux # include #endif @@ -100,7 +100,7 @@ conv_filter_init(void) { debug_decl(conv_filter_init, SUDOERS_DEBUG_AUTH); -#ifdef __hpux__ +#ifdef __hpux /* * HP-UX displays last login information as part of either account * management (in trusted mode) or session management (regular mode). @@ -165,7 +165,7 @@ conv_filter_init(void) conv_filter[nfilt].msglen = 0; } } -#endif /* __hpux__ */ +#endif /* __hpux */ debug_return; } From dad149f785ff219d188b36482f28152ece494f48 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 15:51:45 -0600 Subject: [PATCH 079/113] Add missing dependency info for cfmakeraw.lo in lib/util/Makefile.in From Tim Rice --- lib/util/Makefile.in | 8 ++++++++ scripts/mkdep.pl | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 7b7358a842..017446d6f6 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -455,6 +455,14 @@ arc4random_uniform.i: $(srcdir)/arc4random_uniform.c $(incdir)/sudo_compat.h \ $(CC) -E -o $@ $(CPPFLAGS) $< arc4random_uniform.plog: arc4random_uniform.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/arc4random_uniform.c --i-file $< --output-file $@ +cfmakeraw.lo: $(srcdir)/cfmakeraw.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/cfmakeraw.c +cfmakeraw.i: $(srcdir)/cfmakeraw.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(CC) -E -o $@ $(CPPFLAGS) $< +cfmakeraw.plog: cfmakeraw.i + rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/cfmakeraw.c --i-file $< --output-file $@ closefrom.lo: $(srcdir)/closefrom.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h diff --git a/scripts/mkdep.pl b/scripts/mkdep.pl index 5299c0fe24..042342109d 100755 --- a/scripts/mkdep.pl +++ b/scripts/mkdep.pl @@ -116,7 +116,7 @@ sub mkdep { # XXX - fill in AUTH_OBJS from contents of the auth dir instead $makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; $makefile =~ s:\@DIGEST\@:digest.lo digest_openssl.lo digest_gcrypt.lo:; - $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; + $makefile =~ s:\@LTLIBOBJS\@:arc4random.lo arc4random_uniform.lo cfmakeraw.lo closefrom.lo dup3.lo explicit_bzero.lo fchmodat.lo freezero.lo fstatat.lo fnmatch.lo getaddrinfo.lo getcwd.lo getentropy.lo getgrouplist.lo getdelim.lo getopt_long.lo getusershell.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo mksiglist.lo mksigname.lo mktemp.lo nanosleep.lo openat.lo pipe2.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo str2sig.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo unlinkat.lo utimens.lo vsyslog.lo:; # Parse OBJS lines my %objs; From f6d477692f0f8602e211588dd05e3ba4e466dbff Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 15:53:41 -0600 Subject: [PATCH 080/113] Regen for check_exptilde.o --- plugins/sudoers/Makefile.in | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in index e312695f6c..0360b42804 100644 --- a/plugins/sudoers/Makefile.in +++ b/plugins/sudoers/Makefile.in @@ -900,26 +900,26 @@ check_env_pattern.i: $(srcdir)/regress/env_match/check_env_pattern.c \ check_env_pattern.plog: check_env_pattern.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/env_match/check_env_pattern.c --i-file $< --output-file $@ check_exptilde.o: $(srcdir)/regress/exptilde/check_exptilde.c \ - $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/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 + $(devdir)/def_data.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/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) -c $(CPPFLAGS) $(CFLAGS) $(ASAN_CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/exptilde/check_exptilde.c check_exptilde.i: $(srcdir)/regress/exptilde/check_exptilde.c \ - $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/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 + $(devdir)/def_data.c $(devdir)/def_data.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/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) $< check_exptilde.plog: check_exptilde.i rm -f $@; pvs-studio --cfg $(PVS_CFG) --sourcetree-root $(top_srcdir) --skip-cl-exe yes --source-file $(srcdir)/regress/exptilde/check_exptilde.c --i-file $< --output-file $@ From c4b9f6136d220dda0d81c65878ead988122ef7ff Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 15:55:11 -0600 Subject: [PATCH 081/113] Add missing #ifdef HAVE_CLOCK_GETTIME in getentropy_fallback() From Tim Rice --- lib/util/getentropy.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/util/getentropy.c b/lib/util/getentropy.c index 510283550a..d95190ca5b 100644 --- a/lib/util/getentropy.c +++ b/lib/util/getentropy.c @@ -503,6 +503,7 @@ getentropy_fallback(void *buf, size_t len) / pgs); } +#ifdef HAVE_CLOCK_GETTIME /* Check cnts and times... */ for (ii = 0; ii < sizeof(cl)/sizeof(cl[0]); ii++) { @@ -511,6 +512,7 @@ getentropy_fallback(void *buf, size_t len) if (e != -1) cnt += (int)ts.tv_nsec; } +#endif /* HAVE_CLOCK_GETTIME */ HX((e = getrusage(RUSAGE_SELF, &ru)) == -1, ru); From f6a14c9414cb6d956fc24b3fbff61e66de4a22d7 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 15:59:27 -0600 Subject: [PATCH 082/113] Include strings.h for strcasecmp(3). From Tim Rice --- plugins/sudoers/pwutil.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/sudoers/pwutil.c b/plugins/sudoers/pwutil.c index 7209396022..ea0159fa8b 100644 --- a/plugins/sudoers/pwutil.c +++ b/plugins/sudoers/pwutil.c @@ -32,6 +32,9 @@ #include #include #include +#ifdef HAVE_STRINGS_H +# include /* strcasecmp */ +#endif #ifdef HAVE_SETAUTHDB # include #endif /* HAVE_SETAUTHDB */ From e92d10011e8ffca308a910a0b605231555b66a9d Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 16:06:37 -0600 Subject: [PATCH 083/113] Rename sa_len -> sa_size to avoid a conflict on UnixWare and others. On some systems, sa_len is a #define for 4.4BSD compatibility. --- logsrvd/logsrvd.c | 2 +- logsrvd/logsrvd.h | 2 +- logsrvd/logsrvd_conf.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/logsrvd/logsrvd.c b/logsrvd/logsrvd.c index 62e7d5e7a1..0d7f11247e 100644 --- a/logsrvd/logsrvd.c +++ b/logsrvd/logsrvd.c @@ -1565,7 +1565,7 @@ create_listener(struct listen_address *addr) #endif if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) sudo_warn("SO_REUSEADDR"); - if (bind(sock, &addr->sa_un.sa, addr->sa_len) == -1) { + if (bind(sock, &addr->sa_un.sa, addr->sa_size) == -1) { /* TODO: only warn once for IPv4 and IPv6 or disambiguate */ sudo_warn("%s (%s)", addr->sa_str, family); goto bad; diff --git a/logsrvd/logsrvd.h b/logsrvd/logsrvd.h index 2701eb1c18..01453efb4d 100644 --- a/logsrvd/logsrvd.h +++ b/logsrvd/logsrvd.h @@ -131,7 +131,7 @@ struct listen_address { TAILQ_ENTRY(listen_address) entries; char *sa_str; union sockaddr_union sa_un; - socklen_t sa_len; + socklen_t sa_size; bool tls; }; TAILQ_HEAD(listen_address_list, listen_address); diff --git a/logsrvd/logsrvd_conf.c b/logsrvd/logsrvd_conf.c index ed8c8a3e11..7ccef0dc8c 100644 --- a/logsrvd/logsrvd_conf.c +++ b/logsrvd/logsrvd_conf.c @@ -418,7 +418,7 @@ cb_listen_address(struct logsrvd_config *config, const char *str) goto done; } memcpy(&addr->sa_un, res->ai_addr, res->ai_addrlen); - addr->sa_len = res->ai_addrlen; + addr->sa_size = res->ai_addrlen; addr->tls = tls; TAILQ_INSERT_TAIL(&config->server.addresses, addr, entries); } From e561f5b857fedd38f9c3de0d08649ed30a17188b Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 17:24:09 -0600 Subject: [PATCH 084/113] Use the same pattern of redefining TESTDIR as test10.sh. Adapted from a diff from Tim Rice. --- plugins/sudoers/regress/testsudoers/test3.sh | 87 +++++++++----------- 1 file changed, 41 insertions(+), 46 deletions(-) diff --git a/plugins/sudoers/regress/testsudoers/test3.sh b/plugins/sudoers/regress/testsudoers/test3.sh index 3d14bd29cf..ff7507e933 100755 --- a/plugins/sudoers/regress/testsudoers/test3.sh +++ b/plugins/sudoers/regress/testsudoers/test3.sh @@ -3,49 +3,44 @@ # Test @includedir facility # -parentdir="`echo $0 | sed 's:/[^/]*$::'`" -if [ -d "$parentdir" ]; then - # make sure include file is owned by current user - rm -rf "${parentdir}/test3.d" - mkdir "${parentdir}/test3.d" - cat >"${parentdir}/test3.d/root" <<-EOF - root ALL = ALL - EOF - - MYUID=`\ls -lnd $TESTDIR/test3.d | awk '{print $3}'` - MYGID=`\ls -lnd $TESTDIR/test3.d | awk '{print $4}'` - exec 2>&1 - - echo "Testing @includedir of an unquoted path" - echo "" - ./testsudoers -U $MYUID -G $MYGID root id <<-EOF - @includedir $TESTDIR/test3.d - EOF - - echo "" - echo "Testing @includedir of a double-quoted path" - echo "" - ./testsudoers -U $MYUID -G $MYGID root id <<-EOF - @includedir "$TESTDIR/test3.d" - EOF - - echo "" - echo "Testing #includedir of an unquoted path" - echo "" - ./testsudoers -U $MYUID -G $MYGID root id <<-EOF - #includedir $TESTDIR/test3.d - EOF - - echo "" - echo "Testing #includedir of a double-quoted path" - echo "" - ./testsudoers -U $MYUID -G $MYGID root id <<-EOF - #includedir "$TESTDIR/test3.d" - EOF - - rm -rf "${parentdir}/test3.d" - exit 0 -fi - -echo "$0: unable to determine parent dir" 1>&2 -exit 1 +TESTDIR="`pwd`/regress/testsudoers" +# make sure include file is owned by current user +rm -rf "$TESTDIR/test3.d" +mkdir "$TESTDIR/test3.d" +cat >"$TESTDIR/test3.d/root" <<-EOF + root ALL = ALL +EOF + +MYUID=`\ls -lnd $TESTDIR/test3.d | awk '{print $3}'` +MYGID=`\ls -lnd $TESTDIR/test3.d | awk '{print $4}'` +exec 2>&1 + +echo "Testing @includedir of an unquoted path" +echo "" +./testsudoers -U $MYUID -G $MYGID root id <<-EOF + @includedir $TESTDIR/test3.d +EOF + +echo "" +echo "Testing @includedir of a double-quoted path" +echo "" +./testsudoers -U $MYUID -G $MYGID root id <<-EOF + @includedir "$TESTDIR/test3.d" +EOF + +echo "" +echo "Testing #includedir of an unquoted path" +echo "" +./testsudoers -U $MYUID -G $MYGID root id <<-EOF + #includedir $TESTDIR/test3.d +EOF + +echo "" +echo "Testing #includedir of a double-quoted path" +echo "" +./testsudoers -U $MYUID -G $MYGID root id <<-EOF + #includedir "$TESTDIR/test3.d" +EOF + +rm -rf "$TESTDIR/test3.d" +exit 0 From a0092ce31fe206a778cfe56e0de598aa26604be1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 19:02:26 -0600 Subject: [PATCH 085/113] Fix regress when ttyname(3) returns the same device under a different name. On systems that have both new and old pty names we can end up with a name mismatch even though the underlying device is the same. --- src/regress/ttyname/check_ttyname.c | 32 +++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/regress/ttyname/check_ttyname.c b/src/regress/ttyname/check_ttyname.c index c43ea2188e..637d986319 100644 --- a/src/regress/ttyname/check_ttyname.c +++ b/src/regress/ttyname/check_ttyname.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: ISC * - * Copyright (c) 2013-2016 Todd C. Miller + * Copyright (c) 2013-2020 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -36,6 +37,27 @@ sudo_dso_public int main(int argc, char *argv[]); int sudo_debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER; extern char *get_process_ttyname(char *name, size_t namelen); +static int +match_ttys(const char *tty1, const char *tty2) +{ + struct stat sb1, sb2; + + if (tty1 != NULL && tty2 != NULL) { + if (strcmp(tty1, tty2) == 0) + return 0; + /* Could be the same device with a different name. */ + if (stat(tty1, &sb1) == 0 && stat(tty2, &sb2) == 0) { + if (sb1.st_rdev == sb2.st_rdev) + return 0; + } + } else if (tty1 == NULL && tty2 == NULL) { + return 0; + } + + return 1; +} + + int main(int argc, char *argv[]) { @@ -61,13 +83,7 @@ main(int argc, char *argv[]) #endif /* Compare libc and kernel ttys. */ - if (tty_libc != NULL && tty_sudo != NULL) { - if (strcmp(tty_libc, tty_sudo) == 0) - ret = 0; - } else if (tty_libc == NULL && tty_sudo == NULL) { - ret = 0; - } - + ret = match_ttys(tty_libc, tty_sudo); if (ret == 0) { printf("%s: OK (%s)\n", getprogname(), tty_sudo ? tty_sudo : "none"); } else if (tty_libc == NULL) { From cc8e6c601591b70512003ae8bc94425ef37d0491 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 19:13:50 -0600 Subject: [PATCH 086/113] Check that the files are character devices before comparing st_rdev. --- src/regress/ttyname/check_ttyname.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/regress/ttyname/check_ttyname.c b/src/regress/ttyname/check_ttyname.c index 637d986319..5914f71bea 100644 --- a/src/regress/ttyname/check_ttyname.c +++ b/src/regress/ttyname/check_ttyname.c @@ -46,7 +46,8 @@ match_ttys(const char *tty1, const char *tty2) if (strcmp(tty1, tty2) == 0) return 0; /* Could be the same device with a different name. */ - if (stat(tty1, &sb1) == 0 && stat(tty2, &sb2) == 0) { + if (stat(tty1, &sb1) == 0 && S_ISCHR(sb1.st_mode) && + stat(tty2, &sb2) == 0 && S_ISCHR(sb2.st_mode)) { if (sb1.st_rdev == sb2.st_rdev) return 0; } From 88c7a35dd5fcaade50485df8ae432d108824b140 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 4 Sep 2020 21:43:30 -0600 Subject: [PATCH 087/113] Fix check for hiding unexported symbols on HP-UX. We need to pass the -b option to the compiler, not just the linker, so it will choose the PIC C runtime. --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index c4f8da94e3..48302f0eba 100755 --- a/configure +++ b/configure @@ -27250,7 +27250,7 @@ else if test -n "$GCC"; then LDFLAGS="$LDFLAGS -shared -Wl,-c,./conftest.opt" else - LDFLAGS="$LDFLAGS -Wl,-b -Wl,-c,./conftest.opt" + LDFLAGS="$LDFLAGS -b -Wl,-c,./conftest.opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ diff --git a/configure.ac b/configure.ac index 49e8bfdf38..0cd67e0cdd 100644 --- a/configure.ac +++ b/configure.ac @@ -4416,7 +4416,7 @@ EOF if test -n "$GCC"; then LDFLAGS="$LDFLAGS -shared -Wl,-c,./conftest.opt" else - LDFLAGS="$LDFLAGS -Wl,-b -Wl,-c,./conftest.opt" + LDFLAGS="$LDFLAGS -b -Wl,-c,./conftest.opt" fi AC_LINK_IFELSE([AC_LANG_PROGRAM([[int foo;]], [[]])], [sudo_cv_var_hpux_ld_symbol_export=yes]) From a7033f33a9a272873574169717be46d3f0da2ccb Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 5 Sep 2020 07:10:24 -0600 Subject: [PATCH 088/113] HP-UX cc may not allow __declspec(dllexport) to be used in conjunction with "#pragma HP_DEFINED_EXTERNAL" when redefining standard libc functions. --- configure | 42 ++++++++++++++++++++++++++++++++++++++---- configure.ac | 27 +++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 8 deletions(-) diff --git a/configure b/configure index 48302f0eba..e6a60f9afd 100755 --- a/configure +++ b/configure @@ -27087,11 +27087,45 @@ fi $as_echo "$ax_cv_check_cflags___Bhidden_def" >&6; } if test x"$ax_cv_check_cflags___Bhidden_def" = xyes; then : - $as_echo "#define HAVE_DSO_VISIBILITY 1" >>confdefs.h + # HP-UX cc may not allow __declspec(dllexport) to be + # used in conjunction with #pragma HP_DEFINED_EXTERNAL + # when redefining standard libc functions. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __declspec(dllexport) can be used when overriding libc functions" >&5 +$as_echo_n "checking whether __declspec(dllexport) can be used when overriding libc functions... " >&6; } +if ${sudo_cv_var_hpux_declspec_libc_function+:} false; then : + $as_echo_n "(cached) " >&6 +else - CFLAGS="${CFLAGS} -Bhidden_def" - LT_LDEXPORTS= - LT_LDDEP= + _CFLAGS="$CFLAGS" + CFLAGS="${CFLAGS} -Bhidden_def" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + __declspec(dllexport) char * getenv(const char *n) { return NULL; } +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + sudo_cv_var_hpux_declspec_libc_function=yes + +else + + sudo_cv_var_hpux_declspec_libc_function=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$_CFLAGS" + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_hpux_declspec_libc_function" >&5 +$as_echo "$sudo_cv_var_hpux_declspec_libc_function" >&6; } + if test "$sudo_cv_var_hpux_declspec_libc_function" = "yes"; then + $as_echo "#define HAVE_DSO_VISIBILITY 1" >>confdefs.h + + CFLAGS="${CFLAGS} -Bhidden_def" + LT_LDEXPORTS= + LT_LDDEP= + fi else : diff --git a/configure.ac b/configure.ac index 0cd67e0cdd..fb96f051fa 100644 --- a/configure.ac +++ b/configure.ac @@ -4329,10 +4329,29 @@ else case "$host_os" in hpux*) AX_CHECK_COMPILE_FLAG([-Bhidden_def], [ - AC_DEFINE(HAVE_DSO_VISIBILITY) - CFLAGS="${CFLAGS} -Bhidden_def" - LT_LDEXPORTS= - LT_LDDEP= + # HP-UX cc may not allow __declspec(dllexport) to be + # used in conjunction with #pragma HP_DEFINED_EXTERNAL + # when redefining standard libc functions. + AC_CACHE_CHECK([whether __declspec(dllexport) can be used when overriding libc functions], + [sudo_cv_var_hpux_declspec_libc_function], + [ + _CFLAGS="$CFLAGS" + CFLAGS="${CFLAGS} -Bhidden_def" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include + __declspec(dllexport) char * getenv(const char *n) { return NULL; }]])], [ + sudo_cv_var_hpux_declspec_libc_function=yes + ], [ + sudo_cv_var_hpux_declspec_libc_function=no + ]) + CFLAGS="$_CFLAGS" + ] + ) + if test "$sudo_cv_var_hpux_declspec_libc_function" = "yes"; then + AC_DEFINE(HAVE_DSO_VISIBILITY) + CFLAGS="${CFLAGS} -Bhidden_def" + LT_LDEXPORTS= + LT_LDDEP= + fi ]) ;; solaris2*) From d56347b981d9bc78f240a3174d557599126867d9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 5 Sep 2020 08:21:43 -0600 Subject: [PATCH 089/113] Define sudo_warn_setlocale_t and use sudo_conv_t in sudo_fatal.h. Works around a bug in older versions of the HP ANSI C compiler and results in more readable code. --- include/sudo_fatal.h | 11 +++++------ lib/util/fatal.c | 6 +++--- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/include/sudo_fatal.h b/include/sudo_fatal.h index 14e44b4b85..37ac9defcc 100644 --- a/include/sudo_fatal.h +++ b/include/sudo_fatal.h @@ -26,6 +26,8 @@ # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ +#include "sudo_plugin.h" /* for conversation function */ + /* * We wrap fatal/fatalx and warn/warnx so that the same output can * go to the debug file, if there is one. @@ -158,15 +160,12 @@ #endif /* SUDO_ERROR_WRAP */ typedef void (*sudo_fatal_callback_t)(void); - -struct sudo_conv_message; -struct sudo_conv_reply; -struct sudo_conv_callback; +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 void sudo_warn_set_locale_func_v1(bool (*func)(bool, int *)); +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__)); @@ -179,7 +178,7 @@ sudo_dso_public void sudo_gai_warn_nodebug_v1(int errnum, const char *fmt, ...) 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 void sudo_warn_set_conversation_v1(int (*conv)(int num_msgs, const struct sudo_conv_message *msgs, struct sudo_conv_reply *replies, struct sudo_conv_callback *callback)); +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)) #define sudo_fatal_callback_register(_a) sudo_fatal_callback_register_v1((_a)) diff --git a/lib/util/fatal.c b/lib/util/fatal.c index dcccc3e3f9..2b9bdd075b 100644 --- a/lib/util/fatal.c +++ b/lib/util/fatal.c @@ -54,8 +54,8 @@ SLIST_HEAD(sudo_fatal_callback_list, sudo_fatal_callback); static struct sudo_fatal_callback_list callbacks = SLIST_HEAD_INITIALIZER(&callbacks); static sudo_conv_t sudo_warn_conversation; -static bool (*sudo_warn_setlocale)(bool, int *); -static bool (*sudo_warn_setlocale_prev)(bool, int *); +static sudo_warn_setlocale_t sudo_warn_setlocale; +static sudo_warn_setlocale_t sudo_warn_setlocale_prev; static void warning(const char *errstr, const char *fmt, va_list ap); @@ -310,7 +310,7 @@ sudo_warn_set_conversation_v1(sudo_conv_t conv) * locale for user warnings. */ void -sudo_warn_set_locale_func_v1(bool (*func)(bool, int *)) +sudo_warn_set_locale_func_v1(sudo_warn_setlocale_t func) { sudo_warn_setlocale_prev = sudo_warn_setlocale; sudo_warn_setlocale = func; From f6cb5c72bc6d8dc4d57948294f6a38e3d95afcc7 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 5 Sep 2020 15:38:33 -0600 Subject: [PATCH 090/113] Prefer dlopen() over shl_load() on HP-UX 11.11 and higher. --- configure | 8 ++++++++ configure.ac | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/configure b/configure index e6a60f9afd..a8f8e39cc0 100755 --- a/configure +++ b/configure @@ -7263,6 +7263,14 @@ fi ;; esac +case "$host_os" in +hiuxmpp*|hpux11.1[1-9]|hpux11.[2-9][0-9]|hpux1[2-9].*) + # Prefer dlopen() over shl_load() + : ${ac_cv_func_shl_load='no'} + : ${ac_cv_lib_dld_shl_load='no'} + ;; +esac + case `pwd` in *\ * | *\ *) diff --git a/configure.ac b/configure.ac index fb96f051fa..58b3fd9d1e 100644 --- a/configure.ac +++ b/configure.ac @@ -1716,6 +1716,19 @@ aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) ;; esac +dnl +dnl On HP-UX 11.11 and higher (and hiuxmpp) we prefer dlopen() +dnl over shl_load(). Libtool defaults to shl_load() so we need +dnl to prime the cache to override that default. +dnl +case "$host_os" in +hiuxmpp*|hpux11.1[[1-9]]|hpux11.[[2-9]][[0-9]]|hpux1[[2-9]].*) + # Prefer dlopen() over shl_load() + : ${ac_cv_func_shl_load='no'} + : ${ac_cv_lib_dld_shl_load='no'} + ;; +esac + dnl dnl Libtool init, we require libtool 2.2.6b or higher dnl From 0f8802676ef77f69474d2c6688a317633417e9f4 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 5 Sep 2020 19:18:49 -0600 Subject: [PATCH 091/113] Use config.h to handle systems without inline function support. --- lib/logsrv/protobuf-c.c | 62 +++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/lib/logsrv/protobuf-c.c b/lib/logsrv/protobuf-c.c index fd406636b2..0325bc04c6 100644 --- a/lib/logsrv/protobuf-c.c +++ b/lib/logsrv/protobuf-c.c @@ -45,6 +45,8 @@ * \todo Use size_t consistently. */ +#include + #include /* for malloc, free */ #include /* for strcmp, strlen, memcpy, memmove, memset */ @@ -157,13 +159,13 @@ system_free(void *allocator_data, void *data) free(data); } -static __inline void * +static inline void * do_alloc(ProtobufCAllocator *allocator, size_t size) { return allocator->alloc(allocator->allocator_data, size); } -static __inline void +static inline void do_free(ProtobufCAllocator *allocator, void *data) { if (data != NULL) @@ -232,7 +234,7 @@ protobuf_c_buffer_simple_append(ProtobufCBuffer *buffer, * \return * Number of bytes required. */ -static __inline size_t +static inline size_t get_tag_size(uint32_t number) { if (number < (1UL << 4)) { @@ -257,7 +259,7 @@ get_tag_size(uint32_t number) * \return * Number of bytes required. */ -static __inline size_t +static inline size_t uint32_size(uint32_t v) { if (v < (1UL << 7)) { @@ -282,7 +284,7 @@ uint32_size(uint32_t v) * \return * Number of bytes required. */ -static __inline size_t +static inline size_t int32_size(int32_t v) { if (v < 0) { @@ -309,7 +311,7 @@ int32_size(int32_t v) * \return * ZigZag encoded integer. */ -static __inline uint32_t +static inline uint32_t zigzag32(int32_t v) { // Note: the right-shift must be arithmetic @@ -327,7 +329,7 @@ zigzag32(int32_t v) * \return * Number of bytes required. */ -static __inline size_t +static inline size_t sint32_size(int32_t v) { return uint32_size(zigzag32(v)); @@ -342,7 +344,7 @@ sint32_size(int32_t v) * \return * Number of bytes required. */ -static __inline size_t +static inline size_t uint64_size(uint64_t v) { uint32_t upper_v = (uint32_t) (v >> 32); @@ -373,7 +375,7 @@ uint64_size(uint64_t v) * \return * ZigZag encoded integer. */ -static __inline uint64_t +static inline uint64_t zigzag64(int64_t v) { // Note: the right-shift must be arithmetic @@ -391,7 +393,7 @@ zigzag64(int64_t v) * \return * Number of bytes required. */ -static __inline size_t +static inline size_t sint64_size(int64_t v) { return uint64_size(zigzag64(v)); @@ -692,7 +694,7 @@ repeated_field_get_packed_size(const ProtobufCFieldDescriptor *field, * \return * Number of bytes required. */ -static __inline size_t +static inline size_t unknown_field_get_packed_size(const ProtobufCMessageUnknownField *field) { return get_tag_size(field->tag) + field->len; @@ -771,7 +773,7 @@ size_t protobuf_c_message_get_packed_size(const ProtobufCMessage *message) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t uint32_pack(uint32_t value, uint8_t *out) { unsigned rv = 0; @@ -808,7 +810,7 @@ uint32_pack(uint32_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t int32_pack(int32_t value, uint8_t *out) { if (value < 0) { @@ -836,7 +838,7 @@ int32_pack(int32_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t sint32_pack(int32_t value, uint8_t *out) { return uint32_pack(zigzag32(value), out); @@ -893,7 +895,7 @@ uint64_pack(uint64_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t sint64_pack(int64_t value, uint8_t *out) { return uint64_pack(zigzag64(value), out); @@ -910,7 +912,7 @@ sint64_pack(int64_t value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t fixed32_pack(uint32_t value, void *out) { #if !defined(WORDS_BIGENDIAN) @@ -941,7 +943,7 @@ fixed32_pack(uint32_t value, void *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t fixed64_pack(uint64_t value, void *out) { #if !defined(WORDS_BIGENDIAN) @@ -966,7 +968,7 @@ fixed64_pack(uint64_t value, void *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t boolean_pack(protobuf_c_boolean value, uint8_t *out) { *out = value ? TRUE : FALSE; @@ -988,7 +990,7 @@ boolean_pack(protobuf_c_boolean value, uint8_t *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t string_pack(const char *str, uint8_t *out) { if (str == NULL) { @@ -1013,7 +1015,7 @@ string_pack(const char *str, uint8_t *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t binary_data_pack(const ProtobufCBinaryData *bd, uint8_t *out) { size_t len = bd->len; @@ -1033,7 +1035,7 @@ binary_data_pack(const ProtobufCBinaryData *bd, uint8_t *out) * \return * Number of bytes written to `out`. */ -static __inline size_t +static inline size_t prefixed_message_pack(const ProtobufCMessage *message, uint8_t *out) { if (message == NULL) { @@ -1230,7 +1232,7 @@ unlabeled_field_pack(const ProtobufCFieldDescriptor *field, * \return * Size of the field. */ -static __inline size_t +static inline size_t sizeof_elt_in_repeated_array(ProtobufCType type) { switch (type) { @@ -2018,7 +2020,7 @@ protobuf_c_message_pack_to_buffer(const ProtobufCMessage *message, * @{ */ -static __inline int +static inline int int_range_lookup(unsigned n_ranges, const ProtobufCIntRange *ranges, int value) { unsigned n; @@ -2106,7 +2108,7 @@ struct _ScannedMember { const uint8_t *data; /**< Pointer to field data. */ }; -static __inline size_t +static inline size_t scan_length_prefixed_data(size_t len, const uint8_t *data, size_t *prefix_len_out) { @@ -2394,7 +2396,7 @@ count_packed_elements(ProtobufCType type, } } -static __inline uint32_t +static inline uint32_t parse_uint32(unsigned len, const uint8_t *data) { uint32_t rv = data[0] & 0x7f; @@ -2412,20 +2414,20 @@ parse_uint32(unsigned len, const uint8_t *data) return rv; } -static __inline uint32_t +static inline uint32_t parse_int32(unsigned len, const uint8_t *data) { return parse_uint32(len, data); } -static __inline int32_t +static inline int32_t unzigzag32(uint32_t v) { // Note: Using unsigned types prevents undefined behavior return (int32_t)((v >> 1) ^ (~(v & 1) + 1)); } -static __inline uint32_t +static inline uint32_t parse_fixed_uint32(const uint8_t *data) { #if !defined(WORDS_BIGENDIAN) @@ -2460,14 +2462,14 @@ parse_uint64(unsigned len, const uint8_t *data) return rv; } -static __inline int64_t +static inline int64_t unzigzag64(uint64_t v) { // Note: Using unsigned types prevents undefined behavior return (int64_t)((v >> 1) ^ (~(v & 1) + 1)); } -static __inline uint64_t +static inline uint64_t parse_fixed_uint64(const uint8_t *data) { #if !defined(WORDS_BIGENDIAN) From 72b28bbc3e529b5ac5219214dff54a30de1e44e5 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 5 Sep 2020 19:29:06 -0600 Subject: [PATCH 092/113] SVR4/5 fixes and long password support for OpenServer 6 & 5. From Tim Rice --- configure | 20 ++++++++++++++++++++ configure.ac | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/configure b/configure index a8f8e39cc0..0f6ceb16c5 100755 --- a/configure +++ b/configure @@ -16269,6 +16269,26 @@ fi : ${mansectsu='1m'} : ${mansectform='4'} ;; + *-*-*sco3.2*) # SCO OpenServer 5 + : ${mansectsu='1'} + : ${mansectform='4'} + shadow_funcs="getprpwnam" + shadow_libs="-lprot" + ;; +# UnixWare 7.x, OpenUNIX 8 + *-*-*sysv5*) + : ${mansectsu='1'} + : ${mansectform='4'} + case "$host" in + *-*-sysv5SCO_SV*) # SCO OpenServer 6.x + shadow_funcs="getprpwnam" + shadow_libs="-lprot" + ;; + *) shadow_funcs="getspnam" + test -z "$with_pam" && AUTH_EXCL_DEF="PAM" + ;; + esac + ;; *-*-sysv*) : ${mansectsu='1m'} : ${mansectform='4'} diff --git a/configure.ac b/configure.ac index 58b3fd9d1e..33850a1fd9 100644 --- a/configure.ac +++ b/configure.ac @@ -2312,6 +2312,26 @@ case "$host" in : ${mansectsu='1m'} : ${mansectform='4'} ;; + *-*-*sco3.2*) # SCO OpenServer 5 + : ${mansectsu='1'} + : ${mansectform='4'} + shadow_funcs="getprpwnam" + shadow_libs="-lprot" + ;; +# UnixWare 7.x, OpenUNIX 8 + *-*-*sysv5*) + : ${mansectsu='1'} + : ${mansectform='4'} + case "$host" in + *-*-sysv5SCO_SV*) # SCO OpenServer 6.x + shadow_funcs="getprpwnam" + shadow_libs="-lprot" + ;; + *) shadow_funcs="getspnam" + test -z "$with_pam" && AUTH_EXCL_DEF="PAM" + ;; + esac + ;; *-*-sysv*) : ${mansectsu='1m'} : ${mansectform='4'} From d6ed38e7e3d1079928f8f70fbedfe30fdf1407c1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 5 Sep 2020 20:14:09 -0600 Subject: [PATCH 093/113] Fix sco library versioning; fallout from frebsd-elf reorg. From Tim Rice --- ltmain.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ltmain.sh b/ltmain.sh index 20bec0d5ad..88bcf93afa 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -8831,7 +8831,7 @@ func_mode_link () age=$number_minor revision=$number_revision ;; - freebsd-aout|qnx|sunos) + freebsd-aout|qnx|sco|sunos) current=$number_major revision=$number_minor age=0 From 3d9154cd4f61079adf237c257eafc20010bb165f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 5 Sep 2020 21:10:28 -0600 Subject: [PATCH 094/113] We need to link with NET_LIBS for gai_strerror() on some systems. From Tim Rice --- lib/util/Makefile.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/util/Makefile.in b/lib/util/Makefile.in index 017446d6f6..8011708aa4 100644 --- a/lib/util/Makefile.in +++ b/lib/util/Makefile.in @@ -201,9 +201,9 @@ $(shlib_opt): $(shlib_exp) libsudo_util.la: $(LTOBJS) @LT_LDDEP@ case "$(LT_LDFLAGS)" in \ *-no-install*) \ - $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) @LT_DEP_LIBS@ @LIBINTL@ @LIBMD@ @LIBPTHREAD@ @LIBDL@ @LIBRT@;; \ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) @LT_DEP_LIBS@ @LIBINTL@ @LIBMD@ @LIBPTHREAD@ @LIBDL@ @LIBRT@ @NET_LIBS@;; \ *) \ - $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(ASAN_LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) -version-info $(SHLIB_VERSION) -rpath $(libexecdir)/sudo @LT_DEP_LIBS@ @LIBINTL@ @LIBMD@ @LIBPTHREAD@ @LIBDL@ @LIBRT@;; \ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(ASAN_LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) -version-info $(SHLIB_VERSION) -rpath $(libexecdir)/sudo @LT_DEP_LIBS@ @LIBINTL@ @LIBMD@ @LIBPTHREAD@ @LIBDL@ @LIBRT@ @NET_LIBS@;; \ esac siglist.c: mksiglist From 92e5d81943c890d3ea4b9c140d968563c63b8309 Mon Sep 17 00:00:00 2001 From: Evan Anderson Date: Sun, 6 Sep 2020 14:30:54 -0500 Subject: [PATCH 095/113] configure: Fix runstatedir handling for distros that do not support it runstatedir was added in yet-to-be released autoconf 2.70. Some distros are shipping this addition in their autoconf packages, but others, such as Fedora, are not. This causes the rundir variable to be set incorrectly if the configure script is regenerated with an unpatched autoconf since the runstatedir variable set is deleted after regeneration. This change works around that problem by checking that runstatedir is non-empty before potentially using it to set the rundir variable --- configure | 2 +- m4/sudo.m4 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 0f6ceb16c5..2e0838e01b 100755 --- a/configure +++ b/configure @@ -26718,7 +26718,7 @@ EOF $as_echo_n "checking for sudo run dir location... " >&6; } if test -n "$with_rundir"; then rundir="$with_rundir" -elif test "$runstatedir" != '${localstatedir}/run'; then +elif test -n "$runstatedir" && test "$runstatedir" != '${localstatedir}/run'; then rundir="$runstatedir/sudo" else # No --with-rundir or --runstatedir specified diff --git a/m4/sudo.m4 b/m4/sudo.m4 index a5a972b3c0..b3a40b208a 100644 --- a/m4/sudo.m4 +++ b/m4/sudo.m4 @@ -120,7 +120,7 @@ dnl AC_DEFUN([SUDO_RUNDIR], [AC_MSG_CHECKING(for sudo run dir location) if test -n "$with_rundir"; then rundir="$with_rundir" -elif test "$runstatedir" != '${localstatedir}/run'; then +elif test -n "$runstatedir" && test "$runstatedir" != '${localstatedir}/run'; then rundir="$runstatedir/sudo" else # No --with-rundir or --runstatedir specified From e9997c8ec4d73712a898af8116b30e4e7cc02d4e Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 6 Sep 2020 15:27:21 -0600 Subject: [PATCH 096/113] Remove closefrom_fallback() from lib/util/util.exp. It is a static function and should not be exported. --- configure | 2 +- configure.ac | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 2e0838e01b..d0b64a792f 100755 --- a/configure +++ b/configure @@ -21295,7 +21295,7 @@ else esac - for _sym in closefrom_fallback sudo_closefrom; do + for _sym in sudo_closefrom; do COMPAT_EXP="${COMPAT_EXP}${_sym} " done diff --git a/configure.ac b/configure.ac index 33850a1fd9..8732a96f20 100644 --- a/configure.ac +++ b/configure.ac @@ -2945,7 +2945,7 @@ AC_CHECK_FUNCS([getopt_long], [], [ AC_MSG_RESULT($sudo_cv_optreset) ]) AC_CHECK_FUNCS([closefrom], [], [AC_LIBOBJ(closefrom) - SUDO_APPEND_COMPAT_EXP(closefrom_fallback sudo_closefrom) + SUDO_APPEND_COMPAT_EXP(sudo_closefrom) AC_CHECK_DECL(F_CLOSEM, AC_DEFINE(HAVE_FCNTL_CLOSEM), [], [ # include # include ]) From b6dbfe5094a21ab05491f443dbfe88c252c8a90f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 9 Sep 2020 15:26:44 -0600 Subject: [PATCH 097/113] Take the chroot into account when search for the command. This could a a user-specific chroot via the -R option, a runchroot Defaults value, or a per-command CHROOT spec in the sudoers rule. --- plugins/sudoers/defaults.c | 2 +- plugins/sudoers/editor.c | 3 +- plugins/sudoers/find_path.c | 27 +++--- plugins/sudoers/goodpath.c | 14 ++- plugins/sudoers/match.c | 11 +-- plugins/sudoers/match_command.c | 155 +++++++++++++++++++++++++------- plugins/sudoers/parse.c | 60 ++++++++++--- plugins/sudoers/parse.h | 6 +- plugins/sudoers/stubs.c | 7 ++ plugins/sudoers/sudoers.c | 155 ++++++++++++++++++++++---------- plugins/sudoers/sudoers.h | 6 +- plugins/sudoers/testsudoers.c | 9 +- 12 files changed, 342 insertions(+), 113 deletions(-) diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 5a3d184856..637bf99473 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -688,7 +688,7 @@ default_binding_matches(struct sudoers_parse_tree *parse_tree, debug_return_bool(true); break; case DEFAULTS_CMND: - if (cmndlist_matches(parse_tree, d->binding) == ALLOW) + if (cmndlist_matches(parse_tree, d->binding, NULL) == ALLOW) debug_return_bool(true); break; } diff --git a/plugins/sudoers/editor.c b/plugins/sudoers/editor.c index 3ff08c1eef..99b0b93c8b 100644 --- a/plugins/sudoers/editor.c +++ b/plugins/sudoers/editor.c @@ -68,7 +68,8 @@ resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, } /* If we can't find the editor in the user's PATH, give up. */ - if (find_path(editor, &editor_path, &user_editor_sb, getenv("PATH"), 0, whitelist) != FOUND) { + if (find_path(editor, &editor_path, &user_editor_sb, getenv("PATH"), NULL, + 0, whitelist) != FOUND) { free(editor); errno = ENOENT; debug_return_str(NULL); diff --git a/plugins/sudoers/find_path.c b/plugins/sudoers/find_path.c index fb04998a84..82943a6850 100644 --- a/plugins/sudoers/find_path.c +++ b/plugins/sudoers/find_path.c @@ -43,14 +43,14 @@ * On failure, returns false. */ static bool -cmnd_allowed(char *cmnd, size_t cmnd_size, struct stat *cmnd_sbp, - char * const *whitelist) +cmnd_allowed(char *cmnd, size_t cmnd_size, const char *runchroot, + struct stat *cmnd_sbp, char * const *whitelist) { const char *cmnd_base; char * const *wl; debug_decl(cmnd_allowed, SUDOERS_DEBUG_UTIL); - if (!sudo_goodpath(cmnd, cmnd_sbp)) + if (!sudo_goodpath(cmnd, runchroot, cmnd_sbp)) debug_return_bool(false); if (whitelist == NULL) @@ -62,21 +62,20 @@ cmnd_allowed(char *cmnd, size_t cmnd_size, struct stat *cmnd_sbp, cmnd_base++; for (wl = whitelist; *wl != NULL; wl++) { + const char *base, *path = *wl; struct stat sb; - const char *base; - if ((base = strrchr(*wl, '/')) == NULL) + if ((base = strrchr(path, '/')) == NULL) continue; /* XXX - warn? */ base++; if (strcmp(cmnd_base, base) != 0) continue; - if (sudo_goodpath(*wl, &sb) && + if (sudo_goodpath(path, runchroot, &sb) && sb.st_dev == cmnd_sbp->st_dev && sb.st_ino == cmnd_sbp->st_ino) { /* Overwrite cmnd with safe version from whitelist. */ - if (strlcpy(cmnd, *wl, cmnd_size) < cmnd_size) - return true; + if (strlcpy(cmnd, path, cmnd_size) < cmnd_size) debug_return_bool(true); } } @@ -93,7 +92,8 @@ cmnd_allowed(char *cmnd, size_t cmnd_size, struct stat *cmnd_sbp, */ int find_path(const char *infile, char **outfile, struct stat *sbp, - const char *path, int ignore_dot, char * const *whitelist) + const char *path, const char *runchroot, int ignore_dot, + char * const *whitelist) { char command[PATH_MAX]; const char *cp, *ep, *pathend; @@ -111,7 +111,8 @@ find_path(const char *infile, char **outfile, struct stat *sbp, errno = ENAMETOOLONG; debug_return_int(NOT_FOUND_ERROR); } - found = cmnd_allowed(command, sizeof(command), sbp, whitelist); + found = cmnd_allowed(command, sizeof(command), runchroot, sbp, + whitelist); goto done; } @@ -140,7 +141,8 @@ find_path(const char *infile, char **outfile, struct stat *sbp, errno = ENAMETOOLONG; debug_return_int(NOT_FOUND_ERROR); } - found = cmnd_allowed(command, sizeof(command), sbp, whitelist); + found = cmnd_allowed(command, sizeof(command), runchroot, + sbp, whitelist); if (found) break; } @@ -154,7 +156,8 @@ find_path(const char *infile, char **outfile, struct stat *sbp, errno = ENAMETOOLONG; debug_return_int(NOT_FOUND_ERROR); } - found = cmnd_allowed(command, sizeof(command), sbp, whitelist); + found = cmnd_allowed(command, sizeof(command), runchroot, + sbp, whitelist); if (found && ignore_dot) debug_return_int(NOT_FOUND_DOT); } diff --git a/plugins/sudoers/goodpath.c b/plugins/sudoers/goodpath.c index 4382b8b7f9..9f12c40f65 100644 --- a/plugins/sudoers/goodpath.c +++ b/plugins/sudoers/goodpath.c @@ -39,14 +39,24 @@ * Verify that path is a normal file and executable by root. */ bool -sudo_goodpath(const char *path, struct stat *sbp) +sudo_goodpath(const char *path, const char *runchroot, struct stat *sbp) { bool ret = false; debug_decl(sudo_goodpath, SUDOERS_DEBUG_UTIL); if (path != NULL) { + char pathbuf[PATH_MAX]; struct stat sb; + if (runchroot != NULL) { + const int len = + snprintf(pathbuf, sizeof(pathbuf), "%s%s", runchroot, path); + if (len >= ssizeof(pathbuf)) { + errno = ENAMETOOLONG; + goto done; + } + path = pathbuf; + } if (sbp == NULL) sbp = &sb; @@ -58,6 +68,6 @@ sudo_goodpath(const char *path, struct stat *sbp) errno = EACCES; } } - +done: debug_return_bool(ret); } diff --git a/plugins/sudoers/match.c b/plugins/sudoers/match.c index bc6f69605d..66bfd29115 100644 --- a/plugins/sudoers/match.c +++ b/plugins/sudoers/match.c @@ -366,14 +366,14 @@ host_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, */ int cmndlist_matches(struct sudoers_parse_tree *parse_tree, - const struct member_list *list) + const struct member_list *list, const char *runchroot) { struct member *m; int matched = UNSPEC; debug_decl(cmndlist_matches, SUDOERS_DEBUG_MATCH); TAILQ_FOREACH_REVERSE(m, list, member_list, entries) { - matched = cmnd_matches(parse_tree, m); + matched = cmnd_matches(parse_tree, m, runchroot); if (matched != UNSPEC) break; } @@ -385,7 +385,8 @@ cmndlist_matches(struct sudoers_parse_tree *parse_tree, * Returns ALLOW, DENY or UNSPEC. */ int -cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m) +cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, + const char *runchroot) { struct alias *a; struct sudo_command *c; @@ -401,13 +402,13 @@ cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m) FALLTHROUGH; case COMMAND: c = (struct sudo_command *)m->name; - if (command_matches(c->cmnd, c->args, &c->digests)) + if (command_matches(c->cmnd, c->args, runchroot, &c->digests)) matched = !m->negated; break; case ALIAS: a = alias_get(parse_tree, m->name, CMNDALIAS); if (a != NULL) { - rc = cmndlist_matches(parse_tree, &a->members); + rc = cmndlist_matches(parse_tree, &a->members, runchroot); if (rc != UNSPEC) matched = m->negated ? !rc : rc; alias_put(a); diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index c7094b1c41..07769320fd 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -84,12 +84,24 @@ command_args_match(const char *sudoers_cmnd, const char *sudoers_args) * Returns true on success, else false. */ static bool -do_stat(int fd, const char *path, struct stat *sb) +do_stat(int fd, const char *path, const char *runchroot, struct stat *sb) { + char pathbuf[PATH_MAX]; debug_decl(do_stat, SUDOERS_DEBUG_MATCH); if (fd != -1) debug_return_bool(fstat(fd, sb) == 0); + + /* Make path relative to the new root, if any. */ + if (runchroot != NULL) { + const int len = + snprintf(pathbuf, sizeof(pathbuf), "%s%s", runchroot, path); + if (len >= ssizeof(pathbuf)) { + errno = ENAMETOOLONG; + debug_return_bool(false); + } + path = pathbuf; + } debug_return_bool(stat(path, sb) == 0); } @@ -119,15 +131,28 @@ is_script(int fd) * Returns false on error, else true. */ static bool -open_cmnd(const char *path, const struct command_digest_list *digests, int *fdp) +open_cmnd(const char *path, const char *runchroot, + const struct command_digest_list *digests, int *fdp) { int fd = -1; + char pathbuf[PATH_MAX]; debug_decl(open_cmnd, SUDOERS_DEBUG_MATCH); /* Only open the file for fdexec or for digest matching. */ if (def_fdexec != always && TAILQ_EMPTY(digests)) debug_return_bool(true); + /* Make path relative to the new root, if any. */ + if (runchroot != NULL) { + const int len = + snprintf(pathbuf, sizeof(pathbuf), "%s%s", runchroot, path); + if (len >= ssizeof(pathbuf)) { + errno = ENAMETOOLONG; + debug_return_bool(false); + } + path = pathbuf; + } + fd = open(path, O_RDONLY|O_NONBLOCK); # ifdef O_EXEC if (fd == -1 && errno == EACCES && TAILQ_EMPTY(digests)) { @@ -189,16 +214,29 @@ set_cmnd_fd(int fd) * Return true if user_cmnd names one of the inodes in dir, else false. */ static bool -command_matches_dir(const char *sudoers_dir, size_t dlen, +command_matches_dir(const char *sudoers_dir, size_t dlen, const char *runchroot, const struct command_digest_list *digests) { + char buf[PATH_MAX], sdbuf[PATH_MAX]; struct stat sudoers_stat; struct dirent *dent; - char buf[PATH_MAX]; + size_t chrootlen = 0; int fd = -1; DIR *dirp; debug_decl(command_matches_dir, SUDOERS_DEBUG_MATCH); + /* Make sudoers_dir relative to the new root, if any. */ + if (runchroot != NULL) { + const int len = + snprintf(sdbuf, sizeof(sdbuf), "%s%s", runchroot, sudoers_dir); + if (len >= ssizeof(sdbuf)) { + errno = ENAMETOOLONG; + debug_return_bool(false); + } + sudoers_dir = sdbuf; + chrootlen = strlen(runchroot); + } + /* * Grot through directory entries, looking for user_base. */ @@ -226,9 +264,9 @@ command_matches_dir(const char *sudoers_dir, size_t dlen, continue; /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(buf, digests, &fd)) + if (!open_cmnd(buf, NULL, digests, &fd)) continue; - if (!do_stat(fd, buf, &sudoers_stat)) + if (!do_stat(fd, buf, NULL, &sudoers_stat)) continue; if (user_stat == NULL || @@ -237,7 +275,7 @@ command_matches_dir(const char *sudoers_dir, size_t dlen, if (!digest_matches(fd, buf, digests)) continue; free(safe_cmnd); - if ((safe_cmnd = strdup(buf)) == NULL) { + if ((safe_cmnd = strdup(buf + chrootlen)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); dent = NULL; @@ -257,7 +295,8 @@ command_matches_dir(const char *sudoers_dir, size_t dlen, } static bool -command_matches_all(const struct command_digest_list *digests) +command_matches_all(const char *runchroot, + const struct command_digest_list *digests) { struct stat sb; /* XXX - unused */ int fd = -1; @@ -265,9 +304,9 @@ command_matches_all(const struct command_digest_list *digests) if (user_cmnd[0] == '/') { /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(user_cmnd, digests, &fd)) + if (!open_cmnd(user_cmnd, runchroot, digests, &fd)) goto bad; - if (!do_stat(fd, user_cmnd, &sb)) + if (!do_stat(fd, user_cmnd, runchroot, &sb)) goto bad; } @@ -288,7 +327,7 @@ command_matches_all(const struct command_digest_list *digests) static bool command_matches_fnmatch(const char *sudoers_cmnd, const char *sudoers_args, - const struct command_digest_list *digests) + const char *runchroot, const struct command_digest_list *digests) { struct stat sb; /* XXX - unused */ int fd = -1; @@ -299,15 +338,17 @@ command_matches_fnmatch(const char *sudoers_cmnd, const char *sudoers_args, * a) there are no args in sudoers OR * b) there are no args on command line and none required by sudoers OR * c) there are args in sudoers and on command line and they match - * else return false. + * else return false. + * + * Neither sudoers_cmnd nor user_cmnd are relative to runchroot. */ if (fnmatch(sudoers_cmnd, user_cmnd, FNM_PATHNAME) != 0) debug_return_bool(false); if (command_args_match(sudoers_cmnd, sudoers_args)) { /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(user_cmnd, digests, &fd)) + if (!open_cmnd(user_cmnd, runchroot, digests, &fd)) goto bad; - if (!do_stat(fd, user_cmnd, &sb)) + if (!do_stat(fd, user_cmnd, runchroot, &sb)) goto bad; /* Check digest of user_cmnd since sudoers_cmnd is a pattern. */ if (!digest_matches(fd, user_cmnd, digests)) @@ -328,13 +369,14 @@ command_matches_fnmatch(const char *sudoers_cmnd, const char *sudoers_args, static bool command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, - const struct command_digest_list *digests) + const char *runchroot, const struct command_digest_list *digests) { struct stat sudoers_stat; bool bad_digest = false; char **ap, *base, *cp; + char pathbuf[PATH_MAX]; int fd = -1; - size_t dlen; + size_t dlen, chrootlen = 0; glob_t gl; debug_decl(command_matches_glob, SUDOERS_DEBUG_MATCH); @@ -351,6 +393,19 @@ command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, debug_return_bool(false); } } + + /* Make sudoers_cmnd relative to the new root, if any. */ + if (runchroot != NULL) { + const int len = + snprintf(pathbuf, sizeof(pathbuf), "%s%s", runchroot, sudoers_cmnd); + if (len >= ssizeof(pathbuf)) { + errno = ENAMETOOLONG; + debug_return_bool(false); + } + sudoers_cmnd = pathbuf; + chrootlen = strlen(runchroot); + } + /* * Return true if we find a match in the glob(3) results AND * a) there are no args in sudoers OR @@ -369,12 +424,15 @@ command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, close(fd); fd = -1; } + /* Remove the runchroot, if any. */ + cp += chrootlen; + if (strcmp(cp, user_cmnd) != 0) continue; /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(cp, digests, &fd)) + if (!open_cmnd(cp, runchroot, digests, &fd)) continue; - if (!do_stat(fd, cp, &sudoers_stat)) + if (!do_stat(fd, cp, runchroot, &sudoers_stat)) continue; if (user_stat == NULL || (user_stat->st_dev == sudoers_stat.st_dev && @@ -405,10 +463,13 @@ command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, fd = -1; } + /* Remove the runchroot, if any. */ + cp += chrootlen; + /* If it ends in '/' it is a directory spec. */ dlen = strlen(cp); if (cp[dlen - 1] == '/') { - if (command_matches_dir(cp, dlen, digests)) + if (command_matches_dir(cp, dlen, runchroot, digests)) debug_return_bool(true); continue; } @@ -422,9 +483,9 @@ command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, continue; /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(cp, digests, &fd)) + if (!open_cmnd(cp, runchroot, digests, &fd)) continue; - if (!do_stat(fd, cp, &sudoers_stat)) + if (!do_stat(fd, cp, runchroot, &sudoers_stat)) continue; if (user_stat == NULL || (user_stat->st_dev == sudoers_stat.st_dev && @@ -456,7 +517,8 @@ command_matches_glob(const char *sudoers_cmnd, const char *sudoers_args, } static bool -command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, const struct command_digest_list *digests) +command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, + const char *runchroot, const struct command_digest_list *digests) { struct stat sudoers_stat; const char *base; @@ -467,7 +529,7 @@ command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, const /* If it ends in '/' it is a directory spec. */ dlen = strlen(sudoers_cmnd); if (sudoers_cmnd[dlen - 1] == '/') - debug_return_bool(command_matches_dir(sudoers_cmnd, dlen, digests)); + debug_return_bool(command_matches_dir(sudoers_cmnd, dlen, runchroot, digests)); /* Only proceed if user_base and basename(sudoers_cmnd) match */ if ((base = strrchr(sudoers_cmnd, '/')) == NULL) @@ -478,7 +540,7 @@ command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, const debug_return_bool(false); /* Open the file for fdexec or for digest matching. */ - if (!open_cmnd(sudoers_cmnd, digests, &fd)) + if (!open_cmnd(sudoers_cmnd, runchroot, digests, &fd)) goto bad; /* @@ -488,7 +550,7 @@ command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, const * c) there are args in sudoers and on command line and they match * d) there is a digest and it matches */ - if (user_stat != NULL && do_stat(fd, sudoers_cmnd, &sudoers_stat)) { + if (user_stat != NULL && do_stat(fd, sudoers_cmnd, runchroot, &sudoers_stat)) { if (user_stat->st_dev != sudoers_stat.st_dev || user_stat->st_ino != sudoers_stat.st_ino) goto bad; @@ -521,13 +583,37 @@ command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, const * otherwise, return true if user_cmnd names one of the inodes in path. */ bool -command_matches(const char *sudoers_cmnd, const char *sudoers_args, const struct command_digest_list *digests) +command_matches(const char *sudoers_cmnd, const char *sudoers_args, + const char *runchroot, const struct command_digest_list *digests) { + char *saved_user_cmnd = NULL; + struct stat saved_user_stat; bool rc = false; debug_decl(command_matches, SUDOERS_DEBUG_MATCH); + if (user_runchroot != NULL) { + if (runchroot != NULL && strcmp(runchroot, "*") != 0 && + strcmp(runchroot, user_runchroot) != 0) { + /* CHROOT mismatch */ + goto done; + } + /* User-specified runchroot (user_stat already set appropriately). */ + runchroot = user_runchroot; + } else if (runchroot == NULL) { + /* No rule-specific runchroot, use global (user_stat already set). */ + if (def_runchroot != NULL && strcmp(def_runchroot, "*") != '\0') + runchroot = def_runchroot; + } else { + /* Rule-specific runchroot, reset user_cmnd and user_stat. */ + saved_user_cmnd = user_cmnd; + if (user_stat != NULL) + saved_user_stat = *user_stat; + if (set_cmnd_path(runchroot) != FOUND) + saved_user_cmnd = NULL; + } + if (sudoers_cmnd == NULL) { - rc = command_matches_all(digests); + rc = command_matches_all(runchroot, digests); goto done; } @@ -554,17 +640,24 @@ command_matches(const char *sudoers_cmnd, const char *sudoers_args, const struct * use glob(3) and/or fnmatch(3) to do the matching. */ if (def_fast_glob) - rc = command_matches_fnmatch(sudoers_cmnd, sudoers_args, digests); + rc = command_matches_fnmatch(sudoers_cmnd, sudoers_args, runchroot, digests); else - rc = command_matches_glob(sudoers_cmnd, sudoers_args, digests); + rc = command_matches_glob(sudoers_cmnd, sudoers_args, runchroot, digests); } else { - rc = command_matches_normal(sudoers_cmnd, sudoers_args, digests); + rc = command_matches_normal(sudoers_cmnd, sudoers_args, runchroot, digests); } done: + if (saved_user_cmnd != NULL) { + free(user_cmnd); + user_cmnd = saved_user_cmnd; + if (user_stat != NULL) + *user_stat = saved_user_stat; + } sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "user command \"%s%s%s\" matches sudoers command \"%s%s%s\": %s", + "user command \"%s%s%s\" matches sudoers command \"%s%s%s\"%s%s: %s", user_cmnd, user_args ? " " : "", user_args ? user_args : "", sudoers_cmnd, sudoers_args ? " " : "", sudoers_args ? sudoers_args : "", + runchroot ? ", chroot " : "", runchroot ? runchroot : "", rc ? "true" : "false"); debug_return_bool(rc); } diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index 3307677a28..b469b959da 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -92,7 +92,7 @@ sudoers_lookup_pseudo(struct sudo_nss_list *snl, struct passwd *pw, /* Only check the command when listing another user. */ if (user_uid == 0 || list_pw == NULL || user_uid == list_pw->pw_uid || - cmnd_matches(nss->parse_tree, cs->cmnd) == ALLOW) + cmnd_matches(nss->parse_tree, cs->cmnd, cs->runchroot) == ALLOW) match = ALLOW; } } @@ -146,7 +146,8 @@ sudoers_lookup_check(struct sudo_nss *nss, struct passwd *pw, cs->runasuserlist, cs->runasgrouplist, &matching_user, NULL); if (runas_match == ALLOW) { - cmnd_match = cmnd_matches(nss->parse_tree, cs->cmnd); + cmnd_match = cmnd_matches(nss->parse_tree, cs->cmnd, + cs->runchroot); if (cmnd_match != UNSPEC) { /* * If user is running command as himself, @@ -196,6 +197,8 @@ apply_cmndspec(struct cmndspec *cs) } else { user_role = def_role; } + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user_role -> %s", user_role); } if (user_type == NULL) { if (cs->type != NULL) { @@ -208,6 +211,8 @@ apply_cmndspec(struct cmndspec *cs) } else { user_type = def_type; } + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user_type -> %s", user_type); } #endif /* HAVE_SELINUX */ #ifdef HAVE_PRIV_SET @@ -223,6 +228,8 @@ apply_cmndspec(struct cmndspec *cs) } else { runas_privs = def_privs; } + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "runas_privs -> %s", runas_privs); } if (runas_limitprivs == NULL) { if (cs->limitprivs != NULL) { @@ -235,10 +242,15 @@ apply_cmndspec(struct cmndspec *cs) } else { runas_limitprivs = def_limitprivs; } + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "runas_limitprivs -> %s", runas_limitprivs); } #endif /* HAVE_PRIV_SET */ - if (cs->timeout > 0) + if (cs->timeout > 0) { def_command_timeout = cs->timeout; + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_command_timeout -> %d", def_command_timeout); + } if (cs->runcwd != NULL) { free(def_runcwd); def_runcwd = strdup(cs->runcwd); @@ -247,6 +259,8 @@ apply_cmndspec(struct cmndspec *cs) U_("unable to allocate memory")); debug_return_bool(false); } + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_runcwd -> %s", def_runcwd); } if (cs->runchroot != NULL) { free(def_runchroot); @@ -256,28 +270,53 @@ apply_cmndspec(struct cmndspec *cs) U_("unable to allocate memory")); debug_return_bool(false); } + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_runchroot -> %s", def_runchroot); } - if (cs->tags.nopasswd != UNSPEC) + if (cs->tags.nopasswd != UNSPEC) { def_authenticate = !cs->tags.nopasswd; - if (cs->tags.noexec != UNSPEC) + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_authenticate -> %s", def_authenticate ? "true" : "false"); + } + if (cs->tags.noexec != UNSPEC) { def_noexec = cs->tags.noexec; - if (cs->tags.setenv != UNSPEC) + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_noexec -> %s", def_noexec ? "true" : "false"); + } + if (cs->tags.setenv != UNSPEC) { def_setenv = cs->tags.setenv; - if (cs->tags.log_input != UNSPEC) + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_setenv -> %s", def_setenv ? "true" : "false"); + } + if (cs->tags.log_input != UNSPEC) { def_log_input = cs->tags.log_input; - if (cs->tags.log_output != UNSPEC) + 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; + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_log_output -> %s", def_log_output ? "true" : "false"); + } if (cs->tags.send_mail != UNSPEC) { if (cs->tags.send_mail) { def_mail_all_cmnds = true; + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_mail_all_cmnds -> true"); } else { def_mail_all_cmnds = false; def_mail_always = false; def_mail_no_perms = false; + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_mail_all_cmnds -> false, def_mail_always -> false, " + "def_mail_no_perms -> false"); } } - if (cs->tags.follow != UNSPEC) + if (cs->tags.follow != UNSPEC) { def_sudoedit_follow = cs->tags.follow; + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_sudoedit_follow -> %s", def_sudoedit_follow ? "true" : "false"); + } } debug_return_bool(true); @@ -836,7 +875,8 @@ display_cmnd_check(struct sudoers_parse_tree *parse_tree, struct passwd *pw, runas_match = runaslist_matches(parse_tree, cs->runasuserlist, cs->runasgrouplist, NULL, NULL); if (runas_match == ALLOW) { - cmnd_match = cmnd_matches(parse_tree, cs->cmnd); + cmnd_match = cmnd_matches(parse_tree, cs->cmnd, + cs->runchroot); if (cmnd_match != UNSPEC) debug_return_int(cmnd_match); } diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index 7c4fa93505..6fc23d7c47 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -312,7 +312,7 @@ void reparent_parse_tree(struct sudoers_parse_tree *new_tree); bool addr_matches(char *n); /* match_command.c */ -bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, const struct command_digest_list *digests); +bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, const char *runchroot, const struct command_digest_list *digests); /* match_digest.c */ bool digest_matches(int fd, const char *file, const struct command_digest_list *digests); @@ -325,8 +325,8 @@ bool hostname_matches(const char *shost, const char *lhost, const char *pattern) bool netgr_matches(const char *netgr, const char *lhost, const char *shost, const char *user); bool usergr_matches(const char *group, const char *user, const struct passwd *pw); bool userpw_matches(const char *sudoers_user, const char *user, const struct passwd *pw); -int cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m); -int cmndlist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *list); +int cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, const char *runchroot); +int cmndlist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *list, const char *runchroot); int host_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, const char *host, const char *shost, const struct member *m); int hostlist_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, const struct member_list *list); int runaslist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *user_list, const struct member_list *group_list, struct member **matching_user, struct member **matching_group); diff --git a/plugins/sudoers/stubs.c b/plugins/sudoers/stubs.c index 7a7b1436ce..e2c671e361 100644 --- a/plugins/sudoers/stubs.c +++ b/plugins/sudoers/stubs.c @@ -80,6 +80,13 @@ get_interfaces(void) return &dummy; } +/* STUB */ +int +set_cmnd_path(const char *runchroot) +{ + return FOUND; +} + /* * Look up the hostname and set user_host and user_shost. */ diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 593c4ff597..933279b095 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -275,6 +275,59 @@ format_iolog_path(void) debug_return_str(iolog_path); } +static int +check_runchroot(void) +{ + debug_decl(check_runchroot, SUDOERS_DEBUG_PLUGIN); + + if (user_runchroot == NULL) + debug_return_bool(true); + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_runchroot %s, user_runchroot %s", + def_runchroot ? def_runchroot : "NULL", user_runchroot); + + if (def_runchroot == NULL || (strcmp(def_runchroot, "*") != 0 && + strcmp(def_runchroot, user_runchroot) != 0)) { + audit_failure(NewArgv, + N_("user not allowed to change root directory to %s"), + user_runchroot); + sudo_warnx("%s", U_("you are not permitted to use the -R option")); + debug_return_bool(false); + } + free(def_runchroot); + if ((def_runchroot = strdup(user_runchroot)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(-1); + } + debug_return_bool(true); +} + +static int +check_runcwd(void) +{ + debug_decl(check_runcwd, SUDOERS_DEBUG_PLUGIN); + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_runcwd %s, user_runcwd %s, user_cwd %s", + def_runcwd, user_runcwd, user_cwd); + + if (strcmp(user_cwd, user_runcwd) != 0) { + if (def_runcwd == NULL || strcmp(def_runcwd, "*") != 0) { + audit_failure(NewArgv, + N_("user not allowed to change directory to %s"), user_runcwd); + sudo_warnx("%s", U_("you are not permitted to use the -D option")); + debug_return_bool(false); + } + free(def_runcwd); + if ((def_runcwd = strdup(user_runcwd)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } + } + debug_return_bool(true); +} + int sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], bool verbose, void *closure) @@ -396,32 +449,24 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], } } - if (user_runchroot != NULL) { - if (def_runchroot == NULL || strcmp(def_runchroot, "*") != 0) { - audit_failure(NewArgv, - N_("user not allowed to change root directory to %s"), - user_runchroot); - sudo_warnx("%s", U_("you are not permitted to use the -R option")); - goto bad; - } - free(def_runchroot); - if ((def_runchroot = strdup(user_runchroot)) == NULL) { - sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - goto done; - } + /* Check whether user_runchroot is permitted (if specified). */ + switch (check_runchroot()) { + case true: + break; + case false: + goto bad; + default: + goto done; } - if (strcmp(user_cwd, user_runcwd) != 0) { - if (def_runcwd == NULL || strcmp(def_runcwd, "*") != 0) { - audit_failure(NewArgv, - N_("user not allowed to change directory to %s"), user_runcwd); - sudo_warnx("%s", U_("you are not permitted to use the -D option")); - goto bad; - } - free(def_runcwd); - if ((def_runcwd = strdup(user_runcwd)) == NULL) { - sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - goto done; - } + + /* Check whether user_runcwd is permitted (if specified). */ + switch (check_runcwd()) { + case true: + break; + case false: + goto bad; + default: + goto done; } /* @@ -861,6 +906,38 @@ init_vars(char * const envp[]) debug_return_bool(true); } +/* + * Fill in user_cmnd and user_stat variables. + * Does not fill in user_base. + */ +int +set_cmnd_path(const char *runchroot) +{ + char *path = user_path; + int ret; + debug_decl(set_cmnd_path, SUDOERS_DEBUG_PLUGIN); + + if (def_secure_path && !user_is_exempt()) + path = def_secure_path; + if (!set_perms(PERM_RUNAS)) + debug_return_int(NOT_FOUND_ERROR); + ret = find_path(NewArgv[0], &user_cmnd, user_stat, path, + runchroot, def_ignore_dot, NULL); + if (!restore_perms()) + debug_return_int(NOT_FOUND_ERROR); + if (ret == NOT_FOUND) { + /* Failed as root, try as invoking user. */ + if (!set_perms(PERM_USER)) + debug_return_int(false); + ret = find_path(NewArgv[0], &user_cmnd, user_stat, path, + runchroot, def_ignore_dot, NULL); + if (!restore_perms()) + debug_return_int(NOT_FOUND_ERROR); + } + + debug_return_int(ret); +} + /* * Fill in user_cmnd, user_args, user_base and user_stat variables * and apply any command-specific defaults entries. @@ -869,7 +946,6 @@ static int set_cmnd(void) { struct sudo_nss *nss; - char *path = user_path; int ret = FOUND; debug_decl(set_cmnd, SUDOERS_DEBUG_PLUGIN); @@ -886,23 +962,12 @@ set_cmnd(void) if (sudo_mode & (MODE_RUN | MODE_EDIT | MODE_CHECK)) { if (ISSET(sudo_mode, MODE_RUN | MODE_CHECK)) { - if (def_secure_path && !user_is_exempt()) - path = def_secure_path; - if (!set_perms(PERM_RUNAS)) - debug_return_int(-1); - ret = find_path(NewArgv[0], &user_cmnd, user_stat, path, - def_ignore_dot, NULL); - if (!restore_perms()) - debug_return_int(-1); - if (ret == NOT_FOUND) { - /* Failed as root, try as invoking user. */ - if (!set_perms(PERM_USER)) - debug_return_int(-1); - ret = find_path(NewArgv[0], &user_cmnd, user_stat, path, - def_ignore_dot, NULL); - if (!restore_perms()) - debug_return_int(-1); - } + const char *runchroot = user_runchroot; + if (runchroot == NULL && def_runchroot != NULL && + strcmp(def_runchroot, "*") != 0) + runchroot = def_runchroot; + + ret = set_cmnd_path(runchroot); if (ret == NOT_FOUND_ERROR) { if (errno == ENAMETOOLONG) { audit_failure(NewArgv, N_("command too long")); @@ -922,7 +987,7 @@ set_cmnd(void) size += strlen(*av) + 1; if (size == 0 || (user_args = malloc(size)) == NULL) { sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); - debug_return_int(-1); + debug_return_int(NOT_FOUND_ERROR); } if (ISSET(sudo_mode, MODE_SHELL|MODE_LOGIN_SHELL)) { /* @@ -944,7 +1009,7 @@ set_cmnd(void) n = strlcpy(to, *av, size - (to - user_args)); if (n >= size - (to - user_args)) { sudo_warnx(U_("internal error, %s overflow"), __func__); - debug_return_int(-1); + debug_return_int(NOT_FOUND_ERROR); } to += n; *to++ = ' '; diff --git a/plugins/sudoers/sudoers.h b/plugins/sudoers/sudoers.h index 0c493cc82d..1dae3e7a3b 100644 --- a/plugins/sudoers/sudoers.h +++ b/plugins/sudoers/sudoers.h @@ -263,11 +263,12 @@ struct timespec; #define YY_DECL int sudoerslex(void) /* goodpath.c */ -bool sudo_goodpath(const char *path, struct stat *sbp); +bool sudo_goodpath(const char *path, const char *runchroot, struct stat *sbp); /* findpath.c */ int find_path(const char *infile, char **outfile, struct stat *sbp, - const char *path, int ignore_dot, char * const *whitelist); + const char *path, const char *runchroot, int ignore_dot, + char * const *whitelist); /* check.c */ int check_user(int validate, int mode); @@ -394,6 +395,7 @@ bool matches_env_pattern(const char *pattern, const char *var, bool *full_match) /* sudoers.c */ FILE *open_sudoers(const char *, bool, bool *); +int set_cmnd_path(const char *runchroot); int sudoers_init(void *info, char * const envp[]); int sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], bool verbose, void *closure); void sudoers_cleanup(void); diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index effbd60f77..e88e5f1a02 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -336,7 +336,8 @@ main(int argc, char *argv[]) cs->runasuserlist, cs->runasgrouplist, NULL, NULL); if (runas_match == ALLOW) { puts("\trunas matched"); - cmnd_match = cmnd_matches(&parsed_policy, cs->cmnd); + cmnd_match = cmnd_matches(&parsed_policy, cs->cmnd, + cs->runchroot); if (cmnd_match != UNSPEC) match = cmnd_match; printf("\tcmnd %s\n", match == ALLOW ? "allowed" : @@ -499,6 +500,12 @@ restore_perms(void) return true; } +int +set_cmnd_path(const char *runchroot) +{ + return FOUND; +} + static bool print_defaults(struct sudo_lbuf *lbuf) { From 10d3d69aa1eab983c5abbcbe148d34fc95d2ed62 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 9 Sep 2020 15:26:45 -0600 Subject: [PATCH 098/113] Pass a struct to the match functions to track the resolved command. This makes it possible to update user_cmnd and cmnd_status modified by per-rule CHROOT settings. --- plugins/sudoers/defaults.c | 2 +- plugins/sudoers/match.c | 11 ++++++----- plugins/sudoers/match_command.c | 24 +++++++++++++++++++----- plugins/sudoers/parse.c | 27 +++++++++++++++++++++------ plugins/sudoers/parse.h | 18 ++++++++++++++---- plugins/sudoers/sudoers.c | 3 +-- plugins/sudoers/testsudoers.c | 2 +- 7 files changed, 63 insertions(+), 24 deletions(-) diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index 637bf99473..ba6228d47d 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -688,7 +688,7 @@ default_binding_matches(struct sudoers_parse_tree *parse_tree, debug_return_bool(true); break; case DEFAULTS_CMND: - if (cmndlist_matches(parse_tree, d->binding, NULL) == ALLOW) + if (cmndlist_matches(parse_tree, d->binding, NULL, NULL) == ALLOW) debug_return_bool(true); break; } diff --git a/plugins/sudoers/match.c b/plugins/sudoers/match.c index 66bfd29115..eb77cf2c31 100644 --- a/plugins/sudoers/match.c +++ b/plugins/sudoers/match.c @@ -366,14 +366,15 @@ host_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, */ int cmndlist_matches(struct sudoers_parse_tree *parse_tree, - const struct member_list *list, const char *runchroot) + const struct member_list *list, const char *runchroot, + struct cmnd_info *info) { struct member *m; int matched = UNSPEC; debug_decl(cmndlist_matches, SUDOERS_DEBUG_MATCH); TAILQ_FOREACH_REVERSE(m, list, member_list, entries) { - matched = cmnd_matches(parse_tree, m, runchroot); + matched = cmnd_matches(parse_tree, m, runchroot, info); if (matched != UNSPEC) break; } @@ -386,7 +387,7 @@ cmndlist_matches(struct sudoers_parse_tree *parse_tree, */ int cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, - const char *runchroot) + const char *runchroot, struct cmnd_info *info) { struct alias *a; struct sudo_command *c; @@ -402,13 +403,13 @@ cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, FALLTHROUGH; case COMMAND: c = (struct sudo_command *)m->name; - if (command_matches(c->cmnd, c->args, runchroot, &c->digests)) + if (command_matches(c->cmnd, c->args, runchroot, info, &c->digests)) matched = !m->negated; break; case ALIAS: a = alias_get(parse_tree, m->name, CMNDALIAS); if (a != NULL) { - rc = cmndlist_matches(parse_tree, &a->members, runchroot); + rc = cmndlist_matches(parse_tree, &a->members, runchroot, info); if (rc != UNSPEC) matched = m->negated ? !rc : rc; alias_put(a); diff --git a/plugins/sudoers/match_command.c b/plugins/sudoers/match_command.c index 07769320fd..0be9e850ef 100644 --- a/plugins/sudoers/match_command.c +++ b/plugins/sudoers/match_command.c @@ -528,8 +528,10 @@ command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, /* If it ends in '/' it is a directory spec. */ dlen = strlen(sudoers_cmnd); - if (sudoers_cmnd[dlen - 1] == '/') - debug_return_bool(command_matches_dir(sudoers_cmnd, dlen, runchroot, digests)); + if (sudoers_cmnd[dlen - 1] == '/') { + debug_return_bool(command_matches_dir(sudoers_cmnd, dlen, runchroot, + digests)); + } /* Only proceed if user_base and basename(sudoers_cmnd) match */ if ((base = strrchr(sudoers_cmnd, '/')) == NULL) @@ -584,7 +586,8 @@ command_matches_normal(const char *sudoers_cmnd, const char *sudoers_args, */ bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, - const char *runchroot, const struct command_digest_list *digests) + const char *runchroot, struct cmnd_info *info, + const struct command_digest_list *digests) { char *saved_user_cmnd = NULL; struct stat saved_user_stat; @@ -605,11 +608,16 @@ command_matches(const char *sudoers_cmnd, const char *sudoers_args, runchroot = def_runchroot; } else { /* Rule-specific runchroot, reset user_cmnd and user_stat. */ + int status; + saved_user_cmnd = user_cmnd; if (user_stat != NULL) saved_user_stat = *user_stat; - if (set_cmnd_path(runchroot) != FOUND) + status = set_cmnd_path(runchroot); + if (status != FOUND) saved_user_cmnd = NULL; + if (info != NULL) + info->status = status; } if (sudoers_cmnd == NULL) { @@ -648,7 +656,13 @@ command_matches(const char *sudoers_cmnd, const char *sudoers_args, } done: if (saved_user_cmnd != NULL) { - free(user_cmnd); + if (info != NULL) { + info->cmnd_path = user_cmnd; + if (user_stat != NULL) + info->cmnd_stat = *user_stat; + } else { + free(user_cmnd); + } user_cmnd = saved_user_cmnd; if (user_stat != NULL) *user_stat = saved_user_stat; diff --git a/plugins/sudoers/parse.c b/plugins/sudoers/parse.c index b469b959da..dcb0be4a6e 100644 --- a/plugins/sudoers/parse.c +++ b/plugins/sudoers/parse.c @@ -92,7 +92,8 @@ sudoers_lookup_pseudo(struct sudo_nss_list *snl, struct passwd *pw, /* Only check the command when listing another user. */ if (user_uid == 0 || list_pw == NULL || user_uid == list_pw->pw_uid || - cmnd_matches(nss->parse_tree, cs->cmnd, cs->runchroot) == ALLOW) + cmnd_matches(nss->parse_tree, cs->cmnd, cs->runchroot, + NULL) == ALLOW) match = ALLOW; } } @@ -112,7 +113,7 @@ sudoers_lookup_pseudo(struct sudo_nss_list *snl, struct passwd *pw, static int sudoers_lookup_check(struct sudo_nss *nss, struct passwd *pw, - int *validated, struct cmndspec **matching_cs, + int *validated, struct cmnd_info *info, struct cmndspec **matching_cs, struct defaults_list **defs, time_t now) { int host_match, runas_match, cmnd_match; @@ -122,6 +123,8 @@ sudoers_lookup_check(struct sudo_nss *nss, struct passwd *pw, struct member *matching_user; debug_decl(sudoers_lookup_check, SUDOERS_DEBUG_PARSER); + memset(info, 0, sizeof(*info)); + TAILQ_FOREACH_REVERSE(us, &nss->parse_tree->userspecs, userspec_list, entries) { if (userlist_matches(nss->parse_tree, pw, &us->users) != ALLOW) continue; @@ -147,7 +150,7 @@ sudoers_lookup_check(struct sudo_nss *nss, struct passwd *pw, NULL); if (runas_match == ALLOW) { cmnd_match = cmnd_matches(nss->parse_tree, cs->cmnd, - cs->runchroot); + cs->runchroot, info); if (cmnd_match != UNSPEC) { /* * If user is running command as himself, @@ -167,6 +170,8 @@ sudoers_lookup_check(struct sudo_nss *nss, struct passwd *pw, cmnd_match ? "allowed" : "denied"); debug_return_int(cmnd_match); } + free(info->cmnd_path); + memset(info, 0, sizeof(*info)); } } } @@ -327,13 +332,15 @@ apply_cmndspec(struct cmndspec *cs) * allowed to run the specified command on this host as the target user. */ int -sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int validated, +sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int *cmnd_status, int pwflag) { struct defaults_list *defs = NULL; struct sudoers_parse_tree *parse_tree = NULL; struct cmndspec *cs = NULL; struct sudo_nss *nss; + struct cmnd_info info; + int validated = FLAG_NO_USER | FLAG_NO_HOST; int m, match = UNSPEC; time_t now; debug_decl(sudoers_lookup, SUDOERS_DEBUG_PARSER); @@ -357,7 +364,7 @@ sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int validated, break; } - m = sudoers_lookup_check(nss, pw, &validated, &cs, &defs, now); + m = sudoers_lookup_check(nss, pw, &validated, &info, &cs, &defs, now); if (m != UNSPEC) { match = m; parse_tree = nss->parse_tree; @@ -367,6 +374,14 @@ sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int validated, break; } if (match != UNSPEC) { + if (info.cmnd_path != NULL) { + /* Update user_cmnd, user_stat, cmnd_status from matching entry. */ + free(user_cmnd); + user_cmnd = info.cmnd_path; + if (user_stat != NULL) + *user_stat = info.cmnd_stat; + *cmnd_status = info.status; + } if (defs != NULL) update_defaults(parse_tree, defs, SETDEF_GENERIC, false); if (!apply_cmndspec(cs)) @@ -876,7 +891,7 @@ display_cmnd_check(struct sudoers_parse_tree *parse_tree, struct passwd *pw, cs->runasgrouplist, NULL, NULL); if (runas_match == ALLOW) { cmnd_match = cmnd_matches(parse_tree, cs->cmnd, - cs->runchroot); + cs->runchroot, NULL); if (cmnd_match != UNSPEC) debug_return_int(cmnd_match); } diff --git a/plugins/sudoers/parse.h b/plugins/sudoers/parse.h index 6fc23d7c47..f8e820f187 100644 --- a/plugins/sudoers/parse.h +++ b/plugins/sudoers/parse.h @@ -20,6 +20,7 @@ #ifndef SUDOERS_PARSE_H #define SUDOERS_PARSE_H +#include #include "sudo_queue.h" /* Characters that must be quoted in sudoers. */ @@ -281,6 +282,15 @@ struct sudoers_parse_tree { const char *shost, *lhost; }; +/* + * Info about the command being resolved. + */ +struct cmnd_info { + struct stat cmnd_stat; + char *cmnd_path; + int status; +}; + /* alias.c */ struct rbtree *alloc_aliases(void); void free_aliases(struct rbtree *aliases); @@ -312,7 +322,7 @@ void reparent_parse_tree(struct sudoers_parse_tree *new_tree); bool addr_matches(char *n); /* match_command.c */ -bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, const char *runchroot, const struct command_digest_list *digests); +bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, const char *runchroot, struct cmnd_info *info, const struct command_digest_list *digests); /* match_digest.c */ bool digest_matches(int fd, const char *file, const struct command_digest_list *digests); @@ -325,8 +335,8 @@ bool hostname_matches(const char *shost, const char *lhost, const char *pattern) bool netgr_matches(const char *netgr, const char *lhost, const char *shost, const char *user); bool usergr_matches(const char *group, const char *user, const struct passwd *pw); bool userpw_matches(const char *sudoers_user, const char *user, const struct passwd *pw); -int cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, const char *runchroot); -int cmndlist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *list, const char *runchroot); +int cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, const char *runchroot, struct cmnd_info *info); +int cmndlist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *list, const char *runchroot, struct cmnd_info *info); int host_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, const char *host, const char *shost, const struct member *m); int hostlist_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, const struct member_list *list); int runaslist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *user_list, const struct member_list *group_list, struct member **matching_user, struct member **matching_group); @@ -362,7 +372,7 @@ const char *digest_type_to_name(int digest_type); /* parse.c */ struct sudo_nss_list; -int sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int validated, int pwflag); +int sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int *cmnd_status, int pwflag); int display_privs(struct sudo_nss_list *snl, struct passwd *pw, bool verbose); int display_cmnd(struct sudo_nss_list *snl, struct passwd *pw); diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index 933279b095..df2da07305 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -418,8 +418,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], * Check sudoers sources, using the locale specified in sudoers. */ sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale); - validated = sudoers_lookup(snl, sudo_user.pw, FLAG_NO_USER | FLAG_NO_HOST, - pwflag); + validated = sudoers_lookup(snl, sudo_user.pw, &cmnd_status, pwflag); if (ISSET(validated, VALIDATE_ERROR)) { /* The lookup function should have printed an error. */ goto done; diff --git a/plugins/sudoers/testsudoers.c b/plugins/sudoers/testsudoers.c index e88e5f1a02..8bce2682a2 100644 --- a/plugins/sudoers/testsudoers.c +++ b/plugins/sudoers/testsudoers.c @@ -337,7 +337,7 @@ main(int argc, char *argv[]) if (runas_match == ALLOW) { puts("\trunas matched"); cmnd_match = cmnd_matches(&parsed_policy, cs->cmnd, - cs->runchroot); + cs->runchroot, NULL); if (cmnd_match != UNSPEC) match = cmnd_match; printf("\tcmnd %s\n", match == ALLOW ? "allowed" : From c200e71637e3ddfdbddae057882fa78033bc94fd Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 9 Sep 2020 19:18:24 -0600 Subject: [PATCH 099/113] Add callback for runchroot Defaults and require password -D/-R checks. Using a command-based Default for runchroot will still only work for paths that exist both in and outside the chroot. --- plugins/sudoers/sudoers.c | 82 ++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 28 deletions(-) diff --git a/plugins/sudoers/sudoers.c b/plugins/sudoers/sudoers.c index df2da07305..d9e83bcb6c 100644 --- a/plugins/sudoers/sudoers.c +++ b/plugins/sudoers/sudoers.c @@ -73,6 +73,7 @@ static bool cb_fqdn(const union sudo_defs_val *); static bool cb_runas_default(const union sudo_defs_val *); static bool cb_tty_tickets(const union sudo_defs_val *); static bool cb_umask(const union sudo_defs_val *); +static bool cb_runchroot(const union sudo_defs_val *); static int set_cmnd(void); static int create_admin_success_flag(void); static bool init_vars(char * const *); @@ -100,6 +101,7 @@ static char *runas_group; static struct sudo_nss_list *snl; static bool unknown_runas_uid; static bool unknown_runas_gid; +static int cmnd_status = -1; #ifdef __linux__ static struct rlimit nproclimit; @@ -276,9 +278,9 @@ format_iolog_path(void) } static int -check_runchroot(void) +check_user_runchroot(void) { - debug_decl(check_runchroot, SUDOERS_DEBUG_PLUGIN); + debug_decl(check_user_runchroot, SUDOERS_DEBUG_PLUGIN); if (user_runchroot == NULL) debug_return_bool(true); @@ -292,7 +294,8 @@ check_runchroot(void) audit_failure(NewArgv, N_("user not allowed to change root directory to %s"), user_runchroot); - sudo_warnx("%s", U_("you are not permitted to use the -R option")); + sudo_warnx(U_("you are not permitted to use the -R option with %s"), + user_cmnd); debug_return_bool(false); } free(def_runchroot); @@ -304,9 +307,9 @@ check_runchroot(void) } static int -check_runcwd(void) +check_user_runcwd(void) { - debug_decl(check_runcwd, SUDOERS_DEBUG_PLUGIN); + debug_decl(check_user_runcwd, SUDOERS_DEBUG_PLUGIN); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "def_runcwd %s, user_runcwd %s, user_cwd %s", @@ -316,7 +319,8 @@ check_runcwd(void) if (def_runcwd == NULL || strcmp(def_runcwd, "*") != 0) { audit_failure(NewArgv, N_("user not allowed to change directory to %s"), user_runcwd); - sudo_warnx("%s", U_("you are not permitted to use the -D option")); + sudo_warnx(U_("you are not permitted to use the -D option with %s"), + user_cmnd); debug_return_bool(false); } free(def_runcwd); @@ -335,8 +339,7 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], char *iolog_path = NULL; mode_t cmnd_umask = ACCESSPERMS; struct sudo_nss *nss; - int cmnd_status = -1, oldlocale, validated; - int ret = -1; + int oldlocale, validated, ret = -1; debug_decl(sudoers_policy_main, SUDOERS_DEBUG_PLUGIN); sudo_warn_set_locale_func(sudoers_warn_setlocale); @@ -448,26 +451,6 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], } } - /* Check whether user_runchroot is permitted (if specified). */ - switch (check_runchroot()) { - case true: - break; - case false: - goto bad; - default: - goto done; - } - - /* Check whether user_runcwd is permitted (if specified). */ - switch (check_runcwd()) { - case true: - break; - case false: - goto bad; - default: - goto done; - } - /* * Look up the timestamp dir owner if one is specified. */ @@ -548,6 +531,26 @@ sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], goto done; } + /* Check whether user_runchroot is permitted (if specified). */ + switch (check_user_runchroot()) { + case true: + break; + case false: + goto bad; + default: + goto done; + } + + /* Check whether user_runcwd is permitted (if specified). */ + switch (check_user_runcwd()) { + case true: + break; + case false: + goto bad; + default: + goto done; + } + /* If run as root with SUDO_USER set, set sudo_user.pw to that user. */ /* XXX - causes confusion when root is not listed in sudoers */ if (sudo_mode & (MODE_RUN | MODE_EDIT) && prev_user != NULL) { @@ -880,6 +883,9 @@ init_vars(char * const envp[]) /* Set umask callback. */ sudo_defs_table[I_UMASK].callback = cb_umask; + /* Set runchroot callback. */ + sudo_defs_table[I_RUNCHROOT].callback = cb_runchroot; + /* It is now safe to use log_warningx() and set_perms() */ if (unknown_user) { log_warningx(SLOG_SEND_MAIL, N_("unknown uid: %u"), @@ -1419,6 +1425,26 @@ cb_umask(const union sudo_defs_val *sd_un) debug_return_bool(true); } +/* + * Callback for runchroot sudoers setting. + */ +static bool +cb_runchroot(const union sudo_defs_val *sd_un) +{ + debug_decl(cb_runchroot, SUDOERS_DEBUG_PLUGIN); + + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "def_runchroot now %s", sd_un->str); + if (user_cmnd != NULL) { + /* Update user_cmnd based on the new chroot. */ + cmnd_status = set_cmnd_path(sd_un->str); + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user_cmnd now %s", user_cmnd); + } + + debug_return_bool(true); +} + /* * Cleanup hook for sudo_fatal()/sudo_fatalx() */ From 5ca6056a32fe153e83abc314bfd2a9b2fe1ed79a Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 9 Sep 2020 21:16:38 -0600 Subject: [PATCH 100/113] Add simple runchroot and runcwd examples. Also document the limitation of command-based Defaults settings. --- doc/sudoers.man.in | 31 ++++++++++++++++++++++++------- doc/sudoers.mdoc.in | 31 ++++++++++++++++++++++++------- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in index 0b57e4ca57..77ea0d72dc 100644 --- a/doc/sudoers.man.in +++ b/doc/sudoers.man.in @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDOERS" "@mansectform@" "September 1, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "@mansectform@" "September 9, 2020" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -1556,7 +1556,7 @@ indicates that the user may specify the root directory by running \fBsudo\fR with the \fB\-R\fR -option . +option. This setting can be used to run the command in a chroot(2) \(lqsandbox\(rq @@ -4481,6 +4481,16 @@ See the \fIChroot_Spec\fR section for more details. .sp +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 +Defaults settings or to a +\fICmnd_Spec\fR +that includes a +\fIChroot_Spec\fR. +.sp This setting is only supported by version 1.9.3 or higher. .TP 14n runcwd @@ -5524,12 +5534,19 @@ to log via syslog(3) using the \fIauth\fR -facility in all cases. +facility in all cases and for commands to be run with +the target user's home directory as the working directory. We don't want to subject the full time staff to the \fBsudo\fR -lecture, user +lecture and we want to allow them to run commands in a +chroot(2) +\(lqsandbox\(rq +via the +\fB\-R\fR +option. +User \fBmillert\fR -need not give a password, and we don't want to reset the +need not provide a password and we don't want to reset the \fRLOGNAME\fR or \fRUSER\fR @@ -5554,9 +5571,9 @@ privileges. .sp .RS 0n # Override built-in defaults -Defaults syslog=auth +Defaults syslog=auth,runcwd=~ Defaults>root !set_logname -Defaults:FULLTIMERS !lecture +Defaults:FULLTIMERS !lecture,runchroot=* Defaults:millert !authenticate Defaults@SERVERS log_year, logfile=/var/log/sudo.log Defaults!PAGERS noexec diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in index d0c6ef463f..7f9829a3b2 100644 --- a/doc/sudoers.mdoc.in +++ b/doc/sudoers.mdoc.in @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd September 1, 2020 +.Dd September 9, 2020 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -1476,7 +1476,7 @@ indicates that the user may specify the root directory by running .Nm sudo with the .Fl R -option . +option. This setting can be used to run the command in a .Xr chroot 2 .Dq sandbox @@ -4192,6 +4192,16 @@ See the .Sx Chroot_Spec section for more details. .Pp +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 +Defaults settings or to a +.Em Cmnd_Spec +that includes a +.Em Chroot_Spec . +.Pp This setting is only supported by version 1.9.3 or higher. .It runcwd If set, @@ -5132,12 +5142,19 @@ to log via .Xr syslog 3 using the .Em auth -facility in all cases. +facility in all cases and for commands to be run with +the target user's home directory as the working directory. We don't want to subject the full time staff to the .Nm sudo -lecture, user +lecture and we want to allow them to run commands in a +.Xr chroot 2 +.Dq sandbox +via the +.Fl R +option. +User .Sy millert -need not give a password, and we don't want to reset the +need not provide a password and we don't want to reset the .Ev LOGNAME or .Ev USER @@ -5161,9 +5178,9 @@ Note that this will not effectively constrain users with privileges. .Bd -literal # Override built-in defaults -Defaults syslog=auth +Defaults syslog=auth,runcwd=~ Defaults>root !set_logname -Defaults:FULLTIMERS !lecture +Defaults:FULLTIMERS !lecture,runchroot=* Defaults:millert !authenticate Defaults@SERVERS log_year, logfile=/var/log/sudo.log Defaults!PAGERS noexec From 4239a45b693dfc79bcff049f6fae184e17419dea Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 10 Sep 2020 07:53:22 -0600 Subject: [PATCH 101/113] Sync example sudoers with manual page. --- examples/sudoers | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/sudoers b/examples/sudoers index 1ee8d7257a..a18c921670 100644 --- a/examples/sudoers +++ b/examples/sudoers @@ -8,9 +8,9 @@ ## # Override built-in defaults ## -Defaults syslog=auth +Defaults syslog=auth,runcwd=~ Defaults>root !set_logname -Defaults:FULLTIMERS !lecture +Defaults:FULLTIMERS !lecture,runchroot=* Defaults:millert !authenticate Defaults@SERVERS log_year, logfile=/var/log/sudo.log Defaults!PAGERS noexec From 3fc3b62d72b3e7cb58e1fabccdb6f6b61952b679 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 10 Sep 2020 08:10:05 -0600 Subject: [PATCH 102/113] Add missing check for strdup() failure. Coverity CID 214243 --- plugins/sudoers/iolog_client.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/sudoers/iolog_client.c b/plugins/sudoers/iolog_client.c index f208def0dc..7dc59098bd 100644 --- a/plugins/sudoers/iolog_client.c +++ b/plugins/sudoers/iolog_client.c @@ -539,11 +539,14 @@ log_server_connect(struct client_closure *closure) const char *cause = NULL; int sock; bool tls, ret = false; - debug_decl(restore_nproc, SUDOERS_DEBUG_UTIL); + debug_decl(log_server_connect, SUDOERS_DEBUG_UTIL); STAILQ_FOREACH(server, closure->log_details->log_servers, entries) { free(copy); - copy = strdup(server->str); + if ((copy = strdup(server->str)) == NULL) { + cause = U_("unable to allocate memory"); + break; + } if (!iolog_parse_host_port(copy, &host, &port, &tls, DEFAULT_PORT, DEFAULT_PORT_TLS)) { sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, From 86df234e14bf22d3557f44211cb0f9fe230845ba Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 12 Sep 2020 08:29:18 -0600 Subject: [PATCH 103/113] Update .pot files for 1.9.3. --- plugins/sudoers/po/sudoers.pot | 1395 +++++++++++++++++--------------- po/sudo.pot | 253 +++--- 2 files changed, 866 insertions(+), 782 deletions(-) diff --git a/plugins/sudoers/po/sudoers.pot b/plugins/sudoers/po/sudoers.pot index 98ef8bada1..2c7a727028 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.1\n" +"Project-Id-Version: sudo 1.9.3\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,69 +41,72 @@ msgstr "" msgid "Sorry, try again." msgstr "" -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 gram.y:295 -#: gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 gram.y:410 gram.y:419 -#: gram.y:430 gram.y:463 gram.y:470 gram.y:477 gram.y:484 gram.y:511 gram.y:583 -#: gram.y:590 gram.y:599 gram.y:608 gram.y:625 gram.y:737 gram.y:744 gram.y:752 -#: gram.y:758 gram.y:858 gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 -#: gram.y:919 gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 logsrvd/eventlog.c:223 -#: logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 gram.y:332 +#: gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 gram.y:453 gram.y:462 +#: gram.y:473 gram.y:508 gram.y:515 gram.y:522 gram.y:529 gram.y:556 gram.y:652 +#: gram.y:659 gram.y:668 gram.y:677 gram.y:694 gram.y:814 gram.y:821 gram.y:829 +#: gram.y:835 gram.y:935 gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 +#: gram.y:996 gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 logsrvd/eventlog.c:233 +#: logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -113,322 +116,339 @@ msgstr "" #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 logsrvd/eventlog.c:223 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 logsrvd/eventlog.c:233 #: logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 logsrvd/logsrvd.c:1266 -#: logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 logsrvd/sendlog.c:1309 -#: logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 logsrvd/sendlog.c:1312 +#: logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 logsrvd/eventlog.c:228 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 logsrvd/eventlog.c:238 #: plugins/sudoers/cvtsudoers_ldif.c:244 plugins/sudoers/cvtsudoers_ldif.c:251 -#: plugins/sudoers/cvtsudoers_ldif.c:563 plugins/sudoers/env.c:323 -#: plugins/sudoers/env.c:330 plugins/sudoers/env.c:435 -#: plugins/sudoers/iolog.c:561 plugins/sudoers/iolog.c:577 +#: plugins/sudoers/cvtsudoers_ldif.c:571 plugins/sudoers/env.c:323 +#: plugins/sudoers/env.c:330 plugins/sudoers/env.c:437 +#: plugins/sudoers/iolog.c:571 plugins/sudoers/iolog.c:587 #: plugins/sudoers/ldap.c:516 plugins/sudoers/ldap.c:747 #: plugins/sudoers/ldap.c:1080 plugins/sudoers/ldap_conf.c:222 -#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:89 -#: plugins/sudoers/logging.c:1088 plugins/sudoers/policy.c:521 -#: plugins/sudoers/policy.c:668 plugins/sudoers/policy.c:678 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:916 +#: plugins/sudoers/ldap_conf.c:312 plugins/sudoers/linux_audit.c:90 +#: plugins/sudoers/logging.c:1096 plugins/sudoers/policy.c:551 +#: plugins/sudoers/policy.c:706 plugins/sudoers/policy.c:716 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:1016 #: plugins/sudoers/testsudoers.c:249 plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "" @@ -515,17 +535,17 @@ msgstr "" msgid "unable to create TLS context: %s" msgstr "" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "" @@ -544,28 +564,28 @@ msgstr "" msgid "unable to get remote IP addr" msgstr "" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "" @@ -591,7 +611,7 @@ msgid "" " -V, --version display version information and exit\n" msgstr "" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "" @@ -600,9 +620,9 @@ msgstr "" msgid "invalid random drop value: %s" msgstr "" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "" @@ -683,7 +703,7 @@ msgid "" " -V, --version display version information and exit\n" msgstr "" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "" @@ -692,122 +712,122 @@ msgstr "" msgid "unable to get server IP addr" msgstr "" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "" @@ -817,11 +837,11 @@ msgstr "" msgid "Alias \"%s\" already defined" msgstr "" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "" @@ -843,11 +863,11 @@ msgstr "" msgid "unable to initialize BSD authentication" msgstr "" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "" @@ -954,7 +974,7 @@ msgstr "" msgid "PAM account management error: %s" msgstr "" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "" @@ -983,7 +1003,7 @@ msgstr "" msgid "SecurID communication failed" msgstr "" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "" @@ -991,7 +1011,7 @@ msgstr "" msgid "invalid passcode length for SecurID" msgstr "" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "" @@ -1019,7 +1039,7 @@ msgstr "" msgid "Unable to initialize authentication methods." msgstr "" -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "" @@ -1044,124 +1064,125 @@ msgid "" msgstr "" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" "\n" msgstr "" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1184,687 +1205,707 @@ msgid "" msgstr "" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "" "the SUDOERS_BASE environment variable is not set and the -b option was not " "specified." msgstr "" -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "" -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "" "If set, users may override the value of \"closefrom\" with the -C option" msgstr "" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "" "Use faster globbing that is less accurate but does not access the filesystem" msgstr "" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "" "The umask specified in sudoers will override the user's, even if it is more " "permissive" msgstr "" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "" "Check parent directories for writability when editing files with sudoedit" msgstr "" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "" "Log entries larger than this value will be split into multiple syslog " "messages: %u" msgstr "" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "" "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "" "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" +msgid "Working directory to change to before executing the command: %s" msgstr "" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/def_data.c:560 #, c-format -msgid "%s: unknown defaults entry \"%s\"" +msgid "Root directory to change to before executing the command: %s" msgstr "" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:184 #, c-format -msgid "%s:%d no value specified for \"%s\"" +msgid "%s:%d: unknown defaults entry \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:187 #, c-format -msgid "%s: no value specified for \"%s\"" +msgid "%s: unknown defaults entry \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:252 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" +msgid "%s:%d: no value specified for \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:236 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" +msgid "%s: no value specified for \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s:%d option \"%s\" does not take a value" +msgid "%s:%d: option \"%s\" does not take a value" msgstr "" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:277 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" msgstr "" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "" "sorry, you are not allowed to set the following environment variables: %s" msgstr "" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "" @@ -1918,88 +1959,88 @@ msgstr "" msgid "Local IP address and netmask pairs:\n" msgstr "" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "" @@ -2022,19 +2063,20 @@ msgstr "" msgid "unable to initialize LDAP: %s" msgstr "" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "" "start_tls specified but LDAP libs do not support ldap_start_tls_s() or " "ldap_start_tls_s_np()" msgstr "" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" +#, c-format +msgid "%s: port too large" msgstr "" #: plugins/sudoers/ldap_conf.c:260 @@ -2046,7 +2088,7 @@ msgstr "" msgid "unable to mix ldap and ldaps URIs" msgstr "" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "" @@ -2055,103 +2097,103 @@ msgstr "" msgid "unable to open audit system" msgstr "" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, 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:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "" msgstr[1] "" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "" @@ -2161,56 +2203,51 @@ msgstr "" msgid "digest for %s (%s) is not in %s form" msgstr "" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" "LDAP Role: %s\n" msgstr "" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" msgstr "" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr "" -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr "" -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr "" -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr "" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "" @@ -2225,134 +2262,144 @@ msgstr "" msgid "invalid LDIF attribute: %s" msgstr "" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "" @@ -2416,246 +2463,266 @@ msgstr "" msgid "truncated audit path argv[0]: %s" msgstr "" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "" -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "" -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" "\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2672,23 +2739,23 @@ msgid "" " -V, --version display version information and exit" msgstr "" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" msgstr "" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" msgstr "" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2731,89 +2798,89 @@ msgstr "" msgid "the -x option will be removed in a future release" msgstr "" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "" -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "" -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "" -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2821,73 +2888,73 @@ msgid "" " (Q)uit and save changes to sudoers file (DANGER!)\n" msgstr "" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" +msgid "Error: %s:%d: cycle in %s \"%s\"" msgstr "" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" +msgid "Warning: %s:%d: cycle in %s \"%s\"" msgstr "" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" +msgid "Warning: %s:%d: unused %s \"%s\"" msgstr "" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2899,6 +2966,6 @@ msgid "" " -V, --version display version information and exit\n" msgstr "" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "" diff --git a/po/sudo.pot b/po/sudo.pot index 322a4ec9ae..b94d7c5bbd 100644 --- a/po/sudo.pot +++ b/po/sudo.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.1\n" +"Project-Id-Version: sudo 1.9.3\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,16 +49,16 @@ msgstr "" #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:52 src/load_plugins.c:65 #: src/load_plugins.c:163 src/load_plugins.c:188 src/load_plugins.c:223 -#: src/load_plugins.c:462 src/load_plugins.c:468 src/parse_args.c:176 -#: src/parse_args.c:197 src/parse_args.c:270 src/parse_args.c:593 -#: src/parse_args.c:615 src/parse_args.c:640 src/preserve_fds.c:46 -#: src/preserve_fds.c:131 src/selinux.c:90 src/selinux.c:360 src/selinux.c:485 -#: src/selinux.c:494 src/sesh.c:116 src/sudo.c:624 src/sudo.c:693 -#: src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 src/sudo.c:752 src/sudo.c:761 -#: src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/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 #, c-format msgid "%s: %s" msgstr "" @@ -81,20 +81,20 @@ msgstr "" #: src/exec_pty.c:1269 src/exec_pty.c:1276 src/exec_pty.c:1283 #: src/exec_pty.c:1290 src/exec_pty.c:1298 src/exec_pty.c:1740 #: src/load_plugins.c:163 src/load_plugins.c:188 src/load_plugins.c:223 -#: src/load_plugins.c:462 src/load_plugins.c:468 src/parse_args.c:176 -#: src/parse_args.c:198 src/parse_args.c:270 src/parse_args.c:593 -#: src/parse_args.c:615 src/parse_args.c:640 src/preserve_fds.c:46 -#: src/preserve_fds.c:131 src/selinux.c:90 src/selinux.c:360 src/selinux.c:485 -#: src/selinux.c:494 src/sesh.c:116 src/sudo.c:234 src/sudo.c:624 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/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 msgid "unable to allocate memory" msgstr "" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "" @@ -171,12 +171,22 @@ msgstr "" msgid "%s is group writable" msgstr "" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "" + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "" @@ -257,7 +267,7 @@ msgid "unable to set controlling tty" msgstr "" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "" @@ -266,7 +276,7 @@ msgid "unable to receive message from parent" msgstr "" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "" @@ -274,7 +284,7 @@ msgstr "" msgid "unable to restore tty label" msgstr "" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "" @@ -325,7 +335,7 @@ msgstr "" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "" @@ -370,207 +380,214 @@ msgstr "" msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "" "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" "\n" msgstr "" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" "\n" msgstr "" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" msgstr "" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "" "list user's privileges or check a specific command; use twice for longer " "format" msgstr "" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "" @@ -675,16 +692,16 @@ msgstr "" msgid "unable to set key creation context to %s" msgstr "" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "" @@ -737,126 +754,126 @@ msgstr "" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "" "effective uid is not %d, is %s on a file system with the 'nosuid' option set " "or an NFS file system without root privileges?" msgstr "" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "" @@ -893,7 +910,7 @@ msgstr "" msgid "%s unchanged" msgstr "" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "" @@ -906,34 +923,34 @@ msgstr "" msgid "sesh: unable to create temporary files" msgstr "" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "" "unable to copy some of the temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "" @@ -949,27 +966,27 @@ msgstr "" msgid "unable to read password" msgstr "" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "" "a terminal is required to read the password; either use the -S option to " "read from standard input or configure an askpass helper" msgstr "" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "" From def99ffd78ff160b85c7d7962efb31731c8d81ec Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 14 Sep 2020 06:54:15 -0600 Subject: [PATCH 104/113] Fix typo in warning for T_CHPATH, list '~' not '*' twice. Bug #938 --- NEWS | 14 +++++++------- configure | 18 +++++++++--------- configure.ac | 2 +- plugins/sudoers/defaults.c | 4 ++-- plugins/sudoers/po/sudoers.pot | 8 ++++---- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/NEWS b/NEWS index 859fe0e180..6f9814a267 100644 --- a/NEWS +++ b/NEWS @@ -11,14 +11,14 @@ What's new in Sudo 1.9.3 easier to detect omissions in the symbol exports file, regardless of the platform. - * Fixed the libssl dependency in Debian packages on older releases + * Fixed the libssl dependency in Debian packages for older releases that use libssl1.0.0. - * Sudo (and visudo) now provide more detailed messages when a - syntax error is detected in sudoers. The offending line and - token are now displayed. If the parser was generated by GNU - bison, additional information about what token was expected is - also displayed. + * Sudo and visudo now provide more detailed messages when a syntax + error is detected in sudoers. The offending line and token are + now displayed. If the parser was generated by GNU bison, + additional information about what token was expected is also + displayed. Bug #841. * Sudoers rules must now end in either a newline or the end-of-file. Previously, it was possible to have multiple rules on a single @@ -31,7 +31,7 @@ What's new in Sudo 1.9.3 recovery from a syntax error less painful on systems where sudo is the primary method of superuser access. The historic behavior can be restored by add "error_recovery=false" to the sudoers - plugin's optional arguments in sudo.conf. + plugin's optional arguments in sudo.conf. Bug #618. * Fixed the sample_approval plugin's symbol exports file for systems where the compiler doesn't support symbol hiding. diff --git a/configure b/configure index d0b64a792f..19967900b8 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sudo 1.9.3. +# Generated by GNU Autoconf 2.69 for sudo 1.9.3b1. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.9.3' -PACKAGE_STRING='sudo 1.9.3' +PACKAGE_VERSION='1.9.3b1' +PACKAGE_STRING='sudo 1.9.3b1' PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/' PACKAGE_URL='' @@ -1584,7 +1584,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sudo 1.9.3 to adapt to many kinds of systems. +\`configure' configures sudo 1.9.3b1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1650,7 +1650,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.9.3:";; + short | recursive ) echo "Configuration of sudo 1.9.3b1:";; esac cat <<\_ACEOF @@ -1924,7 +1924,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.9.3 +sudo configure 1.9.3b1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2633,7 +2633,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sudo $as_me 1.9.3, which was +It was created by sudo $as_me 1.9.3b1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -28623,7 +28623,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.3, which was +This file was extended by sudo $as_me 1.9.3b1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -28689,7 +28689,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sudo config.status 1.9.3 +sudo config.status 1.9.3b1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 8732a96f20..b7ddcfd0ee 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.59]) -AC_INIT([sudo], [1.9.3], [https://bugzilla.sudo.ws/], [sudo]) +AC_INIT([sudo], [1.9.3b1], [https://bugzilla.sudo.ws/], [sudo]) AC_CONFIG_HEADERS([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) dnl diff --git a/plugins/sudoers/defaults.c b/plugins/sudoers/defaults.c index ba6228d47d..fb5b7d095f 100644 --- a/plugins/sudoers/defaults.c +++ b/plugins/sudoers/defaults.c @@ -1022,11 +1022,11 @@ valid_path(struct sudo_defs_types *def, const char *val, if (!quiet) { if (lineno > 0) { sudo_warnx( - U_("%s:%d: values for \"%s\" must start with a '/', '*', or '*'"), + U_("%s:%d: values for \"%s\" must start with a '/', '~', or '*'"), file, lineno, def->name); } else { sudo_warnx( - U_("%s: values for \"%s\" must start with a '/', '*', or '*'"), + U_("%s: values for \"%s\" must start with a '/', '~', or '*'"), file, def->name); } } diff --git a/plugins/sudoers/po/sudoers.pot b/plugins/sudoers/po/sudoers.pot index 2c7a727028..e14eac379a 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.3\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1868,12 +1868,12 @@ msgstr "" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" msgstr "" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" msgstr "" #: plugins/sudoers/defaults.c:1040 From 1154e1d605737431df9d95672fc34bcc4ff22cfa Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 16 Sep 2020 06:19:42 -0600 Subject: [PATCH 105/113] Back out sudo 1.9.3b1 version change. --- configure | 18 +++++++++--------- configure.ac | 2 +- plugins/sudoers/po/sudoers.pot | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 19967900b8..d0b64a792f 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sudo 1.9.3b1. +# Generated by GNU Autoconf 2.69 for sudo 1.9.3. # # Report bugs to . # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.9.3b1' -PACKAGE_STRING='sudo 1.9.3b1' +PACKAGE_VERSION='1.9.3' +PACKAGE_STRING='sudo 1.9.3' PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/' PACKAGE_URL='' @@ -1584,7 +1584,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sudo 1.9.3b1 to adapt to many kinds of systems. +\`configure' configures sudo 1.9.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1650,7 +1650,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.9.3b1:";; + short | recursive ) echo "Configuration of sudo 1.9.3:";; esac cat <<\_ACEOF @@ -1924,7 +1924,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.9.3b1 +sudo configure 1.9.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2633,7 +2633,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sudo $as_me 1.9.3b1, which was +It was created by sudo $as_me 1.9.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -28623,7 +28623,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.3b1, which was +This file was extended by sudo $as_me 1.9.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -28689,7 +28689,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sudo config.status 1.9.3b1 +sudo config.status 1.9.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index b7ddcfd0ee..8732a96f20 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.59]) -AC_INIT([sudo], [1.9.3b1], [https://bugzilla.sudo.ws/], [sudo]) +AC_INIT([sudo], [1.9.3], [https://bugzilla.sudo.ws/], [sudo]) AC_CONFIG_HEADERS([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) dnl diff --git a/plugins/sudoers/po/sudoers.pot b/plugins/sudoers/po/sudoers.pot index e14eac379a..301a29419d 100644 --- a/plugins/sudoers/po/sudoers.pot +++ b/plugins/sudoers/po/sudoers.pot @@ -5,7 +5,7 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.3b1\n" +"Project-Id-Version: sudo 1.9.3\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" "POT-Creation-Date: 2020-09-14 06:53-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" From 9f6a3d35cbc65d8a5ac942521df5413808d2bc9f Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 16 Sep 2020 13:28:03 -0600 Subject: [PATCH 106/113] Updated translations from translationproject.org --- plugins/sudoers/po/cs.mo | Bin 63309 -> 64868 bytes plugins/sudoers/po/cs.po | 1430 ++++++++++++++-------------- plugins/sudoers/po/de.mo | Bin 65880 -> 67494 bytes plugins/sudoers/po/de.po | 1431 ++++++++++++++-------------- plugins/sudoers/po/eo.mo | Bin 60671 -> 62133 bytes plugins/sudoers/po/eo.po | 1434 +++++++++++++++-------------- plugins/sudoers/po/fi.mo | Bin 55780 -> 55765 bytes plugins/sudoers/po/fi.po | 1739 ++++++++++++++++++----------------- plugins/sudoers/po/fr.mo | Bin 69762 -> 69757 bytes plugins/sudoers/po/fr.po | 68 +- plugins/sudoers/po/hr.mo | Bin 64087 -> 64112 bytes plugins/sudoers/po/hr.po | 79 +- plugins/sudoers/po/it.mo | Bin 63036 -> 63031 bytes plugins/sudoers/po/it.po | 68 +- plugins/sudoers/po/ja.mo | Bin 64601 -> 73149 bytes plugins/sudoers/po/ja.po | 1556 ++++++++++++++++--------------- plugins/sudoers/po/pl.mo | Bin 63912 -> 65403 bytes plugins/sudoers/po/pl.po | 1413 ++++++++++++++-------------- plugins/sudoers/po/pt.mo | Bin 62207 -> 63696 bytes plugins/sudoers/po/pt.po | 1434 +++++++++++++++-------------- plugins/sudoers/po/pt_BR.mo | Bin 64357 -> 65919 bytes plugins/sudoers/po/pt_BR.po | 1447 +++++++++++++++-------------- plugins/sudoers/po/sr.mo | Bin 79943 -> 81537 bytes plugins/sudoers/po/sr.po | 1689 ++++++++++++++++++---------------- plugins/sudoers/po/uk.mo | Bin 86400 -> 88346 bytes plugins/sudoers/po/uk.po | 1434 +++++++++++++++-------------- plugins/sudoers/po/zh_TW.mo | Bin 57794 -> 59152 bytes plugins/sudoers/po/zh_TW.po | 1436 +++++++++++++++-------------- po/cs.mo | Bin 20437 -> 20882 bytes po/cs.po | 253 ++--- po/de.mo | Bin 21948 -> 22386 bytes po/de.po | 255 ++--- po/eo.mo | Bin 20019 -> 20448 bytes po/eo.po | 257 +++--- po/fi.mo | Bin 21138 -> 21067 bytes po/fi.po | 70 +- po/fr.mo | Bin 21777 -> 21688 bytes po/fr.po | 70 +- po/hr.mo | Bin 20760 -> 20810 bytes po/hr.po | 79 +- po/it.mo | Bin 21153 -> 21118 bytes po/it.po | 72 +- po/ja.mo | Bin 24282 -> 24751 bytes po/ja.po | 255 ++--- po/pl.mo | Bin 20991 -> 21416 bytes po/pl.po | 253 ++--- po/pt.mo | Bin 20513 -> 20931 bytes po/pt.po | 253 ++--- po/pt_BR.mo | Bin 21161 -> 21589 bytes po/pt_BR.po | 258 +++--- po/sr.mo | Bin 26770 -> 26799 bytes po/sr.po | 605 ++++++------ po/tr.mo | Bin 20392 -> 20822 bytes po/tr.po | 257 +++--- po/uk.mo | Bin 28399 -> 28934 bytes po/uk.po | 253 ++--- po/zh_TW.mo | Bin 19657 -> 20034 bytes po/zh_TW.po | 257 +++--- 58 files changed, 10576 insertions(+), 9529 deletions(-) diff --git a/plugins/sudoers/po/cs.mo b/plugins/sudoers/po/cs.mo index 5513160882475cdacdbd0eafcd9787c7103c138d..9eb8d58a943d54512de89545149125ff9abc1674 100644 GIT binary patch delta 13161 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 delta 12088 zcmZ|V2Xs}%zQ^&MP(vpWAe7{Ugb+#s2?Pi&2@skXK)O<;Lm&`Aipr6WAfO&lx^w{r z!K3uvrHMunqzM|Df{K6vDewEsOy1+&weDW`&*wk0+suFV-UnIt*GD-{-pS#<pXtz)q;?HTBg3vGJ?CgpIP-B=^1xP9B&5eW5MLQC8 zLNe;cLv4E!>akdfHSq|B;A0HKphldFjj=2aM-6NiYC_vk70N)J_oNZ^*NuW3o6^T) zAnnemwM(-uLLGM)HM48B9ni#as?&}|7xqI9WGd6DpNt1`?IzHY00F zhenu&xo`<;ZC4`CiL(bo@iF#67Y_)Nb|#}9t|M3ueVRE=84O09Uk`O$M`X;-JY@3D z1!R?-V0UxJi6`lfHE;>m#_uo&^R+NHZh)FmFI4F#qR!ijbubglV{}V1v-YS;r69YU zg{URTKuyH=1#^9OI7uZsx}Zir5p}@F$Sdp|Kvm#A>V1!CSu!5yRV=^OI4P8I2LR0=54HCg45wbAKncy(xKj)BzJP2G^k; zu8XL(F4@6xW@0DQ4KvV%#X6d`t%+4>w?!@GIIMvSumYaKe0UEvpl9gT2O*-9`A{@N zeF3|oZZHzFMvfZD2~_EFcQ*a8*6yf^O-0>k6Y`=sKVlUu*Tqz-1=iAWsN;8cq5ixH z&J8*=km@g+_qjFJru{aS#;vF&N=FUI?-et%7}V?44~ya&R0X%ADsdH6fx=yljZtsG zDAe`lbfx|};h62Xi#jo)oB5IGfOToViDhsL24gy^5`SCEcQ*rXiw)?XfEv(V)O-IO z>OLiUn75=MhSTolCea9|p$m6n2wp^0;2Fka?Ve_)qcD*6Hq`5ujzRdq8qmu;OEpmg z=!`70GYCDn4;x~KSIyG6=a6V*docuWpw>QLZ!@DhsEQ0ky#*iI{vFtg_V1{tJg$$a zNFUVNdQeNX3-x+lL)|B`ulcTYFuI+owqqLxbHHy{4)gajuSq4;Q#%M%k&zgO>#-DG zM;-6<*Y7#iK)pS&7>)x_6`qZ%+yN|%7cuMi|2BzkoO6H~Ss3cV9Z?rf#R!~biTBijg$9|CS3*5>ZLBG% z0Zl^G2P)nF2)l{l1suJ~46X;^wsj1Xo7kZZtov;x# z!msUt7g78F#;RCym?>cs)QyLrW;g?N{%X{X_MirS0X4C|P!-BQ-27E93bhomZW4cz z?x+KYqh>e*HPRJW6t|&{JC2&^CDb$U1U2AtY37E}Sd(^BEQoKQuKNyZz$>s2?n4dK zeVU{?$!)BKL9dyg$quN8ITD6 zC7y_?+#=iFf*Rmy)OmMN6{;}a%rqX0(C&b`Pe0U>Omvf|Bpa+hS#wV?uT>1jvcD<1 z@J-Z!7o!HW1NHizv_8ck+SMi+lTkMuf-3oR48^6WintGwXk-^qrM!*0urtZ%k2*07 zRnoe)za#1b15g!t8}$s$M^$E{^*9!$eGPS=2dL}hnVhBD2_?}D;xTKDFqrlb)J$h$ z2!4t>@g!Vq^9L-8Zj2Wf}(2I@N#Fjd!Oo#RRJ)6omHCPPps z&ckrriJIXr7>SSZq7TPTGdIdR-BhY9s)A9dN+hCY-WliQq*8bXpUiTc!JPlQ$8r8} z`*Ofs{)2*!=JU*n3+I~)e}VbvKa9H2w+qZbub`IbHmao0FfSHaXx2Os^`6&3J&et; zB96t%xEvefNpyE1DZ0pf@dl$xItK&sAiD4psshijIhI;%{?n@$>PxuW6I~LO6hnuiG?m(6D66VIgP$y=hZj|R^vovw2Qujm+ zY!qt$UTlSTQ5A?^YSugr^|mZR-RI;|x0&&ubZD(z%ghX#p&rJ8s2hyOFr0^)@h;So zT(j*5SeAD1a`R6#^)ZC@Xw>lwPy;)F!FV6F6anrPCP_fuXfTH21k{PEu{?fby^FE5 z16G=uy@0i8kHb2+87tr)c7MPsGxO%C?@StMAWJY5-KR-3l6zPNgIAlG)I(jkGuFiS zFc%)ea(EnH!JDXuE9n#dvVlXewfeCZ#;q{}8itzrhp5VI#uvH2bC#qX9pP)u-vh=X zJDk&~0R*ix{{_<#6KJo;c)WwUanz^gwd{!6KMA|yA*_$(KQl|$16AQksApgycIW=i z2@;jG%6e0(UZ@$*K)nrnF$n*}I4r!ul)44#1`|*h-h=J&463wMJ~#j2(Hd3qiKvJ1 zE8Bkq!??dwcBA7o!9=WtQ?LbYMBU&Ks+6@inHdj7^?!&>F&*n+=`YN6I$|>Ig{T4D z!WfMAn%6iDb^Z)=HzYYq(iZc4X)4hLwN|sSDt?Zm@B-Gr_FtL*%AJN0v=3tf{(&!J z_04>Aa0aSk=@^9tx0s67M?I`5Td02nl2vqQO@F~e4Bcwhs4r&C6vOCG$C{Xlxe`?HRLw2xpCUa|cZcbNYQPTE2Jb>T^LG}pk7H}Rk5w?qz1v)1IBF@pSP$=FHH_M0 zmZUo-(4K=Y;SU&u5qnL4Gt>a4p`Mk!*b@K2QrKvp`M|w`m1$4F7tp<)L4CQm3PCQ09P{Svyoor=kl_VhG+rt#y%uX5jIt^G9N1+=apDb13Vzb~_;? zb?F$5(dfncn1MQ>{9!Zley9@8L=AWg_C((!{EHa&#?rV0HIOr?rOZT?I{K)2ExVzM z_IPZj_kTIbEIMwX9-c8@o7csQI`JB+GXBTR0IFjw?U%74zK5Z>6_fA+4#e`uO$FaY zO>h_LHO#~YSmgw-Dff2Lw>IEmI|9Tvl5s0&=e@^}vuvE*qp<1Sc*_IT7YvL1EZ zCGEQ8g*GY?TKjHdktX59#N!Alr{ z1=5YNsOxk`?VpZWOM<%L1=Mw)qHbLJd-J2z;Ct#{fsWpE=)iZd8h(m3@I0zQg?}*r zHryPwe>vr~&XyjM0 z02aGoo@N)8pxp`e@C-#&XfBpUFRBu!P{&JL4(au6Ws0t|#`S-)-AJqaN00s7h7;*;J|})}s9u zszP64*1!M%OrjlrSIocJB%s>K*bXP7N_h@7gThx$spGLG?IG9@m!p>O3YNlLznFmp zq1L`Nsxl+7JT6AJi)1f}N_Yi>FcZsQ$zM$+YG5$!?ihvRP*4AQRAqid9bY8F9A6c6 zgHEWW9g8mf40ZjJ7>d7Vu>M&mUNbkSYHfu&FvU6pb>nr`bLgU-_qw@JB@Ce53N_GI zQ8$=?MQ}A1$1SLb^n~62=(^i<1l=$dXoY$>dZT7A&h{_EaN1i@@9$;Q+fm@AdAJfV zgmz!_$Em0REWon38#U4MsEPf9^|6HemiaqeJJiS)phkKWb>ceEn;)q} z)C}CHw`M1*awkwra2-oxo;&7-!Kh~;0d=1=WWU>)L!veM3{{$47=ahC66X5DSPi3S zcR^iv8ph#L)Bt}%o#*?f8Auh3r`;5F+!WM|_o4=pfm!c=$-hjA;xLjOtxz)=i-mD6 zx^NY$l!sAEbPhF;JE#lizH3Tc1=UVO4XhukBC}8v+JKtKSuD!)=j8d@TqqEAV6?R@ zR;N82V{kcYhCg5hd}{l{?wJ90LOryjQA@KB8{t{h!&~OQnOGyNN4p!k>ypeT(agU` zwS6C$4^RUvNP7h8#uHEv)u*VL9Yw9>pQ!Wv|KYbEAM?lS_&v_W>BRHf8}uI_Hf#MI zUq(e}TVu%jb0&X!I4Bp2{W5POMST7PYG*!d#9N3>Ok-S*Ibkh}q|A+(jpDMS!A-G()6zaBbmfwsMq{41Ml zxxUuU=e7j)xhL`m-xi0Z%lfg2#BD?f{U>lI2HWL%f&3ADTI+E{Z$kf{p69nGG-}b; z#r7Yeec9$K$rq9j{=XC4PDeUsWp|KIvv~l{Bc>1!i8S_|Ar6qgL!2Q_5!!mupS>ky zC)QW6F#Gf3RQw2!+T&l-^S6OUXX1i_ow3Nb!8wQ13H`#2$D+hC;xl3zv5)>XME3S0 zeR*xAULn`^5mqy)a~%uXJPniCr+;_OdbQNQ+n!VclW9*T4wLJ<{to&RIqVJSa&{BB zX^*0RIr04V@pFxC&*e(rCLY@3-RnuZ(9sV|aj{P1{5(55>;Wyvv$rMmb@Y! zMd{ZTLti4!C+3oC>qRUf{!qhi{`UBd_LwI04=2|@=Z+)nZfBU*|1dGh9;n~+LFD@G zcfy6JZ36iN;tlfR_UuAfg+5eqz9vLEc|)Qx`3Lqm?H@{%rrlBvwv9wP+JX2oeoLGr z$`F(2dtcxG!i=a2jdH|(qBT1!5`M&YgtqlW5_waiYgP~6a?aD1(>m5PonNsWeV^b5 z#0ugjv6Oh%UM~vA5?`v!#YpB8FA_y)SH?WJhqyt$miV0DXWS`-e-qlmaXZEnKdVg~ zBWluL1_$D+sBI{DCicy0InEcjls@a_r#avD+q1-FwEwrhjp{&9nW_@CwnH zJzwCP_%SZWRm2JMBgF4S_Ev~wQFa5*=`n9WQq>;h_uNjU6NrMW<=f9)B>Rv^`nD2- zi5zs6#nbo?HpZXuJM4kk+m9r{v;(;2W%AeDG+I7)z$xuB>LOD3^&L}?y~1jBp*p0Z`-Np)%Rc9OSbd0Red9fpNMFp8~yd3 z+ZRE8$F^_cA&x0-+x5r?5@(6*Z87@>5C`os+5Nfy_cLdEZdiwK;1=?{_#5FO?@3f6 zUrGE*#L*s4L=g{&{I;Y6$Y&6NjAue(xW}7R)UzU~j%Rmbuy2Jvp2vyd zBB_bXb2h2EXI_)aY8Gx5?rqd;Rvyo{$<@8StzRnSeZO1je6+$mr~4Q3T<-7sV8AJF zp@F6Ic$0=5_3>6oJCidsrBAP6J$k1O?boAMpFTZ?rKXK|t*%SBMx>^?QhKHJ@9X{d z^@9GM-tTFC+8HpX*hZJ4L>CzU)k*4FdHtgG{% zCsg$Qx-MT{-)hNTAMa3q@1{eq70A=jRpGU|Otb2DSG>vT;eOtaE~NT;BQBTA9r@oU sF{rO=*rE9c)~5_Sw9NH--;}`zc6sA7Y6W<%KHBezd|cbJ|MBww0gt&KTL1t6 diff --git a/plugins/sudoers/po/cs.po b/plugins/sudoers/po/cs.po index 94feb9e121..37efd3e97c 100644 --- a/plugins/sudoers/po/cs.po +++ b/plugins/sudoers/po/cs.po @@ -9,10 +9,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-18 13:18+02:00\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 19:55+02:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -46,70 +46,73 @@ msgstr "*** BEZPEČNOSTNÍ hlášení o %h ***" msgid "Sorry, try again." msgstr "Je nám líto, zkuste to znovu." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -119,323 +122,340 @@ msgstr "Je nám líto, zkuste to znovu." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "nelze alokovat paměť" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "kontrolní součet vyžaduje název cesty" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "hodnoty „CWD“ musí začínat na „/“, „~“ nebo „*“" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "hodnoty „CHROOT“ musí začínat na „/“, „~“ nebo „*“" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "neplatná hodnota notbefore (začátek platnosti)" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "neplatná hodnota notafter (konec platnosti)" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "hodnota časového limitu je příliš velká" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "neplatná hodnota časového limitu" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existuje, ale nejedná se o adresář (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "nelze vytvořit adresář %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "nelze změnit práva %s na 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "očekáván JSON_STRING, obdrženo %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "v názvu chybí dvojitá uvozovka" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "očekáván JSON_OBJECT, obdrženo %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "vnitřní chyba, přetečení %s" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "neodpovídající uzavírací složená závorka" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "nečekané pole" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "neodpovídající uzavírající hranatá závorka" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "nečekaný řetězec" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "za názvem chybí dvojtečka" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "nečekaná pravdivostní hodnota" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "nečekané číslo" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u „%s“ nelze rozebrat" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: neplatný soubor s protokolem" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: chybí položka s časovým údajem" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: čas %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: chybí položka s uživatelem" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: chybí položka s runas uživatelem" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s chybí položka s runas skupinou" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "chyba při čtení časovacího souboru: %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "neplatný řádek s časovacím souborem: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (příkaz pokračuje) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "protokol byl již dokončen, nelze jej restartovat" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "protokol nelze navázat" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "nelze otevřít %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "chybí vstupně-výstupní soubor s protokolem %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: nelze skočit vpřed o %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "nelze nalézt bod obnovy [%lld, %ld] v %s/%s" @@ -522,17 +542,17 @@ msgstr "nelze získat metodu TLS serveru: %s" msgid "unable to create TLS context: %s" msgstr "nelze vytvořit kontext TLS: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "nelze zavést certifikát %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "nelze zavést svazek certifikátů autorit %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "nelze zavést soukromý klíč %s" @@ -551,28 +571,28 @@ msgstr "nelze nastavit minimální verzi protokolu na TLS 1.2: %s" msgid "unable to get remote IP addr" msgstr "nelze získat vzdálenou IP adresu" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "K objektu SSL nelze připojit uživatelská data: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "událost nelze přidat do fronty" @@ -607,7 +627,7 @@ msgstr "" " -R, --random-drop procentuální pravděpodobnost, že se spojení ztratí\n" " -V, --version zobrazí údaje o verzi a skončí\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Je vyžadována knihovna Protobuf-C verze 1.3 nebo vyšší" @@ -616,9 +636,9 @@ msgstr "Je vyžadována knihovna Protobuf-C verze 1.3 nebo vyšší" msgid "invalid random drop value: %s" msgstr "neplatná hodnota pravděpodobnosti ztráty: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s verze %s\n" @@ -716,7 +736,7 @@ msgstr "" " vstupně-výstupních protokolů n-krát souběžně\n" " -V, --version zobrazí údaje o verzi a skončí\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "%s:%s nelze vyhledat: %s" @@ -725,122 +745,122 @@ msgstr "%s:%s nelze vyhledat: %s" msgid "unable to get server IP addr" msgstr "nelze získat IP adresu serveru" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "%s/%s nelze přečíst: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "zpráva od klienta je příliš velká: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: vyrovnávací paměť pro zápis se již používá" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "nečekaná I/O událost %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: nečekaný stav %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "neplatná správa ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "od serveru byla přijata chybová zpráva: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "od serveru byla přijata zpráva o zrušení: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "zprávu ServerMessage nelze rozbalit" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: nečekaná hodnota type_case %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "při čtení ze serveru vypršel časový limit" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "předčasný konec souboru" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "správa od serveru je příliš velká: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "při zapisování do serveru vypršel časový limit" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "Při navazování spojení TLS vypršel časový limit" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "událost nelze nastavit" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "spojení TLS selhalo: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Kontext SSL nelze inicializovat: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Objekt SSL nelze alokovat: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "K objektu SSL nelze připojit socket: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "musí být zadán jak bod navázání, tak i identifikátor iolog" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "bod navázání nelze nastavit, když žádný vstup/výstup nebyl odeslán" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "ukončeno předčasně ve stavu %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "uplynulý čas zaslaný serveru [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "od server byl přijat bod zápisu [%lld, %ld]" @@ -850,11 +870,11 @@ msgstr "od server byl přijat bod zápisu [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "Alias „%s“ je již definován" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "nelze vytvořit proces" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "prošlé heslo pro %s nelze změnit" @@ -876,11 +896,11 @@ msgstr "neplatný druh autentizace" msgid "unable to initialize BSD authentication" msgstr "nelze inicializovat BSD autentizaci" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "vašemu účtu skončila platnost" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "schválení selhalo" @@ -987,7 +1007,7 @@ msgstr "Účtu vypršela platnost nebo v konfiguraci PAM pro sudo chybí sekce msgid "PAM account management error: %s" msgstr "Chyba správy účtů PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "v databázi %s neexistujete" @@ -1016,7 +1036,7 @@ msgstr "neplatný deskriptor autentizace pro SecurID" msgid "SecurID communication failed" msgstr "komunikace se SecurID selhala" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "neznámá chyba SecurID" @@ -1024,7 +1044,7 @@ msgstr "neznámá chyba SecurID" msgid "invalid passcode length for SecurID" msgstr "neplatná délka kódu pro SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "nelze inicializovat relaci SIA" @@ -1048,7 +1068,7 @@ msgstr "Sudo bylo sestaveno bez autentizačních metod! Chcete-li vypnout autent msgid "Unable to initialize authentication methods." msgstr "Nelze inicializovat metody autentizace." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Autentizační metody:" @@ -1081,117 +1101,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "neznámé UID: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "neznámý uživatel: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "přírůstek pořadí: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "počáteční pořadí: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "odsazení pořadí: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "verze gramatiky %s je %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "nepodporovaný formát vstupu %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "nepodporovaný formát výstupu %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: vstupní a výstupní soubory se musí lišit" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "nelze inicializovat výchozí hodnoty sudoers" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: neznámé klíčové slovo: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "neplatný druh položky defaults: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "neplatný druh potlačení: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "neplatný filtr: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "nelze otevřít %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "rozbor souboru %s se nezdařil, neznámá chyba" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "chyba při rozboru %s kolem řádku %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "chyba při rozboru %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "do %s nelze zapsat" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1200,7 +1221,7 @@ msgstr "" "%s – převádí mezí formáty souboru sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1243,675 +1264,695 @@ msgstr "" " -V, --version zobrazí údaje o verzi a skončí" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "neznámá položka defaults „%s“" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "nelze získat čas GMT" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "nelze naformátovat časový údaj" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "příliš mnoho záznamů sudoers, maximum je %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "proměnná prostředí SUDOERS_BASE není nastavená a přepínač -b nebyl zadán." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Obor systémového protokolu, je-li syslog použit pro protokolování: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Priorita systémového protokolu, která se použije při úspěšné autentizaci uživatele: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Priorita systémového protokolu, která se použije při neúspěšné autentizaci: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Dotaz na jednorázový kód bude na vlastním řádku" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "Ignoruje „.“ v PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Vždy, když se použije sudo, odešle e-mail" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Odešle e-mail, když autentizace uživatele selže" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Odešle e-mail, pokud uživatel není v sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Odešle e-mail, když uživatel není v sudoers uveden pro tento stroj" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Odešle e-mail, když uživatel nemá dovoleno spustit příkaz" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Odešle e-mail, když uživatel zkusí spustit příkaz" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Pro každou kombinaci uživatele a TTY použije samostatný časovač" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Před prvním použitím sudo proškolí uživatele" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Soubor obsahující školení k sudo: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Standardně vyžaduje, aby se uživatelé autentizovali" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Root může spustit sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Do (nesyslogového) protokolu zaznamenává název stroje" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Do (nesyslogového) protokolu zaznamenává rok" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Je-li sudo zavoláno bez argumentů, spustí shell" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Nastaví HOME na cílového uživatele, když se pouští shell s -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Vždy nastaví HOME na domovský adresář cílového uživatele" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Dovolí sběr některých údajů za účelem užitečných chybových zpráv" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Vyžaduje v souboru sudoers plně kvalifikované názvy strojů" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "Urazí uživatele, pokud zadá chybné heslo" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Dovolí uživateli spustit sudo, pouze když má TTY" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo bude dodržovat proměnou prostředí EDITOR" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Ptá se heslo roota, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Ptá se na heslo runas_default uživatele, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Ptá se na heslo cílového uživatele, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Použije výchozí nastavení v přihlašovací třídě cílového uživatele, existuje-li" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Nastaví proměnné prostředí LOGNAME a USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Nastaví pouze efektivní UID na cílového uživatele, nikoliv reálné UID" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "Neinicializuje vektor skupin na vektor cílového uživatele" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Délka zlomu řádků v protokolu (0 pro nezalamování): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Limit na časové údaje autentizace: %.1f min" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Limit na výzvu k heslu: %.1f min" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Počet pokusů na zadání hesla: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask nebo 0777 pro hodnotu uživatele: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Cesta k souboru s protokolem: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Cesta k poštovnímu programu: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Přepínače pro poštovní program: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Adresa, kam zasílat poštu: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Adrese, ze které zasílat poštu: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Řádek s předmětem pro poštovní zprávy: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Zpráva při chybném hesle: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Cesta k adresáři se stavy lekcí: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Cesta k adresáři s časovými údaji autentizace: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Vlastník adresáře s časovými údaji autentizace: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Uživatelé v této skupině jsou vyjmuti z požadavků na heslo na PATH: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Výchozí výzva pro heslo: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "Je-li nastaveno, passprompt přebije systémovou výzvu ve všech případech." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Výchozí uživatel, pro kterým spouštět příkazy: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Hodnota, kterou přebít PATH uživatele: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Cesta k editoru pro potřeby visudo: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kdy vyžadovat heslo pro pseudopříkaz „list“: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kdy vyžadovat heslo pro pseudopříkaz „verify“: %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Přednačíst prázdné spouštěcí funkce obsažené v knihovně sudo_noexec" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Pokud je adresář LDAP dostupný, ignorovat místní soubor sudoers" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Souborové deskriptory >= %d budou před spuštěním příkazu uzavřeny" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Je-li nastaveno, uživatelé mohou přebít hodnotu „closefrom“ přepínačem -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Dovolit uživatelům nastavit libovolné proměnné prostředí" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Vrátit prostředí do výchozí množiny proměnných" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Proměnné prostředí kontrolované na logičnost:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Proměnné prostředí, které se mají odstranit:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Proměnné prostředí, které se mají zachovat:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Selinuxový role, která se použije v novém bezpečnostním kontextu: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Selinuxový typ, který se použije v novém bezpečnostním kontextu: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Cesta k souboru s prostředím určeném pro sudo: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Cesta k souboru s omezeným prostředím určeném pro sudo: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Národní prostředí, které se použije pro rozbor sudoers: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Dovolit sudu ptát se na heslo, i kdyby bylo čitelné" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Indikovat vstup uživatele při dotazu na heslo" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Použit rychlejší expanzi globů, která je méně přesná, ale nepřistupuje k souborovému systému" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Umask zadaná v sudoers přebije uživatelovu, i když je volnější" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "Zaznamenávat vstup uživatele pro spouštěný příkaz" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "Zaznamenávat výstup spouštěného příkazu" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "Komprimovat protokoly o vstupu/výstupu pomocí zlib" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Vždy spouštět příkazy v pseudoTTY" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Modul pro podporu neunixových skupin: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Adresář, kam ukládat protokoly o vstupu/výstupu: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Soubor, do kterého ukládat protokol o vstupu/výstupu: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Při alokaci PTY přidat záznam do souboru utmp/utmpx" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Do utmp zapisovat runas uživatele, nikoliv uživatele volajícího" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Množina povolujících práv: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Množina omezujících práv: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "Spouštět příkazy v PTY na pozadí" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "Použít tuto službu PAM: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Název služby PAM, který se použije pro přihlašovací shelly: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "Pokusit se získat pověření PAM pro cílového uživatele" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "Vytvořit pro spouštěný příkaz novou relaci PAM" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Ověřit platnost účtu pomocí PAM" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Maximální pořadové číslo protokolu vstupu/výstupu: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Zapnout v sudoers podporu netgroup" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Kontrolovat nadřazené adresáře na možnost zápisu při úpravě souborů pomocí sudoedit" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Následovat symbolické odkazy při úpravě souborů pomocí sudoedit" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "Dotazovat se modulu pro skupiny na neznámé systémové skupiny" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Porovnávat netgroups na celou n-tici: uživatel, stroj a doména" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Dovolit spuštění příkazu, i když sudo nemůže zapsat do auditního protokolu" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Dovolit spuštění příkazu, i když sudo nemůže zapsat do I/O protokolu" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Dovolit spuštění příkazu, i když sudo nemůže zapsat do souboru s protokolem" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Překládat skupiny v sudoers a hledat shodu na ID skupiny, ne na jméně" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Položky protokolu větší než tato hodnota budou rozděleny do více zpráv syslogu: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Uživatel, který bude vlastnit soubory s I/O protokolem: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Skupina, která bude vlastnit soubory s I/O protokolem: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Přístupová práva k souboru s I/O protokolem: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Spustit příkazy podle deskriptoru souboru namísto podle cesty: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignorovat neznámé položky Defaults v sudoers namísto vypisování varování" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Čas v sekundách, po kterém bude příkaz ukončen: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "Povolit uživateli zadat časový limit na příkazovém řádku" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Zapisovat log na disk ihned namísto po větších částech" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "Při protokolování přes syslog zahrnout ID procesu" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Druh záznamu s časovým údajem autentizace: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Zpráva o selhání autentizace: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Ignorovat velikost znaků při porovnávání jmen uživatelů" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Ignorovat velikost znaků při porovnávání názvů skupin" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "Zaznamenat do protokolu, když je příkaz povolen v sudoers" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "Zaznamenat do protokolu, když je příkaz zakázán v sudoers" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "Protokolový server(y) suda, kam se připojit s volitelným portem" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Časový limit protokolového serveru suda v sekundách: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Zapnout volbu socketu SO_KEEPALIVE na socketu připojeném k protokolovému serveru" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Cesta k souboru se svazkem certifikátů autorit auditního serveru: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Cesta k souboru s certifikátem sudoers: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Cesta k souboru se soukromým klíčem sudoers: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "Ověřit, že certifikát protokolovacího serveru je platný" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Dovolit použití neznámých ID uživatelů a/nebo skupin u klíčového slova runas" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "Pouze dovolit spuštění příkazů jako uživatel s platným shellem" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "Nastavit vzdáleného uživatele PAM na uživatele, který spustil sudo" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "Nastavit vzdálený stroj PAM na název tohoto stroje" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d neznámá položka defaults „%s“" +msgid "Working directory to change to before executing the command: %s" +msgstr "Kam změnit pracovní adresář před spuštěním příkazu: %s" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/def_data.c:560 +#, c-format +msgid "Root directory to change to before executing the command: %s" +msgstr "Kam změnit kořenový adresář před spuštěním příkazu: %s" + +#: plugins/sudoers/defaults.c:184 +#, c-format +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: neznámá položka defaults „%s“" + +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: neznámá položka defaults „%s“" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d u „%s“ nebyla zadána žádná hodnota" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: u „%s“ nebyla zadána žádná hodnota" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: u „%s“ nebyla zadána žádná hodnota" -#: plugins/sudoers/defaults.c:252 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d hodnoty u „%s“ musí začínat na „/“" - -#: plugins/sudoers/defaults.c:255 -#, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: hodnoty u „%s“ musí začínat na „/“" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: volba „%s“ nebere hodnotu" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d volba „%s“ nebere hodnotu" - -#: plugins/sudoers/defaults.c:280 -#, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: volba „%s“ nebere hodnotu" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d neplatný typ Defaults 0x%x u volby „%s“" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: neplatný typ Defaults 0x%x u volby „%s“" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: neplatný typ Defaults 0x%x u volby „%s“" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d hodnota „%s“ je pro volbu „%s“ neplatná" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: hodnota „%s“ je pro volbu „%s“ neplatná" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: hodnota „%s“ je pro volbu „%s“ neplatná" +msgstr "%s: hodnota „%s“ není pro volbu „%s“ platná" + +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: hodnoty „%s“ musí začínat na „/“, „*“ nebo „*“" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: hodnoty „%s“ musí začínat na „/“, „*“ nebo „*“" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: hodnoty „%s“ musí začínat na „/“" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: hodnoty „%s“ musí začínat na „/“" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: poškozené pole envp, délka nesouhlasí" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "prostředí nelze znovu sestavit" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "je nám líto, ale nemáte dovoleno nastavovat následující proměnné prostředí: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "chyba rozboru v %s kolem řádku %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "chyba rozboru v %s" @@ -1965,88 +2006,88 @@ msgstr "nelze rozebrat síťovou masku „%s“" msgid "Local IP address and netmask pairs:\n" msgstr "Pár místní IP adresy a masky sítě:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "neznámá skupina: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "nelze zapsat do souboru s I/O protokolem: %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "nelze aktualizovat soubor s pořadovým číslem" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "%s/%s nelze vytvořit" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "k protokolovacímu serveru se nelze připojit" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: vnitřní chyba, soubor s I/O protokolem pro událost %d není otevřen" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "nelze přečíst hodiny" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: vnitřní chyba, neplatný signál %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "chyba ve smyčce událostí" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Vytvoření nového objektu SSL_CTX selhalo: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "Spojení TLS s %s:%s selhalo: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "Inicializace TLS nebyla úspěšná" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "Ustanovení spojení TLS nebylo úspěšné" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "nelze získat čas" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: vnitřní chyba, neplatný návratový kód %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "spojení k protokolovému serveru ztraceno" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "chybí vyrovnávací paměť pro zápis" @@ -2069,18 +2110,19 @@ msgstr "pro SSL musíte v %s nastavit TLS_CERT" msgid "unable to initialize LDAP: %s" msgstr "LDAP nelze inicializovat: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls uvedeno, ale knihovna LDAP nepodporuje ldap_start_tls_s_np() ani ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "neplatný atribut sudoOrder: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: port je příliš velký" +#, c-format +msgid "%s: port too large" +msgstr "%s: port je příliš velký" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2091,7 +2133,7 @@ msgstr "nepodporovaný typ ldapového URI: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "nelze míchat URI ldap a ldaps" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "nelze převést sudoOption: %s%s%s" @@ -2100,66 +2142,66 @@ msgstr "nelze převést sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "nelze otevřít auditní systém" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "nelze odeslat auditní zprávu" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "nelze otevřít soubor protokolu: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "nelze zamknout soubor protokolu: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "nelze zapsat soubor protokolu: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "uživatel NENÍ v sudoers" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "uživatel NENÍ na stroji autorizován" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "příkaz nedovolen" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s není v souboru sudoers. Tato událost bude ohlášena.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s nemá dovoleno spouštět sudo na %s. Tato událost bude ohlášena.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Je nám líto, uživatel %s nesmí spouštět sudo na %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Je nám líto, uživatel %s nemá dovoleno spouštět „%s%s%s“ jako %s%s%s na %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: příkaz nenalezen" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2168,15 +2210,15 @@ msgstr "" "ignoruje se „%s“ nalezený v „.“\n" "Použijte „sudo ./%s„, je-li toto „%s“', který chcete spustit." -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "selhání autentizace" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "je vyžadováno heslo" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2184,22 +2226,22 @@ msgstr[0] "%u chybný pokus zadat heslo" msgstr[1] "%u chybné pokusy zadat heslo" msgstr[2] "%u chybných pokusů zadat heslo" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "nelze zdvojit standardní vstup: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "nelze spustit %s: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "nelze vytvořit proces: %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "nelze otevřít rouru: %m" @@ -2209,7 +2251,7 @@ msgstr "nelze otevřít rouru: %m" msgid "digest for %s (%s) is not in %s form" msgstr "součet pro %s (%s) nemá tvar %s" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2218,8 +2260,7 @@ msgstr "" "\n" "Role LDAP: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2227,42 +2268,38 @@ msgstr "" "\n" "Položka v sudoers:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Volby: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Příkazy:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Odpovídající položky Defaults pro %s na %s:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Výchozí hodnoty Runas a Command pro %s:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Uživatel %s smí spustit následující příkazy na %s:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Uživatel %s nemá dovoleno spustit sudo na %s.\n" @@ -2277,48 +2314,58 @@ msgstr "neúplná definice sudoRole se ignoruje: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "neplatný atribut LDIF: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "neplatné %.*s nenastaveno vnějším rozhraním sudo" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "nelze rozebrat seznam síťových adres" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "uživatelské jméno nenastaveno vnějším rozhraním sudo" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "ID uživatele nenastaveno vnějším rozhraním sudo" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "ID skupiny nenastaveno vnějším rozhraním sudo" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "název počítače nenastaven vnějším rozhraním sudo" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "neplatný pracovní adresář: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "neplatný kořenový adresář: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "nelze vykonat %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Verze modulu s politikami sudoers je %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Verze gramatiky souboru sudoers je %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2327,86 +2374,86 @@ msgstr "" "\n" "Cesta sudoers: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "cesta k nsswitch: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "cesta k ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "cesta k ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "nelze zaregistrovat háček typu %d (verze %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "nelze si zapamatovat UID %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "nelze zapamatovat si UID %u, již existuje" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "uživatele %s si nelze zapamatovat" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "nelze zapamatovat si uživatele %s, již existuje" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "GID %u si nelze zapamatovat" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "nelze zapamatovat si GID %u, již existuje" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "skupinu %s si nelze zapamatovat" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "nelze zapamatovat si skupinu %s, již existuje" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "nelze zapamatovat si seznam skupin pro %s, již existuje" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "nelze si zapamatovat seznam skupin pro %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "nelze rozebrat skupiny pro %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "nelze rozebrat čísla GID pro %s" @@ -2470,239 +2517,259 @@ msgstr "zkrácená auditní cesta user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "zkrácená auditní cesta argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "nelze inicializovat zdroj SSS. Je SSSD nainstalován na vašem stroji?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "nelze nalézt symbol „%s“ v %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "problém s položkami defaults" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "nenalezeny žádné platné zdroje sudoers, končí se" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "uživatel nemá dovoleno změnit kořenový adresář na %s" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "nemáte dovoleno použít přepínač -R s %s" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "uživatel nemá dovoleno změnit adresář na %s" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "nemáte dovoleno použít přepínač -D s %s" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers udává, že root nemá dovoleno použít sudo" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "uživatel nemá dovoleno přebít omezení „closefrom“" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "nemáte dovoleno použít přepínač -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "vlastník časového údaje (%s): Takový uživatel neexistuje" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "žádné TTY" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "je nám líto, ale pro spuštění sudo musíte mít TTY" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "neplatný shell pro uživatele %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "příkaz v aktuálním adresáři" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "uživatel nemá dovoleno nastavit časový limit příkazu" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "je nám líto, ale nastavit časový limit nemáte dovoleno" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "uživatel nemá dovoleno zachovat prostředí" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "je nám líto, ale zachovat prostředí nemáte dovoleno" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "příkaz je příliš dlouhý" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit není nutné spouštět přes sudo" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "%s nelze číst" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "nelze zjistit údaje o %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s není běžný soubor" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s je vlastněn UID %u, měl by být vlastněn %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s je zapisovatelný pro všechny" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s je vlastněn GID %u, mělo by být %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "pouze root může použít „-c %s“" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "neznáma přihlašovací třída: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "nelze přeložit název stroje %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "neplatná volba filtru: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "neplatná maximální doba čekání: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "neplatný násobek rychlosti: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/časování: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "Přehrává se relace sudo: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "TTY nelze nastavit do přímého režimu" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Pozor: váš terminál je příliš malý pro správné zobrazení záznamu.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Rozměry záznamu jsou %d × %d, váš terminál má rozměry %d × %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Přehrávání skončilo, pro obnovení terminálu stiskněte libovolnou klávesu." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "nejednoznačný výraz „%s“" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "ve výrazu neodpovídá „)“" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "neznámý vyhledávací výraz „%s“" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s vyžaduje argument" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "neplatný regulární výraz: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "datum „%s“ se nepodařilo rozebrat" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "ve výrazu neodpovídá „(“" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "zakázané zakončení „or“" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "zakázané zakončení „!“" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "neznámý vyhledávácí typ %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "použití: %s [-hnRS] [-d adresář] [-m číslo] [-s číslo] ID\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "použití: %s [-h] [-d adresář] -l [vyhledávací_výraz]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2711,7 +2778,7 @@ msgstr "" "%s – přehraje záznam relace sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2741,11 +2808,11 @@ msgstr "" " -s, --speed=číslo zrychlí nebo zpomalí výstup\n" " -V, --version zobrazí údaje o verzi a skončí" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tstroj se neshoduje" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2753,7 +2820,7 @@ msgstr "" "\n" "Příkaz povolen" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2761,7 +2828,7 @@ msgstr "" "\n" "Příkaz odepřen" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2808,89 +2875,89 @@ msgstr "sudoedit by neměl být uveden s cestou" msgid "the -x option will be removed in a future release" msgstr "přepínač -x bude v příštím vydání odstraněn" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "prosím, zvažte použití nástroje cvtsudoers" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "pro úpravu %s stiskněte enter: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "zadaný editor (%s) neexistuje" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "žádný editor nenalezen (cesta k editoru = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "chyba zápisu" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "nelze získat údaje o dočasném souboru (%s), %s nezměněno" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "dočasný soubor o nulové velikosti (%s), %s nezměněno" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) selhal, %s nezměněno" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s nezměněno" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "nelze znovu otevřít dočasný soubor (%s), %s nezměněno." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "není možné rozebrat dočasný soubor (%s), neznámá chyba" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "vnitřní chyba, v seznamu nelze nalézt %s!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "nelze nastavit (UID, GID) %s na (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s a %s se nenachází na jednom souborovém systému, pro přejmenování se použije mv" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "příkaz selhal: „'%s %s %s“, %s nezměněno" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "chyba při přejmenování %s, %s nezměněno" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Co teď? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2902,67 +2969,67 @@ msgstr "" " (x) skončit bez uložení změn do souboru sudoers\n" " (Q) skončit a uložit změny do souboru sudoers (NEBEZPEČNÉ!)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "nelze spustit %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: chybný vlastník (UID, GID), měl by být (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: chybná práva, měla by být 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: rozbor úspěšný\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s je zaneprázdněn, zkuste to později" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "%s nelze uzamknout" # The code indeed checks for non-localized "y" character. -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" -msgstr "Přesto upravit? [y/N]" +msgstr "Přesto upravit? [y pro ano / N pro ne]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" +msgid "Error: %s:%d: cycle in %s \"%s\"" msgstr "Chyba: %s:%d: smyčka v %s „%s“" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" +msgid "Warning: %s:%d: cycle in %s \"%s\"" msgstr "Pozor: %s:%d: smyčka v %s „%s“" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" msgstr "Chyba: %s:%d: %s „%s“ použit, ale nedefinován" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" msgstr "Pozor: %s:%d: %s „%s“ použit, ale nedefinován" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Pozor> %s:%d nepoužitý %s „%s“" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "Pozor: %s:%d: nepoužitý %s „%s“" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2971,7 +3038,7 @@ msgstr "" "%s – bezpečně upraví soubor sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2992,10 +3059,13 @@ msgstr "" " -s, --strict přísná kontrola syntaxe\n" " -V, --version zobrazí údaje o verzi a skončí\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "příliš mnoho úrovní zanoření" +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: port je příliš velký" + #~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" #~ msgstr "Funkce SSL_connect selhala: chyba_SSL=%d, zásobník=%s\n" diff --git a/plugins/sudoers/po/de.mo b/plugins/sudoers/po/de.mo index 55e296b32630ea76092bdcc5abaea710627156d8..4e098c64cce93f3095835c19bf3c3885f1812c77 100644 GIT binary patch delta 13249 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 a7QWrR)a+Z{UR!2IWo-v0r^uOdkR diff --git a/plugins/sudoers/po/de.po b/plugins/sudoers/po/de.po index b6d54a6907..38158d2126 100644 --- a/plugins/sudoers/po/de.po +++ b/plugins/sudoers/po/de.po @@ -6,10 +6,10 @@ # Jochen Hein , 2001-2020. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-17 06:45+0200\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 21:26+0200\n" "Last-Translator: Jochen Hein \n" "Language-Team: German \n" "Language: de\n" @@ -44,70 +44,73 @@ msgstr "*** Sicherheits-Information für %h ***" msgid "Sorry, try again." msgstr "Das hat nicht funktioniert, bitte nochmal probieren." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -117,323 +120,340 @@ msgstr "Das hat nicht funktioniert, bitte nochmal probieren." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "Es kann kein Speicher mehr alloziert werden" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "Eine Prüfsumme erfordert einen Pfadnamen" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "Werte für »CWD« müssen mit »/«, »~« oder »*« beginnen" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "Werte für »CHROOT« müssen mit »/«, »~« oder »*« beginnen" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "ungültiger Wert für »notbefore«" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "ungültiger Wert für »notafter«" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "Wert für Timeout ist zu groß" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "ungültiger Wert für Timeout" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existiert, aber ist kein Verzeichnis (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "Das Verzeichnis »%s« kann nicht erstellt werden" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "Ändern des Modus von %s auf 0%o gescheitert" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "JSON_STRING erwartet, aber »%d« bekommen" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "Im Name fehlt das doppelte Anführungszeichen" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "JSON_OBJECT erwartet, aber »%d« bekommen" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "Interner Fehler, %s-Überlauf" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "unpassende schließende geschweifte Klammer" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "unerwartetes Array" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "unpassende schließende eckige Klammer" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "unerwartete Zeichenkette" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "fehlender Doppelpunkt nach dem Name" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "unerwarteter boolescher Wert (true/false)" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "unerwartete Zahl" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u »%s« kann nicht ausgewertet werden" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: ungültige Protokolldatei" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: Das Feld für den Zeitstempel fehlt" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: Zeitstempel %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: Das Benutzerfeld fehlt" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: Das Feld für den »runas«-Benutzer fehlt" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: Das Feld für die »runas«-Gruppe fehlt" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "Fehler beim Lesen der Zeitdateizeile: %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "Ungültige Zeitdateizeile: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (Befehl fortgesetzt) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "Das Log ist bereits abgeschlossen, kann nicht neu gestartet werden" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "Das Log konnte nicht wieder begonnen werden" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "Die Datei »%s/%s« kann nicht geöffnet werden" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "Die I/O Logdatei %s/%s fehlt" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: kann nicht zur Position %zu springen" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "Der Wiederaufsetz-Punkt [%lld, %ld] in %s/%s kann nicht gefunden werden" @@ -521,17 +541,17 @@ msgstr "Kann die TLS Server Methode nicht bestimmen: %s" msgid "unable to create TLS context: %s" msgstr "SSL-Kontext kann nicht erzeugt werden: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "Laden von Zertifikat »%s« fehlgeschlagen" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "Kann das CA-Bundle »%s« nicht laden" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "Laden des privaten Schlüssels »%s« fehlgeschlagen" @@ -550,28 +570,28 @@ msgstr "Kann die minimale Protokollversion nicht auf TLS 1.2 setzen: %s" msgid "unable to get remote IP addr" msgstr "Kann die entfernte IP-Adresse nicht finden" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, 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:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "Event kann nicht zur Warteschlange hinzugefügt werden" @@ -606,7 +626,7 @@ msgstr "" " -R, --random-drop prozentuale Change, dass die Verbindung abbricht\n" " -V, --version Versionsinformation anzeigen und beenden\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C Version 1.3 oder höher ist notwendig" @@ -615,9 +635,9 @@ msgstr "Protobuf-C Version 1.3 oder höher ist notwendig" msgid "invalid random drop value: %s" msgstr "ungültiger Wert für »random drop«: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s Version %s\n" @@ -712,7 +732,7 @@ msgstr "" " -t, --test teste Audit-Server durch Senden vom ausgewählem I/O-Protokoll n Mal parallel\n" " -V, --version zeige Versioninformationen und beende\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "Fehler beim Lookup %s:%s: %s" @@ -721,122 +741,122 @@ msgstr "Fehler beim Lookup %s:%s: %s" msgid "unable to get server IP addr" msgstr "Kann die Server IP-Adresse nicht finden" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "Fehler beim Lesen %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "Client-Nachricht ist zu groß: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: Schreib-Puffer wird bereits verwendet" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "unerwarteter I/O Event %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: unerwarteter Status %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "ungültiges ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "Fehler beim Empfangen der Nachricht vom Server: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "Abbruch-Nachricht vom Server empfangen: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "Kann die ServerNessage nicht auspacken" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: unerwarteter type_case Wert %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "Zeitablauf beim Lesen vom Server" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "unerwartetes Datei-Ende" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "Server-Nachricht ist zu groß: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "Zeitablauf beim Senden an den Server" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "Timeout beim TLS-Handshake erreicht" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "Konnte den Event nicht setzen" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "TLS-Kommunikation fehlgeschlagen: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "SSL-Kontext kann nicht initialisiert werden: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Kann kein SSL-Objekt anlegen: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, 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/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 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:1777 +#: logsrvd/sendlog.c:1780 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:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "Vorzeitig beendet mit Status %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "Abgelaufene Zeit zum Server gesendet [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "Commit Punkt vom Server empfangen [%lld, %ld]" @@ -846,11 +866,11 @@ msgstr "Commit Punkt vom Server empfangen [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "Alias »%s« ist bereits definiert" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "Fehler bei fork()" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "Das Passwort für %s« kann nicht geändert werden" @@ -872,11 +892,11 @@ msgstr "Ungültiger Authentifizierungstyp" msgid "unable to initialize BSD authentication" msgstr "Die BSD-Authentifizierung kann nicht begonnen werden" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "Ihr Account ist abgelaufen" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "Genehmigung fehlgeschlagen" @@ -984,7 +1004,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:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "Der Benutzer existiert in der %s-Datenbank nicht" @@ -1013,7 +1033,7 @@ msgstr "Ungültiges Authentifizierungs-Handle für SecurID" msgid "SecurID communication failed" msgstr "SecurID-Kommunikation fehlgeschlagen" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "Unbekannter SecurID-Fehler" @@ -1021,7 +1041,7 @@ msgstr "Unbekannter SecurID-Fehler" msgid "invalid passcode length for SecurID" msgstr "Ungültige Länge des Passcodes für SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "Die SIA-Sitzung kann nicht initialisiert werden" @@ -1045,7 +1065,7 @@ msgstr "Es sind keine Authentifizierungsmethoden in sudo einkompiliert! Wenn Sie msgid "Unable to initialize authentication methods." msgstr "Die Authentifizierungsmethoden können nicht initialisiert werden." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Authentifizierungsmethoden:" @@ -1078,117 +1098,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "Unbekannte Benutzer-ID: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "Unbekannter Benutzer: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "Schrittgröße: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "Start der Folge: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "Auffüllen der Folge: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s-Grammatik Version %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "Nicht unterstütztes Eingabeformat %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "Nicht unterstütztes Ausgabeformat %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: Eingabe- und Ausgabedatei müssen unterschiedlich sein" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "Standardwerte für sudoers können nicht initialisiert werden" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: unbekanntes Schlüsselwort: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "Ungültiger Standardtyp: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "ungültiger suppression Typ: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "Ungültiger Filter: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "Die Datei »%s« kann nicht geöffnet werden" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "Analyse der Datei %s gescheitert, unbekannter Fehler" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "Analysefehler in %s nahe Zeile %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "Analysefehler in %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "In die Datei »%s« kann nicht geschrieben werden" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1197,7 +1218,7 @@ msgstr "" "%s – zwischen sudoers Dateiformaten konvertieren\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1237,677 +1258,697 @@ msgstr "" " -V, --version Zeige Versionsinformationen an und Ende" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "unbekannter defaults-Eintrag »%s«" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "Die GMT-Zeit kann nicht bekommen werden" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "Der Zeitstempel kann nicht formatiert werden" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "Zu viele sudoers Einträge, Maximum ist %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "Die Umgebunsvariable SUDOERS_BASE ist nicht gesetzt und die Option -b ist nicht angegeben." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Syslog Facility, wenn syslog für Protokollierung verwendet wird: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Syslog-Priorität, wenn sich der Benutzer erfolgreich authentifiziert: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Syslog-Priorität, wenn sich der Benutzer nicht erfolgreich authentifiziert: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Die OTP-Eingabeaufforderung (One-Time-Passwords) in eine eigene Zeile schreiben" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "».« in $PATH ignorieren" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Immer eine Mail senden, wenn sudo gestartet wird" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Eine Mail senden, wenn die Authentifizierung des Benutzers fehlschlägt" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Eine Mail senden, wenn der Benutzer nicht in der sudoers-Datei steht" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Eine Mail senden, wenn der Benutzer nicht in der sudoers-Datei für diesen Rechner steht" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Eine Mail senden, wenn der Benutzer nicht berechtigt ist, einen Befehl auszuführen" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Eine Mail senden, wenn der Benutzer versucht, einen Befehl auszuführen" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Getrennte Zeitstempel für jede Benutzer/tty-Kombination verwenden" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Den Benutzer beim ersten Aufruf von sudo belehren" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Datei mit der sudo-Belehrung: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Standardmäßig muss sich der Benutzer authentifizieren" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Root darf sudo verwenden" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Den Hostnamen in der (nicht-syslog-)Protokolldatei speichern" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Das Jahr in der (nicht-syslog-)Protokolldatei speichern" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Eine Shell starten, wenn sudo ohne Parameter aufgerufen wird" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Die Umgebungsvariable $HOME beim Starten einer Shell mit »-s« setzen" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Immer die Variable $HOME auf das Home-Verzeichnis des Ziel-Benutzers setzen" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Informationssammlung für nützliche Fehlermeldungen erlauben" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Vollständige Hostnamen in der sudoers-Datei erfordern" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "»Beschimpfung« bei Eingabe eines falschen Passwortes" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Der Benutzer darf sudo nur aufrufen, wenn ein tty vorhanden ist" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo beachtet die Umgebungsvariable »EDITOR«" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Nach dem root-Passwort fragen, nicht nach dem Passwort des Benutzers" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Nach dem Passwort des Benutzers »runas_default« fragen, nicht nach dem Passwort des aufrufenden Benutzers" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Nach dem Passwort des Ziel-Benutzers fragen, nicht nach dem Passwort des aufrufenden Benutzers" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Standards auf die Anmeldeklasse des Zielbenutzers anwenden, falls diese vorhanden ist" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Die Umgebungsvariablen »LOGNAME« und »USER« setzen" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Nur die effektive UID auf den Ziel-Benutzer setzen, nicht die reale UID" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "Die sekundären Gruppen nicht auf die Gruppen des Ziel-Benutzers setzen" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Zeilenlänge der Protokolldatei für Zeilenumbruch (0 für keinen Zeilenumbruch): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Zeitlimit für den Authentifizierungszeitstempel: %.1f Minuten" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Zeitlimit bei der Eingabe des Passwortes: %.1f Minuten" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Anzahl Versuche zur Eingabe des Passwortes: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Zu verwendende Umask oder 0777, um die Umask des Benutzers zu verwenden: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Pfad zur Protokolldatei: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Pfad zum Mail-Programm: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Parameter für das Mail-Programm: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Mail-Adresse des Empfängers: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Mail-Adresse des Absenders: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Betreffzeile für Mails: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Meldung bei Eingabe eines falschen Passwortes: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Verzeichnis für den Belehrungsstatus: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Pfad zum Authentifizierungszeitstempel-Verzeichnis: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Besitzer des Authentifizierungszeitstempelverzeichnisses: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Benutzer in dieser Gruppe sind von Passwort- und PATH-Anforderungen ausgenommen: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Standard-Eingabeaufforderung für das Passwort: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "Überschreibt in allen Fällen bei der Passwortabfrage die Systemabfrage, falls gesetzt." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Standardbenutzer, unter dem die Befehle ausgeführt werden: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Wert, mit dem der Inhalt von $PATH des Benutzers überschrieben werden soll: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Pfad zum Editor, den visudo verwenden soll: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Wann soll ein Passwort für den Pseudobefehl »list« erforderlich sein: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Wann soll ein Passwort für den Pseudobefehl »verify« erforderlich sein: %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Die Dummy-exec-Funktion aus der Bibliothek sudo_noexec vorladen" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Wenn das LDAP-Verzeichnis erreichbar ist, ignorieren wir die lokale sudoers-Datei" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Datei-Deskriptoren >= %d werden geschlossen, bevor ein Befehl ausgeführt wird" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Benutzer können den Wert für »closefrom« mit der der Option -C überschreiben, wenn diese Option gesetzt ist" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Benutzern das Setzen beliebiger Umgebungsvariablen erlauben" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Die Umgebung auf einen Standardsatz an Variablen zurücksetzen" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Folgende Umgebungsvariablen prüfen:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Folgende Umgebungsvariablen löschen:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Folgende Umgebungsvariablen bewahren:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Im neuen Security-Kontext von SELinux wird diese Rolle verwendet: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Im neuen Security-Kontext von SELinux wird dieser Typ verwendet: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Pfad zur sudo-spezifischen »environment«-Datei: %s" # XXX -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Pfad zur eingeschränkten sudo »environment«-Datei: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Beim Auswerten der sudoers-Datei wird diese Locale verwendet: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "sudo erlauben, nach einem Passwort zu fragen, auch wenn das Passwort sichtbar wird" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Sichtbare Rückmeldung bei der Passworteingabeaufforderung, wenn der Benutzer etwas eingibt" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Schnelleren Musterabgleich verwenden, der zwar ungenauer ist, aber nicht auf das Dateisystem zugreift" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Die umask in sudoers überschreibt die umask des Benutzers, selbst wenn diese mehr Berechtigungen zulässt" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "Benutzereingaben für den ausgeführten Befehl protokollieren" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "Die Ausgabe des ausgeführten Befehls protokollieren" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "Ein-/Ausgabe-Protokolle mittels zlib protokollieren" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Befehle immer in einem Pseudo-TTY ausführen" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, 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:358 +#: plugins/sudoers/def_data.c:360 #, 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:362 +#: plugins/sudoers/def_data.c:364 #, 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:366 +#: plugins/sudoers/def_data.c:368 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:370 +#: plugins/sudoers/def_data.c:372 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:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Menge der erlaubten Privilegien: %s" # XXX einschränkenden? -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Menge der eingeschränkten Privilegien: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "Befehle mit einem Pseudo-TTY im Hintergrund starten" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "Verwendeter PAM-Service-Name: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "PAM-Service-Namen für Anmelde-Shells: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 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:398 +#: plugins/sudoers/def_data.c:400 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:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Ausführen vom PAM-Account-Management" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Maximale Sequenznummer des Ein-/Ausgabe-Protokolls: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Unterstützung für netgroups in sudoers aktivieren" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 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:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Folge symbolischen Links beim Editieren von Dateien mit sudoedit" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "Frage das Group-Plugin nach unbekannten System-Gruppen" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 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:430 +#: plugins/sudoers/def_data.c:432 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:434 +#: plugins/sudoers/def_data.c:436 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:438 +#: plugins/sudoers/def_data.c:440 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:442 +#: plugins/sudoers/def_data.c:444 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:446 +#: plugins/sudoers/def_data.c:448 #, 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:450 +#: plugins/sudoers/def_data.c:452 #, 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:454 +#: plugins/sudoers/def_data.c:456 #, 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:458 +#: plugins/sudoers/def_data.c:460 #, 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:462 +#: plugins/sudoers/def_data.c:464 #, 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:466 +#: plugins/sudoers/def_data.c:468 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:470 +#: plugins/sudoers/def_data.c:472 #, 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:474 +#: plugins/sudoers/def_data.c:476 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:478 +#: plugins/sudoers/def_data.c:480 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:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "Protokolliere auch die Prozess-ID beim Schreiben ins Systemlog" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Typ des Authentifizierungszeitstempelprotokolls: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Fehler bei der Authentifizierung: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Ignoriere Groß-/Kleinschreibung beim Matchen von Benutzernamen" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Ignoriere Groß-/Kleinschreibung beim Matchen von Gruppennamen" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "Protokolliere von sudo erlaubte Kommandos" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "Protokolliere von sudo verweigerte Kommandos" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 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:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Sudo Log-Server Timeout in Secunden: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 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:522 +#: plugins/sudoers/def_data.c:524 #, 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:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Pfad zur sudoers Zertifikats-Datei: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, 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:534 +#: plugins/sudoers/def_data.c:536 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:538 +#: plugins/sudoers/def_data.c:540 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:542 +#: plugins/sudoers/def_data.c:544 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:546 +#: plugins/sudoers/def_data.c:548 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:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "Setze den PAM remote Rechner auf den lokalen Hostname" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 +#, 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:560 +#, 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/defaults.c:184 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d unbekannter defaults-Eintrag »%s«" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: unbekannter defaults-Eintrag »%s«" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: unbekannter defaults-Eintrag »%s«" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d Kein Wert für »%s« angegeben" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: Kein Wert für »%s« angegeben" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: Kein Wert für »%s« angegeben" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d Werte für »%s« müssen mit einem »/« beginnen" - -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: Werte für »%s« müssen mit einem »/« beginnen" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: Die Option »%s« wird ohne Wert verwendet" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d Die Option »%s« wird ohne Wert verwendet" - -#: plugins/sudoers/defaults.c:280 -#, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: Die Option »%s« wird ohne Wert verwendet" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d Ungültiger »Defaults« Typ 0x%x für Option »%s«" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: Ungültiger »Defaults« Typ 0x%x für Option »%s«" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: Ungültiger »Defaults« Typ 0x%x für Option »%s«" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d Der Wert »%s« ist für die Option »%s« ungültig" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: Der Wert »%s« ist für die Option »%s« ungültig" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: Der Wert »%s« ist für die Option »%s« ungültig" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: Werte für »%s« müssen mit »/«, »~« oder »*« beginnen" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: Werte für »%s« müssen mit »/«, »~« oder »*« beginnen" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: Werte für »%s« müssen mit einem »/« beginnen" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: Werte für »%s« müssen mit einem »/« beginnen" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp ist beschädigt, die Längen passen nicht" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "Das Environment kann nicht neu erstellt werden" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "Leider dürfen die folgenden Umgebungsvariablen nicht gesetzt werden: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "Syntax-Fehler in %s bei der Zeile %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "Syntax-Fehler in %s" @@ -1961,88 +2002,88 @@ msgstr "»%s« ist keine gültige Netzmaske" msgid "Local IP address and netmask pairs:\n" msgstr "Lokale IP-Adresse und Netzmaske:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "Unbekannte Gruppe: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "In die I/O Logdatei kann nicht geschrieben werden: %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "Kann die Sequenz-Datei nicht aktualisieren" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "Die Datei %s%s kann nicht erstellt werden" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "Verbindung zum Logserver kann nicht aufgebaut werden" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, 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:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "Die Uhrzeit kann nicht ausgelesen werden" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: Interner Fehler, ungültiges Signal %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "Fehler in der Event-Schleife" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Erzeugen eines neuen SSL_CTX Objektes fehlgeschlagen: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "TLS Verbindung zu %s:%s fehlgeschlagen: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "TLS Initialisierung war nicht erfolgreich" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "TLS Handshake war nicht erfolgreich" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "Die aktuelle Zeit kann nicht ausgelesen werden" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: Interner Fehler, ungültiger Exit-Status %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "Verbindung zum Logserver verloren" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "Schreib-Puffer fehlt" @@ -2065,18 +2106,19 @@ msgstr "In der Datei »%s« muss »TLS_CERT« angegeben sein, um SSL zu nutzen" msgid "unable to initialize LDAP: %s" msgstr "LDAP kann nicht initialisiert werden: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 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:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "Ungültiges »sudoOrder« Attribut: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: Port ist zu groß" +#, c-format +msgid "%s: port too large" +msgstr "%s: Portnummer ist zu groß" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2087,7 +2129,7 @@ msgstr "LDAP-Adresstyp wird nicht unterstützt: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "ldap- und ldaps-Adressen können nicht zusammen verwendet werden" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "sudoOption kann nicht konvertiert werden: %s%s%s" @@ -2096,66 +2138,66 @@ msgstr "sudoOption kann nicht konvertiert werden: %s%s%s" msgid "unable to open audit system" msgstr "Das Audit-System kann nicht geöffnet werden" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "Die Audit-Nachricht kann nicht gesendet werden" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "Die Protokolldatei kann nicht geöffnet werden: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "Die Sperrdatei kann nicht geöffnet werden: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "In die Logdatei kann nicht geschrieben werden: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "Der Benutzer ist NICHT in der sudoers-Datei enthalten" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "Der Benutzer ist NICHT auf dem Rechner autorisiert" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "Der Befehl ist nicht erlaubt" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s ist nicht in der sudoers-Datei. Dieser Vorfall wird gemeldet.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s darf sudo für %s nicht verwenden. Dieser Vorfall wird gemeldet.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, 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:298 +#: plugins/sudoers/logging.c:297 #, 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:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: Befehl nicht gefunden" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2164,37 +2206,37 @@ 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:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "Fehler bei der Authentifizierung" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "Ein Passwort ist notwendig" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, 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:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "Die Standardeingabe kann nicht dupliziert werden: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "%s kann nicht ausgeführt werden: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "Fehler bei fork(): %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "Die Pipe kann nicht geöffnet werden: %m" @@ -2204,7 +2246,7 @@ msgstr "Die Pipe kann nicht geöffnet werden: %m" 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:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2213,8 +2255,7 @@ msgstr "" "\n" "LDAP-Rolle: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2222,42 +2263,38 @@ msgstr "" "\n" "Sudoers-Eintrag:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Optionen: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Befehle:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, 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:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas und befehlsspezifische Standardwerte für %s:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Der Benutzer %s darf die folgenden Befehle auf %s ausführen:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Der Benutzer %s darf sudo auf dem Rechner %s nicht ausführen.\n" @@ -2272,48 +2309,58 @@ msgstr "ignoriere die unvollständige sudoRole: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "Ungültiges LDIF-Attribut: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "ungültige Option »%.*s« durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "Die Netzwerkadressliste kann nicht eingelesen werden" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "Benutzername nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "User-ID nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "Gruppen-ID nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "Hostname nicht durch das sudo-Frontend angegeben" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "Ungültiges Arbeitsverzeichnis: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "Ungültiges »chroot« Verzeichnis: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "%s kann nicht ausgeführt werden" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers-Policy-Plugin Version %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-Datei-Grammatik-Version %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2322,86 +2369,86 @@ msgstr "" "\n" "Sudoers-Pfad: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch-Pfad: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf-Pfad: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret-Pfad: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, 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/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "Die Benutzer-ID %u kann nicht zwischengespeichert werden" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "Die Benutzer-ID %u kann nicht zwischengespeichert werden, sie existiert bereits" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "Der Benutzer %s kann nicht zwischengespeichert werden" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "Der Benutzer %s kann nicht in den Zwischenspeicher aufgenommen werden, er existiert bereits" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "Die Gruppen-ID %u kann nicht in den Zwischenspeicher aufgenommen werden" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "Die Gruppen-ID %u kann nicht in den Zwischenspeicher aufgenommen werden, sie existiert bereits" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "Die Gruppe %s kann nicht zwischengespeichert werden" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "Die Gruppe %s kann nicht in den Zwischenspeicher aufgenommen werden, sie existiert bereits" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "Die Gruppen-Liste für %s kann nicht in den Zwischenspeicher aufgenommen werden, sie existiert bereits" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "Die Gruppenliste für %s können nicht zwischengespeichert werden" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "Die Gruppen für %s können nicht eingelesen werden" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "Die Gruppen für %s können nicht geparst werden" @@ -2465,241 +2512,261 @@ msgstr "Audit-Pfad user_cmnd abgeschnitten: %s" msgid "truncated audit path argv[0]: %s" msgstr "Audit-Pfad argv[0] abgeschnitten: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "Die SSS-Quelle kann nicht initialisiert werden. Ist SSSD auf dem Rechner installiert?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "Das Symbol »%s« kann in %s nicht gefunden werden" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "Problem mit den Standard-Einträgen" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "Keine gültige sudoers-Quelle gefunden, Programmende" +#: plugins/sudoers/sudoers.c:295 +#, 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:297 +#, 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:321 +#, 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:322 +#, 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:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers gibt an, dass root sudo nicht verwenden darf" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "Der Benutzer darf das »closefrom«-Limit nicht überschreiben" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "Sie dürfen die Option -C nicht verwenden" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "Zeitstempelbesitzer (%s): Benutzer existiert nicht" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "Kein tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 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:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "Ungültiger Shell für den Benutzer %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "Befehl ist im aktuellen Verzeichnis" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "Der Benutzer darf keinen Kommand-Timeout angeben" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "Sie dürfen keinen Timeout angeben" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "Der Benutzer darf das Environment nicht erhalten" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "Sie dürfen das Environment nicht erhalten" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "Der Befehl ist zu lang" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "»sudoedit« muss nicht mittels »sudo« aufgerufen werden" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "Die Datei »%s« kann nicht gelesen werden" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "stat konnte nicht auf %s angewendet werden" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, 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:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s ist für alle beschreibbar (world writable)" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, 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:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "Nur root kann »-c %s« verwenden" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "Unbekannte Anmeldeklasse: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "Hostname %s kann nicht aufgelöst werden" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "Ungültige Filteroption: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "Ungültige maximale Wartezeit: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "Ungültiger Geschwindigkeitsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/Zeit: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "Sudo-Sitzung wird abgespielt: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "TTY konnte nicht in den Raw-Modus versetzt werden" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "" "Warnung: Ihr Terminal ist zu klein, um das Protokoll korrekt\n" "wiederzugeben.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Protokollgeometrie ist %d x %d, die Geometrie Ihres Terminals ist %d x %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Wiedergabe beendet, eine Taste drücken um das Terminal wiederherzustellen." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "Mehrdeutiger Ausdruck »%s«" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "»)« ohne öffnende Klammer im Ausdruck" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "Unbekannter Suchbegriff »%s«" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s erfordert ein Argument" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "ungültiger regulärer Ausdruck: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "Datum »%s« konnte nicht analysiert werden" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "»(« ohne schließende Klammer im Ausdruck" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "Ungültiges nachgestelltes »or«" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "Ungültiges nachgestelltes »!«" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "Unbekannter Suchtyp %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, 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:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, 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:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2708,7 +2775,7 @@ msgstr "" "%s – sudo-Sitzungsprotokolle abspielen\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2741,11 +2808,11 @@ msgstr "" " -V, --version zeigt Versionsinformationen an und beendet\n" " das Programm" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tHost stimmt nicht überein" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2753,7 +2820,7 @@ msgstr "" "\n" "Befehl erlaubt" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2761,7 +2828,7 @@ msgstr "" "\n" "Befehl verweigert" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2806,89 +2873,89 @@ msgstr "»sudoedit« sollte nicht mit einem Pfad angegeben werden" 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:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "Bitte verwenden Sie stattdessen das Programm »cvtsudoers«" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "Drücken Sie die Eingabetaste, um %s zu bearbeiten: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "Der angegebene Editor (%s) ist nicht vorhanden" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "Kein Editor gefunden (Pfad zum Editor = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "Schreibfehler" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, 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:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "Leere temporäre Datei (%s), %s ist unverändert" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "Editor-Aufruf (%s) ist gescheitert, %s ist unverändert" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s unverändert" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, 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:611 +#: plugins/sudoers/visudo.c:610 #, 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:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "Interner Fehler, %s in der Liste nicht gefunden!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "Festlegen von (uid, gid) von %s auf (%u, %u) gescheitert" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s und %s befinden sich nicht im gleichen Dateisystem, werden mit mv umbenannt" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "Befehl gescheitert: »%s %s %s«, %s unverändert" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "Fehler beim Umbenennen von %s, %s unverändert" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Was jetzt? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2900,67 +2967,67 @@ 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:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: Falsche Besitzer-(uid, gid), sollte (%u, %u) sein\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: Falsche Zugriffsrechte, sollte Modus 0%o sein\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: Analyse OK\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s ist in Verwendung, versuchen Sie es später erneut" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "Die Datei »%s« kann nicht gesperrt werden" # XXX -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Trotzdem ändern? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Fehler: %s:%d Zyklus in %s »%s«" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "Fehler: %s:%d: Zyklus in %s »%s«" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Warnung: %s:%d Zyklus in %s »%s«" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "Warnung: %s:%d: Zyklus in %s »%s«" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Fehler: %s:%d %s »%s« wird verwendet, ist aber nicht definiert" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Fehler: %s:%d: %s »%s« wird verwendet, ist aber nicht definiert" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Warnung: %s:%d %s »%s« wird verwendet, ist aber nicht definiert" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Warnung: %s:%d: %s »%s« wird verwendet, ist aber nicht definiert" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Warnung: %s:%d nicht verwendet: %s »%s«" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "Warnung: %s:%d: nicht verwendet: %s »%s«" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2969,7 +3036,7 @@ msgstr "" "%s – Die sudoers-Datei sicher bearbeiten\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2989,6 +3056,6 @@ msgstr "" " -s, --strict strikte Syntax-Prüfung\n" " -V, --version Versionsinformation anzeigen und beenden\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "Zu viele geschachtelte include-Einträge" diff --git a/plugins/sudoers/po/eo.mo b/plugins/sudoers/po/eo.mo index b3d211e3d7caad2835549b1f62a200ec163d7487..b49e2af96791a8ec7730d05eae26e4533c8238fc 100644 GIT binary patch delta 13154 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 delta 12078 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\n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -43,70 +43,73 @@ msgstr "*** SEKURECO: informoj por %h ***" msgid "Sorry, try again." msgstr "Malĝuste, reprovu." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -116,323 +119,340 @@ msgstr "Malĝuste, reprovu." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "ne eblas rezervi memoron" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "resumo postulas vojnomon" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "valoroj por \"CWD\" devas komenciĝi per '/', '~' aŭ '*'" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "valoroj por \"CHROOT\" devas komenciĝi per '/', '~' aŭ '*'" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "malvalida valoro notafter" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "validiga valoro notafter" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "eksvalidiĝo-valoro tro grandas" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "malvalida eksvalidiĝo-valoro" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s ekzistas sed ne dosierujo (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "ne eblas mkdir-i: %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "ne eblas ŝanĝi reĝimon de %s al 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "atendita JSON_STRING, %d ricevita" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "mankas duobla citilo en nomo" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "atendita JSON_OBJECT, %d ricevita" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "interna eraro, troo en %s" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "'}' sen kongruanta '{'" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "neatendita tabelo" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "']' sen kongruanta '['" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "neatendita ĉeno" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "mankas dupunkto post nomo" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "neatendita bulea valoro" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "neatendita nombro" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u ne eblas analizi: \"%s\"" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: malvalida protokolo-dosiero" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: mankas temp-indikila kampo" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: temp-indikilo %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: mankas kampo de uzanto" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: mankas kampo de runa uzanto" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: mankas kampo de runa grupo" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "nelegebla tempo-registra dosiero: %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "malvalida linio en la tempo-registran dosieron: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s: %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (komando daŭrigis) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "protokolo jam estas kompleta, ne eblas restartigi ĝin" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "ne eblas restartigi protokolon" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "ne eblas malfermi: %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "mankas eneliga protokolo %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: ne eblas serĉi antaŭen: %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "ne eblas trovi daŭrigan punkton [%lld, %ld] en %s/%s" @@ -519,17 +539,17 @@ msgstr "ne eblas akiri metodon de TLS-servilo: %s" msgid "unable to create TLS context: %s" msgstr "ne eblas krei TLS-kuntekston: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "ne eblas ŝargi atestilon %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "Ne eblas ŝargi aŭtoritatan atestilaron: %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "ne eblas ŝarĝi privatŝlosilon %s" @@ -548,28 +568,28 @@ msgstr "ne ablas elekti minimuman eldonon de TLS al 1.2: %s" msgid "unable to get remote IP addr" msgstr "ne eblas atingi foran IP-adreson" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Ne eblas almeti uzanto-datumojn al la SSL-objekto: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "ne eblas aldoni eventon al atendovico" @@ -604,7 +624,7 @@ msgstr "" " -R, --random-drop elcenta ŝanco, ke la kontektoj interrompiĝos\n" " -V, --version montri eldonon kaj eliri\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C, eldono 1.3 aŭ pli postulata" @@ -613,9 +633,9 @@ msgstr "Protobuf-C, eldono 1.3 aŭ pli postulata" msgid "invalid random drop value: %s" msgstr "validiga hazarda interrompiĝo-valoro: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s eldono %s\n" @@ -709,7 +729,7 @@ msgstr "" " -t, --test provi kontrolan servilon per sendado de la elektita eneliga protokolo n-foje paralele\n" " -V, --version montri eldonon kaj fini\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "ne eblas serĉi je %s:%s %s" @@ -718,122 +738,122 @@ msgstr "ne eblas serĉi je %s:%s %s" msgid "unable to get server IP addr" msgstr "ne eblas atingi servilan IP-adreson" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "ne eblas legi je %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "klienta mesaĝo tro grandas: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: skribobufo jam uzata" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "neatendita eneliga evento %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: neatendita stato %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "nevalida ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "erarmesaĝo ricevita el servilo: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "abortiga mesaĝo ricevita el servilo: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "neelpakebla ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s neatendita valoro %d de type_case" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "eksvalidiĝo dum legado el servilo" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "trofrua dosierfino" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "servila mesaĝo tro granda: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "eksvalidiĝo dum skribado al servilo" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "Eksvalidiĝo de TLS-manpremo okazis" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "ne eblas apliki eventon" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "TLS-konekto malsukcesis: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "ne eblas ekigi SSL-kuntekston: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Ne eblas generi SSL-objekton: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Ne eblas almeti ŝtopilingon al la SSL-objekton: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "kaj restartiga punkto kaj iolog-identigilo estas specifendaj" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "ne rajtas estigi restartigan punkton kiam neniu eneligaĵo estas sendita" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "trofrue finiĝis kun stato %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "pasinta tempo sentita al servilo [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "kunsendita punkto ricevita el servilo [%lld, %ld]" @@ -843,11 +863,11 @@ msgstr "kunsendita punkto ricevita el servilo [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "Kromnomo \"%s\" jam ekzistas" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "ne eblas forki" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "ne eblas ŝanĝi pasvorton por %s" @@ -869,11 +889,11 @@ msgstr "malvalida aŭtentikiga tipo" msgid "unable to initialize BSD authentication" msgstr "ne eblas komenci BSD-aŭtentikigon" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "via konto ekzvalidiĝis" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "aprobo malsukcesis" @@ -980,7 +1000,7 @@ msgstr "Konto eksvalidiĝis aŭ PAM-agordon malhavas sekcion \"account\" por sud msgid "PAM account management error: %s" msgstr "Eraro de administro de konto PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "vi ne ekzistas en la datumbazo %s" @@ -1009,7 +1029,7 @@ msgstr "malvalida Aŭtentikiga Traktilo por SecurID" msgid "SecurID communication failed" msgstr "Komunikiĝo kun SecurID malsukcesis" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "nekonata SecurID-eraro" @@ -1017,7 +1037,7 @@ msgstr "nekonata SecurID-eraro" msgid "invalid passcode length for SecurID" msgstr "malvalida paskoda longo por SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "ne eblas ekigi SIA-seascon" @@ -1041,7 +1061,7 @@ msgstr "Ekzistas neniaj aŭtentikigaj metodoj kompilitaj en sudo! Se vi volas ma msgid "Unable to initialize authentication methods." msgstr "Ne eblas komenci aŭtentikigajn metodojn." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Aŭtentikigaj metodoj:" @@ -1074,117 +1094,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "nekonata uid: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "nekonata uzanto: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "alkremento de ordo: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "komenca ordo: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "ŝtopado de ordo: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s gramatika eldono %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "nesubtenata enig-formo %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "nesubtenata elig-formo %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: eliga kaj eniga dosieroj devas esti malsamaj" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "ne eblas ekigi aŭtomatajn valorojn de sudoers" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: nekonata ŝlosilvorto: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "malvalida defaŭlto-tipo: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "malvalida demeto-tipo: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "malvalida filtro: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "ne eblas malfermi: %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "malsukcesis analizi dosieron %s, nekonata eraro" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "analiza eraro en %s proksime al linio %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "analiza eraro en %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "ne eblas skribi al %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1193,7 +1214,7 @@ msgstr "" "%s - konverti inter dosierformoj de sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1234,675 +1255,695 @@ msgstr "" " -V, --version montri informon pri versio kaj eliri" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "en defaults estas nekonata enigo \"%s\"" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "ne eblas atingi GMT-tempon" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "ne eblas aranĝi tempo-indikilon" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "tro multaj enigoj de sudoers, maksimume %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "la medivariablo SUDOERS_BASE ne estas difinita kaj la modifilo -b ne estis indikata." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Syslog-trajto se syslog estas uzata por protokoli: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Syslog-prioritato por uzi, kiam uzanto sukcese aŭtentikiĝas: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Syslog-prioritato por uzi kiam uzanto malsukcese aŭtentikigas: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Meti OTP-demandilon en sia propra linio" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "Ignori '.' en $PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Ĉiam sendi retmesaĝon kiam sudo plenumiĝas" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Sendi retmesaĝon se uzanto-aŭtentikiĝo malsukcesas" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Sendi retmesaĝon se la uzanto ne estas en sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Sendi retmesaĝon se la uzanto ne estas en sudors por la gastiganto" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Sendi retmesaĝon se la uzanto ne estas permesata plenumigi komandon" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Sendi retmesaĝon se la uzanto provi plenumigi komandon" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Uzi apartan tempo-indikilon por ĉiu uzanto/tty-kombino" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Averti uzanton dum la unua fojo ĝi plenumigas je sudo" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Dosiero havanta la sudo-averton: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Postulas, ke uzantoj aŭtentikiĝu aŭtomate" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Ĉefuzanto rajtas plenumigi: sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Protokoli la gastignomon en la (ne syslog) protokolo" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Protokoli la jaron en la (ne syslog) protokolo" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Se sudo estas vokata kun neniuj parametroj, komencu ŝelon" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Valorizi medivariablon $HOME al la cela uzanto dum komenci ŝelon kun -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Ĉiam valorizi medivariablon $HOME al la hejma dosierujo de la cela uzanto" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Permesi, ke iu informokolektado por doni utilajn eraromesaĝojn" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Postuli tute kvalifikitajn gastiganto-nomojn en la dosiero sudoers" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "Insulti la uzanton, kiam si enmetas malĝustan pasvorton" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Nur permesi, ke uzanto plenumigu sudo-on se si havas tty-on" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo honoru la medivariablon EDITOR" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Peti la ĉefuzantan pasvorton, ne la uzanto-pasvorton" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Peti la pasvorton de runas_default, ne de la uzanto" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Peti la pasvorton de la cela uzanto, ne la nuna uzanto" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Apliki aŭtomataĵojn en la ensaluta klaso de la cela uzanto, se ĝi ekzistas" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Valorizi la medivariablojn LOGNAME kaj USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Nur valorizi la efikan uid-on al la cela uzanto, ne la realan uid-on" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "Ne ekigi la grupon vektoron al tio de la cela uzanto" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Longo je kiu linfaldi la protokol-dosieraj linioj (0 por senfalda): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Eksvalidiĝo de la aŭtentikiga tempo-indikilo: %.1f minutoj" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Eksvalidiĝo de la pasvortilo: %.1f minutoj" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Nombro da provoj por enmeti pasvorton: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask uzi aŭ 07777 por uzi uzanton: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Vojo al protokolo: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Vojo al retpoŝtilo: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Parametroj por retpoŝtilo: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Retpoŝtadreso adresata: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Retpoŝtadreso adresanta: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Subjekta linio por ĉiuj mesaĝoj: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Neĝusta pasvorta mesaĝo: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Vojo al dosierujo de prelega stato: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Vojo al dosierujo de aŭtentikiga tempo-indikilo: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Estro de la dosierujo de aŭtentikiga tempo-indikilo: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Uzantoj en la grupo en devas plenumi la postulojn de pasvorto kaj PATH: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Defaŭlta pasvorta peto: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se aktivigita, passprompt superregas sistemajn invitojn ĉiuokaze." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Defaŭlta uzanto por plenumigi komandojn: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valoro per kiu superregi la PATH-on de uzanto: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Vojo al la tekstoredaktilo uzota de visudo: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kiam postuli pasvorton por la pseŭdokomando 'list' : %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kiam postuli pasvorton por la pseŭdokamando 'verify' : %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Anstaŭŝargi la falsan exec-funkciojn enhavatajn en la biblioteko sudo_noexec" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Se LDAP-dosierujo estas aktiva, ni ignoru la lokan suders-dosieron" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Dosiero-priskribiloj >= %d fermiĝos antaŭ ol plenumigi komandon" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Se elektita, uzantoj rajtas superregi la valoron de \"closefrom\" per la parametro -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Permesi, ke uzantoj valorizu arbitrajn medivariablojn" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Restarigi la medion al apriora aro da variabloj" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Medivariabloj por kontroli por sano:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Medivariabloj por forigi:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Medivariabloj konservi:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux-rolo por uzi en la nova sekureca kunteksto: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux-tipo por uzi en la nova sekureca kunteksto: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Vojo al media dosiero specifa al sudo: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Vojo al la neatingebla sudo-specifa medio-dosiero: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Lokaĵaro por uzi dum analizi dosieron sudoers: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Permesi, ke sudo peti pasvorton eĉ se ĝi estus videbla" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Doni vidajn indikojn je la pasvorta enmetanta kiam ekzistas enmeto" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Uzi pli rapida kunigo, kiu estas malpli ĝusta sed ne atingas la dosiersistemon" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "La umask specifa en sudors superregos tio de la uzanto, eĉ se ĝi estas pli permesema" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "Protokoli enmeton de uzanto por la komando, kiun si plenumigas" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "Protokoli la eligon de la komando, kiu estas plenumiĝi" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "Kunpremi eneligaj protokoloj per zlib" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Ĉiam protokoli komandojn en pseŭda tty" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Kromprogramo por kompreno de ne-uniksaj grupoj: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Dosierujo en kiu konservi eneligaj protokoloj: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Dosiero en kiu konservi la eneliga protokolo: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Aldoni eron al la utmp/utmpx-dosiero dum generi pty-on" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Valorizi uzanton en utmp al la plenumigkiela uzanto, ne la vokanta uzanto" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Aro da permesitaj privilegioj: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Aro da limigaj privilegioj: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "Plenumigi komandojn en pty en la fono" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "PAM-servonomo uzota: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "PAM-servonomo uzota por ensalutaj ŝeloj: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "Ne eblas establi PAM-atestilojn por la cela uzanto" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "Krei novan PAM-seancon en kiu la komando plenumiĝos" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Administradi validigon de konto PAM" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Maksimuma sinsekva numero de la eneliga protokolo: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Aktivigi retgrupan regon de sudoers" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Kontroli gepatrajn dosierujojn pri skribeblo dum redakto de dosieroj per sudoedit" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Sekvi simbolajn ligojn dum redakto de dosieroj per sudoedit" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "Informo-mendi la grupan kromprogramon por nekonataj sistem-grupoj" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Kongrui retgrupoj surbaze de entuta n-opo: uzanto, gastiganto kaj domajno" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Permesi ke komandoj estu plenumataj eĉ se sudo ne povas skribi al la ekzamena protokolo" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Permesi ke komandoj estu plenumataj eĉ se sudo ne povas skribi al la eneliga protokolo" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Permesi ke komandoj estu plenumataj eĉ se sudo ne povas skribi al la protokola dosiero" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Solvi grupojn en sudoers kaj kongrui al la grupa ID, ne la nomo" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Protokoleroj pli grandaj ol tiu ĉi valoro estos dividitaj en multoblajn mesaĝojn en syslog: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Uzanto kiu posedos la eneligajn protokol-dosierojn: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupo kiu posedos la eneligajn protokol-dosierojn: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Dosier-reĝimo uzota por la eneligaj protokol-dosieroj: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Plenumigi komandojn laŭ dosiernumero anstataŭ laŭ vojo: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignori nekonatajn erojn Defaults en sudoers anstataŭ prezenti averton" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Tempo laŭ sekundoj pust kiu la komando finiĝos: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "Permesi al la uzanto specifi eksvalidiĝon per la komandlinio" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Tuj elbufrigi eneligo-protokolajn datumojn en diskon anstataŭ enbufrigi ĝin" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "Inkluzivigi la procezan identigilon dum protokoli per syslog" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Tipo de tempindika rikordo por aŭtentikigo: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Mesaĝo pri malsukceso dum aŭtentikigo: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Preteratenti usklecon dum kongruo al uzantnomoj" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Preteratenti usklecon dum kongruo al grupnomoj" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "Protokoli kiam komando estas permesata de sudoers" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "Protokoli kiam komando estas malpermesata de sudoers" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "Sudo: protokoli servilo(j)n al kiuj konektiĝi kun libervola pordo" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Sudo: protokoli servilan eksvalidiĝon laŭ sekundoj: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Ebligi ŝtopilingan elekton SO_KEEPALIVE por la ŝtopilingo konektita al la protokolservilo" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Vojo al atestilara dosiero de la kontrola servilo: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Vojo al atestila dosiero de sudoers: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Vojo al la privatŝlosila dosiero de sudoers: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "Konstati ke la atestilo de la protokolo-servilo validas" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Permesi la uzon de nekonata plenumkiel-uzanto kajaŭ grupa identigilo" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "Permesi nur plenumigi komandojn kiel uzanto kun valida ŝelo" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "Agordi la PAM-foran uzanton al la uzanto, kiu plenumigas je sudo" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "Agordi la PAM-foran retnodon al la loka nodnomo" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 +#, c-format +msgid "Working directory to change to before executing the command: %s" +msgstr "Kuranta dosierujo ŝanĝota antaŭ ol plenumi la komandon: %s" + +#: plugins/sudoers/def_data.c:560 +#, c-format +msgid "Root directory to change to before executing the command: %s" +msgstr "Radika dosierujo ŝanĝota antaŭ ol plenumi la komandon: %s" + +#: plugins/sudoers/defaults.c:184 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d nekonata enigo de defaults \"%s\"" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: nekonata ero de defaults \"%s\"" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: nekonata enigo de defaults \"%s\"" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d neniu valoro indikita por \"%s\"" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: neniu valoro indikita por \"%s\"" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: neniu valoro indikita por \"%s\"" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d valoroj por \"%s\" devas komenciĝi per '/'" - -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: valoroj por \"%s\" devas komenciĝi per '/'" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: parametro \"%s\" ne povas havi valoron" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d parametro \"%s\" ne povas havi valoron" - -#: plugins/sudoers/defaults.c:280 -#, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: parametro \"%s\" ne povas havi valoron" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d malvalida Defaults-tipo 0x%x por parametro \"%s\"" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: malvalida Defaults-tipo 0x%x por parametro \"%s\"" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: malvalida Defaults-tipo 0x%x por parametro \"%s\"" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d valoro \"%s\" estas malvalida por parametro \"%s\"" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: valoro \"%s\" estas malvalida por parametro \"%s\"" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: valoro \"%s\" estas malvalida por parametro \"%s\"" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: valoroj por \"%s\" devas komenciĝi per '/', '*' aŭ '*'" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: valoroj por \"%s\" devas komenciĝi per '/', '*' aŭ '*'" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: valoroj por \"%s\" devas komenciĝi per '/'" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: valoroj por \"%s\" devas komenciĝi per '/'" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: medio tro granda" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "ne eblas rekonstrui la medion" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "bedaŭre vi ne estas permesata valorizi la jenajn medivariablojn: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "analiza eraro en %s proksime al linio %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "analiza eraro en %s" @@ -1956,88 +1997,88 @@ msgstr "ne eblas trakti retmaskon \"%s\"" msgid "Local IP address and netmask pairs:\n" msgstr "Loka IP-adresa kaj retmaska paroj:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "nekonata grupo: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "ne eblas skribi al eneliga protokoldosiero: %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "ne eblas ĝisdatigi sinsekvan dosieron" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "ne eblas krei: %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "ne eblas konektiĝi al protokolo-servilo" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: interna eraro, protokola dosiero de en/eligo por evento %d ne estas malferma" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "ne eblas legi la horloĝon" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: interna eraro, malvalida signalo %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "eraro en evento-iteracio" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Kreiĝo de nova objekto SSL_CTX malsukcesis: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "TLS-konekto al %s:%s malsukcesis: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "TLS-komenciĝo malsukcesis" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "TLS-manpremo malsukcesis" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "ne eblas akiri la tempon de la tago" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: interna eraro, malvalida finiĝo-stato %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "konekto al protokolo-servilo perdita" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "mankanta skribobufo" @@ -2060,18 +2101,19 @@ msgstr "por uzi SSL, TLS_CERT devas havi valoron en %s" msgid "unable to initialize LDAP: %s" msgstr "ne eblas ekigi LDAP-on: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls specifita sed LDAP-bibliotekoj ne havas la funkciojn ldap_start_tls_s() kaj ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "malvalida atributo de sudoOrder: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: pordo tro granda" +#, c-format +msgid "%s: port too large" +msgstr "%s: pordo tro grandas" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2082,7 +2124,7 @@ msgstr "nekonata retadresa tipo de LDAP: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "ne eblas miksi sekurajn kaj nesekurajn retadresojn de LDAP" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "ne eblas konverti sudoOption: %s%s%s" @@ -2091,66 +2133,66 @@ msgstr "ne eblas konverti sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "ne eblas malfermi revizian sistemon" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "ne eblas sendi revizian mesaĝon" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "ne eblas malfermi protokolon: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "ne eblas ŝlosi protokolon: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "ne eblas skribi al protokolo: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "uzanto NE estas en sudoers" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "uzanto NE permesata en gastiganto" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "komando ne permesata" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s ne estas en la dosiero sudoers. Ĉi tiu estos raportita.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s ne estas permesata plenumigi sudo-on en %s. Ĉi tio estos raportita.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Bedaŭre uzanto %s ne rajtas plenumigi sudo en %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Bedaŭre uzanto %s ne rajtas plenumigi '%s%s%s' kiel %s%s%s en %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: komando ne trovita" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2159,37 +2201,37 @@ msgstr "" "ni malatentas \"%s\" trovita en '.'\n" "Uzu \"sudo ./%s\" se tio estas la \"%s\" , kiun vi volas plenumigi." -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "aŭtentiga malsukceso" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "pasvorto estas bezonata" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u malĝusta pasvorta provo" msgstr[1] "%u malĝustaj pasvortaj provoj" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "ne eblas kopii enigon: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "ne eblas plenumigi %s-on: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "ne eblas forki: %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "ne eblas malfermi tubon: %m" @@ -2199,7 +2241,7 @@ msgstr "ne eblas malfermi tubon: %m" msgid "digest for %s (%s) is not in %s form" msgstr "resumo por %s (%s) ne estas laŭ la formo %s" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2208,8 +2250,7 @@ msgstr "" "\n" "LDAP-rolo: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2217,42 +2258,38 @@ msgstr "" "\n" "Ero en sudoers:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Modifiloj: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Komandoj:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Kongruantaj eroj de Defaults: %s en %s:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Plenumigkiela komando-specifaj aŭtomataĵoj por %s:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Uzanto %s rajtas plenumigi la jenajn komandojn en %s:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Uzanto %s ne rajtas plenumigi sudo-on en %s.\n" @@ -2267,48 +2304,58 @@ msgstr "ni preteratentas malkompletan sudoRole: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "malvalida LDIF-atributo: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "malvalida %.*s difinita de sudo-fasado" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "ne eblas trakti reto-adresan liston" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "uzantnomo ne difinita de sudo-fasado" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "uzanto-ID ne difinita de sudo-fasado" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "grupo-ID ne difinita de sudo-fasado" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "gastiganta nomo ne difinita de sudo-fasado" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "nevalida kuranta dosierujo: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "malvalida chroot-dosierujo: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "ne eblas plenumigi: %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Eldono %s de la konduta kromprogramo\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Eldono %d de la gramatikilo de sudoers\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2317,86 +2364,86 @@ msgstr "" "\n" "Vojo de sudoers: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "vojo de nsswitch: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "vojo de ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "vojo de ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "ne eblas registri hokon el tipo %d (versio %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "ne eblas konservi uid-on %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "ne eblas konservi uid-on %u, jam ekzistas" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "ne eblas krei tenejan uzanton: %s" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "ne eblas konservi uzanton %s, jam ekzistas" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "ne eblas konservi gid-on %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "ne eblas konservi gid-on %u, jam ekzistas" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "ne eblas konservi grupon %s" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "ne eblas konservi grupon %s, jam ekzistas" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "ne eblas konservi grupan liston por %s, jam ekzistas" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "ne eblas konservi grupliston por %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "ne eblas trakti grupon en %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "ne eblas trakti gids por %s" @@ -2460,239 +2507,259 @@ msgstr "tranĉita ekzamen-vojo user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "tranĉita ekzamen-vojo argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "ne eblas ekigi SSS-fonton. Ĉu SSSD estas instalita en via maŝino?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "ne eblas trovi simbolon \"%s\" en %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "problemoj kun aŭtomataj eroj" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "ne validaj fontotekstoj de sudoers trovita, ĉesiganta" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "uzanto ne rajtas ŝanĝi radikan dosierujon al %s" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "vi ne rajtas uzi la parametron -R kun %s" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "uzanto ne rajtas ŝanĝi dosierujon al %s" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "vi ne rajtas uzi la parametron -D kun %s" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers specifas, ke ĉefuzanto ne rajtas sudo-i" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "uzanto ne permesata superregi la limigon de closefrom" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "vi ne rajtas uzi la parametron -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tempo-indikila posedanto (%s): Nenia uzanto" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "neniu tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "bedaŭre vi devas havi tty-on por plenumigi sudo-on" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "nevalida ŝelo por uzanto %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "komando en nuna dosierujo" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "uzanto ne rajtas elekti komando-eksvalidiĝon" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "bedaŭre vi ne rajtas elekti komando-eksvalidiĝon" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "uzanto ne rajtas konservi la medion" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "bedaŭre vi ne rajtas konservi la medion" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "komando tro longas" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit ne devas plenumiĝi per sudo" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "ne eblas legi %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "ne eblas apliki stat al %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s ne estas normala dosiero" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s estas estrita de uid %u, devas esti %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s estas skribebla de ĉiuj" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s estas estrita de gid %u, devas esti %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "nur ĉefuzanto rajtas uzi \"-c %s\"" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "nekonata ensaluta klaso: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "ne eblas trovi gastiganton %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "malvalida filtrila elekto: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "malvalida maksimuma atendo: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "malvalida rapida faktoro: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/tempo-registrado: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "Refaranta sudo-seancon: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "ne eblas elekti tty-on en nudan reĝimon" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Averto: via terminalo estas tro malgranda por konvene reskribi la protokolon.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Protokola grando estas %dx%d, sed via terminala grando estas %dx%d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Refarado finita, premu iu ajn klavon por restarigi la terminalon." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "ambigua esprimo \"%s\"" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "mankas krampo kongruanta al ')' en esprimo" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "nekonata serĉaĵo \"%s\"" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s bezonas parametron" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "malvalida regulesprimo: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "ne eblis analizi daton \"%s\"" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "mankas krampo kongruanta al '(' en esprimo" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "malvalida posta \"or\"" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "malvalida posta \"!\"" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "nekonata serĉtipo %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "uzado: %s [-hnRS] [-d ujo] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uzado: %s [-h] [-d ujo] -l [serĉaĵo]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2701,7 +2768,7 @@ msgstr "" "%s - refari sudo-seancajn protokolojn\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2729,11 +2796,11 @@ msgstr "" " -s, --speed=num rapidigi aŭ malrapidigi eligon\n" " -V, --version eligi eldonan informon kaj eliri" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\thost sen egalo" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2741,7 +2808,7 @@ msgstr "" "\n" "Komando permesata" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2749,7 +2816,7 @@ msgstr "" "\n" "Komando rifuzata" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2794,89 +2861,89 @@ msgstr "sudoedit plej bone ne specifiĝu kun vojo" msgid "the -x option will be removed in a future release" msgstr "la domifilo -x estos forigita en posta eldono" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "bonvolu konsideri uzi la utilaĵon cvtsudoers anstataŭe" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "premu enen-klavon por redakti %s-on: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "specifita tekstoredaktilo (%s) ne ekzistas" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "neniu tekstoredaktilo trovita (vojo = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "skriba eraro" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "ne eblas apliki stat al provizora dosiero (%s), %s neŝanĝita" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "nul-longa provizora dosiero (%s), %s neŝanĝita" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "redaktilo (%s) malsukcesis, %s neŝanĝita" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s neŝanĝita" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "ne eblas remalfermi provizoran dosieron (%s), %s neŝanĝita." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "ne eblas analizi provizoran dosieron (%s), nekonata eraro" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "interna eraro, ne eblas trovi %s en listo!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "ne eblas ŝanĝi (uid, gid) de %s al (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s kaj %s ne estas la sama dosiersistemo, uzanta mv-on por alinomi" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "komando malsukcesis: '%s %s %s', %s neŝanĝita" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "eraro dum alinomi %s-on; %s neŝanĝita" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Kion nun? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2888,66 +2955,66 @@ msgstr "" " (x) eliri sen konservi ŝanĝojn al sudoers-dosiero\n" " (Q) Eliri kaj konservi ŝanĝojn al sudoers-dosiero (DANĜERA!)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "ne eblas plenumigi: %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: malĝusta estro (uid, gid) devas esti (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: misaj permesoj, devas esti reĝimo 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analizita senerare\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s okupata, reprovu pli malfrue" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "ne eblas ŝlosi: %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Ĉu redakti ja? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Eraro: %s:%d ciklo en %s \"%s\"" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "Eraro: %s:%d: ciklo en %s \"%s\"" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Averto: %s:%d ciklo en %s \"%s\"" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "Averto: %s:%d: ciklo en %s \"%s\"" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Eraro: %s:%d %s \"%s\" estas referencita sed ne difinita" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Eraro: %s:%d: %s \"%s\" estas referencita sed ne difinita" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Averto: %s:%d %s \"%s\" estas referencita sed ne difinita" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Averto: %s:%d %s: \"%s\" estas referencita sed ne difinita" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Averto: %s:%d neuzata %s \"%s\"" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "Averto: %s:%d: neuzata %s \"%s\"" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2956,7 +3023,7 @@ msgstr "" "%s - sekure redakti la dosieron sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2976,6 +3043,9 @@ msgstr "" " -s, --strict severa kontrolado de sintakso\n" " -V, --version montri eldonon kaj eliri\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "tro da niveloj de inkluzivaĵoj" + +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: pordo tro granda" diff --git a/plugins/sudoers/po/fi.mo b/plugins/sudoers/po/fi.mo index c43521e486f3abef1670f5fa69205cc582f16150..b9253c44382605e1d4597e74d5eddbac6b562d9b 100644 GIT binary patch delta 12424 zcmZ|V2Yggj+Q;#mgd!k4)Bw2zLQNnEp|{YB6zLrt$Y6$)iBkembPyDjBEl#lf(ir+ zT}M>bLJ6<}3Me38hgA^Uu61qb{{C|=sJrib{XF@eb8b85Ip{04PnLZ)SP#dJ); zeC&X0knCD-Vlw`UWYDXY@)C5tPS&zDJH|n|XqNd~*tcUTPn19V#n@(o# z#-lErj~dwqWO}VPQ4fk`Vw+=ARDB4l;{{j;??QE8t>bH0mil+t4Sz;WZO1N_m5r0S zgeJc(KOi__k1plNrbreqmvE$v0JZvBkQunWD{dtO6LmQxh~_Q}m4V5a zjQ3+jd>&iiKGcXm!+5N4gV|1vQ0F_MUVIZOLu;J&!;aseo|`a)X~JF@YE5Ag1=gPx zLCw|Is1&vsYFP}@8i{)G8q{{&jaucOq2@Yin3;m^sE+ti16hkK59c*AW4EJDkj!_wGJi@H%?%0O<6x6_$Vs$)% zEHCRl)N}2T@ke=@zc!(tx&6e z7%FwQpsOy%Xw&y0N{e>AJGom9j zXatv0J*$vyUeFLTsb^qiyczYNAgW`_u?lWOjr?WQHa&+Ou%g@iq16ku29{tGd=@9; z+aU@{dApfr)ec5=z=s;aLR3a}IQ93OdfA)Jw#&flIqyd8Zy%1q64cuG88!D!bIg=x zp$0G>lQ86?pbH*ErRo`MiU-if%cu)0ddvt@Q4bi5YR|@IxCmR|c2q~sIPDc?nSrHY zGVSA0_uYZE_WybcO5J{pE;7d}s3}RvHSJxo74-?I_PbCWEpa@ITC`uG)<(HJvsMz& zrk;tqe++8M=3x!qZ!M>w#kB!76|Z1(Jca7hYcnOuMGKFT%v_viH$ry_Egn}}#5w*QuMRn*5X5de#45Zv*M$#XvQJ;)@K|U(A zi%}!qg<8btu|0l|Hn#Sejt#-;)Mxp~e;S3kG{|kJ56lOs2VX&bAL{$fwn;;ccr>a5 zc~}E)M?LU<#|^0aoR;4}(^@3c~1LiueMy2{W zREkfbGWCsfK0atVo`!8{ABq~-?WpH$$C`Kq^&R*iL_v!tw#e+)wx|bAz)E-R6|R>@MDKjisQ5dr>`o615$VpyuuqOvWEkYoXC1Gm=55T{0Cj z@iy#-J5eeA0XtywJ?5`)ld&81RT#}2hKA5k^8d&H-Cy{V>D$roc5EbIc~DTWM%?tQ59iZT!ORkC2WVyR+_1sh&n$H({Lwhk)97x zP)dJB%~eL&{DZ@Ty5MQN0rz7Itnz@FyN;-l`%$S}gVBLtQ|iB<24p{IuA7F+=t9iI zeW>%HA1E}U(0-Lk*=QU0Dd&shGL?5bNies_rYO{7`q6TsYDr3*%RQwjz zv5^m({eM5|{7z&Ug{&_rbf#hU8oulJ3@TOS9x*-afa9qLu_qowt?nvo&3B?ZDigC% z4_<+-bRDMRPdFKyuQR`RxC@oBSFo2>)khSD(U9~g|8&M%@ELpymGZkDGb7xF-Kif$ zEwZ@B%_2%hb;yGiaW$$#8!-`&U|swS8)4jfvnGe(>@VH>gj_NQt)N$kC)NL zv`uC)jX*7$B2)&pU=O^E8exkk%zXn!x;1Pz<3~EX$?KC%bLXEW8aXk*Dei$oZooCFPHo7!~z~iVCUce0e4I5y3#Jpe_s=W|x z+=zAXfa80pweuY+Q!Sq}i**_@ppdnULK-J_p^X<&9Voxcv^U07>LVTJVJqs}u^FCo zw4OHuXpS1$P;7y7QP*uk8(&AQp)awi_J6e(%#H1_H76#aw#_0;$Ni`Weuqo3$&2Po zw-dFfK1F5j`rYP58K?|Rz}{Gdnu6Wf0Z*ZJO{Krl&ik#_6to)qqi&prO8Hz=&sU@7 zau3$S^Vk%B!TM;wWUlXunu>9#4lPDyV5j3b)Z&eO**v!~Mt}c5kb+L+pdP#kGjS`b zW9Km*f5zHa^%e7gW~fCv6kFo0sOOY8=Sxw~`wZ3bs;`>+TcWPddX@ZFq%ezyju^z6 zxDC7FKD6-)Dg%x7n2u#(d+I?{2DYF&dI+^PKE#Gtaj(fh3#>tX1Xjgt)bj#+LuR|J zqCu%Xf|{eRQEQ>aKGW0D7@&R!Y9!yHQd@by`P*;@Y)gFrY6@nfMz|TZc1~dy#+91i zBlN{~)JKLWjHIv-wF}OnQdaSRStM;y4;qeoP%)|lPhlFdsF?>ro>+h8k(iYo^2Lj?+=QC5+wh zpi_@MY}zwXBc6#(a1D0R{(qH1G7UdrOH4dsreF|eQJ;qixDR#yebn{kkD9fSiptC| z?2NagGVuboz;{sh#l3FYQ&IQdh&_0}RYc(i8g`)`6!V5z3u)Mt`Z&kA*qZu!R0iI_ z-gw1n&pKunRUS5={XW$7TTmT25UpeK90my*at78c1`Ljley8T7cam}+=iO#3mA{(PMiIofU0MlCja`N44^^#cPeT> z&&FD~5^a16HPXYV>n@=>Y`twdkc7H#5Nf2^j*C%iVJEi5lc<5joiWczIYa*Sz$s&4E{aD z&rK9`tR^N$OXhF9btu2AtDNIF<$6~uc$WIVoq89_mx#&)*|r8@JEA+0sBo^EfJ>=& zC3J+o<;Tuwkw3wl#)jC;DVN8(#0Ol{5`VyH#B|E+-{>)v^3|i*DJXmMh>6a*6_h`4 z%BTOhK4krq%3)$MF`t-6XxscqD5d3z<+L3oP7ps+*Kr$V9s6(#q4{5g2cxb0s+O{T z!|@W)iTH)~f8p2oKJg&sf5b5VBPi(j!m-d)qdzOqHk0T>3~|ouL^sMW5RVXdJMBZ9 z`?Q1fe^VSrt);6+V+uAghbZAZA5yDS^WTv|CblM~5jBY$h`F@ify2~B`77cZLdP8j zYb57B(>2uJMg0m#N2VeA^HzS2rd=PU?O4mXrU8atuac0znbz-xCHfQ zgbwZ7RO&ZJYk&NhPqE@3)o5ueKbI4q6WxjC+;vih-z+64eTWLg)6_pAZlauqI?kcKdOL_slv9W|iPxz=PK+fUrmp|r=M~C2iVRjY z+WeH`Q3ro|TL+>g{_+yT`1^C>Wv8J!<@=rTB+A<;uW{;L>JuryNK7Jbp{~PAJWPB< z=y1`VgBwtv=%&P%#1vvF(ZsoLMO5*KuRf$K4Z0cdW zh<%AO&iS&mt)#peONl(<9pYZ18qu6MN9fqfbr0bf;&aN4h%7Cxw{(`{DdH$GS{05L zh`XXC^S7U}T&v>^gLT<)ozp&m`URpb^&9aOyzHE7N&REWr--L1cO!H}=l@L#(}}^H zoJAZUP7*r8ID`0t@+D#;j<1*I;Gg--zQxkn3`ZDa1Y0<50(A_!f~t__hE4 zMdKkVPZEtN7vgogl4Ec5C%?~ioWMC91$YQ65gjOhNYru8CDB%!xO&uZ+Ep)b8gHfT zAaRfW{NF=k3DL&6@KwtHAl{*F6MrKHQ@?sVPyGy)2Z%>0ug6@X9Ayu&in5MH2J0n! zkM^s_G72Y%3}UhJ?;_T7K?m$g=(wA>K3X!rK#EY_tvc78CpuH?fpNGPpCXU)uS?nk%V@F72rgDVmRd|Vj}%pcC1$3-zC{^B?rUl{c47HbiOX~ zaOb6E!o@uXM?UTGewj*1GxEHC_e`HRKPhsePvz?)ci(t9CbD+q`k3l7yafgB83B*C zz@F*yD(@HKVu2ggs+ZtGNOJ*NhxH=y&_F5ULI{Q;LRU>ABl1pzzXRUCcBbhqty2khB7?gHxepti$pkDsQ3KzQNA zd%~%c9*cZFX=`i;_nbod;m)=Pj~YH~+VI|k`}G-}V&6Yf7i?aohoqUyCa)syckoZ(B}~9@eRp^enIomUHrpKL{-M{r9+%JOD&}d|8m4=_ zd2Uz1pPLGT`O_KgpDywTe2gpX@+XEbbc&Dc@TbLwFS+Z5j|SVsr4H&F-Wf~?4=%b~ zCc`%)J=|gTz{;Ic(=+Y#&RxVHo1=E&To-O7e5ugr}+yz*e#%ImIei3{`AMRHfC zSBZ>&@_206x4B_>=KMxYXifI(KMHnkX-RQ_XUwACJlmYG!*6c3!};^8XtfVv1JAZgV|)%?JiKK3JN@a#$L!z9?PZN>(1ef?PAlp1FjT1 zH&~!e*Ch~ra9(Lij!u-8gjYt^hOZp17@qRnLy-^2a{XS9>6p!GX7iK0yj=Pn>9=QGY!&UzTrW$b$m7d# zhhN^86!~!9opE(-_8y-Yx8Lt# z)KXJRk7eeZTA68H&9c%4)5cqGbuH~S-QSDvADdGFo#^Z0$%+S6LkTKj14dpcPC zLa@63gZecpERJtNEUOtVxz4fz)hz3m7V5RE!SR+=4~N)JMlP}Pus+VS+e>j8&v*=% zaQ|=ZEGv!nJ&ET2gB{HEZ{e@p_Zfy;mfyOVWLaT!T*B+ITC%wz0&CHZMGdS2>czvb zJx;-vxEQ1HY2@A3QS634U?WUQv8*;Y7$dO|BXAKm;{Dc2l7Vz=#|-=#^}wDTjnh## zEW{?b0$bsBjKa6EE`Ec|$od%@VrVDJs*MiR1lwUv?25XsH@4^f)<}{#oQt|~4fepD zn1DZE7i^u%LvRwt;zFc~)<%rLcTpAj2DN(Ooy~QLs27g2%|-|9o6xTt9wcdq+feP- zur+>;Jj<%X+co11jKOSVS*^vWrFkATu#>2z`4v@}_%w50AJlVmP)l+%%V9&VqM1i=ugeCtf3@>uq8f-TFY&yft^DKstkOgRx50dW02xlg{T2- z#0-2BbzMEmq@~C}RWctLtF;)}9@ZgOQBq~K)>Z_4WM}3Z~kd1F$zy{c;zuC;rwzeV<~b=?4VI1WHnWCv=%A7czQ<0WnN{r4dmONSe&y0sg%yZ>2v z0VN$|9xxhJnYpOXbse_FbSr4sU4^#yvVl3W+p|};}a5rkk7cl~B3^SisW7PSMs25K`Rj9)5KVr6CD)Eikvs|Z!mJ*Wx$KPS=JM%`da+6USA)@;;^w_*yuYg=cMsaQJd zcOVNha2|%@ZcM{hu^ax5jj-EfbNyJ1q+Nt<^!+a;(MY#oV?2-7;V-C?)tzE)XpdT| zzNi6ZqaM5rHIU7y>yM)L#+RtQ(O|0i{Yb`owELqfmx+z_{ohWa(yc-VzKojrC#aFu z$ubXUjZJ8GK@D__-OfX1VlBd^xY_myHm7|NHSp>;ngK>*GunMIlJ{HFNE}#-8u@b6 z1NWoW`ZLsK37uwHdGQd=(qwS=2zjN3C`EbkpArwbY|f6Ddc(ZdgXr z05@U_+>3g^In+#lvTfire`zG5UYLQZP$ouUK59S}QCb|LCPOHemFhZ^7!)OF|V^Z!8Y{-_*Nx&EjZ7ocW%4{D%Kp(e5mTjOc0 ziC1#`=EmRYs82^+uDP%W>buWG_0L4jWG=SE6{rF2M7`h`rs8=F!zh<|PAqCby-^d( zvfFbpnfAkek}f1ia0ps6%-RpdXqq?SRIEUi`g_#otUc2VAO*E&2B0e8vD+){_95&@ z|94myV`iDJCj~QU`*TRNDR!dP@Do&ten#zq7H(64?ifRR1Uj%7bzJ~8vlmb$K4tfR zjcsVxn{5V|hWc!$qxv7jw)*~elEl*SG3tTW=9w3?Lp^vHs)Vy_7onD5t=&F^?P#C3 z`@{0hKof1pq9#^`TB`d{dulB@^!@K4(E~ofaI9TmX50w1iQ1z|KM)zQm4zDc9jF;U zWA`6M4fJc&!0UL-MB*@k_7LocrPv-{!iK!x`jkYQ?H5$Z!wb!CeLLIXs7>fWUAF)= zlK|@a^|pslGyMovp(}QOqarh~RMf!6qL#7{{o1w5Nc7+%s2RVHD$$SF3a`7#Y@!s@ zjB`<+;VoDXm!TfK4pqsQ(Scv1DiU67o}Ylpw0qeW7E^zHR!`8O2kb*V_$+Goe~q6g%P%sOQC%vOjRBpF|~_fVyD; z>hoBKn!y{Gh!^p#5FTD;UiA4KGvgZNW^Y8ImL?uGvwm30_2co2Y7Ag5pC9e#=bH+A zc8eLP|1wD(PSl|i;oKN?t9d{hjHI20n%PLKg|kru^P;X_f~v$yROOCh2mA`VV3P%w z#c!K62KDvqKz$7#BG30*b#F5xk4BX|9dmFBj>LVaO%r~*`8Qr~)Bs9Q*DuA^xCtZh zO{|L-Fbu!LhWIcz*}NXeg7Toj?UPh3;JUk-i0dZ0ql$KV`pq}hxu3Vc+|ii zMJ>@W?14X{29~zSta&D?eJ5(5PoXyB5vqIZni3aa z8`^8IExwK#`S&;xBbM?TfcZEH-$czc{yzIB7B$e9P%plM@tAhM`Af)&nqc65-ad-t z1RYvi#{;J16HuGUi%EDVM&pa9H9w29G3-I}OE(8Q(O!XC%44Ye{(-taI$$>KcvOW8 zP)oPYPtu#@tbIYVW&DjtyEDe&0@PY=L{;QdRB6L1%nXw;hPDSa(*Wwalh_@9!cBRB(9 z`oq`~t3P7SM(EjC?q@qCFP};-jd| z^9ibC5o=6)Bx3mfCY1B+k;ZSV5(fqAfjFV|E#0>lpTchI{^O^R;wzOxW25=v0Grxl) zFm98%u5=UiZ%oG{bZE`CV=J#QHd=^!q_fbny z=UG#kMC?p^3J%5x(2ei;NisxliZ3OFo2rL%NUE_pehux-Bh3h>iTi0%{2o% z;%(RrpGVF7Bx*@6+2^C4H+yU->g&og`mNhZQt4QUo$&-FV$B!Kj8ZX~_EdD>y{G|g zvHM>`UH_A9+a2cjAQRirf2-}&s0kfMP4p7R>HCj<(Oftj9h~r@M!pPHi5;jCeu633 zVyAh)Xk0?uk7-!Dsj`@rV{C>%{dWu|IMiDm!p;@h#JtR7>9ND7(1h1zfd=l=)v<*16hme zKZJVlC#WT=wbu+R9V2K@z(~wP-G3Wub8f(Rd>dP!wa=VyiCVgWsQaexqyDfW9Y!87|McpEn)x);=DibJ;mQMk zv(|g)=tRdysF_5(Y(Bpps69}O8t7x_!`DzVNk3>FJQ3^Bz7>=30aWP^pzgbb+H@@r zna_3vhS6T?C((-^#j$t-wcDc)o23|!y3vPv;Tmj+dr&h!g{`snD`u$@Py-%=Epa}o z602|+zJ~fmjCj@jE89PnB$JN)I0hqMGXt81TFXaKGdY5q*)OO8CLA$lp}vZx*c12L z?O$z^UN_HkVl?L~usiO=SoWWFi6owmCPz)l`(p;}d8l2y8+HB+a)VXv4YL>GP?Z^i z-Ea=765B8iPowVp&F+soX6_$`z39IQhw1x&jzkao1>0czzisoY{-ful_cbvkZv}^v&Ja`Ny()MC= zT#d=N4>Ryv)C^Njnzf#Ss?a=C|7y&@qp0W9J!SSnchmq~=pRe6l%yYijH*EFTc#qz zQ4gAjskjaY<9n#Jj6Q8Xw?U}SZ@TR~Y)Jbdbl@h`1dgFT&#zFQUyZk^zh2npZS#N; zs2R+%U5Z-M?U;n`phkY}JLW;jwnMNZ{nfeRr z1Rddc?Ym~}Bhf*-2kHlCDmKK2u`_PL5L`!mP1K}O19ila-(b?pKYP<2L+m6zB6NIV z`=i!>CZT26N9XlK7Wp*dKM!rP*_{8Hc-}s#PiZ0X7=7B+@8Wn=6+b5T6X%HfL=R#m zah~`G=XL1)e;i9Vp(6wP5IJ`H6Z#^^w-aBHv+u0hNKaUhipYU=Nb{EpqFXu!zeEO>XP2_(kh7uR- z8>7fK*m)jqwsR4}xlf2);b;JSUJNot!I(pK6 z0GAO@5l_(85kfYzT}~V(F4`9aaUlI`u^1~yi%-$^+Sh!A8T3^UKM?w!3}(8+Kc~Nem|% z5pF`qPNIWmbd30&Xv>Y+cogTNjzRXrE|K3$eg^N*363=T+*Wc2xdWRMyNPZ@CVj>B zHIrx`B6Pe#UmILO_^;!S{lx9|h3{dwo&QR|j$4QrBA)(y;w|!%L__-e=bRpdN@8K-*(kS)9IT^d$ms5#~|!aUo>$KQFYu# za`LM7bF?3{+tctaq9c91u*mLz(#+rdbEpm{hu9}bD~|;Jyq*|Ee?6>o)%hgaDa232 zEJ8;C=lAFu;w(%hx)QC4=j?k|lI!ph{@VPJ!ig(*kvL3L9kuMF2adOIejSI3 zZ%W?R&Tq6mPT$SMMB29!N6GKU&^CCwUszo~ugNL&cw9NYKOX7z=1+4K7Z(<%$L1zD zygp}6UV5z8(un@IOG7KKEp|C`|LZejd1zU&n*mo%=&#-${9x4AAqno89#`(4CRtfS zw_QS)&*Ansyd}AXu3~TS$e1-Dfkoq{1uu`=7!vSjMuvn2Dl)qTe$N~-(&Nmg_P#=g zid*?W?xg9P<#O+4Xr<1o-3m(skx+eHr_Ol^@ z-MK9SdvcpH(hOI#;HBKI)dPcPMFdM{)vg&_<#{M1IHM>lB-pLEdB`=IL2e+aC~1&u z4tvK(VTL4)a=1#h4`Oqz5>K9|u*~Ba=gKK59@5`Yxt@RYI&*W286Pz-aOamZm|QFH zVOq1`r{3ghfqtb;0yRtPHTP0br=y4qUB#tLgyOh7rS9TFPl3x5oLCwbQaw34H887e za9F3rj-4IJDcw_&+b4Gn?kSrb64EKyq`ahdNM2yomR^2`WBkFjUf;pB4xh8gIm=g4 z;AC4l-1!BCEWOX^^mGWd@(!*o_i@c^E{pX#Ty94pt7NZdqK}WG(CaItsvZ8P$MJ|l zk7K4g*AW|Ra(kQF%}N}l2iG24Tg>CV&U~lW>2W&Bwe@_y^1!quQKA2C2K`HVUNgR5 zpTr_(9;e+^FL!EG1(i?XzI4AJlAFtb)=k!un zeXe;z^O|=Z~hy?J4}vFZO@9 z{;JRRudnWAei5#Iy!m$j`tqx;4#qxps+yxue!eTuT|B#T(S0RON2#-zy~Lc&;s&x7 zMK$<~1rJ~(CHq?ieEVC4ga#}2FQ^{qai~#n{-O731#dp~X0_n5 z6JLb{BTgL;2_&Bw5;*@>OyI`TvEg1-w#ZdH%cXBRSbF-mYJn%uvv3;M*PXfzf9|1K*yx_%GbwHvs?u diff --git a/plugins/sudoers/po/fi.po b/plugins/sudoers/po/fi.po index 7607e638e5..7de0c7e6c3 100644 --- a/plugins/sudoers/po/fi.po +++ b/plugins/sudoers/po/fi.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.0b4\n" +"Project-Id-Version: sudoers 1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-03-12 17:39-0600\n" -"PO-Revision-Date: 2020-03-25 01:10+0200\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-08-14 19:19+0300\n" "Last-Translator: Lauri Nurmi \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -18,7 +18,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: Poedit 2.3\n" +"X-Generator: Poedit 2.4.1\n" #: confstr.sh:1 msgid "syntax error" @@ -44,357 +44,419 @@ msgstr "*** TURVALLISUUStietoa %h-koneelta ***" msgid "Sorry, try again." msgstr "Yritä uudelleen." -#: gram.y:198 gram.y:246 gram.y:253 gram.y:260 gram.y:267 gram.y:274 -#: gram.y:290 gram.y:314 gram.y:321 gram.y:328 gram.y:335 gram.y:342 -#: gram.y:405 gram.y:414 gram.y:425 gram.y:458 gram.y:465 gram.y:472 -#: gram.y:479 gram.y:506 gram.y:578 gram.y:585 gram.y:594 gram.y:603 -#: gram.y:620 gram.y:732 gram.y:739 gram.y:747 gram.y:753 gram.y:853 -#: gram.y:860 gram.y:867 gram.y:874 gram.y:881 gram.y:907 gram.y:914 -#: gram.y:921 gram.y:1063 gram.y:1342 lib/iolog/iolog_util.c:79 -#: lib/iolog/iolog_util.c:118 lib/iolog/iolog_util.c:127 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:145 -#: lib/iolog/iolog_util.c:149 logsrvd/eventlog.c:223 logsrvd/sendlog.c:286 -#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:139 -#: plugins/sudoers/alias.c:155 plugins/sudoers/auth/bsdauth.c:148 -#: plugins/sudoers/auth/kerb5.c:123 plugins/sudoers/auth/kerb5.c:149 -#: plugins/sudoers/auth/pam.c:673 plugins/sudoers/auth/rfc1938.c:116 -#: plugins/sudoers/auth/sia.c:64 plugins/sudoers/cvtsudoers.c:124 -#: plugins/sudoers/cvtsudoers.c:165 plugins/sudoers/cvtsudoers.c:182 -#: plugins/sudoers/cvtsudoers.c:193 plugins/sudoers/cvtsudoers.c:305 -#: plugins/sudoers/cvtsudoers.c:433 plugins/sudoers/cvtsudoers.c:566 -#: plugins/sudoers/cvtsudoers.c:583 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:83 -#: plugins/sudoers/cvtsudoers_ldif.c:154 plugins/sudoers/cvtsudoers_ldif.c:197 -#: plugins/sudoers/cvtsudoers_ldif.c:238 plugins/sudoers/cvtsudoers_ldif.c:303 -#: plugins/sudoers/cvtsudoers_ldif.c:374 plugins/sudoers/cvtsudoers_ldif.c:429 -#: plugins/sudoers/cvtsudoers_ldif.c:437 plugins/sudoers/cvtsudoers_ldif.c:454 -#: plugins/sudoers/cvtsudoers_ldif.c:463 plugins/sudoers/cvtsudoers_ldif.c:610 -#: plugins/sudoers/defaults.c:632 plugins/sudoers/defaults.c:925 -#: plugins/sudoers/defaults.c:1058 plugins/sudoers/editor.c:72 -#: plugins/sudoers/editor.c:90 plugins/sudoers/editor.c:101 -#: plugins/sudoers/env.c:268 plugins/sudoers/filedigest.c:66 -#: plugins/sudoers/filedigest.c:82 plugins/sudoers/gc.c:59 -#: plugins/sudoers/group_plugin.c:141 plugins/sudoers/interfaces.c:78 -#: plugins/sudoers/iolog.c:476 plugins/sudoers/iolog_client.c:107 -#: plugins/sudoers/iolog_client.c:485 plugins/sudoers/iolog_client.c:593 -#: plugins/sudoers/iolog_client.c:611 plugins/sudoers/iolog_client.c:1053 -#: plugins/sudoers/iolog_client.c:1283 plugins/sudoers/iolog_client.c:1619 -#: plugins/sudoers/iolog_client.c:1647 plugins/sudoers/ldap.c:185 -#: plugins/sudoers/ldap.c:416 plugins/sudoers/ldap.c:420 -#: plugins/sudoers/ldap.c:432 plugins/sudoers/ldap.c:723 -#: plugins/sudoers/ldap.c:887 plugins/sudoers/ldap.c:1241 -#: plugins/sudoers/ldap.c:1668 plugins/sudoers/ldap.c:1705 -#: plugins/sudoers/ldap.c:1786 plugins/sudoers/ldap.c:1921 -#: plugins/sudoers/ldap.c:2022 plugins/sudoers/ldap.c:2038 -#: plugins/sudoers/ldap_conf.c:223 plugins/sudoers/ldap_conf.c:254 -#: plugins/sudoers/ldap_conf.c:306 plugins/sudoers/ldap_conf.c:342 -#: plugins/sudoers/ldap_conf.c:446 plugins/sudoers/ldap_conf.c:461 -#: plugins/sudoers/ldap_conf.c:558 plugins/sudoers/ldap_conf.c:591 -#: plugins/sudoers/ldap_conf.c:683 plugins/sudoers/ldap_conf.c:765 -#: plugins/sudoers/ldap_util.c:331 plugins/sudoers/ldap_util.c:338 -#: plugins/sudoers/ldap_util.c:603 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:200 plugins/sudoers/logging.c:527 -#: plugins/sudoers/logging.c:553 plugins/sudoers/logging.c:594 -#: plugins/sudoers/logging.c:731 plugins/sudoers/logging.c:1091 -#: plugins/sudoers/match_command.c:249 plugins/sudoers/match_command.c:397 -#: plugins/sudoers/match_command.c:444 plugins/sudoers/match_command.c:515 -#: plugins/sudoers/match_digest.c:87 plugins/sudoers/parse.c:200 -#: plugins/sudoers/parse.c:212 plugins/sudoers/parse.c:227 -#: plugins/sudoers/parse.c:239 plugins/sudoers/parse_ldif.c:156 -#: plugins/sudoers/parse_ldif.c:187 plugins/sudoers/parse_ldif.c:256 -#: plugins/sudoers/parse_ldif.c:263 plugins/sudoers/parse_ldif.c:268 -#: plugins/sudoers/parse_ldif.c:344 plugins/sudoers/parse_ldif.c:355 -#: plugins/sudoers/parse_ldif.c:382 plugins/sudoers/parse_ldif.c:399 -#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:415 -#: plugins/sudoers/parse_ldif.c:429 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:504 plugins/sudoers/policy.c:830 -#: plugins/sudoers/prompt.c:100 plugins/sudoers/pwutil.c:199 -#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 -#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:586 -#: plugins/sudoers/pwutil.c:657 plugins/sudoers/pwutil.c:816 -#: plugins/sudoers/pwutil.c:873 plugins/sudoers/pwutil.c:917 -#: plugins/sudoers/pwutil.c:975 plugins/sudoers/sssd.c:154 -#: plugins/sudoers/sssd.c:400 plugins/sudoers/sssd.c:463 -#: plugins/sudoers/sssd.c:507 plugins/sudoers/sssd.c:554 -#: plugins/sudoers/sssd.c:746 plugins/sudoers/stubs.c:103 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/sudoers.c:320 -#: plugins/sudoers/sudoers.c:331 plugins/sudoers/sudoers.c:341 -#: plugins/sudoers/sudoers.c:384 plugins/sudoers/sudoers.c:735 -#: plugins/sudoers/sudoers.c:864 plugins/sudoers/sudoers.c:909 -#: plugins/sudoers/sudoers.c:1213 plugins/sudoers/sudoreplay.c:559 -#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:1218 -#: plugins/sudoers/sudoreplay.c:1425 plugins/sudoers/sudoreplay.c:1429 -#: plugins/sudoers/testsudoers.c:136 plugins/sudoers/testsudoers.c:236 -#: plugins/sudoers/testsudoers.c:253 plugins/sudoers/testsudoers.c:587 -#: plugins/sudoers/timestamp.c:439 plugins/sudoers/timestamp.c:483 -#: plugins/sudoers/timestamp.c:993 plugins/sudoers/toke_util.c:59 -#: plugins/sudoers/toke_util.c:112 plugins/sudoers/toke_util.c:137 -#: plugins/sudoers/toke_util.c:165 plugins/sudoers/tsdump.c:130 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:334 plugins/sudoers/visudo.c:444 -#: plugins/sudoers/visudo.c:622 plugins/sudoers/visudo.c:942 -#: plugins/sudoers/visudo.c:1029 plugins/sudoers/visudo.c:1118 toke.l:846 -#: toke.l:947 toke.l:1104 +#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 +#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 +#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 +#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 +#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 +#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 +#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 +#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 +#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 +#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 +#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 +#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 +#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 +#: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 +#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 +#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 +#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 +#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 +#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 +#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 +#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 +#: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 +#: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 +#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 +#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 +#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 +#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 +#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 +#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 +#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 +#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 +#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 +#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 +#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 +#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 +#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 +#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 +#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 +#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 +#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 +#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 +#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 +#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 +#: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 +#: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 +#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 +#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 +#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 +#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 +#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 +#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 +#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 +#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 +#: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 +#: plugins/sudoers/parse_ldif.c:352 plugins/sudoers/parse_ldif.c:379 +#: plugins/sudoers/parse_ldif.c:396 plugins/sudoers/parse_ldif.c:408 +#: plugins/sudoers/parse_ldif.c:412 plugins/sudoers/parse_ldif.c:426 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 +#: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 +#: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 +#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 +#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 +#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 +#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 +#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 +#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 +#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 +#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 +#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 +#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 +#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 +#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 +#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 +#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 msgid "unable to allocate memory" msgstr "muistin varaaminen epäonnistui" -#: gram.y:500 +#: gram.y:505 msgid "a digest requires a path name" msgstr "tiiviste vaatii polkunimen" -#: gram.y:633 +#: gram.y:638 msgid "invalid notbefore value" msgstr "virheellinen notbefore-arvo" -#: gram.y:641 +#: gram.y:646 msgid "invalid notafter value" msgstr "virheellinen notafter-arvo" -#: gram.y:650 plugins/sudoers/policy.c:319 +#: gram.y:655 plugins/sudoers/policy.c:306 msgid "timeout value too large" msgstr "aikakatkaisuarvo on liian suuri" -#: gram.y:652 plugins/sudoers/policy.c:321 +#: gram.y:657 plugins/sudoers/policy.c:308 msgid "invalid timeout value" msgstr "virheellinen aikavalvonta-arvo" -#: gram.y:1342 lib/iolog/iolog_util.c:79 lib/iolog/iolog_util.c:118 -#: lib/iolog/iolog_util.c:127 lib/iolog/iolog_util.c:137 -#: lib/iolog/iolog_util.c:145 lib/iolog/iolog_util.c:149 -#: logsrvd/eventlog.c:223 plugins/sudoers/auth/pam.c:486 -#: plugins/sudoers/auth/pam.c:673 plugins/sudoers/auth/rfc1938.c:116 -#: plugins/sudoers/cvtsudoers.c:124 plugins/sudoers/cvtsudoers.c:164 -#: plugins/sudoers/cvtsudoers.c:181 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:304 plugins/sudoers/cvtsudoers.c:432 -#: plugins/sudoers/cvtsudoers.c:565 plugins/sudoers/cvtsudoers.c:582 -#: 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:82 plugins/sudoers/cvtsudoers_ldif.c:153 -#: plugins/sudoers/cvtsudoers_ldif.c:196 plugins/sudoers/cvtsudoers_ldif.c:237 -#: plugins/sudoers/cvtsudoers_ldif.c:302 plugins/sudoers/cvtsudoers_ldif.c:373 -#: plugins/sudoers/cvtsudoers_ldif.c:428 plugins/sudoers/cvtsudoers_ldif.c:436 -#: plugins/sudoers/cvtsudoers_ldif.c:453 plugins/sudoers/cvtsudoers_ldif.c:462 -#: plugins/sudoers/cvtsudoers_ldif.c:609 plugins/sudoers/defaults.c:632 -#: plugins/sudoers/defaults.c:925 plugins/sudoers/defaults.c:1058 -#: plugins/sudoers/editor.c:72 plugins/sudoers/editor.c:90 -#: plugins/sudoers/editor.c:101 plugins/sudoers/env.c:268 -#: plugins/sudoers/filedigest.c:66 plugins/sudoers/filedigest.c:82 -#: plugins/sudoers/gc.c:59 plugins/sudoers/group_plugin.c:140 -#: plugins/sudoers/interfaces.c:78 plugins/sudoers/iolog.c:476 -#: plugins/sudoers/iolog_client.c:107 plugins/sudoers/iolog_client.c:485 -#: plugins/sudoers/iolog_client.c:593 plugins/sudoers/iolog_client.c:611 -#: plugins/sudoers/iolog_client.c:1053 plugins/sudoers/iolog_client.c:1283 -#: plugins/sudoers/iolog_client.c:1619 plugins/sudoers/iolog_client.c:1647 -#: plugins/sudoers/ldap.c:185 plugins/sudoers/ldap.c:416 -#: plugins/sudoers/ldap.c:420 plugins/sudoers/ldap.c:432 -#: plugins/sudoers/ldap.c:723 plugins/sudoers/ldap.c:887 -#: plugins/sudoers/ldap.c:1241 plugins/sudoers/ldap.c:1668 -#: plugins/sudoers/ldap.c:1705 plugins/sudoers/ldap.c:1786 -#: plugins/sudoers/ldap.c:1921 plugins/sudoers/ldap.c:2022 -#: plugins/sudoers/ldap.c:2038 plugins/sudoers/ldap_conf.c:223 -#: plugins/sudoers/ldap_conf.c:254 plugins/sudoers/ldap_conf.c:306 -#: plugins/sudoers/ldap_conf.c:342 plugins/sudoers/ldap_conf.c:446 -#: plugins/sudoers/ldap_conf.c:461 plugins/sudoers/ldap_conf.c:558 -#: plugins/sudoers/ldap_conf.c:591 plugins/sudoers/ldap_conf.c:682 -#: plugins/sudoers/ldap_conf.c:765 plugins/sudoers/ldap_util.c:330 -#: plugins/sudoers/ldap_util.c:337 plugins/sudoers/ldap_util.c:603 -#: plugins/sudoers/linux_audit.c:83 plugins/sudoers/logging.c:200 -#: plugins/sudoers/logging.c:527 plugins/sudoers/logging.c:553 -#: plugins/sudoers/logging.c:593 plugins/sudoers/logging.c:1091 -#: plugins/sudoers/match_command.c:248 plugins/sudoers/match_command.c:396 -#: plugins/sudoers/match_command.c:443 plugins/sudoers/match_command.c:515 -#: plugins/sudoers/match_digest.c:87 plugins/sudoers/parse.c:199 -#: plugins/sudoers/parse.c:211 plugins/sudoers/parse.c:226 -#: plugins/sudoers/parse.c:238 plugins/sudoers/parse_ldif.c:155 -#: plugins/sudoers/parse_ldif.c:186 plugins/sudoers/parse_ldif.c:255 -#: plugins/sudoers/parse_ldif.c:262 plugins/sudoers/parse_ldif.c:267 -#: plugins/sudoers/parse_ldif.c:343 plugins/sudoers/parse_ldif.c:354 -#: plugins/sudoers/parse_ldif.c:381 plugins/sudoers/parse_ldif.c:398 -#: plugins/sudoers/parse_ldif.c:410 plugins/sudoers/parse_ldif.c:414 -#: plugins/sudoers/parse_ldif.c:428 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:133 plugins/sudoers/policy.c:142 -#: plugins/sudoers/policy.c:151 plugins/sudoers/policy.c:177 -#: plugins/sudoers/policy.c:304 plugins/sudoers/policy.c:319 -#: plugins/sudoers/policy.c:321 plugins/sudoers/policy.c:350 -#: plugins/sudoers/policy.c:359 plugins/sudoers/policy.c:402 -#: plugins/sudoers/policy.c:412 plugins/sudoers/policy.c:421 -#: plugins/sudoers/policy.c:430 plugins/sudoers/policy.c:504 -#: plugins/sudoers/policy.c:830 plugins/sudoers/prompt.c:100 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:586 plugins/sudoers/pwutil.c:657 -#: plugins/sudoers/pwutil.c:816 plugins/sudoers/pwutil.c:873 -#: plugins/sudoers/pwutil.c:917 plugins/sudoers/pwutil.c:975 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1067 plugins/sudoers/set_perms.c:1370 -#: plugins/sudoers/set_perms.c:1535 plugins/sudoers/sssd.c:153 -#: plugins/sudoers/sssd.c:400 plugins/sudoers/sssd.c:463 -#: plugins/sudoers/sssd.c:507 plugins/sudoers/sssd.c:554 -#: plugins/sudoers/sssd.c:746 plugins/sudoers/stubs.c:103 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/sudoers.c:320 -#: plugins/sudoers/sudoers.c:331 plugins/sudoers/sudoers.c:341 -#: plugins/sudoers/sudoers.c:384 plugins/sudoers/sudoers.c:735 -#: plugins/sudoers/sudoers.c:864 plugins/sudoers/sudoers.c:909 -#: plugins/sudoers/sudoers.c:1213 plugins/sudoers/sudoreplay.c:559 -#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:1218 -#: plugins/sudoers/sudoreplay.c:1425 plugins/sudoers/sudoreplay.c:1429 -#: plugins/sudoers/testsudoers.c:136 plugins/sudoers/testsudoers.c:236 -#: plugins/sudoers/testsudoers.c:253 plugins/sudoers/testsudoers.c:587 -#: plugins/sudoers/timestamp.c:439 plugins/sudoers/timestamp.c:483 -#: plugins/sudoers/timestamp.c:993 plugins/sudoers/toke_util.c:59 -#: plugins/sudoers/toke_util.c:112 plugins/sudoers/toke_util.c:136 -#: plugins/sudoers/toke_util.c:165 plugins/sudoers/tsdump.c:130 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:334 plugins/sudoers/visudo.c:444 -#: plugins/sudoers/visudo.c:622 plugins/sudoers/visudo.c:942 -#: plugins/sudoers/visudo.c:1029 plugins/sudoers/visudo.c:1118 toke.l:846 -#: toke.l:947 toke.l:1104 +#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 +#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 +#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 +#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 +#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 +#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 +#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 +#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 +#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 +#: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 +#: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 +#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 +#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 +#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 +#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 +#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 +#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 +#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 +#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 +#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 +#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 +#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 +#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 +#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 +#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 +#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 +#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 +#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 +#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 +#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 +#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 +#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 +#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 +#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 +#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 +#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 +#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 +#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 +#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 +#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 +#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 +#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 +#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 +#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 +#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 +#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 +#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 +#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 +#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 +#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 +#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 +#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 +#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 +#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 +#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 +#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 +#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 +#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 +#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 +#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 +#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 +#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 +#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 +#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 +#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 +#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 +#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 +#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 +#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 +#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 +#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 +#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 +#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 +#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 +#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 +#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 +#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 +#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 +#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 +#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 +#: toke.l:981 toke.l:1039 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:164 +#: lib/iolog/iolog_fileio.c:157 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s on olemassa, mutta ei ole hakemisto (0%o)" -#: lib/iolog/iolog_fileio.c:194 lib/iolog/iolog_fileio.c:240 -#: plugins/sudoers/timestamp.c:212 +#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "käskyn mkdir %s suorittaminen epäonnistui" -#: lib/iolog/iolog_fileio.c:244 plugins/sudoers/visudo.c:739 -#: plugins/sudoers/visudo.c:750 +#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 +#: plugins/sudoers/visudo.c:744 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "tilan %s vaihtaminen arvoon 0%o epäonnistui" -#: lib/iolog/iolog_util.c:83 +#: lib/iolog/iolog_json.c:114 +#, c-format +msgid "expected JSON_STRING, got %d" +msgstr "odotettiin JSON_STRINGiä, saatiin %d" + +#: lib/iolog/iolog_json.c:305 +msgid "missing double quote in name" +msgstr "" + +#: lib/iolog/iolog_json.c:392 +#, c-format +msgid "expected JSON_OBJECT, got %d" +msgstr "odotettiin JSON_OBJECTia, saatiin %d" + +#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 +#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 +#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 +#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 +#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 +#: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 +#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 +#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/toke_util.c:169 +#, c-format +msgid "internal error, %s overflow" +msgstr "sisäinen virhe, %s-ylivuoto" + +#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +msgid "unmatched close brace" +msgstr "" + +#: lib/iolog/iolog_json.c:616 +msgid "unexpected array" +msgstr "odottamaton taulukko" + +#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +msgid "unmatched close bracket" +msgstr "" + +#: lib/iolog/iolog_json.c:637 +msgid "unexpected string" +msgstr "odottamaton merkkijono" + +#: lib/iolog/iolog_json.c:647 +msgid "missing colon after name" +msgstr "puuttuva kaksoispiste nimen jälkeen" + +#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 +#: lib/iolog/iolog_json.c:688 +msgid "unexpected boolean" +msgstr "odottamaton totuusarvo" + +#: lib/iolog/iolog_json.c:704 +msgid "unexpected number" +msgstr "odottamaton lukuarvo" + +# Ensimmäinen parametri on auth name +#: lib/iolog/iolog_json.c:741 +#, fuzzy, c-format +msgid "%s:%u unable to parse \"%s\"" +msgstr "%s: todentamisnimen ’%s’ jäsentäminen epäonnistui: %s" + +#: lib/iolog/iolog_util.c:71 #, c-format msgid "%s: invalid log file" msgstr "%s: virheellinen lokitiedosto" -#: lib/iolog/iolog_util.c:101 +#: lib/iolog/iolog_util.c:89 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: aikaleimakenttä puuttuu" -#: lib/iolog/iolog_util.c:107 +#: lib/iolog/iolog_util.c:95 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: aikaleima %s: %s" -#: lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:102 #, c-format msgid "%s: user field is missing" msgstr "%s: käyttäjäkenttä puuttuu" -#: lib/iolog/iolog_util.c:123 +#: lib/iolog/iolog_util.c:111 #, c-format msgid "%s: runas user field is missing" msgstr "%s: suorita käyttäjänä-kenttä puuttuu" -#: lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:120 #, c-format msgid "%s: runas group field is missing" msgstr "%s: suorita ryhmänä-kenttä puuttuu" -#: lib/iolog/iolog_util.c:382 +#: lib/iolog/iolog_util.c:419 #, c-format msgid "error reading timing file: %s" msgstr "virhe luettaessa ajoitustiedostoa: %s" -#: lib/iolog/iolog_util.c:389 +#: lib/iolog/iolog_util.c:426 #, c-format msgid "invalid timing file line: %s" msgstr "virheellinen ajoitustiedostorivi: %s" -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:247 -#: plugins/sudoers/cvtsudoers_ldif.c:254 plugins/sudoers/cvtsudoers_ldif.c:566 -#: plugins/sudoers/env.c:330 plugins/sudoers/env.c:337 -#: plugins/sudoers/env.c:442 plugins/sudoers/iolog.c:550 -#: plugins/sudoers/iolog.c:566 plugins/sudoers/ldap.c:496 -#: plugins/sudoers/ldap.c:727 plugins/sudoers/ldap.c:1060 -#: plugins/sudoers/ldap_conf.c:227 plugins/sudoers/ldap_conf.c:317 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1096 -#: plugins/sudoers/policy.c:534 plugins/sudoers/policy.c:679 -#: plugins/sudoers/policy.c:689 plugins/sudoers/prompt.c:168 -#: plugins/sudoers/sudoers.c:931 plugins/sudoers/testsudoers.c:257 -#: plugins/sudoers/toke_util.c:177 -#, c-format -msgid "internal error, %s overflow" -msgstr "sisäinen virhe, %s-ylivuoto" - -#: logsrvd/eventlog.c:422 plugins/sudoers/logging.c:118 +#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:451 plugins/sudoers/logging.c:146 +#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s: (komento jatkui) %s" -#: logsrvd/iolog_writer.c:886 +#: logsrvd/iolog_writer.c:936 msgid "log is already complete, cannot be restarted" msgstr "loki on jo valmis, ei voi aloittaa uudelleen" -#: logsrvd/iolog_writer.c:917 +#: logsrvd/iolog_writer.c:967 msgid "unable to restart log" msgstr "lokia ei voi aloittaa uudelleen" # Avaamisen kohde voi olla timestamp file, sudoers file tai pathbuf -#: logsrvd/logsrv_util.c:96 logsrvd/logsrv_util.c:103 -#: plugins/sudoers/sudoreplay.c:355 plugins/sudoers/sudoreplay.c:361 -#: plugins/sudoers/sudoreplay.c:368 +#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 +#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 #, c-format msgid "unable to open %s/%s" msgstr "ei voi avata tiedostoa %s/%s" -#: logsrvd/logsrv_util.c:130 +#: logsrvd/logsrv_util.c:132 #, c-format msgid "missing I/O log file %s/%s" msgstr "puuttuva siirräntälokitiedosto %s/%s" # Ensimmäinen parametri on auth name -#: logsrvd/logsrv_util.c:137 +#: logsrvd/logsrv_util.c:139 #, fuzzy, c-format -#| msgid "%s: unable to parse '%s': %s" msgid "%s/%s: unable to seek forward %zu" msgstr "%s: todentamisnimen ’%s’ jäsentäminen epäonnistui: %s" # parametrina on path -#: logsrvd/logsrv_util.c:147 +#: logsrvd/logsrv_util.c:149 #, fuzzy, c-format -#| msgid "unable to find symbol \"%s\" in %s" msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "symbolin ”%s” löytäminen polusta %s epäonnistui" -#: logsrvd/logsrvd.c:231 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 -#: logsrvd/logsrvd.c:392 logsrvd/logsrvd.c:439 logsrvd/logsrvd.c:484 -#: logsrvd/logsrvd.c:510 +#: logsrvd/logsrvd.c:230 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 +#: logsrvd/logsrvd.c:398 logsrvd/logsrvd.c:445 logsrvd/logsrvd.c:496 +#: logsrvd/logsrvd.c:528 logsrvd/logsrvd.c:560 msgid "state machine error" msgstr "tilakoneen virhe" -#: logsrvd/logsrvd.c:240 +#: logsrvd/logsrvd.c:239 msgid "invalid AcceptMessage" msgstr "virheellinen AcceptMessage" -#: logsrvd/logsrvd.c:251 +#: logsrvd/logsrvd.c:250 msgid "error parsing AcceptMessage" msgstr "virhe jäsennettäessä AcceptMessagea" -#: logsrvd/logsrvd.c:258 +#: logsrvd/logsrvd.c:257 msgid "error creating I/O log" msgstr "virhe luotaessa siirräntälokia" @@ -414,61 +476,115 @@ msgstr "virhe jäsennettäessä RejectMessagea" msgid "error logging reject event" msgstr "virhe hylkäystapahtuman lokiin kirjaamisessa" -#: logsrvd/logsrvd.c:424 +#: logsrvd/logsrvd.c:430 msgid "error logging alert event" msgstr "virhe hälytystapahtuman lokiin kirjaamisessa" -#: logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:451 logsrvd/logsrvd.c:502 logsrvd/logsrvd.c:534 +msgid "protocol error" +msgstr "protokollavirhe" + +#: logsrvd/logsrvd.c:461 msgid "error writing IoBuffer" msgstr "virhe kirjoitettaessa IoBufferia" -#: logsrvd/logsrvd.c:495 +#: logsrvd/logsrvd.c:513 msgid "error writing ChangeWindowSize" msgstr "virhe kirjoitettaessa ChangeWindowSizeä" -#: logsrvd/logsrvd.c:521 +#: logsrvd/logsrvd.c:545 msgid "error writing CommandSuspend" msgstr "virhe kirjoitettaessa CommandSuspendia" -#: logsrvd/logsrvd.c:583 +#: logsrvd/logsrvd.c:630 msgid "unrecognized ClientMessage type" msgstr "tunnistamaton ClientMessage-tyyppi" -#: logsrvd/logsrvd.c:835 +#: logsrvd/logsrvd.c:895 msgid "client message too large" msgstr "asiakassanoma on liian suuri" -#: logsrvd/logsrvd.c:1295 logsrvd/logsrvd.c:1415 logsrvd/logsrvd.c:1539 -#: logsrvd/logsrvd.c:1631 logsrvd/sendlog.c:242 logsrvd/sendlog.c:257 -#: logsrvd/sendlog.c:290 logsrvd/sendlog.c:1264 plugins/sudoers/iolog.c:900 -#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1131 -#: plugins/sudoers/iolog_client.c:111 plugins/sudoers/iolog_client.c:436 -#: plugins/sudoers/iolog_client.c:452 plugins/sudoers/iolog_client.c:490 -#: plugins/sudoers/iolog_client.c:1032 plugins/sudoers/iolog_client.c:1061 -#: plugins/sudoers/iolog_client.c:1133 plugins/sudoers/iolog_client.c:1239 -#: plugins/sudoers/iolog_client.c:1353 plugins/sudoers/iolog_client.c:1655 -#: plugins/sudoers/iolog_client.c:1663 plugins/sudoers/sudoreplay.c:519 -#: plugins/sudoers/sudoreplay.c:566 plugins/sudoers/sudoreplay.c:755 -#: plugins/sudoers/sudoreplay.c:867 plugins/sudoers/sudoreplay.c:957 -#: plugins/sudoers/sudoreplay.c:972 plugins/sudoers/sudoreplay.c:979 -#: plugins/sudoers/sudoreplay.c:986 plugins/sudoers/sudoreplay.c:993 -#: plugins/sudoers/sudoreplay.c:1000 plugins/sudoers/sudoreplay.c:1127 -msgid "unable to add event to queue" -msgstr "tapahtuman lisääminen jonoon epäonnistui" +#: logsrvd/logsrvd.c:1125 logsrvd/logsrvd.c:1133 +#, fuzzy, c-format +msgid "unable to set TLS 1.2 ciphersuite to %s: %s" +msgstr "komennon %s suorittaminen epäonnistui: %s" -#: logsrvd/logsrvd.c:1407 plugins/sudoers/iolog_client.c:378 +#: logsrvd/logsrvd.c:1153 logsrvd/logsrvd.c:1161 +#, fuzzy, c-format +msgid "unable to set TLS 1.3 ciphersuite to %s: %s" +msgstr "komennon %s suorittaminen epäonnistui: %s" + +#: logsrvd/logsrvd.c:1197 +#, fuzzy, c-format +msgid "unable to get TLS server method: %s" +msgstr "tietokoneen %s ratkaiseminen epäonnistui" + +#: logsrvd/logsrvd.c:1202 +#, fuzzy, c-format +msgid "unable to create TLS context: %s" +msgstr "Ssl-kontekstia ei voi alustaa: %s" + +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#, fuzzy, c-format +msgid "unable to load certificate %s" +msgstr "kohteen %s lataaminen epäonnistui: %s" + +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#, fuzzy, c-format +msgid "unable to load certificate authority bundle %s" +msgstr "Varmennetta ei voi ladata ssl-kontekstiin: %s" + +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 #, c-format -msgid "Unable to attach user data to the ssl object: %s" -msgstr "" +msgid "unable to load private key %s" +msgstr "yksityistä avainta %s ei voi ladata" -#: logsrvd/logsrvd.c:1443 plugins/sudoers/iolog_client.c:1596 -#: plugins/sudoers/iolog_client.c:1604 +#: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 +#, c-format +msgid "unable to set diffie-hellman parameters: %s" +msgstr "diffie-hellman-parametreja ei voi asettaa: %s" + +#: logsrvd/logsrvd.c:1306 +#, c-format +msgid "unable to set minimum protocol version to TLS 1.2: %s" +msgstr "protokollaversion vähimmäisversiota ei voi asettaa TLS 1.2:ksi: %s" + +#: logsrvd/logsrvd.c:1491 #, fuzzy -#| msgid "unable to change to root gid" msgid "unable to get remote IP addr" msgstr "vaihtaminen root gid -tunnisteeksi epäonnistui" -#: logsrvd/logsrvd.c:1692 logsrvd/sendlog.c:113 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#, c-format +msgid "Unable to attach user data to the ssl object: %s" +msgstr "Käyttäjätietoja ei voi liittää ssl-objektiin: %s" + +#: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 +#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 +#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 +#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 +#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 +#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 +#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 +#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 +#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 +#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 +#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 +#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 +#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 +#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 +#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 +#: plugins/sudoers/sudoreplay.c:1164 +msgid "unable to add event to queue" +msgstr "tapahtuman lisääminen jonoon epäonnistui" + +#: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 +#, fuzzy +msgid "unable setup listen socket" +msgstr "asetustodentaminen epäonnistui" + +#: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 #, c-format msgid "" "%s - send sudo I/O log to remote server\n" @@ -477,7 +593,7 @@ msgstr "" "%s - lähetä sudon siirräntäloki etäpalvelimelle\n" "\n" -#: logsrvd/logsrvd.c:1695 +#: logsrvd/logsrvd.c:1846 msgid "" "\n" "Options:\n" @@ -495,274 +611,281 @@ msgstr "" " -R, --random-drop yhteyden katkeamisen todennäköisyys-%\n" " -V, --version näytä versiotiedot ja poistu\n" -#: logsrvd/logsrvd.c:1747 logsrvd/sendlog.c:1513 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C:n versio 1.3 tai uudempi vaaditaan" -#: logsrvd/logsrvd.c:1765 +#: logsrvd/logsrvd.c:1916 #, c-format msgid "invalid random drop value: %s" msgstr "virheellinen satunnaispudotusarvo: %s" -#: logsrvd/logsrvd.c:1769 logsrvd/sendlog.c:1551 -#: plugins/sudoers/cvtsudoers.c:233 plugins/sudoers/sudoreplay.c:302 -#: plugins/sudoers/visudo.c:184 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 +#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 +#: plugins/sudoers/visudo.c:178 #, c-format msgid "%s version %s\n" msgstr "%s versio %s\n" -#: logsrvd/logsrvd_conf.c:688 +#: logsrvd/logsrvd_conf.c:393 +msgid "TLS not supported" +msgstr "TLS ei ole tuettu" + +#: logsrvd/logsrvd_conf.c:405 +#, c-format +msgid "%s:%s" +msgstr "%s:%s" + +#: logsrvd/logsrvd_conf.c:471 logsrvd/logsrvd_conf.c:715 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: ei ole täydellinen polku" # Ensimmäinen parametri on auth name -#: logsrvd/logsrvd_conf.c:802 +#: logsrvd/logsrvd_conf.c:829 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "%s:%d täsmäämätön ”[”: %s" -#: logsrvd/logsrvd_conf.c:813 +#: logsrvd/logsrvd_conf.c:840 #, fuzzy, c-format -#| msgid "invalid filter option: %s" msgid "%s:%d invalid config section: %s" msgstr "virheellinen suodatinvalitsin: %s" -#: logsrvd/logsrvd_conf.c:821 +#: logsrvd/logsrvd_conf.c:848 #, fuzzy, c-format -#| msgid "invalid timing file line: %s" msgid "%s:%d invalid configuration line: %s" msgstr "virheellinen ajoitustiedostorivi: %s" -#: logsrvd/logsrvd_conf.c:827 +#: logsrvd/logsrvd_conf.c:854 #, c-format msgid "%s:%d expected section name: %s" msgstr "" -#: logsrvd/logsrvd_conf.c:841 +#: logsrvd/logsrvd_conf.c:868 #, c-format msgid "invalid value for %s: %s" msgstr "virheellinen %s-arvo: %s" -#: logsrvd/logsrvd_conf.c:849 +#: logsrvd/logsrvd_conf.c:876 #, c-format msgid "%s:%d unknown key: %s" msgstr "%s:%d tuntematon avain: %s" -#: logsrvd/logsrvd_conf.c:977 +#: logsrvd/logsrvd_conf.c:1032 #, fuzzy, c-format -#| msgid "unknown login class: %s" msgid "unknown syslog facility %s" msgstr "tuntematon kirjautumisluokka: %s" -#: logsrvd/logsrvd_conf.c:981 logsrvd/logsrvd_conf.c:985 -#: logsrvd/logsrvd_conf.c:989 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1040 +#: logsrvd/logsrvd_conf.c:1044 #, c-format msgid "unknown syslog priority %s" msgstr "tuntematon syslog-prioriteetti %s" -#: logsrvd/sendlog.c:116 +#: logsrvd/sendlog.c:126 msgid "" "\n" "Options:\n" " --help display help message and exit\n" +" -A, --accept only send an accept event (no I/O)\n" " -h, --host host to send logs to\n" " -i, --iolog_id remote ID of I/O log to be resumed\n" " -p, --port port to use when connecting to host\n" " -r, --restart restart previous I/O log transfer\n" -" -t, --test test audit server by sending selected I/O log n times in parallel\n" +" -R, --reject reject the command with the given reason\n" " -b, --ca-bundle certificate bundle file to verify server's cert against\n" " -c, --cert certificate file for TLS handshake\n" " -k, --key private key file\n" +" -n, --no-verify do not verify server certificate\n" +" -t, --test test audit server by sending selected I/O log n times in parallel\n" " -V, --version display version information and exit\n" msgstr "" -#: logsrvd/sendlog.c:216 plugins/sudoers/iolog_client.c:409 -msgid "TLS handshake timeout occurred" -msgstr "TLS-kättelyn aikakatkaisu tapahtui" - -#: logsrvd/sendlog.c:237 logsrvd/sendlog.c:252 -#: plugins/sudoers/iolog_client.c:430 plugins/sudoers/iolog_client.c:446 -#, fuzzy -#| msgid "unable to stat %s" -msgid "unable to set event" -msgstr "funktion stat %s kutsuminen epäonnistui" - -#: logsrvd/sendlog.c:262 -#, c-format -msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" -msgstr "SSL_connect epäonnistui: ssl_error=%d, pino=%s\n" - -#: logsrvd/sendlog.c:294 plugins/sudoers/iolog_client.c:115 -#: plugins/sudoers/iolog_client.c:495 plugins/sudoers/iolog_client.c:1065 -#: plugins/sudoers/iolog_client.c:1671 -msgid "error in event loop" -msgstr "virhe tapahtumasilmukassa" - -#: logsrvd/sendlog.c:311 -msgid "CA bundle file was not specified" -msgstr "CA-pakettitiedostoa ei määritelty" - -#: logsrvd/sendlog.c:315 -msgid "Client certificate was not specified" -msgstr "Asiakassertifikaattia ei annettu" - -#: logsrvd/sendlog.c:319 -#, c-format -msgid "Unable to initialize ssl context: %s" -msgstr "Ssl-kontekstia ei voi alustaa: %s" - -#: logsrvd/sendlog.c:324 -#, c-format -msgid "Unable to allocate ssl object: %s\n" -msgstr "Ssl-objektia ei voi varata: %s\n" - -#: logsrvd/sendlog.c:329 -#, c-format -msgid "Unable to attach socket to the ssl object: %s\n" -msgstr "" - -#: logsrvd/sendlog.c:367 plugins/sudoers/iolog_client.c:150 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 #, fuzzy, c-format -#| msgid "unable to load %s: %s" msgid "unable to look up %s:%s: %s" msgstr "kohteen %s lataaminen epäonnistui: %s" -#: logsrvd/sendlog.c:522 plugins/sudoers/sudoreplay.c:815 +#: logsrvd/sendlog.c:186 +#, fuzzy +msgid "unable to get server IP addr" +msgstr "vaihtaminen root gid -tunnisteeksi epäonnistui" + +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 #, fuzzy, c-format -#| msgid "unable to load %s: %s" msgid "unable to read %s/%s: %s" msgstr "kohteen %s lataaminen epäonnistui: %s" -#: logsrvd/sendlog.c:543 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 #, c-format -msgid "client message too large: %zu\n" -msgstr "asiakassanoma on liian suuri: %zu\n" +msgid "client message too large: %zu" +msgstr "asiakassanoma on liian suuri: %zu" -#: logsrvd/sendlog.c:941 +#: logsrvd/sendlog.c:791 #, c-format msgid "%s: write buffer already in use" msgstr "%s: kirjoituspuskuri on jo käytössä" -#: logsrvd/sendlog.c:993 plugins/sudoers/iolog.c:824 -#: plugins/sudoers/iolog.c:893 +#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 +#: plugins/sudoers/iolog.c:914 #, c-format msgid "unexpected I/O event %d" msgstr "odottamaton siirräntätapahtuma %d" -#: logsrvd/sendlog.c:1025 logsrvd/sendlog.c:1042 logsrvd/sendlog.c:1092 -#: plugins/sudoers/iolog_client.c:1037 plugins/sudoers/iolog_client.c:1090 -#: plugins/sudoers/iolog_client.c:1151 +#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 +#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 +#: plugins/sudoers/iolog_client.c:1273 #, c-format msgid "%s: unexpected state %d" msgstr "%s: odottamaton tila %d" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1096 +#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 msgid "invalid ServerHello" msgstr "virheellinen ServerHello" -#: logsrvd/sendlog.c:1130 plugins/sudoers/iolog_client.c:1195 +#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 #, c-format msgid "error message received from server: %s" msgstr "virhesanoma vastaanotettu palvelimelta: %s" -#: logsrvd/sendlog.c:1143 plugins/sudoers/iolog_client.c:1208 +#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 #, c-format msgid "abort message received from server: %s" msgstr "keskeytyssanoma vastaanotettu palvelimelta: %s" -#: logsrvd/sendlog.c:1162 plugins/sudoers/iolog_client.c:1227 +#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 #, fuzzy -#| msgid "unable to send audit message" msgid "unable to unpack ServerMessage" msgstr "audit-viestin lähettäminen epäonnistui" -#: logsrvd/sendlog.c:1207 plugins/sudoers/iolog_client.c:1260 +#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: odottamaton type_case-arvo %d" -#: logsrvd/sendlog.c:1291 +#: logsrvd/sendlog.c:1077 +msgid "timeout reading from server" +msgstr "aikakatkaisu luettaessa palvelimelta" + +#: logsrvd/sendlog.c:1155 msgid "premature EOF" msgstr "ennenaikainen tiedoston loppu" -#: logsrvd/sendlog.c:1304 +#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#, c-format +msgid "server message too large: %u" +msgstr "palvelinsanoma on liian suuri: %u" + +#: logsrvd/sendlog.c:1219 +msgid "timeout writing to server" +msgstr "aikakatkaisu kirjoitettaessa palvelimelle" + +#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +msgid "TLS handshake timeout occurred" +msgstr "TLS-kättelyn aikakatkaisu tapahtui" + +#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 +#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +msgid "unable to set event" +msgstr "tapahtuman asettaminen ei onnistu" + +#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#, c-format +msgid "TLS connection failed: %s" +msgstr "TLS-yhteys epäonnistui: %s" + +#: logsrvd/sendlog.c:1519 #, c-format -msgid "server message too large: %u\n" -msgstr "palvelinsanoma on liian suuri: %u\n" +msgid "Unable to initialize ssl context: %s" +msgstr "Ssl-kontekstia ei voi alustaa: %s" -#: logsrvd/sendlog.c:1569 +#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#, c-format +msgid "Unable to allocate ssl object: %s" +msgstr "Ssl-objektia ei voi varata: %s" + +#: logsrvd/sendlog.c:1529 +#, c-format +msgid "Unable to attach socket to the ssl object: %s" +msgstr "Sokettia ei voi liittää SSL-objektiin: %s" + +#: logsrvd/sendlog.c:1773 msgid "both restart point and iolog ID must be specified" msgstr "sekä aloituspiste että iolog-tunnus on annettava" -#: logsrvd/sendlog.c:1636 +#: logsrvd/sendlog.c:1777 +msgid "a restart point may not be set when no I/O is sent" +msgstr "uudelleenkäynnistyspistettä ei ehkä aseteta, kun I/O:ta ei lähetetä" + +#: logsrvd/sendlog.c:1852 #, c-format msgid "exited prematurely with state %d" msgstr "poistui ennenaikaisesti tilalla %d" -#: logsrvd/sendlog.c:1637 +#: logsrvd/sendlog.c:1853 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "kulunut aika lähetetty palvelimelle [%lld, %ld]" -#: logsrvd/sendlog.c:1639 +#: logsrvd/sendlog.c:1855 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "toimituspiste vastaanotettu palvelimelta [%lld, %ld]" -#: plugins/sudoers/alias.c:151 +#: plugins/sudoers/alias.c:144 #, c-format msgid "Alias \"%s\" already defined" msgstr "Alias ”%s” on jo määritelty" -#: plugins/sudoers/auth/aix_auth.c:203 plugins/sudoers/logging.c:792 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 msgid "unable to fork" msgstr "haarauttaminen epäonnistui" -#: plugins/sudoers/auth/aix_auth.c:283 +#: plugins/sudoers/auth/aix_auth.c:278 #, c-format msgid "unable to change password for %s" msgstr "%s-käyttäjän salasanan vaihtaminen epäonnistui" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:70 #, c-format msgid "unable to get login class for user %s" msgstr "kirjautumisluokan saaminen käyttäjälle %s epäonnistui" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:75 msgid "unable to begin bsd authentication" msgstr "bsd-todentamisen aloittaminen epäonnistui" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:83 msgid "invalid authentication type" msgstr "virheellinen todennustyyppi" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:92 msgid "unable to initialize BSD authentication" msgstr "BSD-todennuksen alustaminen epäonnistui" -#: plugins/sudoers/auth/bsdauth.c:185 +#: plugins/sudoers/auth/bsdauth.c:180 msgid "your account has expired" msgstr "tilisi on vanhentunut" -#: plugins/sudoers/auth/bsdauth.c:187 +#: plugins/sudoers/auth/bsdauth.c:182 msgid "approval failed" msgstr "hyväksyntä epäonnistui" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:54 msgid "unable to read fwtk config" msgstr "fwtk config -asetuksen lukeminen epäonnistui" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:59 msgid "unable to connect to authentication server" msgstr "todentamispalvelimelle yhdistäminen epäonnistui" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:126 +#: plugins/sudoers/auth/fwtk.c:65 plugins/sudoers/auth/fwtk.c:89 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "kadotettiin yhteys todentamispalvelimelle" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:69 #, c-format msgid "" "authentication server error:\n" @@ -771,163 +894,162 @@ msgstr "" "todentamispalvelinvirhe:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:115 +#: plugins/sudoers/auth/kerb5.c:110 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: valtuutetun (’%s’) muuntaminen merkkijonoksi epäonnistui: %s" # Ensimmäinen parametri on auth name -#: plugins/sudoers/auth/kerb5.c:165 +#: plugins/sudoers/auth/kerb5.c:160 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: todentamisnimen ’%s’ jäsentäminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:174 +#: plugins/sudoers/auth/kerb5.c:169 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: valtuustietovälimuistin ratkaiseminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:221 +#: plugins/sudoers/auth/kerb5.c:216 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: muistin varaaminen valitsimille epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:236 +#: plugins/sudoers/auth/kerb5.c:231 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: valtuustietojen hakeminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:249 +#: plugins/sudoers/auth/kerb5.c:244 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: valtuustietovälimuistin alustaminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:252 +#: plugins/sudoers/auth/kerb5.c:247 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: valtuustietojen tallentaminen valtuustietovälimuistiin epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:316 +#: plugins/sudoers/auth/kerb5.c:311 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: tietokoneen valtuutetun hakeminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:330 +#: plugins/sudoers/auth/kerb5.c:325 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: TGT-lipun todentaminen epäonnistui! Mahdollinen hyökkäys!: %s" -#: plugins/sudoers/auth/pam.c:223 +#: plugins/sudoers/auth/pam.c:218 #, c-format msgid "unable to initialize PAM: %s" msgstr "PAMin alustaminen epäonnistui: %s" -#: plugins/sudoers/auth/pam.c:322 +#: plugins/sudoers/auth/pam.c:317 #, c-format msgid "PAM authentication error: %s" msgstr "PAM-todentamisvirhe: %s" -#: plugins/sudoers/auth/pam.c:341 +#: plugins/sudoers/auth/pam.c:336 msgid "account validation failure, is your account locked?" msgstr "tilikelpuutushäiriö, onko tilisi lukittu?" -#: plugins/sudoers/auth/pam.c:352 +#: plugins/sudoers/auth/pam.c:347 msgid "Account or password is expired, reset your password and try again" msgstr "Tili tai salasana on vanhentunut, nollaa salasanasi tai yritä uudelleen" -#: plugins/sudoers/auth/pam.c:358 +#: plugins/sudoers/auth/pam.c:353 #, c-format msgid "unable to change expired password: %s" msgstr "vanhentuneen salasanan vaihtaminen epäonnistui: %s" -#: plugins/sudoers/auth/pam.c:369 +#: plugins/sudoers/auth/pam.c:364 msgid "Password expired, contact your system administrator" msgstr "Salasana vanhentunut, ota yhteyttä järjestelmän ylläpitäjään" -#: plugins/sudoers/auth/pam.c:374 +#: plugins/sudoers/auth/pam.c:369 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Tili vanhentunut tai PAM-asetuksista puuttuu ”account”-lohko sudo-komennolle, ota yhteyttä järjestelmän ylläpitäjään" -#: plugins/sudoers/auth/pam.c:382 plugins/sudoers/auth/pam.c:387 +#: plugins/sudoers/auth/pam.c:377 plugins/sudoers/auth/pam.c:382 #, fuzzy, c-format -#| msgid "PAM authentication error: %s" msgid "PAM account management error: %s" msgstr "PAM-todentamisvirhe: %s" -#: plugins/sudoers/auth/rfc1938.c:104 plugins/sudoers/visudo.c:248 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 #, c-format msgid "you do not exist in the %s database" msgstr "ei ole olemassa %s-tietokannassa" -#: plugins/sudoers/auth/securid5.c:77 +#: plugins/sudoers/auth/securid5.c:72 msgid "failed to initialise the ACE API library" msgstr "ACE API -kirjaston alustaminen epäonnistui" -#: plugins/sudoers/auth/securid5.c:103 +#: plugins/sudoers/auth/securid5.c:98 msgid "unable to contact the SecurID server" msgstr "yhteyden ottaminen SecurID-palvelimeen epäonnistui" -#: plugins/sudoers/auth/securid5.c:112 +#: plugins/sudoers/auth/securid5.c:107 msgid "User ID locked for SecurID Authentication" msgstr "Käyttäjätunniste lukittu SecurID-todennukselle" -#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:167 +#: plugins/sudoers/auth/securid5.c:111 plugins/sudoers/auth/securid5.c:162 msgid "invalid username length for SecurID" msgstr "virheellinen käyttäjänimipituus kohteelle SecurID" -#: plugins/sudoers/auth/securid5.c:120 plugins/sudoers/auth/securid5.c:172 +#: plugins/sudoers/auth/securid5.c:115 plugins/sudoers/auth/securid5.c:167 msgid "invalid Authentication Handle for SecurID" msgstr "virheellinen todentamiskäsittelijä kohteelle SecurID" -#: plugins/sudoers/auth/securid5.c:124 +#: plugins/sudoers/auth/securid5.c:119 msgid "SecurID communication failed" msgstr "SecurID-viestintä epäonnistui" -#: plugins/sudoers/auth/securid5.c:128 plugins/sudoers/auth/securid5.c:217 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 msgid "unknown SecurID error" msgstr "tuntematon SecurID-virhe" -#: plugins/sudoers/auth/securid5.c:162 +#: plugins/sudoers/auth/securid5.c:157 msgid "invalid passcode length for SecurID" msgstr "virheellinen salasanakoodipituus kohteelle SecurID" -#: plugins/sudoers/auth/sia.c:74 plugins/sudoers/auth/sia.c:129 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 msgid "unable to initialize SIA session" msgstr "SIA-istunnon alustaminen epäonnistui" -#: plugins/sudoers/auth/sudo_auth.c:138 +#: plugins/sudoers/auth/sudo_auth.c:132 msgid "invalid authentication methods" msgstr "virheelliset todennusmetodit" -#: plugins/sudoers/auth/sudo_auth.c:140 +#: plugins/sudoers/auth/sudo_auth.c:134 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Virheellisiä todennusmenetelmiä käännetty sudo-ohjelmaan! Yksittäisiä ja ei-yksittäisiä todennuksia ei voi sekoittaa keskenään." -#: plugins/sudoers/auth/sudo_auth.c:261 plugins/sudoers/auth/sudo_auth.c:311 +#: plugins/sudoers/auth/sudo_auth.c:255 plugins/sudoers/auth/sudo_auth.c:305 msgid "no authentication methods" msgstr "ei todennusmenetelmiä" -#: plugins/sudoers/auth/sudo_auth.c:263 +#: plugins/sudoers/auth/sudo_auth.c:257 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Sudo-ohjelmaan ei ole käännetty todentamismenelmiä! Jos haluat kääntää pois todentamisen, käytä asetusvalitsinta --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:313 +#: plugins/sudoers/auth/sudo_auth.c:307 msgid "Unable to initialize authentication methods." msgstr "Todentamismenetelmien alustaminen epäonnistui." -#: plugins/sudoers/auth/sudo_auth.c:479 +#: plugins/sudoers/auth/sudo_auth.c:473 msgid "Authentication methods:" msgstr "Todennusmenetelmät:" -#: plugins/sudoers/bsm_audit.c:125 plugins/sudoers/bsm_audit.c:217 +#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:214 msgid "Could not determine audit condition" msgstr "Audit-ehdon määrittely epäonnistui" -#: plugins/sudoers/bsm_audit.c:190 plugins/sudoers/bsm_audit.c:281 +#: plugins/sudoers/bsm_audit.c:188 plugins/sudoers/bsm_audit.c:277 msgid "unable to commit audit record" msgstr "commit-toiminnon suorittaminen audit-tietueelle epäonnistui" -#: plugins/sudoers/check.c:264 +#: plugins/sudoers/check.c:258 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -947,127 +1069,127 @@ msgstr "" " #3) Suuren voiman mukana tulee suuri vastuu.\n" "\n" -#: plugins/sudoers/check.c:307 plugins/sudoers/check.c:317 -#: plugins/sudoers/sudoers.c:778 plugins/sudoers/sudoers.c:826 -#: plugins/sudoers/tsdump.c:126 +#: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 +#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "tuntematon uid-käyttäjätunniste: %u" -#: plugins/sudoers/check.c:312 plugins/sudoers/iolog.c:121 -#: plugins/sudoers/policy.c:1034 plugins/sudoers/sudoers.c:391 -#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:1255 -#: plugins/sudoers/testsudoers.c:227 plugins/sudoers/testsudoers.c:400 +#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 +#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 +#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 #, c-format msgid "unknown user: %s" msgstr "tuntematon käyttäjä: %s" -#: plugins/sudoers/cvtsudoers.c:199 +#: plugins/sudoers/cvtsudoers.c:195 #, c-format msgid "order increment: %s: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:215 +#: plugins/sudoers/cvtsudoers.c:211 #, c-format msgid "starting order: %s: %s" msgstr "aloitusjärjestys: %s: %s" -#: plugins/sudoers/cvtsudoers.c:225 +#: plugins/sudoers/cvtsudoers.c:221 #, c-format msgid "order padding: %s: %s" msgstr "" -#: plugins/sudoers/cvtsudoers.c:235 plugins/sudoers/visudo.c:186 +#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 #, c-format msgid "%s grammar version %d\n" msgstr "%s kielioppiversio %d\n" -#: plugins/sudoers/cvtsudoers.c:252 plugins/sudoers/testsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "syötemuotoa %s ei tueta" -#: plugins/sudoers/cvtsudoers.c:267 +#: plugins/sudoers/cvtsudoers.c:263 #, c-format msgid "unsupported output format %s" msgstr "tuotosmuotoa %s ei tueta" -#: plugins/sudoers/cvtsudoers.c:319 +#: plugins/sudoers/cvtsudoers.c:315 #, c-format msgid "%s: input and output files must be different" msgstr "%s: syöte- ja tulostetiedostojen on oltava erilaiset" -#: plugins/sudoers/cvtsudoers.c:335 plugins/sudoers/sudoers.c:185 -#: plugins/sudoers/testsudoers.c:266 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:610 plugins/sudoers/visudo.c:933 +#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 +#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 msgid "unable to initialize sudoers default values" msgstr "sudoers-oletusarvojen alustaminen epäonnistui" -#: plugins/sudoers/cvtsudoers.c:421 plugins/sudoers/ldap_conf.c:436 +#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:480 +#: plugins/sudoers/cvtsudoers.c:476 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: tuntematon avainsana: %s" -#: plugins/sudoers/cvtsudoers.c:526 +#: plugins/sudoers/cvtsudoers.c:522 #, c-format msgid "invalid defaults type: %s" msgstr "virheellisten oletusarvojen tyyppi: %s" -#: plugins/sudoers/cvtsudoers.c:549 +#: plugins/sudoers/cvtsudoers.c:545 #, c-format msgid "invalid suppression type: %s" msgstr "virheellinen vaiennustyyppi: %s" -#: plugins/sudoers/cvtsudoers.c:589 plugins/sudoers/cvtsudoers.c:603 +#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 #, c-format msgid "invalid filter: %s" msgstr "virheellinen suodatin: %s" # Avaamisen kohde voi olla timestamp file, sudoers file tai pathbuf -#: plugins/sudoers/cvtsudoers.c:622 plugins/sudoers/cvtsudoers.c:639 -#: plugins/sudoers/cvtsudoers.c:1249 plugins/sudoers/cvtsudoers_json.c:868 -#: plugins/sudoers/cvtsudoers_ldif.c:683 plugins/sudoers/sudoers.c:1001 -#: plugins/sudoers/sudoreplay.c:1391 plugins/sudoers/timestamp.c:448 -#: plugins/sudoers/tsdump.c:135 plugins/sudoers/visudo.c:929 +#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 +#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 +#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 +#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 #, c-format msgid "unable to open %s" msgstr "kohteen %s avaaminen epäonnistui" -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/visudo.c:938 +#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 #, c-format msgid "failed to parse %s file, unknown error" msgstr "tiedoston %s jäsentäminen epäonnistui, tuntematon virhe" -#: plugins/sudoers/cvtsudoers.c:650 plugins/sudoers/visudo.c:955 +#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 #, c-format msgid "parse error in %s near line %d\n" msgstr "jäsentämisvirhe tiedostossa %s lähellä riviä %d\n" -#: plugins/sudoers/cvtsudoers.c:653 plugins/sudoers/visudo.c:958 +#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 #, c-format msgid "parse error in %s\n" msgstr "jäsentämisvirhe tiedostossa %s\n" # Kirjoittamisen kohde voi olla timestamp file tai pathbuf -#: plugins/sudoers/cvtsudoers.c:1296 plugins/sudoers/sudoreplay.c:1088 -#: plugins/sudoers/timestamp.c:332 plugins/sudoers/timestamp.c:335 +#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "kohteeseen %s kirjoittaminen epäonnistui" -#: plugins/sudoers/cvtsudoers.c:1319 +#: plugins/sudoers/cvtsudoers.c:1315 #, c-format msgid "" "%s - convert between sudoers file formats\n" "\n" msgstr "%s - muunna sudoers-tiedostomuotojen välillä\n" -#: plugins/sudoers/cvtsudoers.c:1321 +#: plugins/sudoers/cvtsudoers.c:1317 msgid "" "\n" "Options:\n" @@ -1089,30 +1211,30 @@ msgid "" " -V, --version display version information and exit" msgstr "" -#: plugins/sudoers/cvtsudoers_json.c:487 plugins/sudoers/cvtsudoers_json.c:521 -#: plugins/sudoers/cvtsudoers_json.c:709 +#: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 +#: plugins/sudoers/cvtsudoers_json.c:702 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "tuntematon oletusrivi \"%s\"" -#: plugins/sudoers/cvtsudoers_json.c:647 plugins/sudoers/cvtsudoers_json.c:660 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 -#: plugins/sudoers/ldap.c:482 +#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 +#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "GMT-ajan noutaminen epäonnistui" -#: plugins/sudoers/cvtsudoers_json.c:650 plugins/sudoers/cvtsudoers_json.c:663 -#: plugins/sudoers/cvtsudoers_ldif.c:351 plugins/sudoers/cvtsudoers_ldif.c:362 -#: plugins/sudoers/ldap.c:488 +#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 +#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "aikaleiman muotoileminen epäonnistui" -#: plugins/sudoers/cvtsudoers_ldif.c:635 +#: plugins/sudoers/cvtsudoers_ldif.c:632 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "liian monta sudoers-merkintää, enimmäismäärä %u" -#: plugins/sudoers/cvtsudoers_ldif.c:678 +#: plugins/sudoers/cvtsudoers_ldif.c:675 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "SUDOERS_BASE-ympäristömuuttujaa ei ole määritelty eikä -b-valitsinta annettu." @@ -1381,8 +1503,8 @@ msgid "File descriptors >= %d will be closed before executing a command" msgstr "Tiedostokuvaajat >= %d suljetaan ennen komennon suoritusta" #: plugins/sudoers/def_data.c:278 -msgid "If set, users may override the value of `closefrom' with the -C option" -msgstr "Jos asetettu, käyttäjä voi korvata ’closefrom’-arvon valitsimella -C" +msgid "If set, users may override the value of \"closefrom\" with the -C option" +msgstr "Jos asetettu, käyttäjä voi korvata ”closefrom”-arvon valitsimella -C" #: plugins/sudoers/def_data.c:282 msgid "Allow users to set arbitrary environment variables" @@ -1522,7 +1644,6 @@ msgstr "" #: plugins/sudoers/def_data.c:406 #, fuzzy, c-format -#| msgid "Maximum I/O log sequence number: %u" msgid "Maximum I/O log sequence number: %s" msgstr "Suurin siirräntälokin sarjanumero: %u" @@ -1649,7 +1770,6 @@ msgstr "Ota SO_KEEPALIVE-valinta käyttöön lokipalvelimeen yhdistetylle soketi #: plugins/sudoers/def_data.c:522 #, fuzzy, c-format -#| msgid "Path to the sudo-specific environment file: %s" msgid "Path to the audit server's CA bundle file: %s" msgstr "Polku sudo-kohtaiseen ympäristötiedostoon: %s" @@ -1664,349 +1784,298 @@ msgid "Path to the sudoers private key file: %s" msgstr "Sudoersin yksityisen avaintiedoston polku: %s" #: plugins/sudoers/def_data.c:534 +#, fuzzy +msgid "Verify that the log server's certificate is valid" +msgstr "Sudoers-varmennetiedoston polku: %s" + +#: plugins/sudoers/def_data.c:538 msgid "Allow the use of unknown runas user and/or group ID" msgstr "" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:542 msgid "Only permit running commands as a user with a valid shell" msgstr "Salli komentojen suorittaminen vain käyttäjänä, jolla on kelvollinen kuori" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:546 msgid "Set the pam remote user to the user running sudo" msgstr "" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:550 msgid "Set the pam remote host to the local host name" msgstr "" -#: plugins/sudoers/defaults.c:190 +#: plugins/sudoers/defaults.c:183 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d tuntematon oletusrivi ”%s”" -#: plugins/sudoers/defaults.c:193 +#: plugins/sudoers/defaults.c:186 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: tuntematon oletusrivi ”%s”" # parametrinä on variable -#: plugins/sudoers/defaults.c:236 +#: plugins/sudoers/defaults.c:229 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d arvoa ei ole määritelty muuttujalle ”%s”" # parametrinä on variable -#: plugins/sudoers/defaults.c:239 +#: plugins/sudoers/defaults.c:232 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: arvoa ei ole määritelty muuttujalle ”%s”" # Parametri on muuttuja -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:252 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d muuttujan ”%s” arvojen on alettava merkillä ’/’" # Parametri on muuttuja -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:255 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: muuttujan ”%s” arvojen on alettava merkillä ’/’" -#: plugins/sudoers/defaults.c:284 +#: plugins/sudoers/defaults.c:277 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d valitsin ”%s” ei ota arvoa" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:280 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: valitsin ”%s” ei ota arvoa" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d virheellinen Defaults-tyyppi 0x%x valitsimelle ”%s”" -#: plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:308 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: virheellinen Defaults-tyyppi 0x%x valitsimelle ”%s”" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d arvo ”%s” on virheellinen valitsimelle ”%s”" -#: plugins/sudoers/defaults.c:328 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: arvo ”%s” on virheellinen valitsimelle ”%s”" -#: plugins/sudoers/env.c:411 +#: plugins/sudoers/env.c:404 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: rikkoutunut envp, pituus ei täsmää" -#: plugins/sudoers/env.c:1133 +#: plugins/sudoers/env.c:1131 msgid "unable to rebuild the environment" msgstr "ympäristön rakentaminen uudelleen epäonnistui" -#: plugins/sudoers/env.c:1207 +#: plugins/sudoers/env.c:1205 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "seuraavia ympäristömuuttujia ei ole lupa asettaa: %s" -#: plugins/sudoers/file.c:116 +#: plugins/sudoers/file.c:104 #, c-format msgid "parse error in %s near line %d" msgstr "jäsentämisvirhe tiedostossa %s lähellä riviä %d" -#: plugins/sudoers/file.c:119 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s" msgstr "jäsentämisvirhe tiedostossa %s" -#: plugins/sudoers/filedigest.c:61 +#: plugins/sudoers/filedigest.c:49 #, c-format msgid "unsupported digest type %d for %s" msgstr "tukematon tiivistetyyppi %d kohteelle %s" -#: plugins/sudoers/filedigest.c:90 +#: plugins/sudoers/filedigest.c:78 #, c-format msgid "%s: read error" msgstr "%s: kirjoitusvirhe" -#: plugins/sudoers/group_plugin.c:91 +#: plugins/sudoers/group_plugin.c:83 #, c-format msgid "%s must be owned by uid %d" msgstr "%s-omistajan on oltava uid %d" -#: plugins/sudoers/group_plugin.c:95 +#: plugins/sudoers/group_plugin.c:87 #, c-format msgid "%s must only be writable by owner" msgstr "%s on vain omistajan kirjoitettava" -#: plugins/sudoers/group_plugin.c:104 plugins/sudoers/sssd.c:562 +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:571 #, c-format msgid "unable to load %s: %s" msgstr "kohteen %s lataaminen epäonnistui: %s" # parametrina on path -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:102 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "symbolin ”group_plugin” löytäminen polusta %s epäonnistui" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:107 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: yhteensopimaton ryhmälisäosan major-versio %d, odotettiin %d" -#: plugins/sudoers/interfaces.c:86 plugins/sudoers/interfaces.c:103 +#: plugins/sudoers/interfaces.c:80 plugins/sudoers/interfaces.c:97 #, c-format msgid "unable to parse IP address \"%s\"" msgstr "verkko-osoitteen ”%s” jäsentäminen epäonnistui" # Parametri on sudoers file -#: plugins/sudoers/interfaces.c:91 plugins/sudoers/interfaces.c:108 +#: plugins/sudoers/interfaces.c:85 plugins/sudoers/interfaces.c:102 #, c-format msgid "unable to parse netmask \"%s\"" msgstr "verkkopeitteen ”%s” jäsentäminen epäonnistui" -#: plugins/sudoers/interfaces.c:136 +#: plugins/sudoers/interfaces.c:130 msgid "Local IP address and netmask pairs:\n" msgstr "Paikallinen verkko-osoite ja verkkopeiteparit:\n" -#: plugins/sudoers/iolog.c:146 plugins/sudoers/sudoers.c:398 -#: plugins/sudoers/sudoers.c:400 plugins/sudoers/sudoers.c:1289 -#: plugins/sudoers/testsudoers.c:424 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 +#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 +#: plugins/sudoers/testsudoers.c:416 #, c-format msgid "unknown group: %s" msgstr "tuntematon ryhmä: %s" -#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:788 -#: plugins/sudoers/iolog.c:938 plugins/sudoers/iolog.c:945 -#: plugins/sudoers/iolog.c:1066 plugins/sudoers/iolog.c:1073 -#: plugins/sudoers/iolog.c:1172 plugins/sudoers/iolog.c:1179 +#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 +#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 +#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 +#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 #, c-format msgid "unable to write to I/O log file: %s" msgstr "siirtolokitiedostoon: %s kirjoittaminen epäonnistui" -#: plugins/sudoers/iolog.c:555 +#: plugins/sudoers/iolog.c:566 msgid "unable to update sequence file" msgstr "sekvenssitiedostoa ei voi päivittää" # Parametrina on pathbuf -#: plugins/sudoers/iolog.c:594 +#: plugins/sudoers/iolog.c:605 #, fuzzy, c-format -#| msgid "unable to create %s" msgid "unable to create %s/%s" msgstr "hakemistopolun %s luominen epäonnistui" -#: plugins/sudoers/iolog.c:622 +#: plugins/sudoers/iolog.c:631 msgid "unable to connect to log server" msgstr "yhteyden muodostaminen lokipalvelimeen ei onnistu" -#: plugins/sudoers/iolog.c:830 +#: plugins/sudoers/iolog.c:851 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: sisäinen virhe, tapahtuman %d siirräntälokitiedosto ei ole avoin" -#: plugins/sudoers/iolog.c:923 plugins/sudoers/iolog.c:1051 -#: plugins/sudoers/iolog.c:1156 plugins/sudoers/timestamp.c:862 -#: plugins/sudoers/timestamp.c:954 plugins/sudoers/visudo.c:498 -#: plugins/sudoers/visudo.c:504 +#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 +#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 +#: plugins/sudoers/visudo.c:498 msgid "unable to read the clock" msgstr "kellon lukeminen epäonnistui" -#: plugins/sudoers/iolog.c:1148 plugins/sudoers/iolog_client.c:862 +#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: sisäinen virhe, virheellinen signaali %d" -#: plugins/sudoers/iolog_client.c:297 +#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 +#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +msgid "error in event loop" +msgstr "virhe tapahtumasilmukassa" + +#: plugins/sudoers/iolog_client.c:194 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Uuden SSL_CTX-objektin luominen epäonnistui: %s" -#: plugins/sudoers/iolog_client.c:320 -#, fuzzy -#| msgid "Send mail if the user is not in sudoers" -msgid "CA bundle file is not set in sudoers" -msgstr "Lähetä sähköpostia, jos käyttäjä ei ole sudoers-määrittelyssä" - -#: plugins/sudoers/iolog_client.c:327 -#, c-format -msgid "Calling SSL_CTX_load_verify_locations() failed: %s" -msgstr "SSL_CTX_load_verify_locations() epäonnistui: %s" - -#: plugins/sudoers/iolog_client.c:339 -msgid "Signed certificate file is not set in sudoers" -msgstr "Allekirjoitettua varmennetiedostoa ei ole määritelty sudoers-tiedostossa" - -#: plugins/sudoers/iolog_client.c:345 +#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 #, c-format -msgid "Unable to load cert into the ssl context: %s" -msgstr "Varmennetta ei voi ladata ssl-kontekstiin: %s" - -#: plugins/sudoers/iolog_client.c:356 -#, c-format -msgid "Unable to load private key into the ssl context: %s" -msgstr "Yksityistä avainta ei voi ladata ssl-kontekstiin: %s" - -#: plugins/sudoers/iolog_client.c:363 -#, c-format -msgid "Unable to allocate ssl object: %s" -msgstr "Ssl-objektia ei voi varata: %s" - -#: plugins/sudoers/iolog_client.c:369 -#, c-format -msgid "Unable to attach socket to the ssl object: %s" -msgstr "Sokettia ei voi liittää SSL-objektiin: %s" +msgid "TLS connection to %s:%s failed: %s" +msgstr "" -#: plugins/sudoers/iolog_client.c:457 -#, c-format -msgid "SSL_connect failed: ssl_error=%d, stack=%s" -msgstr "SSL_connect epäonnistui: ssl_error=%d, pino=%s" +#: plugins/sudoers/iolog_client.c:496 +msgid "TLS initialization was unsuccessful" +msgstr "TLS-alustus epäonnistui" -#: plugins/sudoers/iolog_client.c:599 -#, c-format -msgid "client message too large: %zu" -msgstr "asiakassanoma on liian suuri: %zu" +#: plugins/sudoers/iolog_client.c:505 +msgid "TLS handshake was unsuccessful" +msgstr "TLS-kättely epäonnistui" -#: plugins/sudoers/iolog_client.c:656 plugins/sudoers/iolog_client.c:844 +#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 msgid "unable to get time of day" msgstr "kellonajan noutaminen epäonnistui" -#: plugins/sudoers/iolog_client.c:871 +#: plugins/sudoers/iolog_client.c:986 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: sisäinen virhe, virheellinen lopetustila %d" -#: plugins/sudoers/iolog_client.c:1104 -msgid "TLS initialization was unsuccessful" -msgstr "TLS-alustus epäonnistui" - -#: plugins/sudoers/iolog_client.c:1109 -msgid "TLS handshake was unsuccessful" -msgstr "TLS-kättely epäonnistui" - -#: plugins/sudoers/iolog_client.c:1361 -#, c-format -msgid "SSL_read failed: ssl_error=%d, stack=%s" -msgstr "SSL_read epäonnistui: ssl_error=%d, pino=%s" - -#: plugins/sudoers/iolog_client.c:1384 +#: plugins/sudoers/iolog_client.c:1523 msgid "lost connection to log server" msgstr "yhteys lokipalvelimeen katkesi" -#: plugins/sudoers/iolog_client.c:1397 -#, c-format -msgid "server message too large: %u" -msgstr "palvelinsanoma on liian suuri: %u" - -#: plugins/sudoers/iolog_client.c:1461 +#: plugins/sudoers/iolog_client.c:1600 msgid "missing write buffer" msgstr "puuttuva kirjoituspuskuri" -#: plugins/sudoers/iolog_client.c:1486 -#, c-format -msgid "SSL_write failed: ssl_error=%d, stack=%s" -msgstr "SSL_write epäonnistui: ssl_error=%d, pino=%s" - -#: plugins/sudoers/iolog_client.c:1610 -#, c-format -msgid "unknown address family: %d" -msgstr "tuntematon osoiteperhe: %d" - -#: plugins/sudoers/ldap.c:178 plugins/sudoers/ldap_conf.c:296 +#: plugins/sudoers/ldap.c:176 plugins/sudoers/ldap_conf.c:291 msgid "starttls not supported when using ldaps" msgstr "starttls ei ole tuettu ldaps-käytössä" -#: plugins/sudoers/ldap.c:249 +#: plugins/sudoers/ldap.c:247 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "SSL-varmenne- ja avaintietokannan alustaminen epäonnistui: %s" -#: plugins/sudoers/ldap.c:252 +#: plugins/sudoers/ldap.c:250 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "kohteessa %s TLS_CERT on asetettava käyttämään SSL:ää" -#: plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1658 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kohteen LDAP alustaminen epäonnistui: %s" -#: plugins/sudoers/ldap.c:1656 +#: plugins/sudoers/ldap.c:1694 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls määritelty, mutta LDAP-kirjastot ei tue funktiota ldap_start_tls_s() tai funktiota ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1793 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "virheellinen sudoOrder-attribuutti: %s" -#: plugins/sudoers/ldap_conf.c:205 +#: plugins/sudoers/ldap_conf.c:200 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: portti on liian suuri" # URL on verkko-osoite, loogisesti URI on verkkoresurssi(osoite) -#: plugins/sudoers/ldap_conf.c:265 +#: plugins/sudoers/ldap_conf.c:260 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tukematon LDAP-verkkoresurssin tunnustyyppi: %s" -#: plugins/sudoers/ldap_conf.c:292 +#: plugins/sudoers/ldap_conf.c:287 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap:n ja ldap-verkkoresurssitunnuksien sekoittaminen epäonnistui" -#: plugins/sudoers/ldap_util.c:553 plugins/sudoers/ldap_util.c:555 +#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "sudoOptionia ei voi muuntaa: %s%s%s" -#: plugins/sudoers/linux_audit.c:59 +#: plugins/sudoers/linux_audit.c:58 msgid "unable to open audit system" msgstr "audit-järjestelmän avaaminen epäonnistui" @@ -2014,62 +2083,62 @@ msgstr "audit-järjestelmän avaaminen epäonnistui" msgid "unable to send audit message" msgstr "audit-viestin lähettäminen epäonnistui" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:167 #, c-format msgid "unable to open log file: %s" msgstr "lokitiedoston avaaminen epäonnistui: %s" -#: plugins/sudoers/logging.c:183 +#: plugins/sudoers/logging.c:175 #, c-format msgid "unable to lock log file: %s" msgstr "lokitiedoston lukitseminen epäonnistui: %s" -#: plugins/sudoers/logging.c:216 +#: plugins/sudoers/logging.c:208 #, c-format msgid "unable to write log file: %s" msgstr "lokitiedostoon: %s kirjoittaminen epäonnistui" -#: plugins/sudoers/logging.c:249 +#: plugins/sudoers/logging.c:241 msgid "user NOT in sudoers" msgstr "käyttäjä EI ole sudoers-tiedostossa" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:243 msgid "user NOT authorized on host" msgstr "käyttäjä ei ole varmennettu tietokoneella" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:245 msgid "command not allowed" msgstr "komento ei ole sallittu" -#: plugins/sudoers/logging.c:296 +#: plugins/sudoers/logging.c:288 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" -msgstr "käyttäjä %s ei ole sudoers-tiedostossa. Tästä tapahtumasta ilmoitetaan.\n" +msgstr "%s ei ole sudoers-tiedostossa. Tästä tehdään ilmoitus.\n" -#: plugins/sudoers/logging.c:299 +#: plugins/sudoers/logging.c:291 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" -msgstr "käyttäjä %s ei saa suorittaa komentoa sudo tietokoneella %s. Tästä tapahtumasta ilmoitetaan.\n" +msgstr "%s ei saa suorittaa sudoa %s-koneella. Tästä tehdään ilmoitus.\n" -#: plugins/sudoers/logging.c:303 +#: plugins/sudoers/logging.c:295 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" -msgstr "Käyttäjä %s ei voi suorittaa komentoa sudo tietokoneella %s.\n" +msgstr "Käyttäjä %s ei saa suorittaa sudoa %s-koneella.\n" -#: plugins/sudoers/logging.c:306 +#: plugins/sudoers/logging.c:298 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" -msgstr "Käyttäjän %s ei sallita suorittaa ’%s%s%s’ käyttäjänä %s%s%s tietokoneella %s.\n" +msgstr "Käyttäjä %s ei saa suorittaa komentoa ”%s%s%s” käyttäjänä %s%s%s koneella %s.\n" -#: plugins/sudoers/logging.c:343 plugins/sudoers/sudoers.c:518 -#: plugins/sudoers/sudoers.c:520 plugins/sudoers/sudoers.c:522 -#: plugins/sudoers/sudoers.c:524 plugins/sudoers/sudoers.c:675 -#: plugins/sudoers/sudoers.c:677 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 +#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 +#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 +#: plugins/sudoers/sudoers.c:667 #, c-format msgid "%s: command not found" msgstr "%s: komentoa ei löytynyt" -#: plugins/sudoers/logging.c:345 plugins/sudoers/sudoers.c:514 +#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2078,47 +2147,47 @@ msgstr "" "ohitetaan komento ”%s”, joka löytyi kohteesta ’.’\n" "Käytä ”sudo ./%s”, jos tämä on ”%s”-komento, joka halutaan suorittaa." -#: plugins/sudoers/logging.c:362 +#: plugins/sudoers/logging.c:354 msgid "authentication failure" msgstr "todentamishäiriö" -#: plugins/sudoers/logging.c:388 +#: plugins/sudoers/logging.c:380 msgid "a password is required" msgstr "vaaditaan salasana" -#: plugins/sudoers/logging.c:458 +#: plugins/sudoers/logging.c:450 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" -msgstr[0] "%u väärä salasana yritetty" -msgstr[1] "%u väärää salasanaa yritetty" +msgstr[0] "%u väärä salasanayritys" +msgstr[1] "%u väärää salasanayritystä" -#: plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:714 #, c-format msgid "unable to dup stdin: %m" msgstr "funktion dup kutsuminen vakiosyötteellä epäonnistui: %m" -#: plugins/sudoers/logging.c:759 +#: plugins/sudoers/logging.c:751 #, c-format msgid "unable to execute %s: %m" msgstr "käskyn %s suorittaminen epäonnistui: %m" -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:856 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 #, c-format msgid "unable to fork: %m" msgstr "fork-funktion kutsuminen epäonnistui: %m" -#: plugins/sudoers/logging.c:846 +#: plugins/sudoers/logging.c:838 #, c-format msgid "unable to open pipe: %m" msgstr "putken avaaminen epäonnistui: %m" -#: plugins/sudoers/match_digest.c:123 +#: plugins/sudoers/match_digest.c:116 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "tiiviste kohteelle %s (%s) ei ole %s-muodossa" -#: plugins/sudoers/parse.c:449 +#: plugins/sudoers/parse.c:442 #, c-format msgid "" "\n" @@ -2127,7 +2196,7 @@ msgstr "" "\n" "LDAP-rooli: %s\n" -#: plugins/sudoers/parse.c:452 +#: plugins/sudoers/parse.c:445 #, c-format msgid "" "\n" @@ -2136,99 +2205,99 @@ msgstr "" "\n" "Sudoers-rivi:\n" -#: plugins/sudoers/parse.c:454 +#: plugins/sudoers/parse.c:447 #, c-format msgid " RunAsUsers: " msgstr " SuoritaKäyttäjänä: " -#: plugins/sudoers/parse.c:469 +#: plugins/sudoers/parse.c:462 #, c-format msgid " RunAsGroups: " msgstr " SuoritaRyhmänä: " -#: plugins/sudoers/parse.c:479 +#: plugins/sudoers/parse.c:472 #, c-format msgid " Options: " msgstr " Valitsimet: " -#: plugins/sudoers/parse.c:529 +#: plugins/sudoers/parse.c:522 #, c-format msgid " Commands:\n" msgstr " Komennot:\n" -#: plugins/sudoers/parse.c:720 +#: plugins/sudoers/parse.c:713 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Täsmäävät Defaults-rivit kohteelle %s kohteella %s:\n" -#: plugins/sudoers/parse.c:738 +#: plugins/sudoers/parse.c:731 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas- ja Command-kohtaiset oletukset kohteelle %s:\n" -#: plugins/sudoers/parse.c:756 +#: plugins/sudoers/parse.c:749 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Käyttäjä %s voi suorittaa seuraavat komennot kohteella %s:\n" -#: plugins/sudoers/parse.c:771 +#: plugins/sudoers/parse.c:764 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Käyttäjä %s ei saa suorittaa komentoa sudo tietokoneella %s.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:614 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "jätetään huomiotta epätäydellinen sudoRole: cn: %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:674 #, c-format msgid "invalid LDIF attribute: %s" msgstr "virheellinen LDIF-määrite: %s" -#: plugins/sudoers/policy.c:90 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "" -#: plugins/sudoers/policy.c:294 plugins/sudoers/testsudoers.c:280 +#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "verkko-osoiteluettelon jäsentäminen epäonnistui" -#: plugins/sudoers/policy.c:439 +#: plugins/sudoers/policy.c:426 msgid "user name not set by sudo front-end" msgstr "sudo-edustaohjelma ei määritellyt käyttäjänimeä" -#: plugins/sudoers/policy.c:443 +#: plugins/sudoers/policy.c:430 msgid "user-ID not set by sudo front-end" msgstr "sudo-edustaohjelma ei määritellyt käyttäjä-ID:tä" -#: plugins/sudoers/policy.c:447 +#: plugins/sudoers/policy.c:434 msgid "group-ID not set by sudo front-end" msgstr "sudo-edustaohjelma ei määritellyt ryhmä-ID:tä" -#: plugins/sudoers/policy.c:451 +#: plugins/sudoers/policy.c:438 msgid "host name not set by sudo front-end" msgstr "sudo-edustaohjelma ei määritellyt konenimeä" # Parametri on path, mutta saattaa sisältää suoritettavan ohjelman -#: plugins/sudoers/policy.c:897 plugins/sudoers/visudo.c:236 -#: plugins/sudoers/visudo.c:867 +#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 +#: plugins/sudoers/visudo.c:861 #, c-format msgid "unable to execute %s" msgstr "kohteen %s suorittaminen epäonnistui" -#: plugins/sudoers/policy.c:1055 +#: plugins/sudoers/policy.c:1060 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers-menettelytapalisäosaversio %s\n" -#: plugins/sudoers/policy.c:1057 +#: plugins/sudoers/policy.c:1062 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-tiedostokielioppiversio %d\n" -#: plugins/sudoers/policy.c:1061 +#: plugins/sudoers/policy.c:1066 #, c-format msgid "" "\n" @@ -2237,398 +2306,389 @@ msgstr "" "\n" "Sudoers-polku: %s\n" -#: plugins/sudoers/policy.c:1064 +#: plugins/sudoers/policy.c:1069 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch-polku: %s\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1071 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf-polku: %s\n" -#: plugins/sudoers/policy.c:1067 +#: plugins/sudoers/policy.c:1072 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret-polku: %s\n" -#: plugins/sudoers/policy.c:1100 +#: plugins/sudoers/policy.c:1105 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "kytkentätyypin %d (version %d.%d) rekisteröiminen epäonnistui" -#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:240 +#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 #, fuzzy, c-format -#| msgid "unable to cache uid %u, out of memory" msgid "unable to cache uid %u" msgstr "käyttäjän uid %u laittaminen välimuistiin epäonnistui, muistia ei riittävästi" -#: plugins/sudoers/pwutil.c:234 +#: plugins/sudoers/pwutil.c:226 #, c-format msgid "unable to cache uid %u, already exists" msgstr "käyttäjän uid %u laittaminen välimuistiin epäonnistui, käyttäjä on jo siellä" # Parametrina on pathbuf -#: plugins/sudoers/pwutil.c:294 plugins/sudoers/pwutil.c:312 -#: plugins/sudoers/pwutil.c:375 plugins/sudoers/pwutil.c:420 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 +#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 #, fuzzy, c-format -#| msgid "unable to create %s" msgid "unable to cache user %s" msgstr "hakemistopolun %s luominen epäonnistui" -#: plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:299 #, c-format msgid "unable to cache user %s, already exists" msgstr "käyttäjän %s laittaminen välimuistiin epäonnistui, käyttäjä on jo siellä" -#: plugins/sudoers/pwutil.c:539 plugins/sudoers/pwutil.c:557 +#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 #, fuzzy, c-format -#| msgid "unable to cache gid %u, out of memory" msgid "unable to cache gid %u" msgstr "ryhmän gid %u laittaminen välimuistiin epäonnistui, muistia ei riittävästi" -#: plugins/sudoers/pwutil.c:551 +#: plugins/sudoers/pwutil.c:543 #, c-format msgid "unable to cache gid %u, already exists" msgstr "ryhmän gid %u laittaminen välimuistiin epäonnistui, ryhmä on jo siellä" # Parametri on sudoers file -#: plugins/sudoers/pwutil.c:604 plugins/sudoers/pwutil.c:622 -#: plugins/sudoers/pwutil.c:670 plugins/sudoers/pwutil.c:712 +#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 +#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 #, fuzzy, c-format -#| msgid "unable to parse groups for %s" msgid "unable to cache group %s" msgstr "ryhmien jäsentäminen tiedostossa %s epäonnistui" -#: plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:609 #, c-format msgid "unable to cache group %s, already exists" msgstr "ryhmän %s laittaminen välimuistiin epäonnistui, ryhmä on jo siellä" -#: plugins/sudoers/pwutil.c:839 plugins/sudoers/pwutil.c:891 -#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:994 +#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 +#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "ryhmäluettelon laittaminen välimuistiin tiedostossa %s epäonnistui, ryhmäluettelo on jo siellä" # Parametri on sudoers file -#: plugins/sudoers/pwutil.c:845 plugins/sudoers/pwutil.c:896 -#: plugins/sudoers/pwutil.c:947 plugins/sudoers/pwutil.c:999 +#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 +#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 #, fuzzy, c-format -#| msgid "unable to parse groups for %s" msgid "unable to cache group list for %s" msgstr "ryhmien jäsentäminen tiedostossa %s epäonnistui" # Parametri on sudoers file -#: plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:877 #, c-format msgid "unable to parse groups for %s" msgstr "ryhmien jäsentäminen tiedostossa %s epäonnistui" # Parametri on sudoers file -#: plugins/sudoers/pwutil.c:988 +#: plugins/sudoers/pwutil.c:980 #, c-format msgid "unable to parse gids for %s" msgstr "ryhmätunnisteiden jäsentäminen tiedostolle %s epäonnistui" -#: plugins/sudoers/set_perms.c:120 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1156 -#: plugins/sudoers/set_perms.c:1450 +#: 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 msgid "perm stack overflow" msgstr "käyttöoikeuspinoylivuoto" -#: plugins/sudoers/set_perms.c:128 plugins/sudoers/set_perms.c:378 -#: plugins/sudoers/set_perms.c:455 plugins/sudoers/set_perms.c:717 -#: plugins/sudoers/set_perms.c:858 plugins/sudoers/set_perms.c:1080 -#: plugins/sudoers/set_perms.c:1164 plugins/sudoers/set_perms.c:1383 -#: plugins/sudoers/set_perms.c:1458 plugins/sudoers/set_perms.c:1548 +#: 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 msgid "perm stack underflow" msgstr "käyttöoikeuspinovajaus" -#: plugins/sudoers/set_perms.c:187 plugins/sudoers/set_perms.c:501 -#: plugins/sudoers/set_perms.c:1217 plugins/sudoers/set_perms.c:1491 +#: plugins/sudoers/set_perms.c:181 plugins/sudoers/set_perms.c:495 +#: plugins/sudoers/set_perms.c:1211 plugins/sudoers/set_perms.c:1485 msgid "unable to change to root gid" msgstr "vaihtaminen root gid -tunnisteeksi epäonnistui" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:598 -#: plugins/sudoers/set_perms.c:989 plugins/sudoers/set_perms.c:1294 +#: plugins/sudoers/set_perms.c:272 plugins/sudoers/set_perms.c:592 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas gid" msgstr "vaihtaminen runas gid -tunnisteeksi epäonnistui" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:603 -#: plugins/sudoers/set_perms.c:994 plugins/sudoers/set_perms.c:1299 +#: plugins/sudoers/set_perms.c:277 plugins/sudoers/set_perms.c:597 +#: plugins/sudoers/set_perms.c:988 plugins/sudoers/set_perms.c:1293 msgid "unable to set runas group vector" msgstr "runas-ryhmävektorin asettaminen epäonnistui" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:614 -#: plugins/sudoers/set_perms.c:1003 plugins/sudoers/set_perms.c:1308 +#: plugins/sudoers/set_perms.c:288 plugins/sudoers/set_perms.c:608 +#: plugins/sudoers/set_perms.c:997 plugins/sudoers/set_perms.c:1302 msgid "unable to change to runas uid" msgstr "vaihtaminen runas uid -tunnisteeksi epäonnistui" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:632 -#: plugins/sudoers/set_perms.c:1019 plugins/sudoers/set_perms.c:1324 +#: plugins/sudoers/set_perms.c:306 plugins/sudoers/set_perms.c:626 +#: plugins/sudoers/set_perms.c:1013 plugins/sudoers/set_perms.c:1318 msgid "unable to change to sudoers gid" msgstr "vaihtaminen sudoers gid-tunnisteeksi epäonnistui" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1067 plugins/sudoers/set_perms.c:1370 -#: plugins/sudoers/set_perms.c:1535 +#: 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 msgid "too many processes" msgstr "liian monta prosessia" -#: plugins/sudoers/solaris_audit.c:58 +#: plugins/sudoers/solaris_audit.c:61 msgid "unable to get current working directory" msgstr "nykyisen työhakemiston hakeminen epäonnistui" -#: plugins/sudoers/solaris_audit.c:66 +#: plugins/sudoers/solaris_audit.c:69 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "typistetty audit-polku user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:73 +#: plugins/sudoers/solaris_audit.c:76 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "typistetty audit-polku argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:122 -msgid "audit_failure message too long" -msgstr "audit_failure-viesti on liian pitkä" - -#: plugins/sudoers/sssd.c:564 +#: plugins/sudoers/sssd.c:573 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "lähteen SSS alustaminen epäonnistui. Onko SSSD asennettu tietokoneeseesi?" # parametrina on path -#: plugins/sudoers/sssd.c:572 plugins/sudoers/sssd.c:581 -#: plugins/sudoers/sssd.c:590 plugins/sudoers/sssd.c:599 -#: plugins/sudoers/sssd.c:608 +#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 +#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 +#: plugins/sudoers/sssd.c:617 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "symbolin ”%s” löytäminen polusta %s epäonnistui" -#: plugins/sudoers/sudoers.c:221 plugins/sudoers/sudoers.c:958 +#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 msgid "problem with defaults entries" msgstr "oletusrivien pulma" -#: plugins/sudoers/sudoers.c:225 +#: plugins/sudoers/sudoers.c:221 msgid "no valid sudoers sources found, quitting" msgstr "ei löytynyt kelvollisia sudoers-lähteitä, poistutaan" -#: plugins/sudoers/sudoers.c:301 +#: plugins/sudoers/sudoers.c:297 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers määrittelee, että root ei saa suorittaa sudo-komentoa" -#: plugins/sudoers/sudoers.c:361 +#: plugins/sudoers/sudoers.c:357 msgid "user not allowed to override closefrom limit" msgstr "" -#: plugins/sudoers/sudoers.c:362 +#: plugins/sudoers/sudoers.c:358 msgid "you are not permitted to use the -C option" msgstr "ei käyttöoikeuksia valitsimelle -C" -#: plugins/sudoers/sudoers.c:426 +#: plugins/sudoers/sudoers.c:420 #, c-format msgid "timestamp owner (%s): No such user" msgstr "aikaleimaomistaja (%s): Tuntematon käyttäjä" -#: plugins/sudoers/sudoers.c:441 +#: plugins/sudoers/sudoers.c:435 msgid "no tty" msgstr "ei tty:tä" -#: plugins/sudoers/sudoers.c:442 +#: plugins/sudoers/sudoers.c:436 msgid "sorry, you must have a tty to run sudo" msgstr "sudo-komennon suorittamiseksi on oltava tty" -#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:450 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 #, c-format msgid "invalid shell for user %s: %s" msgstr "virheellinen kuori käyttäjälle %s: %s" -#: plugins/sudoers/sudoers.c:513 +#: plugins/sudoers/sudoers.c:507 msgid "command in current directory" msgstr "komento nykyisessä hakemistossa" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:525 msgid "user not allowed to set a command timeout" msgstr "käyttäjä ei saa asettaa komennon aikakatkaisua" -#: plugins/sudoers/sudoers.c:533 +#: plugins/sudoers/sudoers.c:526 msgid "sorry, you are not allowed set a command timeout" msgstr "komennon aikavalvonnan asettaminen ei ole sallittua" -#: plugins/sudoers/sudoers.c:541 -msgid "user not allowed to set a preserve the environment" -msgstr "käyttäjä ei saa asettaa ympäristön säilyttämistä" +#: plugins/sudoers/sudoers.c:534 +msgid "user not allowed to preserve the environment" +msgstr "käyttäjä ei saa säilyttää ympäristöä" -#: plugins/sudoers/sudoers.c:542 +#: plugins/sudoers/sudoers.c:535 msgid "sorry, you are not allowed to preserve the environment" msgstr "ympäristöä ei ole lupa säilyttää" -#: plugins/sudoers/sudoers.c:893 +#: plugins/sudoers/sudoers.c:878 msgid "command too long" msgstr "komento on liian pitkä" -#: plugins/sudoers/sudoers.c:951 +#: plugins/sudoers/sudoers.c:936 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoeditiä ei tarvitse ajaa sudon kautta" # Parametrinä on sudoers-tiedosto tai pathbuf -#: plugins/sudoers/sudoers.c:1005 plugins/sudoers/sudoreplay.c:1502 -#: plugins/sudoers/tsdump.c:145 +#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "kohteen %s lukeminen epäonnistui" -#: plugins/sudoers/sudoers.c:1030 plugins/sudoers/visudo.c:437 -#: plugins/sudoers/visudo.c:733 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 +#: plugins/sudoers/visudo.c:727 #, c-format msgid "unable to stat %s" msgstr "funktion stat %s kutsuminen epäonnistui" -#: plugins/sudoers/sudoers.c:1034 +#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 #, c-format msgid "%s is not a regular file" msgstr "%s ei ole tavallinen tiedosto" -#: plugins/sudoers/sudoers.c:1038 plugins/sudoers/timestamp.c:259 toke.l:967 +#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s on uid %u -käyttäjän omistama, pitäisi olla %u" -#: plugins/sudoers/sudoers.c:1042 toke.l:972 +#: plugins/sudoers/sudoers.c:1027 toke.l:1065 #, c-format msgid "%s is world writable" msgstr "%s on yleiskirjoitettava" -#: plugins/sudoers/sudoers.c:1046 toke.l:975 +#: plugins/sudoers/sudoers.c:1031 toke.l:1068 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s on gid %u -ryhmän omistama, pitäisi olla %u" -#: plugins/sudoers/sudoers.c:1079 +#: plugins/sudoers/sudoers.c:1064 #, c-format msgid "only root can use \"-c %s\"" msgstr "vain root-käyttäjä voi käyttää valitsinta ”-c %s”" -#: plugins/sudoers/sudoers.c:1098 +#: plugins/sudoers/sudoers.c:1083 #, c-format msgid "unknown login class: %s" msgstr "tuntematon kirjautumisluokka: %s" -#: plugins/sudoers/sudoers.c:1183 plugins/sudoers/sudoers.c:1198 +#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 #, c-format msgid "unable to resolve host %s" msgstr "tietokoneen %s ratkaiseminen epäonnistui" -#: plugins/sudoers/sudoreplay.c:263 +#: plugins/sudoers/sudoreplay.c:258 #, c-format msgid "invalid filter option: %s" msgstr "virheellinen suodatinvalitsin: %s" -#: plugins/sudoers/sudoreplay.c:276 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid max wait: %s" msgstr "virheellinen enimmäisodotusaika: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:297 #, c-format msgid "invalid speed factor: %s" msgstr "virheellinen nopeustekijä: %s" -#: plugins/sudoers/sudoreplay.c:335 +#: plugins/sudoers/sudoreplay.c:333 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:338 #, c-format msgid "%s/timing: %s" msgstr "%s/ajoitus: %s" -#: plugins/sudoers/sudoreplay.c:344 +#: plugins/sudoers/sudoreplay.c:342 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:372 +#: plugins/sudoers/sudoreplay.c:366 #, c-format msgid "Replaying sudo session: %s" msgstr "Toistetaan sudo-istunto: %s" -#: plugins/sudoers/sudoreplay.c:634 +#: plugins/sudoers/sudoreplay.c:628 msgid "unable to set tty to raw mode" msgstr "tty:n asettaminen raakatilaan epäonnistui" -#: plugins/sudoers/sudoreplay.c:685 +#: plugins/sudoers/sudoreplay.c:679 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Varoitus: pääteikkunasi on liian pieni tämän lokin toistamiseksi oikein.\n" -#: plugins/sudoers/sudoreplay.c:686 +#: plugins/sudoers/sudoreplay.c:680 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Lokigeometria on %d x %d, pääteikkunasi geometria on %d x %d." -#: plugins/sudoers/sudoreplay.c:714 +#: plugins/sudoers/sudoreplay.c:708 msgid "Replay finished, press any key to restore the terminal." msgstr "Toistaminen päättyi, palaa pääteikkunaan painamalla mitä tahansa näppäintä." -#: plugins/sudoers/sudoreplay.c:1161 plugins/sudoers/sudoreplay.c:1186 +#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 #, c-format msgid "ambiguous expression \"%s\"" msgstr "monimerkityksellinen lauseke ”%s”" -#: plugins/sudoers/sudoreplay.c:1208 +#: plugins/sudoers/sudoreplay.c:1250 msgid "unmatched ')' in expression" msgstr "täsmäämätön ’)’ lausekkeessa" -#: plugins/sudoers/sudoreplay.c:1212 +#: plugins/sudoers/sudoreplay.c:1254 #, c-format msgid "unknown search term \"%s\"" msgstr "tuntematon hakutermi ”%s”" -#: plugins/sudoers/sudoreplay.c:1227 +#: plugins/sudoers/sudoreplay.c:1269 #, c-format msgid "%s requires an argument" msgstr "%s vaatii argumentin" -#: plugins/sudoers/sudoreplay.c:1230 plugins/sudoers/sudoreplay.c:1478 +#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 #, c-format msgid "invalid regular expression: %s" msgstr "virheellinen säännöllinen lauseke: %s" -#: plugins/sudoers/sudoreplay.c:1234 +#: plugins/sudoers/sudoreplay.c:1277 #, c-format msgid "could not parse date \"%s\"" msgstr "päivämäärän ”%s” jäsentäminen epäonnistui" -#: plugins/sudoers/sudoreplay.c:1243 +#: plugins/sudoers/sudoreplay.c:1286 msgid "unmatched '(' in expression" msgstr "täsmäämätön ’(’ lausekkeessa" -#: plugins/sudoers/sudoreplay.c:1245 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"or\"" msgstr "virheellinen jäljessä oleva ”or”" -#: plugins/sudoers/sudoreplay.c:1247 +#: plugins/sudoers/sudoreplay.c:1290 msgid "illegal trailing \"!\"" msgstr "virheellinen jäljessä oleva ”!”" -#: plugins/sudoers/sudoreplay.c:1297 +#: plugins/sudoers/sudoreplay.c:1348 #, c-format msgid "unknown search type %d" msgstr "tuntematon hakutyyppi %d" -#: plugins/sudoers/sudoreplay.c:1569 +#: plugins/sudoers/sudoreplay.c:1615 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "käyttö: %s [-hnRS] [-d hakemisto] [-m numero] [-s numero] tunniste\n" -#: plugins/sudoers/sudoreplay.c:1572 +#: plugins/sudoers/sudoreplay.c:1618 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "käyttö: %s [-h] [-d hakemisto] -l [hakulauseke]\n" -#: plugins/sudoers/sudoreplay.c:1581 +#: plugins/sudoers/sudoreplay.c:1627 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2637,7 +2697,7 @@ msgstr "" "%s - toista sudo-istuntolokit\n" "\n" -#: plugins/sudoers/sudoreplay.c:1583 +#: plugins/sudoers/sudoreplay.c:1629 msgid "" "\n" "Options:\n" @@ -2666,11 +2726,11 @@ msgstr "" " -s, --speed=luku nopeuta tai hidasta tulostusta\n" " -V, --version näytä versiotiedot ja poistu" -#: plugins/sudoers/testsudoers.c:362 +#: plugins/sudoers/testsudoers.c:354 msgid "\thost unmatched" msgstr "\ttietokone täsmäämätön" -#: plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/testsudoers.c:357 msgid "" "\n" "Command allowed" @@ -2678,7 +2738,7 @@ msgstr "" "\n" "Komento sallittu" -#: plugins/sudoers/testsudoers.c:366 +#: plugins/sudoers/testsudoers.c:358 msgid "" "\n" "Command denied" @@ -2686,7 +2746,7 @@ msgstr "" "\n" "Komento kielletty" -#: plugins/sudoers/testsudoers.c:366 +#: plugins/sudoers/testsudoers.c:358 msgid "" "\n" "Command unmatched" @@ -2694,126 +2754,126 @@ msgstr "" "\n" "Täsmäämätön komento" -#: plugins/sudoers/timestamp.c:267 +#: plugins/sudoers/timestamp.c:260 #, c-format msgid "%s is group writable" msgstr "%s on ryhmäkirjoitettava" -#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:687 +#: plugins/sudoers/timestamp.c:336 plugins/sudoers/timestamp.c:680 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "aikaleimatiedoston typistäminen %lld-tavun kokoiseksi epäonnistui" -#: plugins/sudoers/timestamp.c:873 +#: plugins/sudoers/timestamp.c:866 msgid "ignoring time stamp from the future" msgstr "ohitetaan aikaleima tulevaisuudesta" -#: plugins/sudoers/timestamp.c:896 +#: plugins/sudoers/timestamp.c:889 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "aikaleima liian kaukana tulevaisuudessa: %20.20s" -#: plugins/sudoers/timestamp.c:1018 +#: plugins/sudoers/timestamp.c:1011 #, c-format msgid "unable to lock time stamp file %s" msgstr "aikaleimatiedoston %s lukitseminen epäonnistui" -#: plugins/sudoers/timestamp.c:1062 plugins/sudoers/timestamp.c:1082 +#: plugins/sudoers/timestamp.c:1055 plugins/sudoers/timestamp.c:1075 #, c-format msgid "lecture status path too long: %s/%s" msgstr "luentotilapolku on liian pitkä: %s/%s" -#: plugins/sudoers/toke_util.c:132 +#: plugins/sudoers/toke_util.c:124 msgid "sudoedit should not be specified with a path" msgstr "sudoeditiä ei tule käynnistää polun kanssa" -#: plugins/sudoers/visudo.c:232 +#: plugins/sudoers/visudo.c:226 msgid "the -x option will be removed in a future release" msgstr "valitsin -x poistetaan jossakin tulevassa versiossa" -#: plugins/sudoers/visudo.c:233 +#: plugins/sudoers/visudo.c:227 msgid "please consider using the cvtsudoers utility instead" msgstr "harkitse cvtsudoers-apuohjelman käyttöä" -#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:666 +#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 #, c-format msgid "press return to edit %s: " msgstr "muokkaa %s painamalla enter-painiketta: " -#: plugins/sudoers/visudo.c:345 +#: plugins/sudoers/visudo.c:339 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "määritelty editori (%s) ei ole olemassa" -#: plugins/sudoers/visudo.c:347 +#: plugins/sudoers/visudo.c:341 #, c-format msgid "no editor found (editor path = %s)" msgstr "editoria ei löytynyt (editoripolku = %s)" -#: plugins/sudoers/visudo.c:457 plugins/sudoers/visudo.c:465 +#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 msgid "write error" msgstr "kirjoitusvirhe" -#: plugins/sudoers/visudo.c:511 +#: plugins/sudoers/visudo.c:505 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "funktion stat kutsuminen tilapäiselle tiedostolle (%s) epäonnistui, %s ennallaan" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:512 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "nollapituinen tilapäinen tiedosto (%s), %s ennallaan" -#: plugins/sudoers/visudo.c:524 +#: plugins/sudoers/visudo.c:518 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editori (%s) epäonnistui, %s ennallaan" -#: plugins/sudoers/visudo.c:546 +#: plugins/sudoers/visudo.c:540 #, c-format msgid "%s unchanged" msgstr "%s ennallaan" -#: plugins/sudoers/visudo.c:605 +#: plugins/sudoers/visudo.c:599 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "tilapäisen tiedoston (%s) avaaminen uudelleen epäonnistui, %s ennallaan." -#: plugins/sudoers/visudo.c:617 +#: plugins/sudoers/visudo.c:611 #, c-format -msgid "unabled to parse temporary file (%s), unknown error" +msgid "unable to parse temporary file (%s), unknown error" msgstr "tilapäisen tiedoston (%s) jäsentäminen epäonnistui, tuntematon virhe" -#: plugins/sudoers/visudo.c:655 +#: plugins/sudoers/visudo.c:649 #, c-format msgid "internal error, unable to find %s in list!" msgstr "sisäinen virhe, kohteen %s löytäminen luettelosta epäonnistui!" -#: plugins/sudoers/visudo.c:735 plugins/sudoers/visudo.c:744 +#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "kohteen %s (uid, gid) asettaminen arvoihin (%u, %u) epäonnistui" -#: plugins/sudoers/visudo.c:767 +#: plugins/sudoers/visudo.c:761 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s ja %s eivät ole samassa tiedostojärjestelmässä, käytetään komentoa mv uudelleennimeämiseen" -#: plugins/sudoers/visudo.c:781 +#: plugins/sudoers/visudo.c:775 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "komento epäonnistui: ’%s %s %s’, %s ennallaan" -#: plugins/sudoers/visudo.c:791 +#: plugins/sudoers/visudo.c:785 #, c-format msgid "error renaming %s, %s unchanged" msgstr "virhe nimettäessä %s uudelleen, %s ennallaan" -#: plugins/sudoers/visudo.c:812 +#: plugins/sudoers/visudo.c:806 msgid "What now? " msgstr "Mitä nyt? " -#: plugins/sudoers/visudo.c:826 +#: plugins/sudoers/visudo.c:820 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2826,67 +2886,67 @@ msgstr "" " (Q) poistu ja tallenna muutokset sudoers-tiedostoon (VAARA!)\n" # Parametri on path, mutta saattaa sisältää suoritettavan ohjelman -#: plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:866 #, c-format msgid "unable to run %s" msgstr "kohteen %s suorittaminen epäonnistui" -#: plugins/sudoers/visudo.c:902 +#: plugins/sudoers/visudo.c:896 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: väärä omistaja (uid, gid), pitäisi olla (%u, %u)\n" -#: plugins/sudoers/visudo.c:909 +#: plugins/sudoers/visudo.c:903 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: väärät käyttöoikeudet, pitäisi olla tila 0%o\n" -#: plugins/sudoers/visudo.c:966 plugins/sudoers/visudo.c:973 +#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 #, c-format msgid "%s: parsed OK\n" msgstr "%s: jäsentäminen valmis\n" -#: plugins/sudoers/visudo.c:992 +#: plugins/sudoers/visudo.c:986 #, c-format msgid "%s busy, try again later" msgstr "%s varattu, yritä myöhemmin uudelleen" # Avaamisen kohde voi olla timestamp file, sudoers file tai pathbuf -#: plugins/sudoers/visudo.c:995 +#: plugins/sudoers/visudo.c:989 #, c-format msgid "unable to lock %s" msgstr "kohteen %s lukitseminen epäonnistui" -#: plugins/sudoers/visudo.c:996 +#: plugins/sudoers/visudo.c:990 msgid "Edit anyway? [y/N]" msgstr "Muokataanko silti? [y/N]" -#: plugins/sudoers/visudo.c:1080 +#: plugins/sudoers/visudo.c:1083 #, c-format msgid "Error: %s:%d cycle in %s \"%s\"" msgstr "Virhe: %s:%d jakso kohteessa %s \"%s\"" -#: plugins/sudoers/visudo.c:1081 +#: plugins/sudoers/visudo.c:1084 #, c-format msgid "Warning: %s:%d cycle in %s \"%s\"" msgstr "Varoitus: %s:%d jakso kohteessa %s \"%s\"" -#: plugins/sudoers/visudo.c:1085 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Error: %s:%d %s \"%s\" referenced but not defined" msgstr "Virhe: %s:%d %s \"%s\" uudelleenviitattu, mutta ei määritelty" -#: plugins/sudoers/visudo.c:1086 +#: plugins/sudoers/visudo.c:1089 #, c-format msgid "Warning: %s:%d %s \"%s\" referenced but not defined" msgstr "Varoitus: %s:%d %s \"%s\" uudelleenviitattu, mutta ei määritelty" -#: plugins/sudoers/visudo.c:1177 +#: plugins/sudoers/visudo.c:1180 #, c-format msgid "Warning: %s:%d unused %s \"%s\"" msgstr "Varoitus: %s:%d käyttämätön %s \"%s\"" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1295 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2895,7 +2955,7 @@ msgstr "" "%s - muokkaa sudoers-tiedostoa turvallisesti\n" "\n" -#: plugins/sudoers/visudo.c:1294 +#: plugins/sudoers/visudo.c:1297 msgid "" "\n" "Options:\n" @@ -2915,10 +2975,60 @@ msgstr "" " -s, --strict tiukka syntaksitarkistus\n" " -V, --version näytä versiotiedot ja poistu\n" -#: toke.l:941 +#: toke.l:1032 msgid "too many levels of includes" msgstr "liian monta include-tasoa" +#~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" +#~ msgstr "SSL_connect epäonnistui: ssl_error=%d, pino=%s\n" + +#~ msgid "CA bundle file was not specified" +#~ msgstr "CA-pakettitiedostoa ei määritelty" + +#~ msgid "Client certificate was not specified" +#~ msgstr "Asiakassertifikaattia ei annettu" + +#~ msgid "Unable to allocate ssl object: %s\n" +#~ msgstr "Ssl-objektia ei voi varata: %s\n" + +#~ msgid "client message too large: %zu\n" +#~ msgstr "asiakassanoma on liian suuri: %zu\n" + +#~ msgid "server message too large: %u\n" +#~ msgstr "palvelinsanoma on liian suuri: %u\n" + +#, fuzzy +#~| msgid "Send mail if the user is not in sudoers" +#~ msgid "CA bundle file is not set in sudoers" +#~ msgstr "Lähetä sähköpostia, jos käyttäjä ei ole sudoers-määrittelyssä" + +#~ msgid "Calling SSL_CTX_load_verify_locations() failed: %s" +#~ msgstr "SSL_CTX_load_verify_locations() epäonnistui: %s" + +#~ msgid "Signed certificate file is not set in sudoers" +#~ msgstr "Allekirjoitettua varmennetiedostoa ei ole määritelty sudoers-tiedostossa" + +#~ msgid "Unable to load private key into the ssl context: %s" +#~ msgstr "Yksityistä avainta ei voi ladata ssl-kontekstiin: %s" + +#~ msgid "SSL_connect failed: ssl_error=%d, stack=%s" +#~ msgstr "SSL_connect epäonnistui: ssl_error=%d, pino=%s" + +#~ msgid "SSL_read failed: ssl_error=%d, stack=%s" +#~ msgstr "SSL_read epäonnistui: ssl_error=%d, pino=%s" + +#~ msgid "SSL_write failed: ssl_error=%d, stack=%s" +#~ msgstr "SSL_write epäonnistui: ssl_error=%d, pino=%s" + +#~ msgid "unknown address family: %d" +#~ msgstr "tuntematon osoiteperhe: %d" + +#~ msgid "audit_failure message too long" +#~ msgstr "audit_failure-viesti on liian pitkä" + +#~ msgid "unabled to parse temporary file (%s), unknown error" +#~ msgstr "tilapäisen tiedoston (%s) jäsentäminen epäonnistui, tuntematon virhe" + #~ msgid "No user or host" #~ msgstr "Ei käyttäjä eikä tietokone" @@ -3037,9 +3147,6 @@ msgstr "liian monta include-tasoa" #~ msgid "too many parenthesized expressions, max %d" #~ msgstr "liian monta sulkumerkillistä lauseketta, enintään %d" -#~ msgid "unable to setup authentication" -#~ msgstr "asetustodentaminen epäonnistui" - #~ msgid "getaudit: failed" #~ msgstr "getaudit: epäonnistui" @@ -3095,9 +3202,6 @@ msgstr "liian monta include-tasoa" #~ msgid "unable to cache gid %u (%s), already exists" #~ msgstr "ryhmän gid %u (%s) laittaminen välimuistiin epäonnistui, ryhmä on jo siellä" -#~ msgid "unable to execute %s: %s" -#~ msgstr "komennon %s suorittaminen epäonnistui: %s" - #~ msgid "internal error, expand_prompt() overflow" #~ msgstr "sisäinen virhe, expand_prompt()-ylivuoto" @@ -3148,6 +3252,3 @@ msgstr "liian monta include-tasoa" #~ msgid "%s: %s_Alias `%s' references self" #~ msgstr "%s: %s_Alias ”%s” viittaa itseensä" - -#~ msgid "unable to parse temporary file (%s), unknown error" -#~ msgstr "tilapäisen tiedoston (%s) jäsentäminen epäonnistui, tuntematon virhe" diff --git a/plugins/sudoers/po/fr.mo b/plugins/sudoers/po/fr.mo index 92b14642acb5cf64d53037bfcf8ed27eb75cecf9..6f08fe7de8f9c7119a6d09423c9422eabeab43ea 100644 GIT binary patch delta 4619 zcmXZf33yLe8prW-6FT-JmPBGpLJ*ROkVHZegodEhTE3*sW@OBup%PPjEgj1c^!v-Xo+m!%J$F0r`<{FA0Qo~^Htd&=Jv zWsJGD$e2j1v)Gt0?1WWuG`7I0*ch|1DelL*Sc=hDhPe*sE-@yY_`>_f)W+vn6KgFs zrU5oZ#oh3cuQ7v{8jp#uXiVQf7_){OEc6;Pgacu#jG0e7C)>SIj=gcMkB#Zad;$h= zqa|yM@xza?7H&a3-~d*}LJY+V7>H%q4r{HoiKVag7}J)CnM`!RZ8#aPqcR)#C+mD{ zLc9}`@GOR*|2kuOV;sJM^ROSDz)@K5&&IUExu{BS!cqp<|LVziXTN(mq7BwC(4{^uS3Njyq9_7NHjA zw^{e|a1jG#I0;pnY}5%SP_21{%`sq$%^(>&5xs?>q1m;IOmn#jClk5VkYi#jrhAU7m2e`m7MvN-DAfvhWIwB z<(~Rq+b`RA?83w{)Pd9Jk9CjQ%0%J_;)$pm978SWA$G#ZV>X_Isl;osJ(gfRHayNN zjsvg_{vLT9J?0RD@k~5L_3Dii#*D*U%)-Ev_O)D!9f|j$ZukUKF!mdpVJ0>tK7uOo zWz=~|r)=w{;~3&xY>Ku2q3b=Yl0i=UxRAdVbpn#@fD0MG-fQ%H?tWuz>BC#l%d|^G5@p+*nrCPBkLr2of9xI^j)RGp;X*7$RdCWdo6zQS)V~iCH||3whQTvF~sj+Q`~}`un^UXfD-%LY!K>3D^L&o()A*?CiX40_m9U& z;_0aKb1)P=hZ!_yP=d<1>J?)eVGC@BJ+TAMcRhsa@iWZ9r2pClpTU;I&X4xN(Wp|7 z#Bf}RN;Kc~4hHJ|kGyKk>m2BeD)AcRfGI$g>|1P#S5P;qdd)5{#()b!+iHZA*$pLuolMMwy#Tf)WVjadb<^s zaj`pJhFVCYpX}~V#T4R9?18&c6)wYO7<`BNCo@Q4paslD9mvKgJcN3kZeu7u$3fWW zuD$UL)N59N9kKd7yMT1eAkIWRuoSg<&3(Jz&ZxaL@;>!fZ?c(CiB4l8IzQWAk4YFn zybyK4Y8;2(q0USApRLq1j3M5N+MMT6nFl_wEgXWn&jM8GKSEV_?*r#RiXU?`L8<@m4o}j7lKt|MvJw4+Fgx zM==`B6T9*lj3vxKEntHi7ory8^VC+XE$X}psLZpm1r}ilzHsA^GFypMtjGLY7>1q? z7^E`Tfm*-=OvJ{|>}xj+RhjotrQ3nc@eIae8MeW==l07v9<_j6)O8nJE4{FZ#H04u zIOKUA^8tgFOzgvMcohd>lyU5b2er~esP8}tcEZYzQ@)TitWTVY$@oXqUOI_Q@EK~s z;XY3J9_fXu%p7c}_kR@wWw0BS`8CvQ7V2vs)D`vM`51{?Fb#`P*EOu*7;U!xs9t}F zb@4Jb#3z`5!4;kIFYBwQmS$io&o}EC=z%|?N?Q3Pr@Tjv#{q6U4t3rvRF79& z@?CFYBjT`X_WTso-WY-E@jUE;o89?at~IJV<$Eg@yL0?)R15Z3_c-Od^%fKAVNeZw z;!x~JybfQ(VmEH>=ahevGf*vAfLdSys-!=mdLQL)OP`7kaT)*3z#?3QOZh4P=Zy>> z=2PP2EehZ0gFAeIQEjFrBO?Lf_(AiT|8$m+w@o!Z{*rvtp{cU$dA@N?3gUjXL*MaKXD delta 4624 zcmXZfd0!B8Yes5@aKY5G1t)X)LkSSWAhjyvA5KIb|2-m^Tt+DnpV?wY8R>M~@0yD4)=3qE}hJkn!qtTOT%r3{6Rv1crWw|l_ST2h(F%TPJ zq#O6fN9Bwek!5@)u7WXx{$R`o2FS`b=C@o3UuDc(~q%Z?P-w ziIK!JF$Qx{3p?jpg38!)d;vTC*aGI$WjUWA9l8*cw<)bj^XseOVfX@?Ju>4{S@6!)PvT8vtl|3@0n zXG~Wb+Tm1GYBr&6IEyOHQ*4d_f3Z7A!X)Cw$k{bVu_Jzt?8sF3t36x;a5?b;oP?D= zHfA7ZU=*IjNai;WXoR76hcTlt*>$UH`JKFq^pC~KcnVXo{VrS6CD@Pn5-J0cyX_%; z4F?f#!72C)DzoGF*h6^$eO@|BY4pY_e=}wR4#XGn5XNHVJiZB-fN}UHDkJ-_4_?OU z7`@lVIT%EI3w7wKq_&ZdFzw*&YqtWQFF)!mZ zOvZDllm{H)i-;po-+_E=hoz{A8h>WYD>w*e;C|PLqkLqDH=!~)|Cl{vr!j{3KK4dm z$Z`8+n}l8ISc$rD9{sS<37eT197Q|@HNa`qf}UU!#+b@Z9zG{)0mKDV`c71IgxF#{WZVPDHXVj}Tj)PT>i3&x$YJDh{T#3xZHzJabK)|tX^bOmyg|vAEM4i z$A8%rF2T0MA7eNC4psB8i}s9+!6C#eaS4{9GB~x^ZfIvQ`R_}|T{=|Tq<`BF&_dK< zEJ2kd;*u@N>!=;>$0)4zAA6V*aRTuS^utRy2yfvC?DCDxa1OR6K7@My&Nt-0AB~`I z?KgiiYKQAF7_VbJEO*&{(Hf#s*&g-WSgenE=*2UrvvV7j*|t~g^Fz^}_;qZ9OHpT} zz(=D4jjI@kLEqVh48R!TH&Lf`7bam5suTfN?N77esDW0aCj7+p8paY=zGlZyz!tgixIVxDz5g*K{F=pu9vFnV$OTh~O4$Vr$D62u{7UTt+qe$Iy7XtDHn1GEpbuS( zP?;@%)0Qp)!-&%{QSblTG(zb3!u1wvq8k6TJBme>VkGJ`zk_;RuVWMR{9p$R$28(p zOu-yft#6_-(dd@FuRrR!+1Qx*&3YOQvB14hgi85itb_4C+Slbp)WTMvYP%b?;lqoI`JITgr%s%Tj9Q4a1Yek8h4-kt2UeHP>RlDJXZY4{&-BpTEtnX z2R33levP`X;{%(i42&V(jXIo{Q44JNvn}CB)Husgso#Lg@TWhMf35r}9olinhjyR| z=p|l*E%5-xVkxS&4IbJ4bnHXC3N_9(9Ezd8*xJv>RN~!k{0y~$*#FtbybZP@o`qV#Ha9LpEu_*Do3Re4`zE7yz6m3+7#m>ur#5bkk;Ez35NBfu`rf0_ zgT`Le0v=;LHh*ScyV0o3EJLMkFE+=E7>CaP?M~vcH}NFY0`gJMU2(1c+-@WRo6$cJ zna^k5qoI`@#_o6vU&2`9*bfhCrN>dl-PpGqW4x6IKWAAH* zIwSp2nekz;-v9M9+R$+jweufQuUS|*J5evx#F^LvccFG#jC!s~dB^Cm4MEj<9R}hJ z494f!4udN=Wnb38sFKdY9?WmH($IuIpi)|+qEl9*?x>WHMosj4)Wio|J(ZlYnx~?6 znu!B&2X;bJ*>0#asC;jvG*sV&c;~OpeAq zY3K(Y&s8ToB5bu&FYid$$%>vpPj*&RmWN+10-|?>RvSHb^0bWf@iV4PX_j}kUrc;< zi)9V!dZ$jC=^Zn9^0YbW, 2020 msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.1b1\n" +"Project-Id-Version: sudoers 1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-05 10:24-0600\n" -"PO-Revision-Date: 2020-06-08 07:54+0200\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-07-23 08:07+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -173,8 +173,8 @@ msgstr "valeur invalide pour le délai d'expiration" #: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 #: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 #: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1301 -#: logsrvd/sendlog.c:1308 logsrvd/sendlog.c:1726 plugins/sudoers/audit.c:108 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 +#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 #: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 #: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 @@ -553,8 +553,8 @@ 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:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1105 logsrvd/sendlog.c:1461 logsrvd/sendlog.c:1476 -#: logsrvd/sendlog.c:1534 plugins/sudoers/iolog.c:921 +#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 +#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 #: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 #: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 #: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 @@ -603,7 +603,7 @@ msgstr "" " -R, --random-drop pourcentage de chances que la connexion soit abandonnée\n" " -V, --version affiche la version, puis termine l'exécution\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1699 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 msgid "Protobuf-C version 1.3 or higher required" msgstr "Version 1.3 ou supérieure de Protobuf-C requise" @@ -612,7 +612,7 @@ msgstr "Version 1.3 ou supérieure de Protobuf-C requise" msgid "invalid random drop value: %s" msgstr "valeur d'abandon aléatoire invalide : %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1749 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 #: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 #: plugins/sudoers/visudo.c:178 #, c-format @@ -727,112 +727,112 @@ msgstr "impossible de lire %s/%s : %s" msgid "client message too large: %zu" msgstr "message client trop grand : %zu" -#: logsrvd/sendlog.c:790 +#: logsrvd/sendlog.c:791 #, c-format msgid "%s: write buffer already in use" msgstr "%s: tampon d'écriture déjà en cours d'utilisation" -#: logsrvd/sendlog.c:842 plugins/sudoers/iolog.c:845 +#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 #: plugins/sudoers/iolog.c:914 #, c-format msgid "unexpected I/O event %d" msgstr "événement d'E/S %d inattendu" -#: logsrvd/sendlog.c:888 logsrvd/sendlog.c:905 logsrvd/sendlog.c:939 +#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 #: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 #: plugins/sudoers/iolog_client.c:1273 #, c-format msgid "%s: unexpected state %d" msgstr "%s: état %d inattendu" -#: logsrvd/sendlog.c:911 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 msgid "invalid ServerHello" msgstr "ServerHello invalide" -#: logsrvd/sendlog.c:975 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 #, c-format msgid "error message received from server: %s" msgstr "message d'erreur reçu du serveur : %s" -#: logsrvd/sendlog.c:988 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 #, c-format msgid "abort message received from server: %s" msgstr "message d'interruption reçu du serveur : %s" -#: logsrvd/sendlog.c:1007 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 msgid "unable to unpack ServerMessage" msgstr "impossible de décompresser ServerMessage" -#: logsrvd/sendlog.c:1047 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: valeur type_case %d inattendue" -#: logsrvd/sendlog.c:1076 +#: logsrvd/sendlog.c:1077 msgid "timeout reading from server" msgstr "délai d'attente expiré durant la lecture depuis le serveur" -#: logsrvd/sendlog.c:1154 +#: logsrvd/sendlog.c:1155 msgid "premature EOF" msgstr "fin de fichier prématurée" -#: logsrvd/sendlog.c:1167 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 #, c-format msgid "server message too large: %u" msgstr "message serveur trop grand : %u" -#: logsrvd/sendlog.c:1218 +#: logsrvd/sendlog.c:1219 msgid "timeout writing to server" msgstr "délai d'attente expiré durant l'écriture vers le serveur" -#: logsrvd/sendlog.c:1437 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 msgid "TLS handshake timeout occurred" msgstr "le délai de la négociation TLS a expiré" -#: logsrvd/sendlog.c:1456 logsrvd/sendlog.c:1471 +#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 #: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 msgid "unable to set event" msgstr "impossible de définir l'événement" -#: logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1485 +#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 #, c-format msgid "TLS connection failed: %s" msgstr "la communication TLS a échoué : %s" -#: logsrvd/sendlog.c:1518 +#: logsrvd/sendlog.c:1519 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Impossible d'initialiser le contexte ssl : %s" -#: logsrvd/sendlog.c:1523 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Impossible d'allouer l'objet ssl : %s" -#: logsrvd/sendlog.c:1528 +#: logsrvd/sendlog.c:1529 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Impossible d'attacher le socket à l'objet ssl : %s" -#: logsrvd/sendlog.c:1772 +#: logsrvd/sendlog.c:1773 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:1776 +#: logsrvd/sendlog.c:1777 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:1851 +#: logsrvd/sendlog.c:1852 #, c-format msgid "exited prematurely with state %d" msgstr "terminé prématurément avec l'état %d" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1853 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "temps écoulé envoyé au serveur [%lld, %ld]" -#: logsrvd/sendlog.c:1854 +#: logsrvd/sendlog.c:1855 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "point d'enregistrement reçu du serveur [%lld, %ld]" @@ -1525,7 +1525,7 @@ msgid "File descriptors >= %d will be closed before executing a command" msgstr "Les descripteurs de fichiers >= %d seront fermés avant l'exécution d'une commande" #: plugins/sudoers/def_data.c:278 -msgid "If set, users may override the value of `closefrom' with the -C option" +msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Si elle est définie, les utilisateurs peuvent passer outre la valeur de « closeform » grâce à l'option -C" #: plugins/sudoers/def_data.c:282 @@ -2523,7 +2523,7 @@ 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:534 -msgid "user not allowed to set a preserve the environment" +msgid "user not allowed to preserve the environment" msgstr "l'utilisateur n'est pas autorisé à conserver l'environnement" #: plugins/sudoers/sudoers.c:535 diff --git a/plugins/sudoers/po/hr.mo b/plugins/sudoers/po/hr.mo index 858cfb6db028dd176fa62ae0b680e74d59a68467..63e60b3bd7c308c77133b791ad5df57886f7df2a 100644 GIT binary patch delta 4760 zcmX}v2~?HG8OHGesz;+na6u7~D}o}60-_>rC@Nr$R${bmlD3Fw5D^Qwq$KAWThU^* z*6SX(YE|ME<8{}hYH?}Y;=aYDE{*%H5o>b#f1K~cbMQCseDlrn&dj}V=BeMqr+(`X z`MYC`F*i$%X^HhG8PgQIVhzl~D9p!ZI2W7aPHc$RFcx27i7#y@8xuslqRf~ExC<4Z zb$pEe#5JcFGr`Z8kSWG((tc*ll4-^)^kE`1jQNI+N@p7LKJlPA#su)frn$xh;(mOE zm#`LIm`7)L3)Sv9YJh6<`N1Fz#W1Xm-7yj~u?3dQciW0(RJ5Vu5N4qH)YkXL2*M)N zO6H+n^rA9w0sG-oOu-%tZ2O6ht5Fj;hQas^bW#5vCgI1ZcAHTXx{1n6?SI&Isi=hxK`m$=wq$&> zmx3nn0Ck!hEw?YGqgM10YVYS_GH!65-@_`zO;;Ebjx8_``#AAdEGE8)y)kp8G2L(> zhT&yw#`wm!+@`EK_95p1lUuy@-z?Q_LP??#JDR>HX zT?5y#YK%o~(Rgf++fWmHw2u61#zCLkJx{@A#D74oY!Pav7cm3<*4sUN3tJISz)<`G zd*U%vy9Qs_Ta$%9C!U7C!1MTPjNV`~R=R=wH>P4I6`k-LcEv!ieQ_X05--Ijco19T zZ5)k_Hrk9#M-5PcF<5_-wL1rMXmfW>af(@Vz;C( z>iJ5?`Ocw>B8JV-TwvK>_X0?GUm74PTbv$f{Thls0@rlrF;`s z#|x+l-9T+k_zv4X9hJFU)XGXR0S{tt{1M|ZW2fD!5>)@IP`BkfV8*eIgm( zbf_?<4!W^F&Omj19ou8@Ui-oHHY)xEb?vsH4(B!Oj5YV!j(cMo@pKHqvlxcYu^9&K zxBYcSH+x|6Ct;vI^9mzQhEK`L{j1zeVlsOea2uvBXuswznt| zwWZ@xTXqa}Xsa9~|6M6`JZP^~38oXTMm2njT5;qdyW-!W1}ekmxF7X7a3A$v$YJ}7 z%TUyNg{be6RTzlZQ5pCjYQdpL$bSZf_#<{DC74FM9(71wpkAzd)P5I4VN2p(n2MuN z?KWa49z~sn2dI=sePe$UdJDD1IjEJ7!$@4`rVvfx49240F`MFeR0rAE7)wzrT87$^ z3r<|;xXnOs)WkkS^|#E4k768gB`RZ4C+zj>kGd`HF%)7b%)%D9$MH6{Ca!bRes*`q zMB)-BUXKODw@@qj)hXwcqYm9V)BuMt9PeNf`k%HL$iN1=|85GJz#LR6E9?Vv8S4{& zk1nir#-_Lxs$E|U#$2q26HytMkJ{r3)WA0#Yn`>9pb4l6zK`L$|0NXE(Gt`i?tJ}# zuT3ZRIcHPX6gAOw)XGMq2A+w5_!(-;cA*aGHPp3qowwhLzd=1;jGDk6Y|QxP3I%oe z18O3TFW6KkVKw4>jK?up7t1jMcRF50bzJRRo0(_~ChmpG$Y6}Zzo6dRg38QAbn6uR zUbHLkg=#ny8{^+F0M}s%?!vBk33Zs7T(Y;IC+hJ28I}4in1>gfIPJ1M8+quWehzlR zt(VEaPUkZ!G_&ScY>N9}8{!X9DPD_ew+H*-6HLU^|JW6dLuFto>JaZmJ->&Vc-U3@ zcR>m&BmGfZS#s5FXI@T4S1L}Uu20}KJJar{I2$#=zoI6#2{q6yY>NTc?F7@X3-LI7 zooZD3i>Q7AZrBf`&Zyfp)=fbvUx`ZTaa6~Z7=cayYfVGd=VKDiLap!!Y9)T(**Ff> zUk>UFOvmQ92E*_K2H|s5X59Wa?UzO?)QiQaju$(gL=9N|mc8fQF_btDmC7lYfSXWf z;3jIoz}t4>olzOcMs497r~Uwj>;B)T(1Hhb@7Ryxj+jY25!>Tg)M50$Yfo(~YO69a z5@(=Rx&t-98BE4%_w3hqDylvQ8PLqehPVTRb^lLNP^uqdEC$}UE9`;V%OR*2mtiwJ zfZg#f_QBQIv6`r|0mRdyRaYLK^Jy>Vl(_6_8?w?ZVhmUg6?CTr#1uq zP$~Ktm6_S7E!c^5@EmII?_vN3KC>T8k*LGf30*kQsUM5lqA93MuEZvI=o$G>p>T%^ zO(5pE?JyVhky?UEgW+FbAjL640J$c=v`EbC!+>hfjY!{F#&(Xwiy3{ z{5PO5?1g>NjXjCiU^G6)cG#rSZp}Mbn|LZJa|=-`tH9QH1$9RJU)rrmL?7Z;{5J+q z;w&uV=k-5N%dmHSuljgP!kW)u8&)GMdqhD| z&d|bw{4np4ey!SjIu!+Z>P%|n@tsu9FE*ox=V4y3XV|1$ehG!yp3KP^wUT1v+PmW8 zlG`Rm$0c~nCok~vN%W+ZCDkn$U6`Gd`axDzx6;Vw1eZWy?aUE{Z6+I(~sC zq&&!Tw!E8nT=}l*?TTClqq1{{7v#HQQ(dDNJ$HD{$lT&w*O)>|Lq--96}t+CxUP<0 z^wa$4!#jM#i5hQ=Dkv_@89Xw}HQby2)#~JcqO6LkqsL_NazS3fh}@B*J+&)?JvT1a O_f)H_?M?*|Ho4@~40D^y*DhwW-)!bGbDP-Fm|Wu2IdU1Mrft8D?Mz92l7n`l zPCs&OZk>?3UmT^(Wm!>SNRepe9K?wtCh9z2KHvW6@p*r~-_Pa!{(QcET)iH0@_NXY zPwV;Oj4>Bx8Pfsl&o-ttW?)@>663KDqp%d);67}E7tw>kbBq}kY)le1C4RNUn8vsc z74LODjrE9c;EWJsYW~CcOurh&ygbjCH-n5h`noYkn8-Wdn32Tk3yle5KtZOj!?xHBV{!ZvpY3>sjubk!VwMG(-p2?$g^BnJhGUHHO=B9;=!V+iVAO*# zSO<$S0jJ}GxDjjO2X4F{wed>S#5GIpLY=TL@eu5RZ=e!8j-9dPa+|nsIE{{UOhcW0 zz4~YR(oaV9ufTM}`B%`0 zr=#{NyR#JRN<0yp;aixDWv*1>*3Sb$&FWH5%B@+kKNW7 z(;H`DBz}xhtZ#mxq0)q|H6{yF@lpIcK8#p-XWRAIAqb*pfbpx>PH$Jsw7t^mo)kDH~NnWB!7w z%uGzjGSug4HW@P%8l#SAB6h*ms12UpMEx~U$Yy)y@fbxs9+lY~)J`if6R)5yYnLr{ zV|mz$cqwM!F4TKLTkTgf00$61i-WNo|AgV&Y{l}nQUB(2tfHekmSHcvgBsX9V2@@F zwj|z)?ePfy4b8i@BE_f$-oXU?)wS(*yWnu_OaBJ!hSyMud3-x;Mvr1V9dl5b2T+&g zC)AO2{I`8R*L5d4^nZt)u*OdNei}YPJQW#g4xzsP8SmLd_Mj?u5mV4t=Y2a-4^#z4 zp?0)>A0h7O^Q=Kfvw{X|sd2B9*`!w$F=`{VbRjO{dmeC8(_ zL+EJsp`9QPRm$a64nLVO>97_BOcEhungb{n}ds*0w zcrhmF`+t{4XFASfPi(%|Is#i0FF`H%0k%W4&z3X+HEtrN;Yw8IU!#Mu`>hY7#^s_a zwE%TlPf6A{PB}llI003O=TH+L!Y&y6k^O@y4HZ9y`s`Ld1DYF74%m)V~*v$V2vw$Ku1pucKZ(jmkLmQ=4%=)Ixv7Hn<5B z@dRpIjnC{~Tn3`X{TaLBKd})WLRFv&m2l0^sedMoCZF3(#$rF>g{Vt%7B%oTMqt=s zyAcoeA$|~rI4Oe9XOv>O|PnyjYY%TbqZ0cwE&Mq?#v+)eC+NnhNnjL%GzfK1n(%wnMnX>8Qn$j|#KSNdM`8nf6=QI<>nEs*f5c{3|7$ys2UU?wROW@Kaiyrr zl%r3#_#zEu?m1&$9Ei<{pT#g-fGuzh_QH=)6}j&l`xPXhF7Gp_(wE}XxX+Cf&)T~& z6dn4fVRu}9mip^!J4WNZQls84N6mW+yJGZt`*n@-(a_nde zrJRHva2e_j97Zj87nMNtC0l|1s0vL(^>4;#);A|;#L{saGcoc9`}>`TU5Lw2m+>Yt zz%;yUkE$zbL(icyU4>d;H>Tl_*c#)n*#0ck_!qDVuEGd?|GQ{tM<>yPcd-?=`=33_ z0jPl`7=@ehAv}gz*yu<5yFLyTuSI=^H&FA`yJ{<&gi3S-s`M{mZ`L;}Y3OXeLuFj^ znmwbQs8T+TxV}0C%ad-^F@GdsM&>ME+QRoo&K=qG89nmCICFfyF4BVjp z=`@P_u38qYqJR2kH zjv1HdEzFrP$(tV=_N(4TLQ)cw{plsCfj3GPwP>{{rm$-IVrOEGQ=C&i z+nJPIkV|`f&V<~8Tmt`, 2016, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudoers-1.9.1b1\n" +"Project-Id-Version: sudoers-1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-05 10:24-0600\n" -"PO-Revision-Date: 2020-06-09 11:31-0700\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-08-07 10:54+0200\n" "Last-Translator: Božidar Putanec \n" "Language-Team: Croatian \n" "Language: hr\n" @@ -16,8 +16,9 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4\n" "X-Poedit-Basepath: ../packages/sudo-1.8.23b2\n" +"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" #: confstr.sh:1 @@ -175,8 +176,8 @@ msgstr "nevaljana vrijednost za tajmaut" #: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 #: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 #: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1301 -#: logsrvd/sendlog.c:1308 logsrvd/sendlog.c:1726 plugins/sudoers/audit.c:108 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 +#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 #: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 #: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 @@ -555,8 +556,8 @@ msgid "Unable to attach user data to the ssl object: %s" msgstr "Nije moguće prikvačiti podatke korisnika na SSL objekt: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1105 logsrvd/sendlog.c:1461 logsrvd/sendlog.c:1476 -#: logsrvd/sendlog.c:1534 plugins/sudoers/iolog.c:921 +#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 +#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 #: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 #: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 #: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 @@ -605,16 +606,16 @@ msgstr "" " -R, --random-drop postotak šanse da izgubi vezu (drop connection)\n" " -V, --version informira o inačici ovog programa i iziđe\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1699 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 msgid "Protobuf-C version 1.3 or higher required" -msgstr "zahtijeva se Protobuf-C inačica 1.3 ili novija" +msgstr "potrebna je Protobuf-C inačica 1.3 ili novija" #: logsrvd/logsrvd.c:1916 #, c-format msgid "invalid random drop value: %s" msgstr "nevaljana ‘random drop’ vrijednost: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1749 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 #: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 #: plugins/sudoers/visudo.c:178 #, c-format @@ -729,112 +730,112 @@ msgstr "nije moguće učitati %s/%s: %s" msgid "client message too large: %zu" msgstr "poruka klijenta je preduga: %zu" -#: logsrvd/sendlog.c:790 +#: logsrvd/sendlog.c:791 #, c-format msgid "%s: write buffer already in use" msgstr "%s: međuspremnik za pisanje je zauzet" -#: logsrvd/sendlog.c:842 plugins/sudoers/iolog.c:845 +#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 #: plugins/sudoers/iolog.c:914 #, c-format msgid "unexpected I/O event %d" msgstr "neočekivani U/I događaj %d" -#: logsrvd/sendlog.c:888 logsrvd/sendlog.c:905 logsrvd/sendlog.c:939 +#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 #: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 #: plugins/sudoers/iolog_client.c:1273 #, c-format msgid "%s: unexpected state %d" msgstr "%s: neočekivano stanje %d" -#: logsrvd/sendlog.c:911 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 msgid "invalid ServerHello" msgstr "nevaljani ServerHello" -#: logsrvd/sendlog.c:975 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 #, c-format msgid "error message received from server: %s" msgstr "primljena je poruka o greškama od servera: %s" -#: logsrvd/sendlog.c:988 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 #, c-format msgid "abort message received from server: %s" msgstr "primljena je poruka za prekid (abort) od servera: %s" -#: logsrvd/sendlog.c:1007 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 msgid "unable to unpack ServerMessage" msgstr "nije moguće raspakirati ServerMessage" -#: logsrvd/sendlog.c:1047 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: neočekivana ‘type_case’ vrijednost za %d" -#: logsrvd/sendlog.c:1076 +#: logsrvd/sendlog.c:1077 msgid "timeout reading from server" msgstr "isteklo je vrijeme za čitanje iz servera" -#: logsrvd/sendlog.c:1154 +#: logsrvd/sendlog.c:1155 msgid "premature EOF" msgstr "preuranjeni EOF (kraj datoteke)" -#: logsrvd/sendlog.c:1167 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 #, c-format msgid "server message too large: %u" msgstr "poruka servera je preduga: %u" -#: logsrvd/sendlog.c:1218 +#: logsrvd/sendlog.c:1219 msgid "timeout writing to server" msgstr "isteklo je vrijeme za pisanje na server" -#: logsrvd/sendlog.c:1437 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 msgid "TLS handshake timeout occurred" msgstr "vrijeme za TLS rukovanje je isteklo" -#: logsrvd/sendlog.c:1456 logsrvd/sendlog.c:1471 +#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 #: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 msgid "unable to set event" msgstr "nije moguće uspostaviti događaj" -#: logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1485 +#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 #, c-format msgid "TLS connection failed: %s" msgstr "TLS spajanje nije uspjelo: %s" -#: logsrvd/sendlog.c:1518 +#: logsrvd/sendlog.c:1519 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Nije moguće inicijalizirati SSL kontekst: %s" -#: logsrvd/sendlog.c:1523 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Nije uspjelo dodijeliti memoriju za SSL objekt: %s" -#: logsrvd/sendlog.c:1528 +#: logsrvd/sendlog.c:1529 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Nije uspjelo prikvačiti utičnicu na SSL objekt: %s" -#: logsrvd/sendlog.c:1772 +#: logsrvd/sendlog.c:1773 msgid "both restart point and iolog ID must be specified" msgstr "i točka za ponovno pokretanje i iolog ID moraju biti specificirani" -#: logsrvd/sendlog.c:1776 +#: logsrvd/sendlog.c:1777 msgid "a restart point may not be set when no I/O is sent" msgstr "ako se ne pošalje U/I (I/O), ponovno uspostavljanje možda neće uspjeti" -#: logsrvd/sendlog.c:1851 +#: logsrvd/sendlog.c:1852 #, c-format msgid "exited prematurely with state %d" msgstr "preuranjeni završetak (izlaz) sa stanjem %d" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1853 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "proteklo vrijeme poslano je na server [%lld, %ld]" -#: logsrvd/sendlog.c:1854 +#: logsrvd/sendlog.c:1855 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "potvrđena točka primljena je od servera [%lld, %ld]" @@ -842,7 +843,7 @@ msgstr "potvrđena točka primljena je od servera [%lld, %ld]" #: plugins/sudoers/alias.c:144 #, c-format msgid "Alias \"%s\" already defined" -msgstr "Alias ‘%s’ je već ranije definiran." +msgstr "Alias „%s“ je već ranije definiran" #: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 msgid "unable to fork" @@ -1525,8 +1526,8 @@ msgid "File descriptors >= %d will be closed before executing a command" msgstr "Deskriptori datoteka >= %d biti će zatvoreni prije izvršavanja naredbe." #: plugins/sudoers/def_data.c:278 -msgid "If set, users may override the value of `closefrom' with the -C option" -msgstr "Ako je postavljena, korisnici mogu zamijeniti vrijednost „closeform“ s opcijom -C." +msgid "If set, users may override the value of \"closefrom\" with the -C option" +msgstr "Ako je postavljena, korisnici mogu s opcijom -C promijeniti vrijednost od „closefrom“." #: plugins/sudoers/def_data.c:282 msgid "Allow users to set arbitrary environment variables" @@ -2530,8 +2531,8 @@ msgid "sorry, you are not allowed set a command timeout" msgstr "nažalost, vama nije dopušteno postavljanje tajmaut za naredbu" #: plugins/sudoers/sudoers.c:534 -msgid "user not allowed to set a preserve the environment" -msgstr "korisniku nije dopušteno zadržati okolinu" +msgid "user not allowed to preserve the environment" +msgstr "korisniku nije dopušteno sačuvati okolinu" #: plugins/sudoers/sudoers.c:535 msgid "sorry, you are not allowed to preserve the environment" diff --git a/plugins/sudoers/po/it.mo b/plugins/sudoers/po/it.mo index e10400bcfd7c02d5a39d24445dbd37bc6cda8fe6..8a93711f957b0cae6ab0d6b28d964ed63930c143 100644 GIT binary patch delta 4612 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 Ntq)@>LLMat{2zY$VWa>6 delta 4629 zcmXZed05p|9>?*+)fyEuP*%a~671|bjA%8tu*%~C)dagY4YU1iE}U<*J4}TjnCm3%);0eHj^V!<1I$re;AeNtEh>e{>Wx9+e-RA3VY)pbS}2X zU8ovgaN?#bZ3dz-hW0voXd{)(?+S%=FeS87^*HJ$#!NIr<2dTfp)_N#vr%Ul!{1&yd_Umm;UqaRREmQ_J zp$_$3C+_)oTcSUsSEutc8XB+$hv7ri3X4BCrVCC-P4Kzn6^tbg-(V-oLESeI^Kmt* zMAvWt`c>MJ3`AvWyb~{|r2bKKY^EazPoWM`*gyCPVFqfV8CZyGQHQD#6EO0h_R#jn z7m3GU4pyVi#A8$jQa5t0und*iO{jkVFUWrz8U495)O zX*dt7unYF7viDEGWa2&88}DHerfjwg_zUX!eb^ZvdugQ7h~HvN4;+Twa1nOJL#Px! zLOsxTtDW!-)Z4NOwUaZbg@%GK;Z4_T6qXH4obnSE8Qx9;TrZG~Ho4;xLK0 z6kFhY%)@0){{{3A`|q>^CZZPl9BLdd_QW-)ja@`7Jm5>a@GR5@$08;4nw2#A(NT*U zD6rZdqI^`%-os9K1P9>*)EUUzWotbawZjdlL)(an7{1$$3Avrw;R6^3H)R~nc4 zC(%&NUcyYAje1Y_pmx-x#x5ilQ;1)~99)h{;W_M%L3`{%24W2HLhOLsQD@{VDznY^ z+P5hK`*`UXPeZBRh&uIOqE5HpzwD1tA}VEhsOwWu1MYIH#{%Mrf7{xR!d&9D=)vo# z3^veboKcUK*WgTy|`E%pQ_wP^B4-kvJE%(@!xP z4?FQ))bk<7ZGW!g800fJL48SYIoAWfwhQ;B)6jrJusu$7T#kBhr{f(|hN8c* zJ1E5d#9q|E2T+;0joMkrw>HI@s0U*P7SBx5P zJSrm#Q48IS9z21;_yG01|4BP>JgQ{*7>}i>GgFQluM*vQ|G#!R?m9OFeP?gTKvrmm zp?3Hu)IvW(?dT}#P}QUEYkJCFcVh-|AtvD*R4KNgCccQ;fa^3d^P4Cds&PNmg^`$w zZ(|GGf?cr&L$CpLe~UBLIMmMbF%(B&7*0i<4Ie7yUtu`bqfY;mXUTsujSe)P!Xi|P ze~%h)76#!;RO&Wk8lFPcy5%|h2S^%ffp4MCQWcKG)7TcX&fD)oF)DNOP?_0qp8RLh zI7^3C7<|EgQgbn#cpA3GO{j_YVF~`~#6vII0q0{R{gtQ<)M5{;clu*5*}tyyP#GSK zD#fHrUi(@tp+l#87wWLwKn>XXvW=5b*N0*TzJuC9HEIL5Pz#Rv-hRM-hq`|i>i)y1 z4K}%A7nXuuh+p^8PzjcyCO(Aiu>n2U=07&|X^zFH!#EYY;cC=CCsBv2=?`|CB-9xw zM%_OFb$toyjMQKRdQa2HrqPI6K-yJ1a0%+LEW~!W0kz{=bmK3mLmGO`mZku;)0wD= zwxV`?33UcqUbo}NVH9x@cF_Aj*}1S7pXEXg=IenQHdRHamHriDaUDiu9csZ1s2#Pt zY0pk~RPD#37G8nM@P5?9KVvY4-%^IWT%@6a2cT+JhAP2wC*Fx2iLavWYyP7hFa@>a zQq0Arn1km~uW4kxT|hTXATB~>ZaQiMD=?G!O$`lA_z+2niTKG5&zx}8p$5K*O5tPd zfJddhjzyrI$o|s5nh@EjdreOst0~as{AEF;V;=ecXgaZDRTlhA|M-6i=GF7vq z*0@|({Co*9i~T~Y_QV``(iP_Nl_!?F_?(6$RYv)jjvQAuY1HV6Wq*vTsw?c0;ftTs zHrO-1Y_jLoapTISjQWFTa+zn+C_>-E+3u>mIlu99rH=3onp@B!J*jJ&C#6Sb_w=e& gbA!hDZZvlE)i%0)n;S!11^K>|#`voA2Y!D41DjZ8pa1{> diff --git a/plugins/sudoers/po/it.po b/plugins/sudoers/po/it.po index f2005896e6..86de3f09ac 100644 --- a/plugins/sudoers/po/it.po +++ b/plugins/sudoers/po/it.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.9.1b1\n" +"Project-Id-Version: sudoers-1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-05 10:24-0600\n" -"PO-Revision-Date: 2020-06-24 09:56+0200\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-07-29 13:21+0200\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" @@ -174,8 +174,8 @@ msgstr "valore timeout non valido" #: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 #: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 #: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1301 -#: logsrvd/sendlog.c:1308 logsrvd/sendlog.c:1726 plugins/sudoers/audit.c:108 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 +#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 #: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 #: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 @@ -554,8 +554,8 @@ msgid "Unable to attach user data to the ssl object: %s" msgstr "Impossibile allegare dati utenti all'oggetto ssl: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1105 logsrvd/sendlog.c:1461 logsrvd/sendlog.c:1476 -#: logsrvd/sendlog.c:1534 plugins/sudoers/iolog.c:921 +#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 +#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 #: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 #: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 #: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 @@ -604,7 +604,7 @@ msgstr "" " -R, --random-drop Percentuale di connessioni chiuse\n" " -V, --version Visualizza la versione ed esce\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1699 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 msgid "Protobuf-C version 1.3 or higher required" msgstr "È richiesto Protobuf-C 1.3 o successivo" @@ -613,7 +613,7 @@ msgstr "È richiesto Protobuf-C 1.3 o successivo" msgid "invalid random drop value: %s" msgstr "valore drop casuale non valido: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1749 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 #: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 #: plugins/sudoers/visudo.c:178 #, c-format @@ -729,112 +729,112 @@ msgstr "impossibile leggere %s/%s: %s" msgid "client message too large: %zu" msgstr "messaggio client troppo grande: %zu" -#: logsrvd/sendlog.c:790 +#: logsrvd/sendlog.c:791 #, c-format msgid "%s: write buffer already in use" msgstr "%s: buffer di scrittura già in uso" -#: logsrvd/sendlog.c:842 plugins/sudoers/iolog.c:845 +#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 #: plugins/sudoers/iolog.c:914 #, c-format msgid "unexpected I/O event %d" msgstr "evento I/O %d non atteso" -#: logsrvd/sendlog.c:888 logsrvd/sendlog.c:905 logsrvd/sendlog.c:939 +#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 #: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 #: plugins/sudoers/iolog_client.c:1273 #, c-format msgid "%s: unexpected state %d" msgstr "%s: stato %d non atteso" -#: logsrvd/sendlog.c:911 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 msgid "invalid ServerHello" msgstr "ServerHello non valido" -#: logsrvd/sendlog.c:975 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 #, c-format msgid "error message received from server: %s" msgstr "messaggio di errore ricevuto dal server: %s" -#: logsrvd/sendlog.c:988 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 #, c-format msgid "abort message received from server: %s" msgstr "messaggio di abort ricevuto dal server: %s" -#: logsrvd/sendlog.c:1007 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 msgid "unable to unpack ServerMessage" msgstr "impossibile aprire ServerMessage" -#: logsrvd/sendlog.c:1047 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: valore type_case %d non atteso" -#: logsrvd/sendlog.c:1076 +#: logsrvd/sendlog.c:1077 msgid "timeout reading from server" msgstr "timeout nel leggere dal server" -#: logsrvd/sendlog.c:1154 +#: logsrvd/sendlog.c:1155 msgid "premature EOF" msgstr "EOF prematuro" -#: logsrvd/sendlog.c:1167 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 #, c-format msgid "server message too large: %u" msgstr "messaggio server troppo grande: %u" -#: logsrvd/sendlog.c:1218 +#: logsrvd/sendlog.c:1219 msgid "timeout writing to server" msgstr "timeout nello scrivere sul server" -#: logsrvd/sendlog.c:1437 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 msgid "TLS handshake timeout occurred" msgstr "timeout handshake TLS" -#: logsrvd/sendlog.c:1456 logsrvd/sendlog.c:1471 +#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 #: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 msgid "unable to set event" msgstr "impossibile impostare evento" -#: logsrvd/sendlog.c:1481 logsrvd/sendlog.c:1485 +#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 #, c-format msgid "TLS connection failed: %s" msgstr "Connessione TLS non riuscita: %s" -#: logsrvd/sendlog.c:1518 +#: logsrvd/sendlog.c:1519 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Impossibile inizializzare il conteso ssl: %s" -#: logsrvd/sendlog.c:1523 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Impossibile allocare l'oggetto ssl: %s" -#: logsrvd/sendlog.c:1528 +#: logsrvd/sendlog.c:1529 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Impossibile collegare il socket all'oggetto ssl: %s" -#: logsrvd/sendlog.c:1772 +#: logsrvd/sendlog.c:1773 msgid "both restart point and iolog ID must be specified" msgstr "devono essere specificati sia il punto di inizio che l'ID di iolog" -#: logsrvd/sendlog.c:1776 +#: logsrvd/sendlog.c:1777 msgid "a restart point may not be set when no I/O is sent" msgstr "un punto di partenza non può essere impostato quando non è inviato alcun I/O" -#: logsrvd/sendlog.c:1851 +#: logsrvd/sendlog.c:1852 #, c-format msgid "exited prematurely with state %d" msgstr "uscito inaspettatamente con stato %d" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1853 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "tempo trascorso inviato al server [%lld, %ld]" -#: logsrvd/sendlog.c:1854 +#: logsrvd/sendlog.c:1855 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "punto di commit ricevuto dal server [%lld, %ld]" @@ -1526,7 +1526,7 @@ msgid "File descriptors >= %d will be closed before executing a command" msgstr "I descrittori di file >= %d verranno chiusi prima dell'esecuzione di un comando" #: plugins/sudoers/def_data.c:278 -msgid "If set, users may override the value of `closefrom' with the -C option" +msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Se impostata, gli utenti possono sovrascrivere il valore di \"closefrom\" con l'opzione -C" #: plugins/sudoers/def_data.c:282 @@ -2524,7 +2524,7 @@ msgid "sorry, you are not allowed set a command timeout" msgstr "non è consentito impostare un timeout per i comandi" #: plugins/sudoers/sudoers.c:534 -msgid "user not allowed to set a preserve the environment" +msgid "user not allowed to preserve the environment" msgstr "l'utente non è autorizzato a preservare l'ambiente" #: plugins/sudoers/sudoers.c:535 diff --git a/plugins/sudoers/po/ja.mo b/plugins/sudoers/po/ja.mo index f859c155c30a500c156cdb9d36d03c04ad6501bd..202d0aade7d66be106c90ad0a1f6a5bf69a83831 100644 GIT binary patch delta 18167 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 VWL3IbD>QPz|5?so>24Rt{{z4(M*{!= delta 11651 zcmajlcYIFg|HtujM{0|m*tvzoh!IJQ7!@N{?NzH{#HNT%xy5MB76&m(wTe_x?M*{% zs#aU8rAF};vszSjpsnBQo$K;@d>@bBAHVbXemt+wb*^*Hwa$Ite7k2?;Dx`k_^uQP zT;gy%^*Bxm{5h}VtP60Q-Jz;=oVFDmCm*)6_CcCBqp$!@xA{_x33QzGn8>{@R&ktp z+^2Swx&BDBY5xQM!*%yC$Z>qm-5AHoL&aa1AG5}q3yNTN@(QSqMWY_v1|u;M)yKJ5 z20z9McoO6A2^PVa>W&kEEio8JVIiD@MR>mR9)%`U?7(<@j=Eud4Pz4Of>~G$S7B+~ zfgyMibK@gqM9y<8j6pRWCkK{AwXcF2Xj{yRJu!&qJN+nVM5D1hu0h@47}mk7SP6^Q zavbjMG(%?D@nJY_L}uGLh3e>Y)XWrO8gxDu)v<2YLFgqPk3KbAPC*aciONr67(PH| z(J4^djG!r&B_D*9@om)7>_&Cy0%{E5>2;muEYGR=jW-=1zGEI z5k{aFUqwA|JZcJ8VL9Aq^V_J7=cs3vA{5nun%2Jf68Sq=43{96I9pLm{7XHb<0MhY z|FYvWz_G}nogG*bA7OFKSKr*A5~^KOY=pD1A%252b@IhK4n?O8vTDvd$VPXLpdR=X zHIP!=L^B)jqo51MAj{@#M@{{G48i=|T{Bbxn`0L&fghl5xDWM!4Aj&H(<^m29(BG4 zR>P^Nk$;8-@BxORFQBnmyD$u+q7`~^1Xjg`sF^r`EU$AF%VMzv9)k5z?WUrpek*FK zFQaDUPt>NZ!7HW?4nqwz73q-AIYoj0IeD7$u3|?lh_f&p-$gy}AZi9~qh_R9Go}%H zVRiK3NZgKkP&pc_!|hPl&%<)~DYnN8SWoYNr50v44@Nauh81u>R>YsMJQjY%oPQbP z$@`<~H((h&WzRoGElG)%b}!(3@^?^gP03bfhF`%FJl`2gLGSl$)Y^THnu#;08OYk& zadKiM)B|f`=Eza+yASo6Eyl{Y8P)C*YBLA6F*Eius(zStDf%?heH8SdyU21mdE1(` z?1a22P6}!b_o3SVfvke#ZD%?%5TnT7Lhbq;s6FrywKTbyZ#}pHYG8wr{q3x7&-~}7 zaE%I0{Ug*&6zgCbHnmPd?fOqpH~bpaKA@w?E26IJg%LO(wf5UkGx`9v+jDg?GZBdz zShr5hzdEpt3f>53BkIQYQEx+VXLG|ij3MuZUR;c&aXV_n=dnKKebtPt4eI)ZsHNIw zJ&W2ak5JDI_H}U_u64?zi^}!d6zpo2pgpQXQ&3a99yQYQHV^E^Hye3%)MlNARd6$E zsV<|YK5KXLmQ_XFZ!A_r-)dVpg_@#(9_D=y!+7#|)aFaUnm7;R@JrOD`xo{35b~P& zdaaIHf|jTm8-+!21Lnm87>uWp=lPsF6m+BPJp0grhREFMqVA&zOBs%qdGVfi|hU0lv!|`qgav?H!u_fdYQEgLv^G9>H$4% zKE}ET)!|Q2H~s;&_Rmpk9oC!g18joo@KRL$E-d7uaFs$~e2m30XCJec5vUurL!BRu zTGKhGk!`c}Cs8wW6HDO})P0KdH6xF;w#EX~55z(^34I#T0tz9x0n6Y%)QvJwGZK(w zmdJ~mnK;ypbVYS+tj*`4uKx(Nq~D-Ab_><+sXd>spV`E*{g{7EU2iJ%pgE|KrJ-(c z2=$=Ls2)E-tz}SuGc)BeEBPy^`?N=ma1yHB+o*x1p*pZ1_1c|7wY$@w`PWFFQK69) z8(?}|8}-1}7>j)|4=zL9cs;7a`!NWwpgQ^s>NU+d(0pRn!RF-27=gP{Gn9cnFq?0X z*;Gkbj*3aBDO-!>F&*{3U$c3h!6vVP(bV_F+_)6=KCi`2_&rv@$RTDgbVALixMQ5mKSQ<65#;B3^w)K-xduKIjWZO|ob{W<2-?2278fH2ck7}Qc zYCjw4kk8plK_fqk;rI~M!{FCVN8(T&=!Tl|an>cMCG*?-ELJ4{)z+67ZU$7>+8fn@ zH_?l$FhuYFUJ6?4bEpyAL#<)p2-C1S>c*Wh2vblqwg9zR*P?E`7d4RYQ3Lr0)$uYT z&CJE4&UZr%WEy6E|F5CorD6|O!YkMab0wSafHtVzI|+5+Ld=h!px*NXsHy(Z`Wy?8 zmmX!>#i9n-1l7K~bsYM%DO?Jg%8%`d6Q~E>MvdU5(Pk>cFq*t6#^OZG>a~3nb^SUl zj0aJ#*AJ)%{EeE4JmbuLyw+$``^Mu~e@#g@dtxkxkk3MmWDN%6PSglbS?^(9@~q>{ zgMv}_DQ9hjdO#wE;26{l&qobxGiruT_$cVYUr-~-F~R(tj=(7L&ZzTmVL@Dr8euwW zuUxWbpJ?9q>ZlthVlGTU&Fp;Cbvsb6-(@UkH!+{4RD+msGbg)Y!%n= z{dv@qWSPRxsz64G`#kKC>HOs+i{l)gVa}JDWkw!_ahz|4T8e42&CD!8?&EVlrl7Uj zgW2(0^x}Ec)c=KXn0Jn`ImVDr$9POf`sDnD^>OT6^CR|i)QtXZ^P=<2KogO{JM*!( z-v8|L%}3^7?9GY&sP{DNZSyyk7MMUj9kmq4tT#~|^t@w6R0MO7S3ym2E!6o$%!*?% z2q&XDIuE<>eCKNlk{+xyAi5m z6Hp^h!&p3tx-M|3`BB>#hmuc6-RI#_=D!1l5~*gFj=)gzm8cHw!Wg`VQ5d?+Oleyz zNj?A@;7p9iBlr?#Uv6d~2z6a8RL2J4T3mqaTPJn}^WTz!e}&oY&Prnh>cWtA1?m zHwcr-KSC`{iA`o81F@mr|2-5mrOsw^<94WqYpg$`)~wbRGc(&zBMbP%Ol34`M!Mr5 zT#C2Q*=m;NHdZ1H|I}>S_NcdK1eWFb&SnZ4=^4~oR{YF-gbqaAcp^sPcGO<^4~C=1 zZ`QONRwwU|8u`0e8P8b*x0(8AtV#V))PO%kUoQ&3Q%J2vcQuS3ni zMQo>b%zH0PL*+Skm=1Nv=Hw};`V*)QmE39ez^fQdz6Z4#AMRxSTT-a{h1oQ3U>EW; zSOz0^nYC+!y5T|WkA-%d8JmO&GXJ`9 z`F-XW&P1$F{vPVaS5Z?LzMu8S4ydV{haK=o?1t42n73daYKnJRe?u)@l zF*7g>>yod3fl&R83}<3cQnzhF7cb=>>}i@|vE_Ba7u zEP{DXm~YDn%uU`9!?6w4z%f{d=R2DyXsYj^dRXOaGvXmwntUn7;0}z#pHc6B#5d+` z7=yau60Cw>V`Y41^9tXZU(;PMg8Fw+d+QL^)cb#%f;td-(!8hrup;>)EQ@UhO7rUOZ+8Jvr8Jm2wC(ChFE>IRk0nx9VN zu`2lj48{Gn{u-7b{|gIa;qS~+L}Da)3#^7?F$~jCQ-1ZYQ4xCJ!>=TJ9#hPpwib7n^BVRiCkEQ)EUwLgg3Lzhq;`2#fr<|I0z81G;+e2yX5?1K3Y>4nPYSUAM{ZuLLtXhv#G*Ro3T4K#P?ATzJXn_$Tjm9k7U&OX*duMqh_Saf6N2N zVdfHIC+g3kHe;phW&p2YU2@+W6dF?4iH-4ZRKo@t#$*g5UyJI1T0qd_q9SRk3 zAZlt|Y=~cCN6hxneBbxL;^cc!9lU^*@gFRWk-wVn|5jLqJQdaPuTa`| z^@#azO~sp3=tke8I+W!%^BP8>UaJMDk=(b2JvJTgjGBQI)Puf2b>xE0pV_?F@20*k zYM?z)Gco&j=3i6u5f!?@8B|Yy#R$yvhxuTMMYZdRy6`RZ;s)zcEJuFVn*UGp8pokJ z=))Sg1EcVP)$9AqZYqrB#7vCCFHke`7&Sv-Pt1&rMCGTkFM6Mvshol8_!&&V`&b)e zpPAnY!?8a3an$uW|7ID`#|&kDVnOEd1%KwZbggRcP{&#!9%j7pGw;?)E zen$;BDw6XWJ7E10p`LN$8PcuNZx-@VJ${I2mk)VpFt#x zh?gk;g!zc;I&F`-xRAQ#gkGNlm`w0-;AFuNoQBhJ78b=qSQv{CFOIU*=~za*O*HW^ z|JNw!7(p~7z9RAx0|`D^Gyl!zIYx0Y-#HF%q%(|IOa30t#IK2Fl;;q7?Q~=%<`SQC zE+5`S9bv>gq8Ir`K3n-3HYE1gd>ak6Q9eUtr>tWsahrU3X2w3T?!hNSBjP&e^+Dyw z?x>fW=tJ{hkNIu;QNwEq1lOr${uu~ug|j@b)T?n;Cb)rsD={v741 zM1S%cSjE=ISu4mjUY$U}@HVuT;eApRO{b^!i!^oy+HZK7nS%1 zF^O}NF$=MUav{`F=fAE|zL{u2%py*5E(v?!Ak1sqev1Xjy;}d0w(=^#W9%jOGHQFAeF7L7p4)lDd$EV-3-nI>U5kU;wg{C!kC@d zqEDK}6f&qBi8_8DRui+8*dv^C`-rW!jjE%GYD6q`H&nq<(cpYa-DzSPc|BVva#8mx zp(BuJ!1EpL0UfUyoV(VGc#(65uqE-OZMVdpze2vo)~V`E;;PL{**1UTWLwu458LuB zyifQl+X}V+oA`jd3(;2<98)Q`vuz$*Yf=9hkxdOa${I5NyUq_OmnOcqZU3<6ym*Ib zZ1d9?>EX+8p{;0-i;21RLREiCyycFm($DXW4$kg>z0QcN?mrEx`x6=-^SI3#uX7tG zbakgSh;aQ0`Q5b%wcNc8LIc8++`k({h=j&o_lJZicUj|#O7k|2@HcE4l*K=z#jq@H z-PViU)2*ZY0d3yO=0DVVVOIab*Cq$}U+?vDfd8vL`2*Z?{W|*B^jqO^hYqMu%d+mN z0YUE70p3LezjcEKwQ&~=+T~6j{Gr=sNTUDTkf9!b-(iOX+=LNZ-GU>Z`XiIi1(q3_ z)O$o?-{G(KPwbtPlsIB|^5{{uy}~{`Jav5;&Bg+-|K&O!m>cO%akGh zYg2}K+!a$>`vX&sc>Fh}<>&m2t?r_kWBuMY?*zDgXD@Pl&8g#h=5EOno!r;`bZ+yU zH7i%E<&BE29TVdZoR{p$tRFxBv47>FKXUlPR(Hwiu21XX5C7=nfYb+tJQdygo36U= zZ(ix1-q6mC+tS)C`AJoe*FCi*#NCrtEK7KjH}!rYPo$f&rMA0zQ@m#H%BK4M`CC^7 zrmhI^v|)%`tE$8-tbZ0jFc@I)6z1geV8$QW5%=(GN$eHhJ}v` zqkeu6J@3on54%((i+lRY4EOTE-2T+7!voxU*IRJMw*TMV z+{f1|xur7-<;X}$%ScJhNLlZX&1mLv_uS~`A9=Hk$A9HkBab`a&K`f4yTbzf|J)lH z=wJFU*yI2H*RCFa$KU#8FYtet#(kbvICn4$T9t_GxE2=Z*E*5k>Yem=ja khbOgLLC<&T?F)JK1g5Vj>gnJ~T~OT9Cw*B7Pq^oQ0CFQqp#T5? diff --git a/plugins/sudoers/po/ja.po b/plugins/sudoers/po/ja.po index d85b97f1ec..db56ce8e3f 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. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-18 02:33+0900\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 21:02+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\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=1; plural=0;\n" -"X-Poedit-Basepath: sudo-1.9.2rc1\n" +"X-Poedit-Basepath: sudo-1.9.3b1\n" "X-Generator: Poedit 2.2.1\n" "X-Poedit-SearchPath-0: .\n" @@ -44,70 +44,73 @@ msgstr "*** %h のセキュリティ情報 ***" msgid "Sorry, try again." msgstr "残念、また試してください。" -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -117,323 +120,340 @@ msgstr "残念、また試してください。" #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "メモリ割り当てを行えませんでした" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "認証方式にはパスが必要です" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "\"CWD\" の値は '/', '~', または '*' で開始しなければいけません" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "\"CHROOT\" の値は '/', '~', または '*' で開始しなければいけません" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "notbefore の値が無効です" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "notafter の値が無効です" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "制限時間の値が大き過ぎます" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "時間制限値が無効です" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s が存在しますがディレクトリではありません (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "ディレクトリ %s を作成できません" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "%s のアクセス権限のモードを 0%o に変更できません" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "JSON_STRING を予期していたら、 %d でした" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "名前に二重引用符がありません" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "JSON_OBJECT を予期していたら、 %d でした" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "内部エラー、%s がオーバーフローしました" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "余分な閉じ中括弧があります" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "予期せぬところに配列" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "余分な閉じ角括弧があります" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "予期せぬところに文字列" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "名前の後にコロンがありません" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "予期せぬところに真偽値" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "予期せぬところに数値" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u \"%s\" を構文解析できません" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: 無効なログファイルのパス" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: タイムスタンプのフィールドがありません" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: タイムスタンプ %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: ユーザー名フィールドがありません" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: runasユーザー名フィールドがありません" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: runasグループ名フィールドがありません" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "タイミングファイルの読み込みエラー: %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "無効なタイミングファイルの行です: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (コマンド継続中) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "ログは完了しているので、再開できません" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "ログを再開できません" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "%s/%s を開けません" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "I/O ログファイル %s/%s がありません。" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: 前方検索できません %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "復元ポイントが見つかりません [%lld, %ld] in %s/%s" @@ -501,83 +521,82 @@ msgid "client message too large" msgstr "クライアントメッセージが大き過ぎます" #: logsrvd/logsrvd.c:1125 logsrvd/logsrvd.c:1133 -#, fuzzy, c-format +#, c-format msgid "unable to set TLS 1.2 ciphersuite to %s: %s" -msgstr "%s を実行できません: %s" +msgstr "TLS 1.2 暗号化スイートを %s に設定できません: %s" #: logsrvd/logsrvd.c:1153 logsrvd/logsrvd.c:1161 -#, fuzzy, c-format +#, c-format msgid "unable to set TLS 1.3 ciphersuite to %s: %s" -msgstr "%s を実行できません: %s" +msgstr "TLS 1.3 暗号化スイートを %s に設定できません: %s" #: logsrvd/logsrvd.c:1197 -#, fuzzy, c-format +#, c-format msgid "unable to get TLS server method: %s" -msgstr "ホスト %s の名前解決ができません" +msgstr "TLS サーバーメソッドを取得できません: %s" #: logsrvd/logsrvd.c:1202 #, c-format msgid "unable to create TLS context: %s" msgstr "TLS コンテキストを作成できません: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "証明書 %s をロードできません" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 -#, fuzzy, c-format +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 +#, c-format msgid "unable to load certificate authority bundle %s" -msgstr "新しいセキュリティコンテキスト内で使用する SELinux の役割: %s" +msgstr "認証局の証明書バンドル %s をロードできません" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 -#, fuzzy, c-format +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 +#, c-format msgid "unable to load private key %s" -msgstr "%s をロードできません: %su" +msgstr "プライベート鍵を読み込めません: %s" #: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 #, c-format msgid "unable to set diffie-hellman parameters: %s" -msgstr "" +msgstr "ディフィー・ヘルマン パラメーターを設定できません: %s" #: logsrvd/logsrvd.c:1306 #, c-format msgid "unable to set minimum protocol version to TLS 1.2: %s" -msgstr "" +msgstr "プロトコルの最小バージョンを TLS 1.2 に設定できません: %s" #: logsrvd/logsrvd.c:1491 msgid "unable to get remote IP addr" msgstr "リモートIPアドレスを取得できません" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "ユーザーデータをSSLオブジェクトに添付することができません: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "イベントをキューに追加できません" #: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 -#, fuzzy msgid "unable setup listen socket" -msgstr "%s の状態取得 (stat) ができません" +msgstr "接続待ちソケットを準備できません" #: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 #, c-format @@ -589,7 +608,6 @@ msgstr "" "\n" #: logsrvd/logsrvd.c:1846 -#, fuzzy msgid "" "\n" "Options:\n" @@ -601,25 +619,24 @@ msgid "" msgstr "" "\n" "オプション:\n" -" -c, --check 検査のみを行う\n" " -f, --file=sudoers sudoers ファイルの位置を指定する\n" " -h, --help ヘルプメッセージを表示して終了する\n" -" -q, --quiet 文法エラーメッセージをより少なく (静かに) する\n" -" -s, --strict 厳密な文法検査を行う\n" +" -n, --no-fork フォークせずに、フォアグラウンドで実行する\n" +" -R, --random-drop 接続がドロップする確率(%)\n" " -V, --version バージョン情報を表示して終了する\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C バージョン 1.3 以上が必要です" #: logsrvd/logsrvd.c:1916 -#, fuzzy, c-format +#, c-format msgid "invalid random drop value: %s" -msgstr "notafter の値が無効です" +msgstr "無効な乱数ドロップ値です: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s バージョン %s\n" @@ -636,7 +653,7 @@ msgstr "%s:%s" #: logsrvd/logsrvd_conf.c:471 logsrvd/logsrvd_conf.c:715 #, c-format msgid "%s: not a fully qualified path" -msgstr "" +msgstr "%s: 完全修飾パスではありません" #: logsrvd/logsrvd_conf.c:829 #, c-format @@ -697,149 +714,161 @@ msgid "" " -t, --test test audit server by sending selected I/O log n times in parallel\n" " -V, --version display version information and exit\n" msgstr "" +"\n" +"オプション:\n" +" --help ヘルプメッセージを表示して終了する\n" +" -A, --accept 受け取りイベントのみを送る (I/O なし)\n" +" -h, --host ログの送り先とするホスト\n" +" -i, --iolog_id 復元するI/O ログのリモート ID \n" +" -p, --port ホストに接続するのに使用するポート\n" +" -r, --restart 以前の I/O ログ転送を再開する\n" +" -R, --reject 与えられた理由によりコマンドを拒否する\n" +" -b, --ca-bundle サーバーの証明書を検証するために突き合わせる証明書バンドルファイル\n" +" -c, --cert TLSハンドシェイクのための証明書ファイル\n" +" -k, --key 秘密鍵ファイル\n" +" -n, --no-verify サーバーの証明書を検証しない\n" +" -t, --test 選んだ I/O ログを n 重に並列送信することで監査サーバーを試験する\n" +" -V, --version バージョン情報を表示して終了する\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 -#, fuzzy, c-format +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 +#, c-format msgid "unable to look up %s:%s: %s" -msgstr "%s をロードできません: %su" +msgstr "警告: %s:%s を参照できません: %s" #: logsrvd/sendlog.c:186 -#, fuzzy msgid "unable to get server IP addr" -msgstr "リモートIPアドレスを取得できません" +msgstr "サーバーのIPアドレスを取得できません" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 -#, fuzzy, c-format +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 +#, c-format msgid "unable to read %s/%s: %s" -msgstr "%s をロードできません: %su" +msgstr "%s/%s から読み込むことができません: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "クライアントメッセージが大き過ぎます: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" -msgstr "" +msgstr "%s: 書き込みバッファは使用中です" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" -msgstr "" +msgstr "予期しない I/O イベント %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" -msgstr "" +msgstr "%s: 予期しない状態 %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "無効な ServerHello です" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "サーバからエラーメッセージを受け取りました: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "サーバから中断メッセージを受け取りました: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 -#, fuzzy +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" -msgstr "監査メッセージを送ることができません" +msgstr "ServerMessage を展開できません" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" -msgstr "" +msgstr "%s: 予期しない type_case の値 %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "サーバーからの読み込みがタイムアウト" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "早すぎるファイル終端 (EOF)" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "サーバーメッセージが大き過ぎます: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" -msgstr "" +msgstr "サーバーへの書き込みがタイムアウト" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "TLS ハンドシェイクでタイムアウトが発生" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 -#, fuzzy +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" -msgstr "%s の状態取得 (stat) ができません" +msgstr "イベントを設定できません" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 -#, fuzzy, c-format +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 +#, c-format msgid "TLS connection failed: %s" -msgstr "SecurID 通信に失敗しました" +msgstr "TLS接続に失敗しました: %s" -#: logsrvd/sendlog.c:1519 -#, fuzzy, c-format +#: logsrvd/sendlog.c:1522 +#, c-format msgid "Unable to initialize ssl context: %s" -msgstr "PAM を初期化できません: %s" +msgstr "SSL コンテキストを初期化できません: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 -#, fuzzy, c-format +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 +#, c-format msgid "Unable to allocate ssl object: %s" -msgstr "%s: オプションを設定できません: %s" +msgstr "SSLオブジェクトを割り当てることができません: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" -msgstr "" +msgstr "ソケットをSSLオブジェクトに取り付けることができません: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" -msgstr "" +msgstr "再開するポイントとIOログIDを指定する必要があります" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" -msgstr "" +msgstr "I/Oが送られない場合は再開するポイントを設定できません" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" -msgstr "" +msgstr "ステータス %d で予期せぬ終了をしました" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" -msgstr "" +msgstr "サーバーに送られた経過時間 [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" -msgstr "" +msgstr "サーバーから受け取ったコミットポイント [%lld, %ld]" #: plugins/sudoers/alias.c:144 #, c-format msgid "Alias \"%s\" already defined" msgstr "別名 \"%s\" はすでに定義されています" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "fork できません" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "%s のパスワードを変更できません" @@ -861,11 +890,11 @@ msgstr "無効な認証タイプです" msgid "unable to initialize BSD authentication" msgstr "BSD 認証を開始できません" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "あなたのアカウントの有効期限が切れています" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "認証に失敗しました" @@ -972,7 +1001,7 @@ msgstr "アカウントの期限切れ、または sudo 用の PAM 設定に \"a msgid "PAM account management error: %s" msgstr "PAM アカウント管理エラーです: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "あなたは %s データベース内に存在しません" @@ -1001,7 +1030,7 @@ msgstr "SecurID 用の認証ハンドルが無効です" msgid "SecurID communication failed" msgstr "SecurID 通信に失敗しました" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "不明な SecurID エラーです" @@ -1009,7 +1038,7 @@ msgstr "不明な SecurID エラーです" msgid "invalid passcode length for SecurID" msgstr "SecurID 用のパスコード長が無効です" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "SIA セッションを初期化できません" @@ -1033,7 +1062,7 @@ msgstr "認証方法が sudo のコンパイル時に組み込まれていませ msgid "Unable to initialize authentication methods." msgstr "認証方法を初期化できません。" -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "認証方法:" @@ -1066,117 +1095,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "不明なユーザーID (uid) です: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "不明なユーザーです: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "order の増分: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "開始の order: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "order の増分: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s 文法バージョン %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "サポートされてない入力形式です %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "サポートされてない出力形式です %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: 入力ファイルと出力ファイルは別である必要があります" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "sudoers のデフォルト値を初期化できません" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: 不明なキーワードです: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "無効なデフォルトの指定です: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "無効な抑制の指定です: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "無効なフィルターです: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "%s を開けません" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "%s ファイルの構文解析に失敗しました。不明なエラーです" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "%s 内 %d 行付近で構文解析エラーが発生しました\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "%s 内で構文解析エラーが発生しました\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "%s へ書き込むことができません" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1185,7 +1215,7 @@ msgstr "" "%s - sudoers ファイル形式間での変換を行う\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1226,677 +1256,696 @@ msgstr "" " -V, --version バージョン情報を表示して終了する" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "不明なデフォルト項目 \"%s\" です" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "GMT 時刻を取得できません" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "タイムスタンプを書式整形できません" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "sudoers の項目が多すぎます、最大は %u です。" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "SUDOERS_BASE 環境変数が設定されておらず -b オプションも指定されていません。" -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "ログ記録時に syslog を使用する場合の syslog ファシリティ: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "ログ記録時に syslog を使用する場合の syslog プライオリティ: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "ユーザー認証に失敗したと時に使用される syslog プライオリティ: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "ワンタイムパスワード入力要求をそれのみの行に表示します" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "$PATH 内にある '.' を無視します" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "sudo を実行した時に、常にメールを送信します" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "ユーザー認証に失敗した場合にメールを送信します" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "ユーザー他 sudoers 内に存在しない場合にメールを送信します" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "ユーザーがこのホスト用の sudoers 内に存在しない場合にメールを送信します" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "ユーザーが許可されていないコマンドを実行しようとした場合にメールを送信します" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "ユーザーがマンドを実行しようとした場合にメールを送信します" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "ユーザー/tty の組み合わせごとに分離したタイムスタンプを使用します" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "ユーザーが最初に sudo を実行した時に講義を行う" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "sudo の講義が含まれているファイル: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "デフォルトでユーザーが認証されていることを必要とします" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "root が sudo を実行するかもしれません" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr " ログファイル (syslog 以外) に記録する時にホスト名を含めます" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "ログファイル (syslog 以外) に記録する時に年情報を含めます" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "sudo を引数無しで起動した場合、シェルを開始します" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "シェルを -s で開始した時に $HOME を変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "$HOME を常に変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "役に立つエラーメッセージを表示するためにいくつかの情報を収集することを許可します" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "sudoers ファイルに完全修飾ホスト名 (FQDN) を要求します" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "間違ったパスワードを入力した時にユーザーを侮辱します" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "tty がある場合のみ sudo の実行を許可します" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "visudo が EDITOR 環境変数を尊重して使用します" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "ユーザーのパスワードではなく、root のパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "ユーザーのパスワードではなく、 runas_default ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "現在のユーザーのパスワードではなく、変更先ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "変更先ユーザーのログインクラスのデフォルトが存在する場合は、デフォルトを適用します" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "LOGNAME および USER 環境変数を設定します" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "実効ユーザーIDのみ変更先ユーザーの UID に設定し、実ユーザーIDは変更しない" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "グループベクトルを変更先ユーザーの値で初期化しない" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "ログファイルの行頭から改行までの長さ (0 の場合は改行しない): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "認証タイムスタンプのタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "パスワード入力要求のタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "パスワード入力の試行回数: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "使用する umask 値 (0777 の場合はユーザーの設定値を使用します): 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "ログファイルのパス: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "メールプログラムのパス: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "メールプログラムの引数フラグ: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "メールの送信先アドレス: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "メールの送信元アドレス: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "メールの件名 (Subject) 行: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "パスワードを間違った時のメッセージ: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "受講状況ディレクトリのパス: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリのパス: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリの所有者: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "パスワード入力と PATH の要求が免除されるグループに属するユーザー: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "パスワード入力要求時に表示される文字列: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "設定した場合、すべての場合において passprompt がシステムの入力要求表示を上書きします" -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "コマンドを実行するデフォルトの変更先ユーザー: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "ユーザーの $PATH を上書きする時の値: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo で使用されるエディターのパス: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "'list' 疑似コマンド使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "'verify' 疑似コマンドを使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "sudo_noexec ライブラリに含まれるダミーの exec 関数群を事前ロードします" # do はたぶん強調の do -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "LDAP ディレクトリが実行中の場合、ローカルの sudoers ファイルを無視します" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "%d 以上の値をもつファイル記述子をコマンド実行前に閉じます" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "設定しても、ユーザーが \"closefrom\" の値を -C オプションで上書きするかもしれません" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "ユーザーが任意の環境変数を設定することを許可します" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "環境変数の集合をデフォルトに設定します" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "正当性の確認を行う環境変数:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "削除する環境変数:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "保護する環境変数:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux の役割: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux のタイプ: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 固有の環境ファイルのパス: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "制限付きsudo 固有の環境ファイルのパス: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "sudoers を構文解析する時に使用するロケール: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "パスワードが表示されてしまう状態であっても sudo がパスワード入力を要求することを許可します" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "パスワード入力要求でユーザーの入力があった時に、視覚的なフィードバックを提供します" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "ファイルシステムにアクセスしないがより正確では無い、素早い一致確認処理を行います" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 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:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "コマンドを実行した時のユーザー入力をログに記録します" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "コマンドを実行した時の出力をログに記録します" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "I/O ログを zlib を使用して圧縮します" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "常に疑似 tty 内でコマンドを実行します" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "UNIX 以外のグループをサポートするためのプラグインです:%s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "入出力 (I/O) ログを保存するディレクトリです:%s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "入出力 (I/O) ログを保存するファイルです:%s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "pty を割り当てた時に utmp/utmpx ファイルに記録を加えます" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "utmp に記録するユーザーを、実行したユーザーではなく、変更後のユーザーにします" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "許容される権限の集合: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "制限される権限の集合: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "コマンドを pty でバックグラウンドで実行する" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "利用する PAM サービス名: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "ログインシェルで利用する PAM サービス名: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "ターゲットユーザーの PAM 資格情報による認証を試みる" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "実行するコマンドのために新しい PAM セッションを生成する" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "PAM アカウント検証管理を実行しています" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "I/O ログシーケンス番号の最大値: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "sudoers のネットグループサポートを有効にする" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "ファイルを sudoedit で編集するときに親ディレクトリが書き込み可能か確かめる" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "ファイルを sudoedit で編集するときにシンボリックリンクを追う" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "不明なシステムグループについて、グループプラグインに問い合わせる" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "ネットグループについて、すべてのタプル(ユーザー、ホスト、ドメイン)を基に判定する" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "監査ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "I/O ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "ログファイルへの書き込みができなくても、コマンドの実行を許可する" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "グループの照合を sudoers の中で行い、グループ名でなくグループIDを用いる" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "ログエントリーがこの値より長くなると、複数の syslog メッセージに分割されます: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "I/O ログの所有者となるユーザー: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "I/O ログの所有者となるグループ: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, 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:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "コマンドの実行時にパスでなくファイル記述子を使う: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "sudoers の中の未知の Defaults エントリーを無視し、警告を出さない" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "コマンドが中断されるまでの経過時間を秒で指定する: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "ユーザーがコマンド実行の制限時間をコマンドラインで指定できるようにする" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "I/O ログのデータをバッファせずに、即ディスクにフラッシュする" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "syslog へのログ記録時にプロセスIDを含める" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "認証タイムスタンプのタイプ: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "認証失敗メッセージ: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "ユーザー名の検索で大文字小文字を同一視する" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "グループ名の検索で大文字小文字を同一視する" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "コマンドが sudoers で許可された場合にログに記録します" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "コマンドが sudoers で拒否された場合にログに記録します" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "オプショナルなポートで接続する Sudo ログサーバー" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Sudo ログサーバーのタイムアウト、単位は秒: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" -msgstr "" +msgstr "ログサーバーに接続したソケットで SO_KEEPALIVE ソケットオプションを有効にする" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "認証サーバーの CA バンドルファイルのパス: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "sudoers の証明書ファイルのパス: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "sudoers のプライベート鍵ファイルのパス: %s" -#: plugins/sudoers/def_data.c:534 -#, fuzzy +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" -msgstr "sudoers の証明書ファイルのパス: %s" +msgstr "ログサーバーの証明書が有効か検証する" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" -msgstr "" +msgstr "未知の runas ユーザーおよび/またはグループ ID を使うことを許可する" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" -msgstr "" +msgstr "有効なシェルを持つユーザーのみにコマンド実行を許可する" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" -msgstr "" +msgstr "PAMのリモートユーザーを sudo を実行しているユーザーに設定" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" -msgstr "" +msgstr "PAMのリモートホストをローカルホスト名に設定" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d 不明なデフォルト項目 \"%s\" です" +msgid "Working directory to change to before executing the command: %s" +msgstr "コマンド実行前に変更する作業ディレクトリ: %s" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/def_data.c:560 #, c-format -msgid "%s: unknown defaults entry \"%s\"" -msgstr "%s: 不明なデフォルト項目 \"%s\" です" +msgid "Root directory to change to before executing the command: %s" +msgstr "コマンド実行前に変更するルートディレクトリ: %s" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:184 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d \"%s\" に値が指定されていません" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: 未知のデフォルト項目 \"%s\" です" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:187 #, c-format -msgid "%s: no value specified for \"%s\"" -msgstr "%s: \"%s\" に値が指定されていません" +msgid "%s: unknown defaults entry \"%s\"" +msgstr "%s: 未知のデフォルト項目 \"%s\" です" -#: plugins/sudoers/defaults.c:252 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d \"%s\" の値は '/' で開始しなければいけません" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: \"%s\" に値が指定されていません" -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:236 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: \"%s\" の値は '/' で開始しなければいけません" +msgid "%s: no value specified for \"%s\"" +msgstr "%s: \"%s\" に値が指定されていません" -#: plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d オプション \"%s\" は値をとりません" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: オプション \"%s\" は値をとりません" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:277 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: オプション \"%s\" は値をとりません" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: 0x%x はオプション \"%s\" のデフォルトタイプとして無効です" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d \"%s\" はオプション \"%s\" の値としては無効です" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: \"%s\" はオプション \"%s\" の値としては無効です" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: \"%s\" はオプション \"%s\" の値としては無効です" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: \"%s\" の値は '/', '*', または '*' で開始しなければいけません" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: \"%s\" の値は '/', '*', または '*' で開始しなければいけません" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: \"%s\" の値は '/' で開始しなければいけません" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: \"%s\" の値は '/' で開始しなければいけません" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp が破損しています。長さが合いません" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "環境を再構築できません" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "残念ですが、あなたは次の環境変数を設定することを許可されていません: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "%s 内 %d 行付近で構文解析エラーが発生しました" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "%s 内で構文解析エラーが発生しました" @@ -1950,88 +1999,88 @@ msgstr "ネットマスク \"%s\" を解析できません" msgid "Local IP address and netmask pairs:\n" msgstr "ローカル IP アドレスとネットマスクの組:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "不明なグループです: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "%s へ I/O ログを書き込むことができません" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "シーケンスファイルを更新できません" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "%s/%s を作成できません" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "ログサーバーに接続できません" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: 内部エラー、I/O イベント %d のログファイルを開けません" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "時刻を読み込むことができません" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: 内部エラー、無効なシグナル %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "イベントループでエラーが発生しました" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "新しい SSL_CTX オブジェクトの作成に失敗しました: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "%s:%s へのTLS接続に失敗しました: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "TLS 初期化が成功しませんでした" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "TLS ハンドシェイクが成功しませんでした" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "時刻を取得できません" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: 内部エラー、無効な終了コード %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "ログサーバーへの接続が失われました" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "書き込みバッファが失われました" @@ -2054,18 +2103,19 @@ msgstr "SSL を使用するためには %s の中の TLS_CERT を設定する必 msgid "unable to initialize LDAP: %s" msgstr "LDAP を初期化できません: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls が指定されていますが、LDAP ライブラリが ldap_start_tls_s() または ldap_start_tls_s_np() をサポートしていません" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "無効な sudoOrder 属性です: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: ポートが大きすぎます" +#, c-format +msgid "%s: port too large" +msgstr "%s: ポートが大き過ぎます" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2076,7 +2126,7 @@ msgstr "サポートされてない LDAP URI タイプです: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "ldap と ldaps の URI を混ぜて使用できません" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "sudoOption を変換できません: %s%s%s" @@ -2085,66 +2135,66 @@ msgstr "sudoOption を変換できません: %s%s%s" msgid "unable to open audit system" msgstr "監査システムを開くことができません" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "監査メッセージを送ることができません" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "ログファイルを開けません: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "ログファイルをロックできません: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "%s へログを書き込むことができません" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "ユーザーが sudoers 内にありません" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "ホスト上でユーザーが認証されていません" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "コマンドが許可されていません" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s は sudoers ファイル内にありません。この事象は記録・報告されます。\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s は %s 上で sudo を実行することを許可されていません。この事象は記録・報告されます。\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "残念ですが、ユーザー %s は %s 上で sudo を実行できません。\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "残念ですが、ユーザー %s は'%s%s%s' を %s%s%s として %s 上で実行することは許可されていません。\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: コマンドが見つかりません" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2153,36 +2203,36 @@ msgstr "" "'.' 内で見つかった \"%1$s\" を無視します\n" "この \"%3$s\" を実行したい場合は \"sudo ./%2$s\" を使用してください。" -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "認証失敗" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "パスワードが必要です" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u 回パスワード試行を間違えました" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "標準入力を複製できません: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "%s を実行できません: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "fork できません: %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "パイプを開けません: %m" @@ -2192,7 +2242,7 @@ msgstr "パイプを開けません: %m" msgid "digest for %s (%s) is not in %s form" msgstr "%s (%s) の認証方式は %s 形式ではありません" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2201,8 +2251,7 @@ msgstr "" "\n" "LDAP 役割: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2210,42 +2259,38 @@ msgstr "" "\n" "sudoers 項目:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " オプション: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " コマンド:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "既定値のエントリと照合中 (ユーザー名 %s) (ホスト名 %s):\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "ユーザー %s 用の Runas およびコマンド特有のデフォルト:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "ユーザー %s は %s 上で コマンドを実行できます\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "ユーザー %s は %s 上で sudo を実行することを許可されていません。\n" @@ -2260,48 +2305,58 @@ msgstr "不完全な sudoRole: cn: %s を無視します" msgid "invalid LDIF attribute: %s" msgstr "無効な LDIF 属性です: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "無効な %.*s が sudo のフロントエンドで設定されています" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "ネットワークのアドレスリストを解析できません" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "ユーザー名が sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "ユーザーIDが sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "グループIDが sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "ホスト名が sudo のフロントエンドで設定されていません" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "無効な作業ディレクトリ: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "無効な chroot ディレクトリ: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "%s を実行できません" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "sudoers ポリシープラグイン バージョン %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "sudoers ファイル文法バージョン %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2310,86 +2365,86 @@ msgstr "" "\n" "sudoers のパス: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch のパス: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf のパス: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret のパス: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "タイプ %d のフックを登録できません (バージョン %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "ユーザーID %u をキャッシュできません" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "ユーザーID %u をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "ユーザー %s をキャッシュできません" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "ユーザー %s をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "グループID %u をキャッシュできません" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "グループID %u をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "グループ %s をキャッシュできません" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "グループ %s をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "グループリスト %s をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "グループリスト %s をキャッシュできません" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "%s のグループを解析できません" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "%s のグループIDを解析できません" @@ -2453,239 +2508,259 @@ msgstr "検証の対象とする長さを切り詰めました user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "検証の対象とする長さを切り詰めました argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "SSS のソースを初期化できません。SSSD はあなたのマシンにインストールされていますか?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "シンボル \"%s\" が %s 内にありません" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "デフォルト項目で問題が発生しました" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "有効な sudoers のソースが見つかりません。終了します" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "ユーザーはルートディレクトリを %s に変更できません" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "-R オプションを %s と共に使用することは許可されていません" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "ユーザーはディレクトリを %s に変更できません" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "-D オプションを %s と共に使用することは許可されていません" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers の指定により root が sudo を使用することは禁止されています" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "ユーザーが closefrom 制限をオーバーライドすることは許されていません" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "-C オプションを使用することは許可されていません" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "タイムスタンプの所有者 (%s): そのようなユーザーはありません" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "tty がありません" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "残念ですが、sudo を実行するには tty が必要です" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "ユーザー %s には無効な シェル: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "コマンドがカレントディレクトリにあります" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "ユーザーはコマンド実行の制限時間を設定することを許可されていません" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "残念ですが、あなたはコマンド実行の制限時間を設定することを許可されていません" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "ユーザーは環境変数を保存することを許可されていません" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "残念ですが、あなたは環境変数を保存することを許可されていません" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "コマンド名が長すぎます" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit の実行に sudo を使用する必要はありません" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "%s を読み込めません" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "%s の状態取得 (stat) ができません" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s は通常ファイルではありません" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s はユーザーID %u によって所有されています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s は誰でも書き込み可能です" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s のグループIDは %u になっています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "root のみ \"-c %s\" を使用できます" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "不明なログインクラスです: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "ホスト %s の名前解決ができません" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "無効なフィルターオプションです: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "無効な最大待機時間です: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "無効な speed_factor の値です: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/タイミング: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "再生する sudo セッション: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "tty を raw モードに設定できません" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "警告: ログをきちんとリプレイするには端末が小さすぎます。\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "ログの大きさは %d x %d で、端末の大きさは %d x %d です。" -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "再生が終了しました、何かキーを押すと端末を回復します。" -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "曖昧な式 \"%s です\"" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "式内で ')' が不一致です" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "不明な検索語 \"%s\" です" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s は引数が必要です" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "無効な正規表現です: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "日付 \"%s\" を構文解析できませんでした" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "式内で '(' が不一致です" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "末尾に \"or\" を配置できません" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "末尾に \"!\" を配置できません" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "未知の検索タイプ %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, 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:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, 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:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2694,7 +2769,7 @@ msgstr "" "%s - sudo セッションログをリプレイします\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2722,11 +2797,11 @@ msgstr "" " -s, --speed=num 出力速度を速くする、または遅くする\n" " -V, --version バージョン情報を表示して終了する" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tホストが一致しません" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2734,7 +2809,7 @@ msgstr "" "\n" "コマンドが許可されました" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2742,7 +2817,7 @@ msgstr "" "\n" "コマンドが拒否されました" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2787,89 +2862,89 @@ msgstr "sudoedit はパスなしで設定するべきです" msgid "the -x option will be removed in a future release" msgstr "-x オプションは将来のリリースでは削除されます" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "cvtsudoers ユーティリティーを代わりに使用することを検討してください" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "%s を編集するためにリターンを押してください: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "指定したエディター (%s) が存在しません" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "エディターが見つかりません (エディターのパス = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "書き込みエラーです" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の状態取得 (stat) ができません。%s は変更されません" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の大きさが 0 です。%s は変更されません" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "エディター (%s) が異常終了しました。%s は変更されません" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s は変更されません" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "一時ファイル (%s) を再度開くことができません。%s は変更されません。" -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "一時ファイル (%s) の構文解析ができません。不明なエラーです" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "内部エラー、リスト内に %s が見つかりません!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "%s の (ユーザーID, グループID) を (%u, %u) に設定できません" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s と %s は同じファイルシステム上にありません。名前を変更するために mv を使用しています" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "コマンドの失敗です: '%s %s %s'。%s は変更されません" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "%s の名前変更に失敗しました。%s は変更されません" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "次は何でしょうか? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2881,66 +2956,66 @@ msgstr "" " x -- sudoers ファイルへの変更を保存せずに終了します\n" " Q -- sudoers ファイルへの変更を保存して終了します (*危険です!*)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "%s を実行できません" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: 所有権に誤りがあります。(ユーザーID, グループID) は (%u, %u) であるべきです\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: アクセス権限に誤りがあります。モードは 0%o であるべきです\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: 正しく構文解析されました\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s がビジー状態です。後で再試行してください" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "%s をロックできません" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "それでも編集しますか? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "エラー: %s:%d %s のエイリアス \"%s\" で定義が循環しています" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "エラー: %s:%d: %s \"%s\" でエイリアス定義が循環しています" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "警告: %s:%d %s のエイリアス \"%s\" で定義が循環しています" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "警告: %s:%d: %s \"%s\" でエイリアス定義が循環しています" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "エラー: %s:%d %s \"%s\" は参照されているのに定義されていません" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "エラー: %s:%d: %s \"%s\" は参照されているのに定義されていません" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "警告: %s:%d %s \"%s\" は参照されているのに定義されていません" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "警告: %s:%d: %s \"%s\" は参照されているのに定義されていません" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "警告: %s:%d エイリアス %s として \"%s\" は使用されていません" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "警告: %s:%d: エイリアス %s \"%s\" は使用されていません" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2949,7 +3024,7 @@ msgstr "" "%s - sudoers ファイルを安全に編集する\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2969,10 +3044,13 @@ msgstr "" " -s, --strict 厳密な文法検査を行う\n" " -V, --version バージョン情報を表示して終了する\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "インクルードの階層が大きすぎます" +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: ポートが大きすぎます" + #~ msgid "No user or host" #~ msgstr "ユーザーまたはホストがありません" diff --git a/plugins/sudoers/po/pl.mo b/plugins/sudoers/po/pl.mo index 2baf82b202ae0601f1614131acaf82e7788f32a7..10c506c42a5126f7f1caef3a81a921489c4a866c 100644 GIT binary patch delta 12995 zcmb8#cX$=W8prVs2_f_rS_sLe5klzIL`p&k9jO8e0)d1gNe-k?qH+KgP$^fBh=?F4 zMMa84MJXy0Kv9t*U_nGgka{gh5ykucWhVEc|J{9_m(R@X?C#7vvwM(xU;fqq<}H8k ziE06h9F9h%948bXtm-&tDIbqitK&><;y6`sn)Pw4OnoUo|2fFj^X#p*o~u7aWdB zxEgiCGuCn)P5&ksLVF5E;Bc&kGq3_ai<;1CtbuP}S=@)}|2bClQn*SX5Cf9T1?5pQ z3c&{01$6@tk|gI*Y=k?J>^hgRA;u&V*cVv^XEJJHt1%q6ViURUZ8ew=RvzARz z^<;FhFY3Zcr~y1_>uWKR`d(~>=P?4qQyeE6ld&<5K`qtOr~$r?n%Hqvrh+>jK)o}IaZ#Cp`%U|lRi zU4PO`K^<=*S#jETcO0_m%tZE^Q-mGSzXz`srXX*UGX;6WoQU(eu z8H;lswIr?YGHZV~Y5+6P#h0)d&v%L_XjlG*d>fqLK4$IuU=sB_Y>IDUJpO=6UDduO zLyb^-VghQQFQR7r32I=a`pszWX&;Zoav z9JM5+2buG6*n)aL)TVp{wbt+Ae7uEv;Jm>m)mu?Z`!zPg>!_uS8AASBQb?u{gZWqv zmtq54gUY~X7>t*(Hu~RV9uSJ^*8??>Tx^2tZToR+>3hwLo1mUE1bGvk>GzUHFm%RK4)5@si=XiLOu8s)F!)(T9VKVlabyS zO}zls{sQvpa1LNYtT)DFq#N=Uc%3N}v}P-@3+_WbsOnhrfl07VK<)Zv=;8s?jDE%> ztTN7Q-hQZz48sI`8kL#-sLfkxy!jNzV)5^PDh1tm7}m#ys8qj&O5u5|i~;xS0^S4+ z$9QaxJyAD)2z4#bw;7QcLu3|&1<}vqa?_vGbVI&Q4I2kpg6{z-Y zsF@!`jr<4HjRGc`fx4(AYHuBk)u>NG4d4;f1eahf+=Lq7hp5b4oJjt4<8pl1)ewhT z%dV)DjYMT+25LadY`qY5qXVe^S5Vhi%rOIwNA>TB>UTFb!fB|Cu0i$x%u7KtzJ$6_ zP_B7k1ZoByP%|8WN_`dv;=fQgT8!23eN?~0sF_|u4WM+MdA;kR`ZY#PI0-dD?+6Oj zRls2MVJmzYE8;h(8(%<;xO6`2j!~%0w7_QA2ixEb?2cPdd&Y0F$v^`fM!gr-#8;3_ z?seX$paJ}dO3@#vnZ->p_5Rp`x)&?pW^9h{;obN%YVUNNYWBt?tVMl3YT&C;nS0Nk zKZVM~EsW;*PSt5<_qRcH9E@6$0@Mr_VIACzI{yjQ#DAk^7+7GIt}$xhT~J?04{D%K zqWbSb_5TVrK)(mb0MB>oP>8`~)C0z%i;trQunv{_53OfVYZvgKX^%#|R-I7oS*X`> zzI8Kd0LRe9%cucVeu%6FQ;4Nd8{47Q@@{l-HtNP}QEPq(mAdaR1h1fOTzR@#PAV{ zVOX3YEM6ikULw>?_np`Z>cP^sIFn&|;ls;{6f2!G6M z%0A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 V4(#j}XxL}3#{~8_#fmqU{s-F99=rem delta 12021 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 diff --git a/plugins/sudoers/po/pl.po b/plugins/sudoers/po/pl.po index f0a58fd9ee..f4864fcea2 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.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-19 20:36+0200\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 19:15+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -41,70 +41,73 @@ msgstr "*** informacje dotyczące BEZPIECZEŃSTWA dla %h ***" msgid "Sorry, try again." msgstr "Niestety, proszę spróbować ponownie." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -114,323 +117,340 @@ msgstr "Niestety, proszę spróbować ponownie." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "nie udało się przydzielić pamięci" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "skrót wymaga nazwy pliku" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "wartości \"CWD\" muszą zaczynać się od '/', '~' lub '*'" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "wartości \"CHROOT\" muszą zaczynać się od '/', '~' lub '*'" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "błędna wartość notbefore" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "błędna wartość notafter" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "wartość limitu czasu zbyt duża" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "błędna wartość limitu czasu" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s istnieje, ale nie jest katalogiem (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "nie udało się wykonać mkdir %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "nie udało się zmienić uprawnień %s na 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "nieoczekiwany JSON_STRING, otrzymano %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "brak podwójnego cudzysłowu w nazwie" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "oczekiwany JSON_OBJECT, otrzymano %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "błąd wewnętrzny, przepełnienie %s" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "brak klamry zamykającej" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "nieoczekiwana tablica" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "brak nawiasu zamykającego" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "nieoczekiwany łańcuch" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "brak dwukropka po nazwie" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "nieoczekiwana wartość logiczna" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "nieoczekiwana liczba" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u nie udało się przeanalizować \"%s\"" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: błędny plik logu" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: brak pola znacznika czasu" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: znacznik czasu %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: brak pola z użytkownikiem" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: brak pola z użytkownikiem runas" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: brak pola z grupą runas" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "błąd podczas czytania pliku czasu: %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "błędna linia pliku czasu: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (kontynuacja polecenia) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "log jest już kompletny, nie może być wznowiony" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "nie udało się wznownić logu" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "nie udało się otworzyć %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "brak pliku logu we/wy %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: nie udało przesunąć %zu w przód" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "nie udało się odnaleźć punktu wznowienia [%lld, %ld] w %s/%s" @@ -517,17 +537,17 @@ msgstr "nie udało się uzyskać metody serwera TLS: %s" msgid "unable to create TLS context: %s" msgstr "nie udało się utworzyć kontekstu TLS: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "nie udało się załadować certyfikatu %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "nie udało się załadować paczki certyfikatów CA %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "nie udało się załadować klucza prywatnego %s" @@ -546,28 +566,28 @@ msgstr "nie udało się ustawić minimalnej wersji protokołu na TLS 1.2: %s" msgid "unable to get remote IP addr" msgstr "nie udało się uzyskać zdalnego adresu IP" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, 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:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "nie udało się dodać zdarzenia do kolejki" @@ -602,7 +622,7 @@ msgstr "" " -R, --random-drop procentowe prawdopodobieństwo gubienia połączeń\n" " -V, --version wyświetlenie informacji o wersji i zakończenie\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Wymagany Protobuf-C w wersji 1.3 lub wyższej" @@ -611,9 +631,9 @@ msgstr "Wymagany Protobuf-C w wersji 1.3 lub wyższej" msgid "invalid random drop value: %s" msgstr "błędna wartość losowego gubienia: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s wersja %s\n" @@ -707,7 +727,7 @@ msgstr "" " -t, --test test serwera audytu przez wysłanie wybranego logu we/wy N razy równolegle\n" " -V, --version wyświetlenie informacji o wersji i zakończenie\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "nie udało się wyszukać %s:%s: %s" @@ -716,122 +736,122 @@ msgstr "nie udało się wyszukać %s:%s: %s" msgid "unable to get server IP addr" msgstr "nie udało się uzyskać adresu IP serwera" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "nie udało się odczytać %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "komunikat klienta zbyt duży %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: bufor zapisu jest już w użyciu" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "nieoczekiwane zdarzenie we/wy %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: nieoczekiwany stan %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "błędne ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "odebrano od serwera komunikat błędu: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "odebrano od serwera komunikat zerwania: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "nie udało się rozpakować ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: nieoczekiwana wartość type_case %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "przekroczony limit czasu przy czytaniu z serwera" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "przedwczesny EOF" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "komunikat sewera zbyt duży: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "przekroczony limit czasu przy pisaniu do serwera" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "przekroczony limit czasu powitania TLS" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "nie udało się ustawić zdarzenia" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "Połączenie TLS nie powiodło się: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Nie udało się zainicjować kontekstu SSL: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Nie udało się przydzielić obiektu SSL: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, 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/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "muszą być podane jednocześnie punkt wznowienia i ID iolog" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 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:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "zakończono przedwcześnie ze stanem %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "miniony czas wysłany do serwera [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "odebrano od serwera punkt zatwierdzenia [%lld, %ld]" @@ -841,11 +861,11 @@ msgstr "odebrano od serwera punkt zatwierdzenia [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "Alias \"%s\" jest już zdefiniowany" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "nie udało się wykonać fork" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "nie udało się zmienić hasła dla %s" @@ -867,11 +887,11 @@ msgstr "błędny rodzaj uwierzytelnienia" msgid "unable to initialize BSD authentication" msgstr "nie udało się zainicjować uwierzytelnienia BSD" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "konto wygasło" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "zezwolenie nie powiodło się" @@ -978,7 +998,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:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "nie istniejesz w bazie danych %s" @@ -1007,7 +1027,7 @@ msgstr "błędny uchwyt uwierzytelnienia dla SecurID" msgid "SecurID communication failed" msgstr "błąd komunikacji SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "nieznany błąd SecurID" @@ -1015,7 +1035,7 @@ msgstr "nieznany błąd SecurID" msgid "invalid passcode length for SecurID" msgstr "błędna długość hasła dla SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "nie udało się zainicjować sesji SIA" @@ -1039,7 +1059,7 @@ msgstr "W sudo nie wkompilowano żadnych metod uwierzytelniania! Aby wyłączyć msgid "Unable to initialize authentication methods." msgstr "Nie udało się zainicjować metod uwierzytelniania." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Metody uwierzytelniania:" @@ -1072,117 +1092,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "nieznany uid: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "nieznany użytkownik: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "zwiększenie rangi: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "początkowa ranga: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "wyrównanie rangi: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s, wersja gramatyki %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "nieobsługiwany format wejścia %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "nieobsługiwany format wyjścia %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format 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:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "nie udało się zainicjować wartości domyślnych sudoers" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: nieznane słowo kluczowe: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "błędny typ wartości domyślnej: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "błędny typ ograniczenia: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "błędny filtr: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "nie udało się przeanalizować pliku %s, nieznany błąd" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "błąd składni w %s w okolicy linii %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "błąd składni w %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "nie udało się zapisać do %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1191,7 +1212,7 @@ msgstr "" "%s - konwersja między formatami pliku sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1233,675 +1254,695 @@ msgstr "" " -V, --version wyświetlenie informacji o wersji i zakończenie" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "nieznany wpis domyślny \"%s\"" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "nie udało się pobrać czasu GMT" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "nie udało się sformatować znacznika czasu" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "zbyt dużo wpisów sudoers, maksimum to %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "zmienna środowiskowa SUDOERS_BASE nie jest ustawiona i nie podano opcji -b." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Rodzaj komunikatu sysloga, jeśli syslog jest używany: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Priorytet komunikatu sysloga w przypadku udanego uwierzytelnienia: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Priorytet komunikatu sysloga w przypadku nieudanego uwierzytelnienia: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Umieszczenie zachęty OTP we własnej linii" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "Ignorowanie '.' w $PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Wysyłanie listu zawsze przy uruchomieniu sudo" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Wysyłanie listu przy błędnym uwierzytelnieniu" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Wysyłanie listu jeśli użytkownik nie jest w sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Wysyłanie listu jeśli użytkownik nie jest w sudoers dla tego hosta" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Wysyłanie listu jeśli użytkownik nie ma prawa do uruchomienia polecenia" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Wysyłanie listu jeśli użytkownik próbuje uruchomić polecenie" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Użycie osobnego znacznika czasu dla każdej pary użytkownik/tty" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Poinstruowanie użytkownika przy pierwszym uruchomieniu sudo" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Plik zawierający instrukcję do sudo: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Domyślne wymaganie uwierzytelnienia przez użytkowników" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Możliwość uruchamiania sudo przez roota" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Logowanie nazwy hosta w pliku logu (niesyslogowym)" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Logowanie roku w pliku logu (niesyslogowym)" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Uruchomienie powłoki przy wywołaniu sudo bez argumentów" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Ustawianie $HOME na katalog użytkownika docelowego przy uruchamianiu powłoki z -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Ustawianie $HOME zawsze na katalog domowy użytkownika docelowego" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Zezwolenie na zbieranie niektórych informacji do przydatnych komunikatów błędów" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Wymaganie pełnych nazw hostów w pliku sudoers" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "Lżenie użytkownika po podaniu błędnego hasła" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Możliwość uruchamiania sudo tylko z poziomu terminala" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Honorowanie zmiennej środowiskowej EDITOR przez visudo" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Pytanie o hasło roota zamiast hasła użytkownika" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Pytanie o hasło użytkownika runas_default zamiast uruchamiającego" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Pytanie o hasło użytkownika docelowego zamiast uruchamiającego" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Użycie ustawień domyślnych z klasy logowania użytkownika docelowego (jeśli są)" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Ustawianie zmiennych środowiskowych LOGNAME i USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Ustawianie na użytkownika docelowego tylko efektywnego uid-a, nie rzeczywistego uid-a" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "Pomijanie inicjalizacji wektora grup na grupy użytkownika docelowego" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Długość, na której zawijać linie logu (0 bez zawijania): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Limit czasu znacznika uwierzytelniania (w minutach): %.1f" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Limit czasu pytania o hasło (w minutach): %.1f" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Liczba prób wpisania hasła: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Wartość umask lub 0777, aby użyć wartości użytkownika: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Ścieżka do pliku logu: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Ścieżka do programu mail: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Flagi dla programu mail: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Adres, na który mają być wysyłane listy: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Adres, z którego mają być wysyłane listy: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Temat wysyłanych listów: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Komunikat o błędnym haśle: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Ścieżka katalogu stanu instrukcji: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Ścieżka katalogu znaczników czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Właściciel katalogu znaczników czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Grupa, której użytkownicy są zwolnieni z wymagań dot. haseł i PATH: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Domyślne pytanie o hasło: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "Czy passprompt ma być używane zamiast systemowego zapytania we wszystkich przypadkach" -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Domyślny użytkownik do uruchamiania poleceń: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Wartość do podstawienia za $PATH użytkownika: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Ścieżka do edytora, który ma być używany przez visudo: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kiedy ma być wymagane hasło dla pseudopolecenia 'list': %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kiedy ma być wymagane hasło dla pseudopolecenia 'verify': %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Wczytanie pustych funkcji exec zawartych w bibliotece sudo_noexec" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Jeśli istnieje katalog LDAP, czy ignorować lokalny plik sudoers" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Deskryptory plików >= %d będą zamykane przed uruchomieniem polecenia" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Czy użytkownicy mogą zmieniać wartość \"closefrom\" opcją -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Zezwolenie użytkownikom na ustawianie dowolnych zmiennych środowiskowych" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Wyczyszczenie środowiska do domyślnego zbioru zmiennych" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Zmienne środowiskowe do sprawdzania poprawności:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Zmienne środowiskowe do usunięcia:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Zmienne środowiskowe do zachowania:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Rola SELinuksa do używania w nowym kontekście bezpieczeństwa: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Typ SELinuksa do używania w nowym kontekście bezpieczeństwa: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Ścieżka do pliku środowiska specyficznego dla sudo: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Ścieżka do pliku ograniczonego środowiska specyficznego dla sudo: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Lokalizacja, jak ma być używana przy analizie pliku sudoers: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Zezwolenie sudo na pytanie o hasło nawet gdyby miało być widoczne" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Uwidocznienie wprowadzania hasła przez użytkownika w miarę wpisywania" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Użycie szybszych masek (glob) - mniej dokładnych, ale nie odwołujących się do systemu plików" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Wartość umask podana w sudoers ma zastąpić wartość użytkownika, nawet jeśli pozwala na więcej" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "Logowanie wejścia użytkownika dla uruchamianych poleceń" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "Logowanie wyjścia z uruchamianych poleceń" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "Kompresja logów we/wy przy użyciu zliba" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Uruchamianie poleceń zawsze na pseudoterminalu" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Wtyczka do obsługi grup nieuniksowych: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, 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:362 +#: plugins/sudoers/def_data.c:364 #, 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:366 +#: plugins/sudoers/def_data.c:368 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:370 +#: plugins/sudoers/def_data.c:372 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:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Zbiór dozwolonych uprawnień: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Zbiór ograniczonych uprawnień: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "Uruchomienie poleceń na pseudoterminalu w tle" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "Nazwa usługi PAM do użycia: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, 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:394 +#: plugins/sudoers/def_data.c:396 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:398 +#: plugins/sudoers/def_data.c:400 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:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Wykonanie zarządzania poprawnością konta PAM" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Maksymalny numer sekwencji logu we/wy: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Włączenie obsługi grup sieciowych w sudoers" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 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:418 +#: plugins/sudoers/def_data.c:420 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:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "Odpytanie wtyczki group pod kątem nieznanych grup systemowych" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 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:430 +#: plugins/sudoers/def_data.c:432 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:434 +#: plugins/sudoers/def_data.c:436 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:438 +#: plugins/sudoers/def_data.c:440 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:442 +#: plugins/sudoers/def_data.c:444 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:446 +#: plugins/sudoers/def_data.c:448 #, 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:450 +#: plugins/sudoers/def_data.c:452 #, 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:454 +#: plugins/sudoers/def_data.c:456 #, 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:458 +#: plugins/sudoers/def_data.c:460 #, 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:462 +#: plugins/sudoers/def_data.c:464 #, 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:466 +#: plugins/sudoers/def_data.c:468 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:470 +#: plugins/sudoers/def_data.c:472 #, 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:474 +#: plugins/sudoers/def_data.c:476 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:478 +#: plugins/sudoers/def_data.c:480 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:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "Dołączanie identyfikatora procesu przy logowaniu przez syslog" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Rodzaj rekordu znacznika czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Komunikat błędu uwierzytelnienia: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Ignorowanie wielkości liter przy dopasowywaniu nazw użytkownika" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Ignorowanie wielkości liter przy dopasowywaniu nazw grup" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "Logowanie kiedy polecenie jest dozwolone przez sudoers" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "Logowanie kiedy polecenie jest zabronione przez sudoers" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 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:514 +#: plugins/sudoers/def_data.c:516 #, 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:518 +#: plugins/sudoers/def_data.c:520 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:522 +#: plugins/sudoers/def_data.c:524 #, 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:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Ścieżka do pliku certyfikatu sudoers: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, 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:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "Sprawdzenie poprawności certyfikatu serwera logów" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 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:542 +#: plugins/sudoers/def_data.c:544 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:546 +#: plugins/sudoers/def_data.c:548 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:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "Ustawienie hosta zdalnego PAM nazwę hosta lokalnego" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" +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:560 +#, 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/defaults.c:184 +#, c-format +msgid "%s:%d: unknown defaults entry \"%s\"" msgstr "%s:%d: nieznany wpis domyślny \"%s\"" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: nieznany wpis domyślny \"%s\"" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" +msgid "%s:%d: no value specified for \"%s\"" msgstr "%s:%d: nie podano wartości dla \"%s\"" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: nie podano wartości dla \"%s\"" -#: plugins/sudoers/defaults.c:252 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d: wartości \"%s\" muszą zaczynać się od '/'" - -#: plugins/sudoers/defaults.c:255 -#, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: wartości \"%s\" muszą zaczynać się od '/'" - -#: plugins/sudoers/defaults.c:277 -#, c-format -msgid "%s:%d option \"%s\" does not take a value" +msgid "%s:%d: option \"%s\" does not take a value" msgstr "%s:%d: opcja \"%s\" nie przyjmuje wartości" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:277 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: opcja \"%s\" nie przyjmuje wartości" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d: błędny typ Defaults 0x%x dla opcji \"%s\"" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: błędny typ Defaults 0x%x dla opcji \"%s\"" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d: błędna wartość \"%s\" dla opcji \"%s\"" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: błędna wartość \"%s\" dla opcji \"%s\"" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: wartości \"%s\" muszą zaczynać się od '/', '*' lub '*'" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: wartości \"%s\" muszą zaczynać się od '/', '*' lub '*'" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: wartości \"%s\" muszą zaczynać się od '/'" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: wartości \"%s\" muszą zaczynać się od '/'" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: uszkodzone envp, niezgodność długości" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "nie udało się przebudować środowiska" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "niestety nie jest dozwolone ustawianie następujących zmiennych środowiskowych: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "błąd składni w %s w okolicy linii %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "błąd składni w %s" @@ -1955,88 +1996,88 @@ msgstr "nie udało się przeanalizować maski sieciowej \"%s\"" msgid "Local IP address and netmask pairs:\n" msgstr "Pary lokalnych adresów IP i masek:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "nieznana grupa: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "nie udało się zapisać do pliku logu we/wy: %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "nie udało się uaktualnić pliku sekwencji" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "nie udało się utworzyć %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "nie udało się połączyć z serwerem logów" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, 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:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "nie udało się odczytać zegara" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: błąd wewnętrzny, błędny sygnał %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "błąd w pętli zdarzeń" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Utworzenie nowego obiektu SSL_CTX nie powiodło się: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "Połączenie TLS do %s:%s nie powiodło się: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "Inicjowanie TLS nie powiodło się" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "Powitanie TLS nie powiodło się" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "nie udało się pobrać aktualnego czasu" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: błąd wewnętrzny, błędny kod wyjścia %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "utracono połączenie z serwerem logów" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "brak bufora zapisu" @@ -2059,18 +2100,19 @@ msgstr "aby używać SSL, trzeba ustawić TLS_CERT w %s" msgid "unable to initialize LDAP: %s" msgstr "nie udało się zainicjować LDAP: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 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:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "błędny atrybut sudoOrder: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: port zbyt duży" +#, c-format +msgid "%s: port too large" +msgstr "%s: za duży numer portu" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2081,7 +2123,7 @@ msgstr "nieobsługiwany rodzaj URI LDAP: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "nie można mieszać URI ldap i ldaps" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "nie można skonwertować sudoOption: %s%s%s" @@ -2090,66 +2132,66 @@ msgstr "nie można skonwertować sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "nie udało się otworzyć systemu audytowego" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "nie udało się wysłać komunikatu audytowego" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "nie udało się otworzyć pliku logu: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "nie udało się zablokować pliku logu: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "nie udało się zapisać pliku logu: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "użytkownik NIE występuje w sudoers" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "użytkownik NIE jest autoryzowany na hoście" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "polecenie niedozwolone" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s nie występuje w pliku sudoers. Ten incydent zostanie zgłoszony.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s nie ma uprawnień do uruchamiania sudo na %s. Ten incydent zostanie zgłoszony.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Niestety użytkownik %s nie może uruchamiać sudo na %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Niestety użytkownik %s nie ma uprawnień do uruchamiania '%s%s%s' jako %s%s%s na %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: nie znaleziono polecenia" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2158,15 +2200,15 @@ msgstr "" "zignorowano plik \"%s\" znaleziony w '.'\n" "Proszę użyć \"sudo ./%s\", jeśli to \"%s\" ma być uruchomiony." -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "błąd uwierzytelniania" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "wymagane jest hasło" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2174,22 +2216,22 @@ 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:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "nie udało się wykonać dup na stdin: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "nie udało się wywołać %s: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "nie udało się wykonać fork: %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "nie udało się otworzyć potoku: %m" @@ -2199,7 +2241,7 @@ msgstr "nie udało się otworzyć potoku: %m" 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:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2208,8 +2250,7 @@ msgstr "" "\n" "Rola LDAP: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2217,42 +2258,38 @@ msgstr "" "\n" "Wpis sudoers:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " Jako użytkownicy: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " Jako grupy: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Opcje: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Polecenia:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, 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:731 +#: plugins/sudoers/parse.c:811 #, 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:749 +#: plugins/sudoers/parse.c:829 #, 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:764 +#: plugins/sudoers/parse.c:844 #, 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" @@ -2267,48 +2304,58 @@ msgstr "zignorowano niekompletne sudoRole: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "błędny atrybut LDIF: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "błędna wartość %.*s ustawiona przez frontend sudo" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "nie udało się przeanalizować listy adresów sieciowych" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "nazwa użytkownika nie ustawiona przez frontend sudo" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "ID użytkownika nie ustawiony przez frontend sudo" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "ID grupy nie ustawiony przez frontend sudo" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "nazwa hosta nie ustawiona przez frontend sudo" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "błędny katalog roboczy: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "błędny katalog chroot: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "nie udało się wywołać %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Wersja wtyczki polityki sudoers %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Wersja gramatyki pliku sudoers %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2317,86 +2364,86 @@ msgstr "" "\n" "Ścieżka do sudoers: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "ścieżka do nsswitch: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "ścieżka do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "ścieżka do ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, 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/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "nie udało się zapamiętać uid-a %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "nie udało się zapamiętać uid-a %u, już istnieje" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "nie udało się zapamiętać użytkownika %s" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "nie udało się zapamiętać użytkownika %s, już istnieje" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "nie udało się zapamiętać gid-a %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "nie udało się zapamiętać gid-a %u, już istnieje" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "nie udało się zapamiętać grupy %s" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "nie udało się zapamiętać grupy %s, już istnieje" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "nie udało się zapamiętać listy grup dla %s, już istnieje" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "nie udało się zapamiętać listy grup dla %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "nie udało się przeanalizować grup dla %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "nie udało się przeanalizować gidów dla %s" @@ -2460,239 +2507,259 @@ msgstr "ucięta ścieżka audytu user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "ucięta ścieżka audytu argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "nie udało się zainicjować źródła SSS. Czy SSSD jest zainstalowany na tej maszynie?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "nie udało się odnaleźć symbolu \"%s\" w %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "problem z wpisami domyślnymi" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "nie znaleziono poprawnych źródeł sudoers, zakończenie" +#: plugins/sudoers/sudoers.c:295 +#, 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:297 +#, 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:321 +#, 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:322 +#, 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:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "wg sudoers root nie ma prawa używać sudo" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "użytkownik nie ma pozwolenia na zmianę limitu closefrom" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "brak uprawnień do używania opcji -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, 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:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "brak tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "niestety do uruchomienia sudo konieczny jest tty" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "błędna powłoka użytkownika %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "polecenie w bieżącym katalogu" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "użytkownik nie ma uprawnień do ustawienia limitu czasu polecenia" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "niestety brak uprawnień do ustawienia limitu czasu polecenia" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "użytkownik nie ma uprawnień do zachowania środowiska" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "niestety brak uprawnień do zachowania środowiska" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "polecenie zbyt długie" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit nie musi być uruchamiany przez sudo" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "nie udało się odczytać %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "nie udało się wykonać stat na %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s nie jest zwykłym plikiem" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, 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:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s jest zapisywalny dla świata" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, 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:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "tylko root może używać \"-c %s\"" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "nieznana klasa logowania: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "nie udało się rozwiązać nazwy hosta %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "błędna opcja filtra: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "błędny maksymalny czas oczekiwania: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "błędny współczynnik szybkości: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/czas: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "Odtwarzanie sesji sudo: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "nie udało się przestawić tty w tryb surowy" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Uwaga: ten terminal jest za mały, aby właściwie odtworzyć log.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Geometria logu to %d x %d, geometria terminala to %d x %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Odtwarzanie zakończone, proszę nacisnąć dowolny klawisz, aby odzyskać terminal." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "niejednoznaczne wyrażenie \"%s\"" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "niesparowany ')' w wyrażeniu" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "nieznany warunek wyszukiwania \"%s\"" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s wymaga argumentu" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "błędne wyrażenie regularne: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "nie udało się przeanalizować daty \"%s\"" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "niesparowany '(' w wyrażeniu" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "niedozwolone kończące \"or\"" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "niedozwolony kończący \"!\"" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "nieznany typ wyszukiwania %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, 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:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, 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:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2701,7 +2768,7 @@ msgstr "" "%s - odtwarzanie logów sesji sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2729,11 +2796,11 @@ msgstr "" " -s, --speed=ile przyspieszenie lub spowolnienie wyjścia\n" " -V, --version wyświetlenie informacji o wersji i zakończenie" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\thost nie znaleziony" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2741,7 +2808,7 @@ msgstr "" "\n" "Polecenie dozwolone" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2749,7 +2816,7 @@ msgstr "" "\n" "Polecenie niedozwolone" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2794,89 +2861,89 @@ msgstr "sudoedit nie powinien być podawany ze ścieżką" 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:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "należy rozważyć użycie zamiast niej narzędzia cvtsudoers" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "wciśnięcie return przejdzie do edycji %s: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "podany edytor (%s) nie istnieje" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "nie znaleziono edytora (ścieżka = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "błąd zapisu" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, 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:512 +#: plugins/sudoers/visudo.c:513 #, 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:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "błąd edytora (%s), %s nie zmieniony" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s nie zmieniony" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, 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:611 +#: plugins/sudoers/visudo.c:610 #, 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:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "błąd wewnętrzny, nie znaleziono %s na liście!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "nie udało się ustawić (uid, gid) %s na (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s i %s nie są na tym samym systemie plików, użycie mv do zmiany nazwy" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, 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:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "błąd podczas zmiany nazwy %s, %s nie zmieniony" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Co teraz? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2888,66 +2955,66 @@ 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:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "nie udało się uruchomić %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: błędny właściciel, (uid, gid) powinny wynosić (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: błędne uprawnienia, powinny być 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: składnia poprawna\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s zajęty, proszę spróbować później" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "nie udało się zablokować %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Modyfikować mimo to? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" +msgid "Error: %s:%d: cycle in %s \"%s\"" msgstr "Błąd: %s:%d: cykl w %s \"%s\"" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" +msgid "Warning: %s:%d: cycle in %s \"%s\"" msgstr "Uwaga: %s:%d: cykl w %s \"%s\"" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" msgstr "Błąd: %s:%d: %s \"%s\" użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" msgstr "Uwaga: %s:%d: %s \"%s\" użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" +msgid "Warning: %s:%d: unused %s \"%s\"" msgstr "Uwaga: %s:%d: nie użyty %s \"%s\"" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2956,7 +3023,7 @@ msgstr "" "%s - bezpieczna edycja pliku sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2976,6 +3043,6 @@ msgstr "" " -s, --strict ścisłe sprawdzanie składni\n" " -V, --version wyświetlenie informacji o wersji i zakończenie\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "za dużo poziomów include" diff --git a/plugins/sudoers/po/pt.mo b/plugins/sudoers/po/pt.mo index 5d28d61f64415233eaf5d0defc0aaccbc410357a..d197992195bcc4ec69a14452ebf24021b4464772 100644 GIT binary patch delta 13084 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\n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -44,70 +44,73 @@ msgstr "*** Informação de SEGURANÇA para %h ***" msgid "Sorry, try again." msgstr "Enganou-se, tente de novo." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -117,323 +120,340 @@ msgstr "Enganou-se, tente de novo." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "impossível alocar memória" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "um resumo requer um nome de caminho" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "valores para \"CWD\" têm de começar por '/', '~' ou '*'" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "valores para \"CHROOT\" têm de começar com \"/\", \"~\" ou \"*\"" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "valor notbefore inválido" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "valor notafter inválido" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "valor de inacção muito grande" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "valor de inacção inválido" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existe mas não é uma pasta (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "impossível criar pasta %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "impossível alterar o modo de %s para 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "esperado JSON_STRING, obtido %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "aspas dupla em falta no nome" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "esperado JSON_OBJECT, obtido %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "erro interno, transporte %s" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "chaveta esquerda sem par" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "matriz inesperada" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "parêntese recto sem par" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "cadeia inesperada" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "dois pontos em falta após o nome" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "booleano inesperado" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "número inesperado" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u impossível analisar \"%s\"" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: ficheiro de diário inválido" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: campo de datação em falta" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: datação %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: campo de utilizador em falta" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: campo de utilizador runas em falta" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: campo de grupo runas em falta" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "erro ao ler ficheiro de temporização: %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "linha de ficheiro de temporização inválida : %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (comando continuado) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "diário já concluído, impossível reiniciar" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "impossível reiniciar o diário" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "impossível abrir %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "ficheiro de diário E/S %s/%s em falta" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: impossível procurar adiante %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "impossível localizar ponto de continuação [%lld, %ld] em %s/%s" @@ -520,17 +540,17 @@ msgstr "impossível obter método TLS do servidor: %s" msgid "unable to create TLS context: %s" msgstr "impossível criar contexto TLS: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "impossível carregar certificado %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "Impossível carregar pacote da autoridade do certificado %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "impossível carregar chave privada %s" @@ -549,28 +569,28 @@ msgstr "impossível definir versão mínima do protocolo como TLS 1.2: %s" msgid "unable to get remote IP addr" msgstr "impossível obter endereço IP remoto" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "impossível anexar dados do utilizador ao objecto ssl: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "impossível adicionar evento à fila" @@ -605,7 +625,7 @@ msgstr "" " -R, --random-drop percentagem de hipóteses das ligações caírem\n" " -V, --version mostrar informação da versão e sair\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Requerida a versão Protobuf-C 1.3 ou superior" @@ -614,9 +634,9 @@ msgstr "Requerida a versão Protobuf-C 1.3 ou superior" msgid "invalid random drop value: %s" msgstr "valor de queda aleatório inválido: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s versão %s\n" @@ -710,7 +730,7 @@ msgstr "" " -t, --test testar servidor de auditoria enviando o diário de E/S seleccionado n vezes em paralelo\n" " -V, --version mostrar informação da versão e sair\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "impossível procurar %s:%s: %s" @@ -719,122 +739,122 @@ msgstr "impossível procurar %s:%s: %s" msgid "unable to get server IP addr" msgstr "impossível obter endereço IP do servidor" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "impossível ler %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "mensagem do cliente muito grande: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: buffer de escrita já em uso" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "evento de E/S %d inesperado" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: estado %d inesperado" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "ServerHello inválido" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "recebida mensagem de erro do servidos: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "recebida mensagem de aborto do servidos: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "impossível desempacotar ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: valor type_case %d inesperado" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "leitura do servidor expirou" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "EOF prematuro" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "mensagem do servidor muito grande: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "escrita no servidor expirou" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "handshake TLS expirou" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "impossível definir o evento" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "falha na ligação TLS: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "impossível inicializar contexto ssl: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Impossível alocar objecto ssl: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Impossível anexar socket ao objecto ssl: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "tem de especificar o ponto de reinício e a ID iolog" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "impossível definir um ponto de reinício sem E/S enviada" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "saída prematura com o estado %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "tempo decorrido de envio para o servidor [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "ponto de submissão recebido do servidor [%lld, %ld]" @@ -844,11 +864,11 @@ msgstr "ponto de submissão recebido do servidor [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "Aliás \"%s\" já definido" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "impossível bifurcar" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "impossível alterar a senha para %s" @@ -870,11 +890,11 @@ msgstr "tipo de autenticação inválido" msgid "unable to initialize BSD authentication" msgstr "impossível inicializar autenticação BSD" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "a sua conta expirou" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "aprovação falhou" @@ -981,7 +1001,7 @@ msgstr "Conta expirada ou configuração PAM sem secção \"account\" para sudo, msgid "PAM account management error: %s" msgstr "Erro de gestão de conta PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "utilizador não existente na base de dados %s" @@ -1010,7 +1030,7 @@ msgstr "gestão de autenticação inválida para SecurID" msgid "SecurID communication failed" msgstr "falha na comunicação SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "erro SecurID desconhecido" @@ -1018,7 +1038,7 @@ msgstr "erro SecurID desconhecido" msgid "invalid passcode length for SecurID" msgstr "tamanho de senha inválido para SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "impossível inicializar sessão SIA" @@ -1042,7 +1062,7 @@ msgstr "Não há métodos de autenticação compilados com sudo! Se pretende des msgid "Unable to initialize authentication methods." msgstr "Impossível inicializar métodos de autenticaçao." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Métodos de autenticação:" @@ -1075,117 +1095,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "uid desconhecida: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "utilizador desconhecido: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "incremento de ordem: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "ordem inicial: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "espaço de ordem: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s versão gramatical %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "formato de entrada %s não suportado" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "formato de saída %s não suportado" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: os ficheiros de entrada e saída têm de ser diferentes" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "impossível inicializar valores predefinidos de sudoers" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: palavra-chave desconhecida: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "tipo de predefinições inválido: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "tipo de supressão inválido: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "filtro inválido: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "impossível abrir %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "falha ao analisar o ficheiro %s, erro desconhecido" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "erro de análise em %s, perto da linha %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "erro de análise em %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "impossível escrever em %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1194,7 +1215,7 @@ msgstr "" "%s - converte entre formatos de ficheiros sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1235,675 +1256,695 @@ msgstr "" " -V, --version mostra informação da versão e sai" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "entrada de predefinições \"%s\" desconhecida" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "impossível obter hora GMT" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "impossível formatar datação" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "demasiadas entradas sudoers, máximo %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "a variável de ambiente SUDOERS_BASE não está definida e a opção -b não foi especificada." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Facilidade syslog se syslog estiver a ser usado para início de sessão: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Prioridade syslog a usar quando o utilizador se autentica com sucesso: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Prioridade syslog a usar quando o utilizador não se autentica com sucesso: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Põe o prompt OPT na sua própria linha" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "Ignora \".\" em $PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Envia sempre correio quando executa sudo" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Envia correio se a autenticação do utilizador falhar" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Envia correio se o utilizador não estiver em sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Envia correio se o utilizador não estiver em sudoers neste anfitrião" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Envia correio se o utilizador não puder executar um comando" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Envia correio se o utilizador tentar executar um comando" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Usa uma datação separada para cada par utilizador/tty" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Avisar o utilizador a primeira vez que executa sudo" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Ficheiro com a lição de moral sudo: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Requer autenticação dos utilizadores por predefinição" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Root pode executar sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Regista o nome de anfitrião no diário (não-syslog)" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Regista o ano no diário (não-syslog)" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Se sudo for chamado sem argumentos, iniciar uma shel" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Definir $HOME para o utilizador alvo ao iniciar uma shell com -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Definir $HOME sempre como a pasta home do utilizador alvo" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Permite a recolha de alguma informação para dar mensagens de erro úteis" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Requer nomes de anfitrião completamente qualificados no ficheiro sudoers" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "Insulta o utilizador quando se engana na senha" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Permitir ao utilizador a execução de sudo só se tiver tty" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo honra a variável de ambiente EDITOR" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Pedir senha root, não a do utilizador" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Pedir a senha de utilizador runas_default, não a do utilizador" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Pedir a senha do utilizador alvo, não a do utilizador" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Aplica predefinições à classe de sessão do utilizador alvo, se existir" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Define as variáveis de ambiente LOGNAME e USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Definir a uid efectiva só para o utilizador alvo, não a uid real" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "Não inicializar o vector de grupo para o do utilizador alvo" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Tamanho máximo de linhas longas do diário (0 para não quebrar): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Expiração da datação de autenticação: %.1f minutos" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Expiração do pedido de senha: %.1f minutos" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Número de tentativas de inserção de senha: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask a usar ou 0777 para usar a do utilizador: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Caminho para o ficheiro de diário: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Caminho para o programa de correio: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Bandeiras para o programa de correio: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Endereço para onde enviar o correio: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Endereço de onde enviar o correio: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Linha de assunto para as mensagens: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Mensagem de senha incorrecta: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Caminho para a pasta de estado da lição de moral: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Caminho para a pasta de datação de autenticação: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Dono da pasta de datação de autenticação: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Utilizadores deste grupo estão dispensados de usar senhas e necessidades de PATH: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Pedido de senha predefinido: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se definido, o pedido de senha sobrepõe-se ao prompt do sistema em qualquer caso." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Utilizador predefinido para executar comandos: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valor a sobrepor a $PATH: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Caminho para o editor a usar com visudo: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quando pedir uma senha para o pseudo-comando \"list\": %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quando pedir uma senha para o pseudo-comando \"verify\": %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Pré-carregar as funções dummy exec contidas na biblioteca sudo_noexec" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Se a pasta LDAP está em cima, ignoramos o ficheiro sudoers" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Descritores de ficheiro >= %d será fechado antes de executar um comando" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Se definido, os utilizadores podem sobrepor o valor de \"closefrom\" com a opção -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Permite aos utilizadores definir variáveis de ambiente arbitrárias" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Repor o ambiente num conjunto predefinido de variáveis" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Variáveis de ambiente para verificar a sanidade:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Variáveis de ambiente para remover:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Variáveis de ambiente para preservar:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Papel SELinux a usar no novo contexto de segurança: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Tipo SELinux a usar no novo contexto de segurança: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Caminho para o ficheiro de ambiente específico do sudo: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Caminho para o ficheiro restrito de ambiente específico do sudo: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Idioma a usar ao analisar sudoers: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Permite ao sudo pedir uma senha mesmo que fique visível" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Fornece resposta visual no pedido de senha quando há entrada do utilizador" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Usa globbing mais rápido e menos preciso, mas não acede ao sistema de ficheiros" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "A umask especificada no sudoers sobrepõe-se à do utilizador, mesmo que seja mais permissiva" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "Regista as entradas do utilizador para o comando em execução" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "Regista a saída do comando em execução" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "Comprime diários de E/S com zlib" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Executa sempre os comandos num pseudo-tty" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Extensão para suporte de grupo não-Unix: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Pasta onde armazenar os diários de entrada/saída: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Ficheiro onde armazenar o diário de entrada/saída: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Adiciona uma entrada ao ficheiro utmp/utmpx ao alocar um pty" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Define o utilizador em utmp como utilizador runas mestre, não como utilizador chamador" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Conjunto de privilégios permitidos: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Conjunto de privilégios limite: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "Executa comandos num pty em 2º plano" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "Nome de serviço PAM a usar: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Nome de serviço PAM a usar para shells de sessão: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "Tenta estabelecer credenciais PAM para o utilizador alvo" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "Cria uma nova sessão PAM onde o comando será executado" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Realizar gestão de validação de conta PAM" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Número de sequência máximo do diário de E/S: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Activa o suporte a sudoers netgroup" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Verifica se as pastas-mãe se podem escrever ao editar ficheiros com sudoedit" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Segue ligações simbólicas ao editar ficheiros com sudoedit" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "Consulta a extensão de grupo para grupos de sistema desconhecidos" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Compara netgroups baseado em todo o conjunto: utilizador, anfitrião e domínio" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Permite executar comandos mesmo que o sudo não possa escrever no diário de auditoria" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Permite executar comandos mesmo que o sudo não possa escrever no diário de E/S" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Permite executar comandos mesmo que o sudo não possa escrever no diário" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Resolve grupos no sudoers e compara a ID de grupo, não o nome" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Entradas de diário maiores que este valor serão divididas em múltiplas mensagens de syslog: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Utilizador que será dono dos ficheiros de E/S: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupo que será dono dos ficheiros de E/S: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Modo de ficheiro a usar para os ficheiros de E/S: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Executa comandos por descritor de ficheiro em vez de por caminho: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignora entradas Defaults desconhecidas no sudoers, em vez de produzir um aviso" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Tempo em segundos após o qual cada comando será terminado: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "Permite ao utilizador especificar um tempo de inacção na linha de comandos" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Despejar dados de E/S para o disco imediatamente, em vez de usar um buffer" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "Incluir a ID de processo ao registar via syslog" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Tipo de registo de datação de autenticação: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Mensagem de falha na autenticação: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Ignorar maiúsculas ao comparar nomes de utilizadores" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Ignorar maiúsculas ao comparar nomes de grupos" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "Registar um comando permitido por sudoers" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "Registar um comando negado por sudoers" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "Servidor(es) de diários sudo aos quais ligar com a porta opcional" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Expiração do servidor de diários sudo em segundos: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Activar a opção de socket SO_KEEPALIVE no socket ligado ao servidor de diários" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Caminho para o ficheiro de pacote de CA do servidor de auditoria: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Caminho para o ficheiro de certificado de sudoers: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Caminho para o ficheiro de chave privada de sudoers: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "Verifique se o certificado do servidor de registos é válido" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Permitir o uso de runas desconhecidas e/ou ID de grupo" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "Permitir só executar comandos como utilizador com shell válida" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "Definir o utilizador remoto pam como o utilizador a executar sudo" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "Definir o anfitrião remoto pam como o nome do anfitrião local" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 +#, c-format +msgid "Working directory to change to before executing the command: %s" +msgstr "pasta de trabalho a alterar antes de executar o comando: %s" + +#: plugins/sudoers/def_data.c:560 +#, c-format +msgid "Root directory to change to before executing the command: %s" +msgstr "pasta raiz a alterar antes de executar o comando: %s" + +#: plugins/sudoers/defaults.c:184 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d entrada defaults desconhecida \"%s\"" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: entrada defaults desconhecida \"%s\"" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s entrada defaults desconhecida \"%s\"" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d sem valor especificado para \"%s\"" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: sem valor especificado para \"%s\"" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s sem valor especificado para \"%s\"" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d valores para \"%s\" têm de começar com \"/\"" - -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s valores para \"%s\" têm de começar com \"/\"" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: opção \"%s\" não recebe valores" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d opção \"%s\" não recebe valores" - -#: plugins/sudoers/defaults.c:280 -#, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s opção \"%s\" não recebe valores" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d tipo Defaults 0x%x inválido para a opção \"%s\"" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: tipo Defaults 0x%x inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s tipo Defaults 0x%x inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d valor \"%s\" é inválido para a opção \"%s\"" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: valor \"%s\" é inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s valor \"%s\" é inválido para a opção \"%s\"" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: valores para \"%s\" têm de começar com \"/\", \"~\" ou \"*\"" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: valores para \"%s\" têm de começar com \"/\", \"~\" ou \"*\"" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: valores para \"%s\" têm de começar com \"/\"" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s valores para \"%s\" têm de começar com \"/\"" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp corrompido, tamanho trocado" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "impossível reconstruir o ambiente" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "desculpe, não tem permissão para definir as seguintes variáveis de ambiente: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "erro de análise em %s perto da linha %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "erro de análise em %s" @@ -1957,88 +1998,88 @@ msgstr "impossível analisar netmask \"%s\"" msgid "Local IP address and netmask pairs:\n" msgstr "Pares endereço IP local e netmask:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "grupo desconhecido: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "impossível escrever no ficheiro de E/S: %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "impossível actualizar o ficheiro de sequência" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "impossível criar %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "impossível ligar ao servidor de diários" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: erro interno, ficheiro de diário E/S do evento %d não aberto" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "impossível ler o relógio" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: erro interno, sinal inválido %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "erro no ciclo do evento" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Falha ao criar o novo objecto SSL_CTX: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "Ligação TLS a %s:%s falhou: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "Inicialização TLS sem sucesso" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "handshake TLS sem sucesso" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "impossível obter hora do dia" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: erro interno, sinal de saída %d inválido" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "ligação ao servidor de diários perdida" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "buffer de escrita em falta" @@ -2061,18 +2102,19 @@ msgstr "tem de definir TLS_CERT em %s para usar SSL" msgid "unable to initialize LDAP: %s" msgstr "impossível inicializar LDAP: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls especificado mas LDAP libs não suporta ldap_start_tls_s() ou ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atributo sudoOrder inválido: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: porta muito grande" +#, c-format +msgid "%s: port too large" +msgstr "%s: porta muito grande" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2083,7 +2125,7 @@ msgstr "tipo de uri LDAP não suportado: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "impossível misturar URIs ldap e ldaps" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "impossível converter sudoOption: %s%s%s" @@ -2092,66 +2134,66 @@ msgstr "impossível converter sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "impossível abrir o sistema de auditoria" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "impossível enviar mensagem de auditoria" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "impossível abrir o diário: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "impossível bloquear o diário: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "impossível escrever o diário: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "utilizador NÃO está no sudores" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "utilizador NÃO autorizado no anfitrião" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "comando não permitido" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s não está no ficheiro sudoers. O incidente será reportado.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s não tem permissão para executar sudo em %s. O incidente será reportado.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Desculpe, %s não pode executar sudo em %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Desculpe, %s não tem permissão para executar \"%s%s%s\" como %s%s%s em %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2160,37 +2202,37 @@ msgstr "" "a ignorar \"%s\" encontrado em \".\"\n" "Use \"sudo ./%s\" se este é o \"%s\" que deseja executar." -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "falha de autenticação" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "é necessária uma senha" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u tentativa incorrecta" msgstr[1] "%u tentativas incorrectas" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "impossível duplicar stdin: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "impossível executar %s: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "impossível bifurcar: %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "impossível abrir túnel: %m" @@ -2200,7 +2242,7 @@ msgstr "impossível abrir túnel: %m" msgid "digest for %s (%s) is not in %s form" msgstr "resumo para %s (%s) não está na forma %s" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2209,8 +2251,7 @@ msgstr "" "\n" "Papel LDAP: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2218,42 +2259,38 @@ msgstr "" "\n" "Entrada sudoers:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Opções: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Comandos:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Entradas Defaults correspondentes para %s em %s:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Predefinições Runas específicas de comandos para %s:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "O utilizador %s pode executar os seguintes comandos em %s:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "O utilizador %s não tem permissão para executar sudo em %s.\n" @@ -2268,48 +2305,58 @@ msgstr "a ignorar sudoRole incompleto: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "atributo LDIF inválido: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "%.*s inválido definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "impossível analisar a lista de endereços da rede" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "nome de utilizador não definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "ID de utilizador não definida pelo front-end do sudo" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "ID de grupo não definida pelo front-end do sudo" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "Nome de anfitrião não definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "pasta de trabalho inválida: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "pasta chroot inválida: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "impossível executar %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Extensão de política sudoers versão %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Gramática do ficheiro sudoers versão %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2318,86 +2365,86 @@ msgstr "" "\n" "Caminho do sudoers: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "caminho nsswitch: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "caminho do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "caminho do ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "impossível registar hook do tipo %d (versão %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "impossível guardar uid %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "impossível guardar uid %u, já existe" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "impossível guardar utilizador %s" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "impossível guardar utilizador %s, já existe" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "impossível guardar gid %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "impossível guardar gid %u, já existe" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "impossível guardar grupo %s" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "impossível guardar grupo %s, já existe" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "impossível guardar lista de grupo para %s, já existe" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "impossível guardar lista de grupos para %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "impossível analisar grupos para %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "impossível analisar gids para %s" @@ -2461,239 +2508,259 @@ msgstr "caminho de auditoria truncado user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "caminho de auditoria truncado argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "impossível inicializar fonte SSS. Tem o SSSD instalado?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "impossível encontrar símbolo \"%s\" em %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "problema com entradas defaults" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "sme fontes sudoers válidas, a sair" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "utilizador sem permissão para alterar pasta chroot para %s" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "não tem permissão para usar a opção -R com %s" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "utilizador sem permissão para alterar pasta para %s" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "não tem permissão para usar a opção -D com %s" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers especifica que root não tem permissão para sudo" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "utilizador não autorizado a sobrepor o limite closefrom" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "não tem permissão para usar a opção -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "dono da datação (%s): utilizador inexistente" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "sem tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "desculpe, tem de ter um tty para executar sudo" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "shell inválida para o utilizador %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "comando na pasta actual" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "utilizador sem permissão para definir um tempo de expiração" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "desculpe, não tem permissão para definir um tempo de inacção" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "utilizador sem permissão para definir preservar o ambiente" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "desculpe, não tem permissão para preservar o ambiente" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "comando muito longo" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit não precisa de ser executado via sudo" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "impossível ler %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "impossível obter informações de %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s não é um ficheiro normal" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s é propriedade de uid %u, deveria ser %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s é escrito universalmente" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s é propriedade de gid %u, deveria ser %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "só root pode usar \"-c %s\"" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "classe de sessão desconhecida: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "impossível resolver o anfitrião %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "opção de filtro inválida: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "espera máxima inválida: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "factor de velocidade inválido: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/temporização: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "A reproduzir sessão sudo: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "impossível definir tty para modo raw" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Aviso: o seu terminal é muito pequeno para reproduzir correctamente o diário.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "A geometria do diário é %d x %d, o seu terminal é %d x %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Reprodução terminada, prima qualquer tecla para restaurar o terminal." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expressão ambígua \"%s\"" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "\")\" sem par em expressão" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "termo de procura \"%s\" desconhecido" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s requer um argumento" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "expressão regular inválida: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "impossível analisar a data \"%s\"" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "\"(\" sem par em expressão" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "\"or\" final ilegal" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "\"!\" final ilegal" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "tipo de procura %d desconhecido" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "uso: %s [-hnRS] [-d pasta] [-m núm] [-s núm] ID\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uso: %s [-h] [-d pasta] -l [expressão de procura]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2702,7 +2769,7 @@ msgstr "" "%s - reproduz os diários de sessão sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2730,11 +2797,11 @@ msgstr "" " -s, --speed=número acelera ou trava a saída\n" " -V, --version mostra informação da versão e sai" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\thost sem correspondência" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2742,7 +2809,7 @@ msgstr "" "\n" "Comando permitido" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2750,7 +2817,7 @@ msgstr "" "\n" "Comando negado" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2795,89 +2862,89 @@ msgstr "sudoedit não deve ser especificado com um caminho" msgid "the -x option will be removed in a future release" msgstr "a opção -x será removida numa futura versão" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "por favor, considere usar antes o utilitário cvtsudoers" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "prima Enter para editar %s: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "o editor especificado (%s) não existe" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "sem editor (caminho do editor = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "erro de escrita" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "impossível obter informação do ficheiro temporário (%s), %s inalterado" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "ficheiro temporário de tamanho zero (%s), %s inalterado" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "falha no editor (%s), %s inalterado" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s inalterado" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "impossível reabrir o ficheiro temporário (%s), %s inalterado." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "impossível analisar o ficheiro temporário (%s), erro desconhecido" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "erro interno, impossível encontrar %s na lista!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "impossível definir (uid, gid) de %s para (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s e %s em sistemas de ficheiros diferentes, a usar mv para renomear" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "falha no comando: \"%s %s %s\", %s inalterado" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "erro ao renomear %s, %s inalterado" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "E agora?" -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2889,66 +2956,66 @@ msgstr "" " (x) sair sem gravar as alterações ao ficheiro sudoers\n" " (Q) sair e gravar as alterações ao ficheiro sudoers (PERIGO!)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "impossível executar %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: dono errrado (uid, gid), deveria ser (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permissões erradas, devia ser modo 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: análise com sucesso\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s ocupado, tente mais tarde" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "impossível bloquear %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Editar mesmo assim ? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Erro: %s:%d ciclo em %s \"%s\"" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "Erro: %s:%d: ciclo em %s \"%s\"" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Aviso: %s:%d ciclo em %s \"%s\"" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "Aviso: %s:%d: ciclo em %s \"%s\"" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Erro: %s:%d %s \"%s\" referenciado mas não definido" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Erro: %s:%d: %s \"%s\" referenciado mas não definido" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Aviso: %s:%d %s \"%s\" referenciado mas não definido" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Aviso: %s:%d: %s \"%s\" referenciado mas não definido" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Aviso: %s:%d não usado %s \"%s\"" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "Aviso: %s:%d: não usado %s \"%s\"" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2957,7 +3024,7 @@ msgstr "" "%s - editar com segurança o ficheiro sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2977,10 +3044,13 @@ msgstr "" " -s, --strict verificação de sintaxe estrita\n" " -V, --version mostra informação da versão e sai\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "demasiados níveis de includes" +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: porta muito grande" + #~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" #~ msgstr "SSL_connect falhou: ssl_error=%d, stack=%s\n" diff --git a/plugins/sudoers/po/pt_BR.mo b/plugins/sudoers/po/pt_BR.mo index 86bbf68e986b21fdfbfeef510e80aa40518acdd1..88b1b5e75197050992ca68944cf00e2fcfbcf494 100644 GIT binary patch delta 13316 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 P{@<7Mv6pxY?r!@(#>$Q_ delta 12206 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 J{e#c){{bg$LUI5A diff --git a/plugins/sudoers/po/pt_BR.po b/plugins/sudoers/po/pt_BR.po index df04756a5e..9c12dbf60a 100644 --- a/plugins/sudoers/po/pt_BR.po +++ b/plugins/sudoers/po/pt_BR.po @@ -3,20 +3,21 @@ # Copyright (C) 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the sudo package. # Rafael Fontenelle , 2013-2020. +# msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 11:45-0300\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 07:16-0300\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Virtaal 1.0.0-beta1\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"X-Generator: Gtranslator 3.38.0\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: confstr.sh:1 @@ -43,70 +44,73 @@ msgstr "*** Informação de SEGURANÇA para %h ***" msgid "Sorry, try again." msgstr "Sinto muito, tente novamente." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -116,325 +120,342 @@ msgstr "Sinto muito, tente novamente." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "não foi possível alocar memória" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "um digest requer um nome de caminho" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "valores para \"CWD\" devem iniciar com um \"/\", \"~\" ou \"*\"" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "valores para \"CHROOT\" devem iniciar com um \"/\", \"~\" ou \"*\"" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "valor de notbefore inválido" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "falha de notafter inválido" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "valor de timeout grande demais" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "valor de timeout inválido" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existe, mas não é um diretório (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "não foi possível fazer mkdir %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "não foi possível alterar modo de %s para 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "esperava JSON_STRING, obteve %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "faltando aspas duplas no nome" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "esperava JSON_OBJECT, obteve %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "erro interno, estouro de pilha de %s" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "chave de fechamento sem correspondente" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "array inesperado" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "colchete de fechamento sem correspondente" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "string inesperada" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "faltando caractere de dois pontos após o nome" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "booleano inesperado" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "número inesperado" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u não foi possível analisar \"%s\"" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: arquivo de log inválido" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: campo de marca de tempo está faltando" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marca de tempo %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: campo de usuário está faltando" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: campo de usuário, a ser executado como, está faltando" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: campo de grupo, a ser executado como, está faltando" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "erro ao ler o arquivo timing: %s" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "linha inválida no arquivo timing: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (comando continuado) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "o log já está completo, não é possível ser reiniciado" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "não foi possível reiniciar o log" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "não foi possível abrir %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "faltando arquivo de log de E/S %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: não foi possível buscar para frente %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "não foi possível localizar o ponto de resumo [%lld, %ld] em %s/%s" @@ -521,17 +542,17 @@ msgstr "não foi possível obter o método do servidor TLS: %s" msgid "unable to create TLS context: %s" msgstr "não foi possível criar o contexto de TLS: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "não foi possível carregar o certificado %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "não foi possível carregar o novo pacote de autoridade certificadora %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "não foi possível carregar a chave privada %s" @@ -550,28 +571,28 @@ msgstr "não foi possível definir a versão mínima do protocolo para TLS 1.2: msgid "unable to get remote IP addr" msgstr "não foi possível obter o endereço IP remoto" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Não foi possível anexar dados do usuário ao objeto ssl: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "não foi possível adicionar evento para a fila" @@ -606,7 +627,7 @@ msgstr "" " -R, --random-drop chance em porcentagem das conexões caírem\n" " -V, --version exibe a informação da versão e sai\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Protobuf-C versão 1.3 ou superior é necessário" @@ -616,9 +637,9 @@ msgstr "Protobuf-C versão 1.3 ou superior é necessário" msgid "invalid random drop value: %s" msgstr "valor de \"random-drop\" inválido: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s versão %s\n" @@ -714,7 +735,7 @@ msgstr "" " E/S selecionado n vezes em paralelo\n" " -V, --version exibe informações de versão e sai\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "não foi possível procurar %s:%s: %s" @@ -723,122 +744,122 @@ msgstr "não foi possível procurar %s:%s: %s" msgid "unable to get server IP addr" msgstr "não foi possível obter o endereço IP" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "não foi possível ler %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "mensagem do cliente grande demais: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: buffer de escrita já em uso" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "E/S com evento inesperado %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: estado inesperado %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "ServerHello inválido" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "mensagem de erro recebida do servidor: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "mensagem de abortar recebida do servidor: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "não foi possível desempacotar ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: type_case com valor inesperado %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "esgotado o tempo limite de leitura do servidor" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "EOF prematuro" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "mensagem do servidor grande demais: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "esgotado o tempo limite de escrita para servidor" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "esgotado o tempo limite da negociação TLS" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "não foi possível definir evento" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "falha de conexão de TLS: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Não foi possível inicializar o contexto de ssl: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Não foi possível alocar objeto ssl: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Não foi possível anexar soquete ao objeto ssl: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "ambos ponto de ponto de reinício e ID do iolog devem ser especificados" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "um ponto de reinício pode não estar definido quando nenhuma E/S é enviada" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "sai prematuramente com estado %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "tempo decorrido enviado ao servidor [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "ponto de confirmação recebido do servidor [%lld, %ld]" @@ -848,11 +869,11 @@ msgstr "ponto de confirmação recebido do servidor [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "Alias \"%s\" já definido" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "não foi possível fazer fork" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "não foi possível alterar a senha para %s" @@ -874,11 +895,11 @@ msgstr "tipo de autenticação inválida" msgid "unable to initialize BSD authentication" msgstr "não foi possível inicializar autenticação BSD" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "sua conta expirou" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "aprovação falhou" @@ -985,7 +1006,7 @@ msgstr "Conta expirou ou a configuração do PAM não possui uma seção \"accou msgid "PAM account management error: %s" msgstr "erro de gerenciamento de conta PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "você não existe no banco de dados de %s" @@ -1014,7 +1035,7 @@ msgstr "manipulação inválida de autenticação para SecurID" msgid "SecurID communication failed" msgstr "falha de comunicação de SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "erro de SecurID desconhecido" @@ -1022,7 +1043,7 @@ msgstr "erro de SecurID desconhecido" msgid "invalid passcode length for SecurID" msgstr "comprimento de senha inválida para SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "não foi possível inicializar a sessão SIA" @@ -1046,7 +1067,7 @@ msgstr "Não há métodos de autenticação compilados no sudo! Se você quiser msgid "Unable to initialize authentication methods." msgstr "Não foi possível inicializar métodos de autenticação." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Métodos de autenticação:" @@ -1079,117 +1100,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "uid desconhecido: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "usuário desconhecido: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "incremento de ordem: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "ordem inicial: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "preenchimento de ordem: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "gramática de %s versão %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "formato de entrada sem suporte %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "formato de saída sem suporte %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: arquivos de entrada e saída devem ser diferentes" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "não foi possível inicializar valores padrões do sudoers" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: palavra-chave desconhecida: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "tipo de defaults inválido: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "tipo de supressão inválida: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "filtro inválido: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "não foi possível abrir %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "falha em analisar o arquivo %s, erro desconhecido" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "erro de análise em %s perto da linha %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "erro de análise em \"%s\"\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "não foi possível gravar em %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1198,7 +1220,7 @@ msgstr "" "%s - converte entre formatos de arquivo sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1240,677 +1262,697 @@ msgstr "" " -V, --version exibe informações de versão e sai" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" -msgstr "entrada padrão \"%s\" desconhecido" +msgstr "entrada de Defaults \"%s\" desconhecida" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "não foi possível obter o horário GMT" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "não é possível formatar marca de tempo" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "entradas de sudoers demais, máximo %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "a variável de ambiente SUDOERS_BASE não está definida e a opção -b não foi especificada." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Facilidade do syslog, se syslog estiver sendo usado para registrar logs: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Prioridade do syslog para usar quando um usuário autenticar com sucesso: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Prioridade do syslog para usar quando um usuário não usuário autenticar com sucesso: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Colocar prompt OTP na sua própria linha" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "Ignorar \".\" no $PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Sempre envia correio quando sudo for executado" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Envia correio se a autenticação de um usuário falhar" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Envia correio se o usuário não estiver no sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Envia correio se o usuário não estiver no sudoers desta máquina" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Envia correio se o usuário não tiver permissão para executar um comando" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Envia correio se o usuário tentar executar um comando" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Usa uma marca de tempo separada para cada combo usuário/tty" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Instrui o usuário na primeira vez que ele executar sudo" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Arquivo contendo as instruções do sudo: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Exige que os usuários se autentiquem, por padrão" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Root pode executar sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Registra o nome da máquina no arquivo de log (não-syslog)" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Registra o ano no arquivo de log (não-syslog)" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Se sudo for chamado sem argumentos, inicia um shell" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Define $HOME com o usuário alvo ao iniciar um shell com -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Sempre define $HOME para a pasta pessoal do usuário alvo" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Permite juntar algumas informações para fornecer mensagens de erro úteis" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Exige nomes de máquina completos (FQDN) no arquivo sudoers" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "Insulta o usuário quando ele digitar uma senha incorreta" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Permite que o usuário execute sudo apenas se ele tiver um tty" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo vai honrar a variável de ambiente EDITOR" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Pede a senha do root, e não a do usuário" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Pede a senha do usuário runas_default, e não a do usuário" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Pede a senha do usuário alvo, e não a do usuário" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Aplica o padrão na classe de login do usuário alvo, se houver alguma" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Define as variáveis de ambiente LOGNAME e USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Define o uid efetivo apenas para o usuário alvo, e não o uid real" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "Não inicializa o vetor de grupos para aquele usuário alvo" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Comprimento da quebra de linha do arquivo de log (0 para sem quebra): %u" # "Limite de tempo da marca de tempo de autenticação" ficaria estranho, então utilizei "... expira em" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Marca de tempo de autenticação expira em: %.1f minutos" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Pedido de senha expira em: %.1f minutos" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Número de tentativas para digitar senha: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask a ser usada ou 0777 para usar do usuário: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Caminho para o arquivo de log: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Caminho para o programa de correio: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Opções para o programa de correio: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Endereço para onde enviar correio: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Endereço de onde enviar correio: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Linha do assunto para as mensagens de correio: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Mensagem de senha incorreta: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Caminho para o diretório de status de instruções: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Caminho para diretório de marca de tempo de autenticação: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Dono do diretório de marca de tempo de autenticação: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Usuários neste grupo estão eximidos da exigência de senha e PATH: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Pedido de senha padrão: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se definido, o pedido de senha vai sobrescrever o do sistema em todos os casos." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Usuário padrão para se executar comandos: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valor para sobrescrever o $PATH do usuário: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Caminho do editor a ser usado pelo visudo: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quando exigir uma senha para o pseudo-comando \"list\": %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quando exigir uma senha para o pseudo-comando \"verify\": %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Pré-carrega as funções de exec de teste contidas na biblioteca sudo_noexec" # ideia da frase original: se acontecer algo, se deve ou não ignorar. Traduzi reorganizando a frase com a finalidade de manter a ideia original. -- Rafael -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Estando o diretório LDAP disponível, se devemos ignorar o arquivo sudoers local" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Descritores, de arquivos, >= %d serão fechados antes de executar um comando" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Se definido, usuários podem sobrescrever o valor de \"closefrom\" com a opção -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Permite que usuários definam variáveis de ambiente arbitrárias" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Redefine o ambiente para um conjunto padrão de variáveis" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Variáveis de ambiente nas quais deve-se verificar sanidade:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Variáveis de ambiente para remover:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Variáveis de ambiente para preservar:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Papel SELinux para usar no novo contexto de segurança: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Tipo SELinux para usar no novo contexto de segurança: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Caminho do arquivo de ambiente específico do sudo: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Caminho do arquivo restrito de ambiente específico do sudo: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Localização para usar ao analisar o sudoers: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Permite ao sudo solicitar uma senha mesmo se ele estiver visível" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Fornece feedback visual na solicitação de senha quando houver entrada do usuário" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Usa um englobamento mais rápido que é menos preciso, mas não acessa o sistema de arquivos" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "O umask especificado no sudoers vai sobrescrever o do usuário, mesmo se ele foi mais permissivo" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "Registra no log a entrada do usuário para o comando sendo executado" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "Registra no log a saída do comando sendo executado" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "Comprime logs I/O usando zlib" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Sempre executa comandos em um pseudo-tty" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plug-in para suporte a grupo não-Unix: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Diretório no qual devem ser armazenados os logs de entrada/saída: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Arquivo no qual deve ser armazenado o log de entrada/saída: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Adiciona uma entrada ao arquivo utmp/utmpx ao alocar um pty" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Define o usuário em utmp como usuário a ser executado como, e não o usuário a ser chamado" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Conjunto de privilégios permitidos: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Conjunto de privilégios limitados: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "Executa comandos em um pty em plano de fundo" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "Nome do serviço PAM para usar: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Nome do serviço PAM para usar para shells de login: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "Tenta estabelecer as credenciais PAM para o usuário alvo" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "Cria uma nova sessão PAM para o comando ser executado nela" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Realiza de gerenciamento de validação de conta PAM" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Número máximo de sequência de log de E/S: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Habilita suporte a netgroup no sudoers" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Verifica diretórios pai para capacidade de gravação ao editar arquivos com sudoedit" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Segue links simbólicos ao editar arquivos com sudoedit" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "Consulta o plug-in de grupo por grupos de sistema desconhecidos" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Compara netgroups baseada em toda tupla: usuário, máquina e domínio" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Permite comandos serem executados mesmo se sudo não puder escrever em logs de auditoria" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Permite comandos serem executados mesmo se sudo não puder escrever em logs de E/S" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Permite comandos serem executados mesmo se sudo não puder escrever no arquivo de log" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Resolve grupos no sudoers e corresponde ao ID de grupo, e não o nome" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Entradas de log maiores que este valor serão divididos em múltiplas mensagens de syslog: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Usuário que será dono dos arquivos de log de E/S: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Grupo que será dono dos arquivos de log de E/S: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Modo de arquivo usado para os arquivos de log de E/S: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Executa comandos pelo descritor de arquivo em vez de pelo caminho: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ignora entradas desconhecidas de Defaults no sudoers em vez de produzir um aviso" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Tempo em segundos após o qual o comando será terminado: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "Permite o usuário especificar um tempo limite na linha de comando" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Descarrega os dados de log de E/S para o disco imediatamente em vez de armazenar no buffer" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "Inclui o ID de processo ao registrar log via syslog" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Tipo de registro de marca de tempo de autenticação: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Mensagem de falha de autenticação: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Ignora maiúsculo/minúsculo ao corresponder nomes de usuário" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Ignora maiúsculo/minúsculo ao corresponder nomes de grupo" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "Registra quando um comando é permitido por sudoers" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "Registra quando um comando é negado por sudoers" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "Servidor(es) de log do sudo para conectar com porta opcional" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Tempo limite do servidor de log do sudo em segundos: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Habilita a opção de soquete SO_KEEPALIVE no soquete conectado ao servidor de log" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Caminho do arquivo de pacote de AC do servidor de auditoria: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Caminho do arquivo de certificado do sudoers: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Caminho do arquivo de chave privada do sudoers: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "Verifica se o certificado do servidor de log é válido" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Permite o uso de ID desconhecido do usuário e/ou grupo a ser executado como" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "Permite apenas a execução de comandos como um usuário com um shell válido" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "Define o usuário remoto pam como o usuário executando o sudo" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "Define a máquina remota pam com o nome da máquina local" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d entrada padrão \"%s\" desconhecida" +msgid "Working directory to change to before executing the command: %s" +msgstr "Diretório de trabalho para o qual alterar antes de executar o comando: %s" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/def_data.c:560 +#, c-format +msgid "Root directory to change to before executing the command: %s" +msgstr "Diretório raiz para o qual alterar antes de executar o comando: %s" + +#: plugins/sudoers/defaults.c:184 +#, c-format +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: entrada padrão \"%s\" desconhecida" + +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: entrada padrão \"%s\" desconhecida" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d nenhum valor especificado para \"%s\"" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: nenhum valor especificado para \"%s\"" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: nenhum valor especificado para \"%s\"" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d valores para \"%s\" devem iniciar com um \"/\"" - -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: valores para \"%s\" devem iniciar com um \"/\"" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: a opção \"%s\" não aceita um valor" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d opção \"%s\" não leva um valor" +msgid "%s: option \"%s\" does not take a value" +msgstr "%s: a opção \"%s\" não leva um valor" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s: option \"%s\" does not take a value" -msgstr "%s: opção \"%s\" não leva um valor" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: tipo de Defaults 0x%x inválido para a opção \"%s\"" #: plugins/sudoers/defaults.c:305 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d Tipo de padrões 0x%x inválido para a opção \"%s\"" +msgid "%s: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s: Tipo de Defaults 0x%x inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s: invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s: Tipo de padrões 0x%x inválido para a opção \"%s\"" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: valor \"%s\" é inválido para a opção \"%s\"" #: plugins/sudoers/defaults.c:318 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d valor \"%s\" é inválido para a opção \"%s\"" +msgid "%s: value \"%s\" is invalid for option \"%s\"" +msgstr "%s: o valor \"%s\" é inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s: value \"%s\" is invalid for option \"%s\"" -msgstr "%s: valor \"%s\" é inválido para a opção \"%s\"" +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: valores para \"%s\" devem iniciar com um \"/\", \"*\" ou \"*\"" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: valores para \"%s\" devem iniciar com um \"/\", '*', ou '*'" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: valores para \"%s\" devem iniciar com um \"/\"" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: valores para \"%s\" devem iniciar com um \"/\"" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp corrompido, cumprimento não confere" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "não foi possível recompilar o ambiente" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "sinto muito, você não tem permissão para definir as seguintes variáveis de ambiente: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "erro de análise em %s próximo à linha %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "erro de análise em %s" @@ -1964,88 +2006,88 @@ msgstr "não foi possível analisar a máscara de rede \"%s\"" msgid "Local IP address and netmask pairs:\n" msgstr "Par de endereço IP e máscara de rede locais:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "grupo desconhecido %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "não foi possível gravar no arquivo de log de E/S: %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "não foi possível atualizar o arquivo de sequência" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "não foi possível criar %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "não foi possível conectar ao servidor de log" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: erro interno, o arquivo de log de E/S para evento %d não está aberto" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "não foi possível ler do relógio" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: erro interno, sinal inválido %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "erro no evento de loop" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Criação do novo objeto SSL_CTX falhou: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "falha de conexão de TLS com %s:%s: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "A inicialização do TLS não teve êxito" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "A negociação TLS não teve êxito" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "não foi possível obter o horário do dia" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: erro interno, status de saída inválido %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "conexão perdida com o servidor de log" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "faltando buffer de escrita" @@ -2068,18 +2110,19 @@ msgstr "você deve definir TLS_CERT em %s para usar SSL" msgid "unable to initialize LDAP: %s" msgstr "não foi possível inicializar LDAP: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls especificado, mas bibliotecas LDAP não possuem suporte a ldap_start_tls_s() ou ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atributo sudoOrder inválido: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: porta muito grande" +#, c-format +msgid "%s: port too large" +msgstr "%s: porta grande demais" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2090,7 +2133,7 @@ msgstr "tipo de uri LDAP sem suporte: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "não foi possível misturar ldap e ldaps URIs" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "não foi possível converter sudoOption: %s%s%s" @@ -2099,66 +2142,66 @@ msgstr "não foi possível converter sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "não foi possível abrir o sistema de auditoria" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "não foi possível enviar mensagem de auditoria" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "não foi possível abrir o arquivo de log: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "não foi possível travar o arquivo de log: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "não foi possível gravar no arquivo de log: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "usuário NÃO ESTÁ no sudoers" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "usuário NÃO ESTÁ autorizado na máquina" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "comando não permitido" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s não está no arquivo sudoers. Este incidente será relatado.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s não tem permissão para executar sudo em %s. Este incidente será relatado.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Sinto muito, usuário %s não pode executar sudo em %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Sinto muito, usuário %s não tem permissão para executar \"%s%s%s\" como %s%s%s em %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2167,37 +2210,37 @@ msgstr "" "ignorando \"%s\" encontrado em \".\"\n" "Use \"sudo ./%s\" se isto é o \"%s\" que você deseja executar." -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "falha de autenticação" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "uma senha é necessária" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u tentativa de senha incorreta" msgstr[1] "%u tentativas de senha incorreta" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "não foi possível fazer dup da entrada padrão: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "não foi possível executar %s: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "não foi possível fazer fork: %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "não foi possível abrir um encadeamento (pipe): %m" @@ -2207,7 +2250,7 @@ msgstr "não foi possível abrir um encadeamento (pipe): %m" msgid "digest for %s (%s) is not in %s form" msgstr "digest de %s (%s) não está na forma %s" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2216,8 +2259,7 @@ msgstr "" "\n" "Papel LDAP: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2225,42 +2267,38 @@ msgstr "" "\n" "Entradas no sudoers:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " UsuáriosRunAs: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " GruposRunAs: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Opções: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Comandos:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Entradas de Defaults correspondentes a %s em %s:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" -msgstr "Padrões específicos de comandos e \"runas\" de %s:\n" +msgstr "Padrão específico de comandos e \"runas\" de %s:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Usuário %s pode executar os seguintes comandos em %s:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Usuário %s não tem permissão para executar sudo em %s.\n" @@ -2275,48 +2313,58 @@ msgstr "ignorando sudoRole incompleto: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "atributo LDIF inválido: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "%.*s inválido definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "não foi possível analisar a lista de endereços de rede" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "nome de usuário não definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "ID de usuário não definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "ID de grupo não definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "nome da máquina não definido pelo front-end do sudo" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "diretório de trabalho inválido: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "diretório de chroot inválido: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "não foi possível executar %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versão de plug-in de política do sudoers %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versão de gramática de arquivo do sudoers %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2325,86 +2373,86 @@ msgstr "" "\n" "Caminho do sudoers: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "caminho do nsswitch: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "caminho do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "caminho do ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "não foi possível registrar hook do tipo %d (versão %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "não foi possível fazer cache de uid %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "não foi possível fazer cache de uid %u, já existe" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "não foi possível fazer cache de usuário %s" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "não foi possível fazer cache de usuário %s, já existe" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "não foi possível fazer cache de gid %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "não foi possível fazer cache de gid %u, já existe" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "não foi possível fazer cache de grupo %s" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "não foi possível fazer cache de grupo %s, já existe" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "não foi possível fazer cache da lista de grupos de %s, já existe" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "não foi fazer cache de lista de grupos para %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "não foi possível analisar grupos de %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "não foi possível analisar os gids de %s" @@ -2468,241 +2516,261 @@ msgstr "caminho de auditoria truncado user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "caminho de auditoria truncado argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "não foi possível inicializar a fonte SSS. SSSD está instalado em sua máquina?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "não foi possível localizar símbolo \"%s\" em %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "problema com o entradas padrão" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "nenhuma fonte de sudoers válida encontrada; saindo" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "usuário sem permissão para alterar o diretório raiz para %s" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "você não tem permissão para usar a opção -R com %s" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "usuário sem permissão para alterar o diretório para %s" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "você não tem permissão para usar a opção -D com %s" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers especifica que o root não tem permissão para usar sudo" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "usuário sem permissão para substituir o limite closefrom" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "você não tem permissão para usar a opção -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "dono da marca de tempo (%s): Usuário inexistente" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "nenhum tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "sinto muito, você deve ter um tty para executar sudo" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "shell inválido para o usuário %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "comando no diretório atual" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "usuário sem permissão para definir um tempo limite de comando" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "sinto muito, você não tem permissão para definir um tempo limite de comando" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "usuário sem permissão para preservar o ambiente" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "sinto muito, você não tem permissão para preservar o ambiente" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "comando muito grande" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit não precisa ser executado via sudo" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "não foi possível ler %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "não foi possível obter o estado de %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s não é um arquivo comum" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s tem como dono o uid %u, deveria ser %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s é gravável globalmente" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s tem como dono o gid %u, deveria ser %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "apenas o root pode usar \"-c %s\"" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "classe de login desconhecida: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "não foi possível resolver máquina %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "opção de filtro inválida: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "espera máxima inválida: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "fator de velocidade inválido: %s" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "Reproduzindo sessão de sudo: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "não foi possível definir o tty para modo raw" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Aviso: seu terminal é muito pequeno para reproduzir adequadamente o log.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Geometria do log é %d x %d; geometria do seu terminal é %d x %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Reprodução finalizada, pressione qualquer tecla para restaurar o terminal." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expressão ambígua \"%s\"" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "\")\" não coincidente na expressão" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "termo de pesquisa desconhecido \"%s\"" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s requer um argumento" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "expressão regular inválida: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "não foi possível analisar a data \"%s\"" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "\"(\" sem correspondente na expressão" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "fim de linha ilegal com \"or\"" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "fim de linha ilegal com \"!\"" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "tipo de pesquisa desconhecido %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "uso: %s [-hnRS] [-d diretório] [-m número] [-s número] ID\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uso: %s [-h] [-d diretório] -l [expressão de pesquisa]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2711,7 +2779,7 @@ msgstr "" "%s - reproduz logs de sessão do sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2740,11 +2808,11 @@ msgstr "" " -s, --speed=núm aumenta ou diminui a velocidade da saída\n" " -V, --version exibe a informação da versão e sai" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tmáquina sem correspondente" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2752,7 +2820,7 @@ msgstr "" "\n" "Comando permitido" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2760,7 +2828,7 @@ msgstr "" "\n" "Comando negado" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2805,89 +2873,89 @@ msgstr "sudoedit não deve ser especificado com um caminho" msgid "the -x option will be removed in a future release" msgstr "a opção -x será removida em um lançamento futuro" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "por favor, em vez disso, considere usar o utilitário cvtsudoers" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "pressione enter para editar %s: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "editor especificado (%s) não existe" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "nenhum editor encontrado (caminho do editor = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "erro de escrita" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "não foi possível obter estado de arquivo temporário (%s), %s sem alteração" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "arquivo de temporário (%s) com comprimento zero, %s sem alteração" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s sem alteração" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "não foi possível reabrir arquivo temporário (%s), %s sem alteração." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "não foi possível analisar arquivo temporário (%s), erro desconhecido" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "erro interno, não foi possível localizar %s na lista!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "não foi possível definir (uid, gid) de %s para (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s e %s não estão no mesmo sistema de arquivos, usando mv para renomear" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comando \"%s %s %s\" falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "erro ao renomear %s, %s sem alteração" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Agora o que? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2899,66 +2967,66 @@ msgstr "" " e(x)it - sair sem salvar alterações no arquivo sudoers\n" " (Q)uit - sair e salvar alterações no arquivo sudoers (PERIGO!)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "não foi possível executar %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: dono (uid, gid) incorreto; deveria ser (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permissões incorretas; deveria estar no modo 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: análise OK\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s ocupado, tente novamente" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "não foi possível travar %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Editar mesmo assim? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Erro: %s:%d ciclo em %s \"%s\"" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "Erro: %s:%d: ciclo em %s \"%s\"" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Aviso: %s:%d ciclo em %s \"%s\"" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "Aviso: %s:%d: ciclo em %s \"%s\"" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Erro: %s:%d %s \"%s\" referenciado, mas não definido" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Erro: %s:%d: %s \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Aviso: %s:%d %s \"%s\" referenciado, mas não definido" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Aviso: %s:%d: %s \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Aviso: %s:%d %s não usado \"%s\"" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "Aviso: %s:%d: %s não usado \"%s\"" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2967,7 +3035,7 @@ msgstr "" "%s - edita o arquivo sudoers com segurança\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2987,10 +3055,13 @@ msgstr "" " -s, --strict verificação rigorosa de sintaxe\n" " -V, --version exibe a informação da versão e sai\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "níveis de inclusões demais" +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: porta muito grande" + #~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" #~ msgstr "SSL_connect falhou: ssl_error=%d, stack=%s\n" diff --git a/plugins/sudoers/po/sr.mo b/plugins/sudoers/po/sr.mo index ecf7bf28faa0d901bc1746955cf18d6d5c84f899..38e4ac3c7ea957caafc37fae4b0a8b60ec06b24f 100644 GIT binary patch delta 14805 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 delta 13234 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 diff --git a/plugins/sudoers/po/sr.po b/plugins/sudoers/po/sr.po index 6cf7f9fad0..dc8edffde9 100644 --- a/plugins/sudoers/po/sr.po +++ b/plugins/sudoers/po/sr.po @@ -3,10 +3,10 @@ # Мирослав Николић , 2014—2020. msgid "" msgstr "" -"Project-Id-Version: sudoers-1.9.0b4\n" +"Project-Id-Version: sudoers-1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-03-12 17:39-0600\n" -"PO-Revision-Date: 2020-05-31 07:55+0200\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-08-04 12:24+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -41,352 +41,415 @@ msgstr "*** информације БЕЗБЕДНОСТИ за %h ***" msgid "Sorry, try again." msgstr "Извините, покушајте поново." -#: gram.y:198 gram.y:246 gram.y:253 gram.y:260 gram.y:267 gram.y:274 -#: gram.y:290 gram.y:314 gram.y:321 gram.y:328 gram.y:335 gram.y:342 -#: gram.y:405 gram.y:414 gram.y:425 gram.y:458 gram.y:465 gram.y:472 -#: gram.y:479 gram.y:506 gram.y:578 gram.y:585 gram.y:594 gram.y:603 -#: gram.y:620 gram.y:732 gram.y:739 gram.y:747 gram.y:753 gram.y:853 -#: gram.y:860 gram.y:867 gram.y:874 gram.y:881 gram.y:907 gram.y:914 -#: gram.y:921 gram.y:1063 gram.y:1342 lib/iolog/iolog_util.c:79 -#: lib/iolog/iolog_util.c:118 lib/iolog/iolog_util.c:127 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:145 -#: lib/iolog/iolog_util.c:149 logsrvd/eventlog.c:223 logsrvd/sendlog.c:286 -#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:139 -#: plugins/sudoers/alias.c:155 plugins/sudoers/auth/bsdauth.c:148 -#: plugins/sudoers/auth/kerb5.c:123 plugins/sudoers/auth/kerb5.c:149 -#: plugins/sudoers/auth/pam.c:673 plugins/sudoers/auth/rfc1938.c:116 -#: plugins/sudoers/auth/sia.c:64 plugins/sudoers/cvtsudoers.c:124 -#: plugins/sudoers/cvtsudoers.c:165 plugins/sudoers/cvtsudoers.c:182 -#: plugins/sudoers/cvtsudoers.c:193 plugins/sudoers/cvtsudoers.c:305 -#: plugins/sudoers/cvtsudoers.c:433 plugins/sudoers/cvtsudoers.c:566 -#: plugins/sudoers/cvtsudoers.c:583 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:83 -#: plugins/sudoers/cvtsudoers_ldif.c:154 plugins/sudoers/cvtsudoers_ldif.c:197 -#: plugins/sudoers/cvtsudoers_ldif.c:238 plugins/sudoers/cvtsudoers_ldif.c:303 -#: plugins/sudoers/cvtsudoers_ldif.c:374 plugins/sudoers/cvtsudoers_ldif.c:429 -#: plugins/sudoers/cvtsudoers_ldif.c:437 plugins/sudoers/cvtsudoers_ldif.c:454 -#: plugins/sudoers/cvtsudoers_ldif.c:463 plugins/sudoers/cvtsudoers_ldif.c:610 -#: plugins/sudoers/defaults.c:632 plugins/sudoers/defaults.c:925 -#: plugins/sudoers/defaults.c:1058 plugins/sudoers/editor.c:72 -#: plugins/sudoers/editor.c:90 plugins/sudoers/editor.c:101 -#: plugins/sudoers/env.c:268 plugins/sudoers/filedigest.c:66 -#: plugins/sudoers/filedigest.c:82 plugins/sudoers/gc.c:59 -#: plugins/sudoers/group_plugin.c:141 plugins/sudoers/interfaces.c:78 -#: plugins/sudoers/iolog.c:476 plugins/sudoers/iolog_client.c:107 -#: plugins/sudoers/iolog_client.c:485 plugins/sudoers/iolog_client.c:593 -#: plugins/sudoers/iolog_client.c:611 plugins/sudoers/iolog_client.c:1053 -#: plugins/sudoers/iolog_client.c:1283 plugins/sudoers/iolog_client.c:1619 -#: plugins/sudoers/iolog_client.c:1647 plugins/sudoers/ldap.c:185 -#: plugins/sudoers/ldap.c:416 plugins/sudoers/ldap.c:420 -#: plugins/sudoers/ldap.c:432 plugins/sudoers/ldap.c:723 -#: plugins/sudoers/ldap.c:887 plugins/sudoers/ldap.c:1241 -#: plugins/sudoers/ldap.c:1668 plugins/sudoers/ldap.c:1705 -#: plugins/sudoers/ldap.c:1786 plugins/sudoers/ldap.c:1921 -#: plugins/sudoers/ldap.c:2022 plugins/sudoers/ldap.c:2038 -#: plugins/sudoers/ldap_conf.c:223 plugins/sudoers/ldap_conf.c:254 -#: plugins/sudoers/ldap_conf.c:306 plugins/sudoers/ldap_conf.c:342 -#: plugins/sudoers/ldap_conf.c:446 plugins/sudoers/ldap_conf.c:461 -#: plugins/sudoers/ldap_conf.c:558 plugins/sudoers/ldap_conf.c:591 -#: plugins/sudoers/ldap_conf.c:683 plugins/sudoers/ldap_conf.c:765 -#: plugins/sudoers/ldap_util.c:331 plugins/sudoers/ldap_util.c:338 -#: plugins/sudoers/ldap_util.c:603 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:200 plugins/sudoers/logging.c:527 -#: plugins/sudoers/logging.c:553 plugins/sudoers/logging.c:594 -#: plugins/sudoers/logging.c:731 plugins/sudoers/logging.c:1091 -#: plugins/sudoers/match_command.c:249 plugins/sudoers/match_command.c:397 -#: plugins/sudoers/match_command.c:444 plugins/sudoers/match_command.c:515 -#: plugins/sudoers/match_digest.c:87 plugins/sudoers/parse.c:200 -#: plugins/sudoers/parse.c:212 plugins/sudoers/parse.c:227 -#: plugins/sudoers/parse.c:239 plugins/sudoers/parse_ldif.c:156 -#: plugins/sudoers/parse_ldif.c:187 plugins/sudoers/parse_ldif.c:256 -#: plugins/sudoers/parse_ldif.c:263 plugins/sudoers/parse_ldif.c:268 -#: plugins/sudoers/parse_ldif.c:344 plugins/sudoers/parse_ldif.c:355 -#: plugins/sudoers/parse_ldif.c:382 plugins/sudoers/parse_ldif.c:399 -#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:415 -#: plugins/sudoers/parse_ldif.c:429 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:504 plugins/sudoers/policy.c:830 -#: plugins/sudoers/prompt.c:100 plugins/sudoers/pwutil.c:199 -#: plugins/sudoers/pwutil.c:270 plugins/sudoers/pwutil.c:348 -#: plugins/sudoers/pwutil.c:522 plugins/sudoers/pwutil.c:586 -#: plugins/sudoers/pwutil.c:657 plugins/sudoers/pwutil.c:816 -#: plugins/sudoers/pwutil.c:873 plugins/sudoers/pwutil.c:917 -#: plugins/sudoers/pwutil.c:975 plugins/sudoers/sssd.c:154 -#: plugins/sudoers/sssd.c:400 plugins/sudoers/sssd.c:463 -#: plugins/sudoers/sssd.c:507 plugins/sudoers/sssd.c:554 -#: plugins/sudoers/sssd.c:746 plugins/sudoers/stubs.c:103 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/sudoers.c:320 -#: plugins/sudoers/sudoers.c:331 plugins/sudoers/sudoers.c:341 -#: plugins/sudoers/sudoers.c:384 plugins/sudoers/sudoers.c:735 -#: plugins/sudoers/sudoers.c:864 plugins/sudoers/sudoers.c:909 -#: plugins/sudoers/sudoers.c:1213 plugins/sudoers/sudoreplay.c:559 -#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:1218 -#: plugins/sudoers/sudoreplay.c:1425 plugins/sudoers/sudoreplay.c:1429 -#: plugins/sudoers/testsudoers.c:136 plugins/sudoers/testsudoers.c:236 -#: plugins/sudoers/testsudoers.c:253 plugins/sudoers/testsudoers.c:587 -#: plugins/sudoers/timestamp.c:439 plugins/sudoers/timestamp.c:483 -#: plugins/sudoers/timestamp.c:993 plugins/sudoers/toke_util.c:59 -#: plugins/sudoers/toke_util.c:112 plugins/sudoers/toke_util.c:137 -#: plugins/sudoers/toke_util.c:165 plugins/sudoers/tsdump.c:130 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:334 plugins/sudoers/visudo.c:444 -#: plugins/sudoers/visudo.c:622 plugins/sudoers/visudo.c:942 -#: plugins/sudoers/visudo.c:1029 plugins/sudoers/visudo.c:1118 toke.l:846 -#: toke.l:947 toke.l:1104 +#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 +#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 +#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 +#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 +#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 +#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 +#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 +#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 +#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 +#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 +#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 +#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 +#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 +#: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 +#: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 +#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 +#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 +#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 +#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 +#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 +#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 +#: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 +#: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 +#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 +#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 +#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 +#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 +#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 +#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 +#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 +#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 +#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 +#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 +#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 +#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 +#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 +#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 +#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 +#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 +#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 +#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 +#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 +#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 +#: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 +#: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 +#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 +#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 +#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 +#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 +#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 +#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 +#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 +#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 +#: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 +#: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 +#: plugins/sudoers/parse_ldif.c:352 plugins/sudoers/parse_ldif.c:379 +#: plugins/sudoers/parse_ldif.c:396 plugins/sudoers/parse_ldif.c:408 +#: plugins/sudoers/parse_ldif.c:412 plugins/sudoers/parse_ldif.c:426 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 +#: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 +#: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 +#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 +#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 +#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 +#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 +#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 +#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 +#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 +#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 +#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 +#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 +#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 +#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 +#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 +#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 +#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" -#: gram.y:500 +#: gram.y:505 msgid "a digest requires a path name" msgstr "зборник захтева назив путање" -#: gram.y:633 +#: gram.y:638 msgid "invalid notbefore value" msgstr "неисправна вредност не-пре" -#: gram.y:641 +#: gram.y:646 msgid "invalid notafter value" msgstr "неисправна вредност не-после" -#: gram.y:650 plugins/sudoers/policy.c:319 +#: gram.y:655 plugins/sudoers/policy.c:306 msgid "timeout value too large" msgstr "вредност временског истека је превелика" -#: gram.y:652 plugins/sudoers/policy.c:321 +#: gram.y:657 plugins/sudoers/policy.c:308 msgid "invalid timeout value" msgstr "неисправна вредност временског ограничења" -#: gram.y:1342 lib/iolog/iolog_util.c:79 lib/iolog/iolog_util.c:118 -#: lib/iolog/iolog_util.c:127 lib/iolog/iolog_util.c:137 -#: lib/iolog/iolog_util.c:145 lib/iolog/iolog_util.c:149 -#: logsrvd/eventlog.c:223 plugins/sudoers/auth/pam.c:486 -#: plugins/sudoers/auth/pam.c:673 plugins/sudoers/auth/rfc1938.c:116 -#: plugins/sudoers/cvtsudoers.c:124 plugins/sudoers/cvtsudoers.c:164 -#: plugins/sudoers/cvtsudoers.c:181 plugins/sudoers/cvtsudoers.c:192 -#: plugins/sudoers/cvtsudoers.c:304 plugins/sudoers/cvtsudoers.c:432 -#: plugins/sudoers/cvtsudoers.c:565 plugins/sudoers/cvtsudoers.c:582 -#: 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:82 plugins/sudoers/cvtsudoers_ldif.c:153 -#: plugins/sudoers/cvtsudoers_ldif.c:196 plugins/sudoers/cvtsudoers_ldif.c:237 -#: plugins/sudoers/cvtsudoers_ldif.c:302 plugins/sudoers/cvtsudoers_ldif.c:373 -#: plugins/sudoers/cvtsudoers_ldif.c:428 plugins/sudoers/cvtsudoers_ldif.c:436 -#: plugins/sudoers/cvtsudoers_ldif.c:453 plugins/sudoers/cvtsudoers_ldif.c:462 -#: plugins/sudoers/cvtsudoers_ldif.c:609 plugins/sudoers/defaults.c:632 -#: plugins/sudoers/defaults.c:925 plugins/sudoers/defaults.c:1058 -#: plugins/sudoers/editor.c:72 plugins/sudoers/editor.c:90 -#: plugins/sudoers/editor.c:101 plugins/sudoers/env.c:268 -#: plugins/sudoers/filedigest.c:66 plugins/sudoers/filedigest.c:82 -#: plugins/sudoers/gc.c:59 plugins/sudoers/group_plugin.c:140 -#: plugins/sudoers/interfaces.c:78 plugins/sudoers/iolog.c:476 -#: plugins/sudoers/iolog_client.c:107 plugins/sudoers/iolog_client.c:485 -#: plugins/sudoers/iolog_client.c:593 plugins/sudoers/iolog_client.c:611 -#: plugins/sudoers/iolog_client.c:1053 plugins/sudoers/iolog_client.c:1283 -#: plugins/sudoers/iolog_client.c:1619 plugins/sudoers/iolog_client.c:1647 -#: plugins/sudoers/ldap.c:185 plugins/sudoers/ldap.c:416 -#: plugins/sudoers/ldap.c:420 plugins/sudoers/ldap.c:432 -#: plugins/sudoers/ldap.c:723 plugins/sudoers/ldap.c:887 -#: plugins/sudoers/ldap.c:1241 plugins/sudoers/ldap.c:1668 -#: plugins/sudoers/ldap.c:1705 plugins/sudoers/ldap.c:1786 -#: plugins/sudoers/ldap.c:1921 plugins/sudoers/ldap.c:2022 -#: plugins/sudoers/ldap.c:2038 plugins/sudoers/ldap_conf.c:223 -#: plugins/sudoers/ldap_conf.c:254 plugins/sudoers/ldap_conf.c:306 -#: plugins/sudoers/ldap_conf.c:342 plugins/sudoers/ldap_conf.c:446 -#: plugins/sudoers/ldap_conf.c:461 plugins/sudoers/ldap_conf.c:558 -#: plugins/sudoers/ldap_conf.c:591 plugins/sudoers/ldap_conf.c:682 -#: plugins/sudoers/ldap_conf.c:765 plugins/sudoers/ldap_util.c:330 -#: plugins/sudoers/ldap_util.c:337 plugins/sudoers/ldap_util.c:603 -#: plugins/sudoers/linux_audit.c:83 plugins/sudoers/logging.c:200 -#: plugins/sudoers/logging.c:527 plugins/sudoers/logging.c:553 -#: plugins/sudoers/logging.c:593 plugins/sudoers/logging.c:1091 -#: plugins/sudoers/match_command.c:248 plugins/sudoers/match_command.c:396 -#: plugins/sudoers/match_command.c:443 plugins/sudoers/match_command.c:515 -#: plugins/sudoers/match_digest.c:87 plugins/sudoers/parse.c:199 -#: plugins/sudoers/parse.c:211 plugins/sudoers/parse.c:226 -#: plugins/sudoers/parse.c:238 plugins/sudoers/parse_ldif.c:155 -#: plugins/sudoers/parse_ldif.c:186 plugins/sudoers/parse_ldif.c:255 -#: plugins/sudoers/parse_ldif.c:262 plugins/sudoers/parse_ldif.c:267 -#: plugins/sudoers/parse_ldif.c:343 plugins/sudoers/parse_ldif.c:354 -#: plugins/sudoers/parse_ldif.c:381 plugins/sudoers/parse_ldif.c:398 -#: plugins/sudoers/parse_ldif.c:410 plugins/sudoers/parse_ldif.c:414 -#: plugins/sudoers/parse_ldif.c:428 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:133 plugins/sudoers/policy.c:142 -#: plugins/sudoers/policy.c:151 plugins/sudoers/policy.c:177 -#: plugins/sudoers/policy.c:304 plugins/sudoers/policy.c:319 -#: plugins/sudoers/policy.c:321 plugins/sudoers/policy.c:350 -#: plugins/sudoers/policy.c:359 plugins/sudoers/policy.c:402 -#: plugins/sudoers/policy.c:412 plugins/sudoers/policy.c:421 -#: plugins/sudoers/policy.c:430 plugins/sudoers/policy.c:504 -#: plugins/sudoers/policy.c:830 plugins/sudoers/prompt.c:100 -#: plugins/sudoers/pwutil.c:199 plugins/sudoers/pwutil.c:270 -#: plugins/sudoers/pwutil.c:348 plugins/sudoers/pwutil.c:522 -#: plugins/sudoers/pwutil.c:586 plugins/sudoers/pwutil.c:657 -#: plugins/sudoers/pwutil.c:816 plugins/sudoers/pwutil.c:873 -#: plugins/sudoers/pwutil.c:917 plugins/sudoers/pwutil.c:975 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1067 plugins/sudoers/set_perms.c:1370 -#: plugins/sudoers/set_perms.c:1535 plugins/sudoers/sssd.c:153 -#: plugins/sudoers/sssd.c:400 plugins/sudoers/sssd.c:463 -#: plugins/sudoers/sssd.c:507 plugins/sudoers/sssd.c:554 -#: plugins/sudoers/sssd.c:746 plugins/sudoers/stubs.c:103 -#: plugins/sudoers/stubs.c:111 plugins/sudoers/sudoers.c:320 -#: plugins/sudoers/sudoers.c:331 plugins/sudoers/sudoers.c:341 -#: plugins/sudoers/sudoers.c:384 plugins/sudoers/sudoers.c:735 -#: plugins/sudoers/sudoers.c:864 plugins/sudoers/sudoers.c:909 -#: plugins/sudoers/sudoers.c:1213 plugins/sudoers/sudoreplay.c:559 -#: plugins/sudoers/sudoreplay.c:562 plugins/sudoers/sudoreplay.c:1218 -#: plugins/sudoers/sudoreplay.c:1425 plugins/sudoers/sudoreplay.c:1429 -#: plugins/sudoers/testsudoers.c:136 plugins/sudoers/testsudoers.c:236 -#: plugins/sudoers/testsudoers.c:253 plugins/sudoers/testsudoers.c:587 -#: plugins/sudoers/timestamp.c:439 plugins/sudoers/timestamp.c:483 -#: plugins/sudoers/timestamp.c:993 plugins/sudoers/toke_util.c:59 -#: plugins/sudoers/toke_util.c:112 plugins/sudoers/toke_util.c:136 -#: plugins/sudoers/toke_util.c:165 plugins/sudoers/tsdump.c:130 -#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:334 plugins/sudoers/visudo.c:444 -#: plugins/sudoers/visudo.c:622 plugins/sudoers/visudo.c:942 -#: plugins/sudoers/visudo.c:1029 plugins/sudoers/visudo.c:1118 toke.l:846 -#: toke.l:947 toke.l:1104 +#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 +#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 +#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 +#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 +#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 +#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 +#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 +#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 +#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 +#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 +#: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 +#: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 +#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 +#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 +#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 +#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 +#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 +#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 +#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 +#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 +#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 +#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 +#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 +#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 +#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 +#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 +#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 +#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 +#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 +#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 +#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 +#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 +#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 +#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 +#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 +#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 +#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 +#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 +#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 +#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 +#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 +#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 +#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 +#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 +#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 +#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 +#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 +#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 +#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 +#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 +#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 +#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 +#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 +#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 +#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 +#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 +#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 +#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 +#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 +#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 +#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 +#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 +#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 +#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 +#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 +#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 +#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 +#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 +#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 +#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 +#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 +#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 +#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 +#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 +#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 +#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 +#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 +#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 +#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 +#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 +#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 +#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 +#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 +#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 +#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 +#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 +#: toke.l:981 toke.l:1039 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:164 +#: lib/iolog/iolog_fileio.c:157 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s постоји али није директоријум (0%o)" -#: lib/iolog/iolog_fileio.c:194 lib/iolog/iolog_fileio.c:240 -#: plugins/sudoers/timestamp.c:212 +#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "не могу да направим директоријум „%s“" -#: lib/iolog/iolog_fileio.c:244 plugins/sudoers/visudo.c:739 -#: plugins/sudoers/visudo.c:750 +#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 +#: plugins/sudoers/visudo.c:744 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не могу да променим режим „%s“ на 0%o" -#: lib/iolog/iolog_util.c:83 +#: lib/iolog/iolog_json.c:114 +#, c-format +msgid "expected JSON_STRING, got %d" +msgstr "очекивах „JSON_STRING“, добих „%d“" + +#: lib/iolog/iolog_json.c:305 +msgid "missing double quote in name" +msgstr "недостају наводници у називу" + +#: lib/iolog/iolog_json.c:392 +#, c-format +msgid "expected JSON_OBJECT, got %d" +msgstr "очекивах „JSON_OBJECT“, добих „%d“" + +#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 +#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 +#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 +#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 +#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 +#: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 +#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 +#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/toke_util.c:169 +#, c-format +msgid "internal error, %s overflow" +msgstr "унутрашња грешка, прекорачење „%s“" + +#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +msgid "unmatched close brace" +msgstr "непоклопљена затворена велика заграда" + +#: lib/iolog/iolog_json.c:616 +msgid "unexpected array" +msgstr "неочекиван низ" + +#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +msgid "unmatched close bracket" +msgstr "непоклопљена затворена средња заграда" + +#: lib/iolog/iolog_json.c:637 +msgid "unexpected string" +msgstr "неочекивана ниска" + +#: lib/iolog/iolog_json.c:647 +msgid "missing colon after name" +msgstr "недостају две тачке након имена" + +#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 +#: lib/iolog/iolog_json.c:688 +msgid "unexpected boolean" +msgstr "неочекивана логичка вредност" + +#: lib/iolog/iolog_json.c:704 +msgid "unexpected number" +msgstr "неочекивани број" + +#: lib/iolog/iolog_json.c:741 +#, c-format +msgid "%s:%u unable to parse \"%s\"" +msgstr "„%s:%u“ не могу да обрадим „%s“" + +#: lib/iolog/iolog_util.c:71 #, c-format msgid "%s: invalid log file" msgstr "%s: неисправна датотека дневника" -#: lib/iolog/iolog_util.c:101 +#: lib/iolog/iolog_util.c:89 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: недостаје поље временске ознаке" -#: lib/iolog/iolog_util.c:107 +#: lib/iolog/iolog_util.c:95 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: временска ознака %s: %s" -#: lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:102 #, c-format msgid "%s: user field is missing" msgstr "%s: недостаје поље корисника" -#: lib/iolog/iolog_util.c:123 +#: lib/iolog/iolog_util.c:111 #, c-format msgid "%s: runas user field is missing" msgstr "%s: недостаје поље „покрени-као корисник“" -#: lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:120 #, c-format msgid "%s: runas group field is missing" msgstr "%s: недостаје поље „покрени-као група“" -#: lib/iolog/iolog_util.c:382 +#: lib/iolog/iolog_util.c:419 #, c-format msgid "error reading timing file: %s" msgstr "грешка читања датотеке временисања: %s" -#: lib/iolog/iolog_util.c:389 +#: lib/iolog/iolog_util.c:426 #, c-format msgid "invalid timing file line: %s" msgstr "неисправан ред датотеке временисања: %s" -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:247 -#: plugins/sudoers/cvtsudoers_ldif.c:254 plugins/sudoers/cvtsudoers_ldif.c:566 -#: plugins/sudoers/env.c:330 plugins/sudoers/env.c:337 -#: plugins/sudoers/env.c:442 plugins/sudoers/iolog.c:550 -#: plugins/sudoers/iolog.c:566 plugins/sudoers/ldap.c:496 -#: plugins/sudoers/ldap.c:727 plugins/sudoers/ldap.c:1060 -#: plugins/sudoers/ldap_conf.c:227 plugins/sudoers/ldap_conf.c:317 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1096 -#: plugins/sudoers/policy.c:534 plugins/sudoers/policy.c:679 -#: plugins/sudoers/policy.c:689 plugins/sudoers/prompt.c:168 -#: plugins/sudoers/sudoers.c:931 plugins/sudoers/testsudoers.c:257 -#: plugins/sudoers/toke_util.c:177 -#, c-format -msgid "internal error, %s overflow" -msgstr "унутрашња грешка, прекорачење „%s“" - -#: logsrvd/eventlog.c:422 plugins/sudoers/logging.c:118 +#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:451 plugins/sudoers/logging.c:146 +#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (наредба је настављена) %s" -#: logsrvd/iolog_writer.c:886 +#: logsrvd/iolog_writer.c:936 msgid "log is already complete, cannot be restarted" msgstr "дневик је већ довршен, не може бити поново покренут" -#: logsrvd/iolog_writer.c:917 +#: logsrvd/iolog_writer.c:967 msgid "unable to restart log" msgstr "не могу поново да покренем дневник" -#: logsrvd/logsrv_util.c:96 logsrvd/logsrv_util.c:103 -#: plugins/sudoers/sudoreplay.c:355 plugins/sudoers/sudoreplay.c:361 -#: plugins/sudoers/sudoreplay.c:368 +#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 +#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 #, c-format msgid "unable to open %s/%s" msgstr "не могу да отворим „%s/%s“" -#: logsrvd/logsrv_util.c:130 +#: logsrvd/logsrv_util.c:132 #, c-format msgid "missing I/O log file %s/%s" msgstr "недостаје У/И датотека дневника „%s/%s“" -#: logsrvd/logsrv_util.c:137 +#: logsrvd/logsrv_util.c:139 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: не могу да премотам унапред „%zu“" -#: logsrvd/logsrv_util.c:147 +#: logsrvd/logsrv_util.c:149 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "не могу да нађем тачку наставка [%lld, %ld] у „%s/%s“" -#: logsrvd/logsrvd.c:231 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 -#: logsrvd/logsrvd.c:392 logsrvd/logsrvd.c:439 logsrvd/logsrvd.c:484 -#: logsrvd/logsrvd.c:510 +#: logsrvd/logsrvd.c:230 logsrvd/logsrvd.c:299 logsrvd/logsrvd.c:343 +#: logsrvd/logsrvd.c:398 logsrvd/logsrvd.c:445 logsrvd/logsrvd.c:496 +#: logsrvd/logsrvd.c:528 logsrvd/logsrvd.c:560 msgid "state machine error" msgstr "грешка машине стања" -#: logsrvd/logsrvd.c:240 +#: logsrvd/logsrvd.c:239 msgid "invalid AcceptMessage" msgstr "неисправна „Порука прихвата“" -#: logsrvd/logsrvd.c:251 +#: logsrvd/logsrvd.c:250 msgid "error parsing AcceptMessage" msgstr "грешка обраде „Поруке прихвата“" -#: logsrvd/logsrvd.c:258 +#: logsrvd/logsrvd.c:257 msgid "error creating I/O log" msgstr "грешка стварања У/И дневника" @@ -406,59 +469,113 @@ msgstr "грешка обраде „Поруке одбијања“" msgid "error logging reject event" msgstr "грешка прибележавања догађаја одбијања" -#: logsrvd/logsrvd.c:424 +#: logsrvd/logsrvd.c:430 msgid "error logging alert event" msgstr "грешка прибележавања догађаја упозорења" -#: logsrvd/logsrvd.c:449 +#: logsrvd/logsrvd.c:451 logsrvd/logsrvd.c:502 logsrvd/logsrvd.c:534 +msgid "protocol error" +msgstr "грешка протокола" + +#: logsrvd/logsrvd.c:461 msgid "error writing IoBuffer" msgstr "Грешка писања „Уи_Међумеморије“" -#: logsrvd/logsrvd.c:495 +#: logsrvd/logsrvd.c:513 msgid "error writing ChangeWindowSize" msgstr "грешка писања „Промени_величину_прозора“" -#: logsrvd/logsrvd.c:521 +#: logsrvd/logsrvd.c:545 msgid "error writing CommandSuspend" msgstr "грешка писања „Обуставе_наредбе“" -#: logsrvd/logsrvd.c:583 +#: logsrvd/logsrvd.c:630 msgid "unrecognized ClientMessage type" msgstr "непозната врста „Поруке_клијента“" -#: logsrvd/logsrvd.c:835 +#: logsrvd/logsrvd.c:895 msgid "client message too large" msgstr "порука клијента је превелика" -#: logsrvd/logsrvd.c:1295 logsrvd/logsrvd.c:1415 logsrvd/logsrvd.c:1539 -#: logsrvd/logsrvd.c:1631 logsrvd/sendlog.c:242 logsrvd/sendlog.c:257 -#: logsrvd/sendlog.c:290 logsrvd/sendlog.c:1264 plugins/sudoers/iolog.c:900 -#: plugins/sudoers/iolog.c:1033 plugins/sudoers/iolog.c:1131 -#: plugins/sudoers/iolog_client.c:111 plugins/sudoers/iolog_client.c:436 -#: plugins/sudoers/iolog_client.c:452 plugins/sudoers/iolog_client.c:490 -#: plugins/sudoers/iolog_client.c:1032 plugins/sudoers/iolog_client.c:1061 -#: plugins/sudoers/iolog_client.c:1133 plugins/sudoers/iolog_client.c:1239 -#: plugins/sudoers/iolog_client.c:1353 plugins/sudoers/iolog_client.c:1655 -#: plugins/sudoers/iolog_client.c:1663 plugins/sudoers/sudoreplay.c:519 -#: plugins/sudoers/sudoreplay.c:566 plugins/sudoers/sudoreplay.c:755 -#: plugins/sudoers/sudoreplay.c:867 plugins/sudoers/sudoreplay.c:957 -#: plugins/sudoers/sudoreplay.c:972 plugins/sudoers/sudoreplay.c:979 -#: plugins/sudoers/sudoreplay.c:986 plugins/sudoers/sudoreplay.c:993 -#: plugins/sudoers/sudoreplay.c:1000 plugins/sudoers/sudoreplay.c:1127 -msgid "unable to add event to queue" -msgstr "не могу да додам догађај у ред" +#: logsrvd/logsrvd.c:1125 logsrvd/logsrvd.c:1133 +#, c-format +msgid "unable to set TLS 1.2 ciphersuite to %s: %s" +msgstr "не могу да подесим шифрарник ТЛС-а 1.2 на „%s“: %s" -#: logsrvd/logsrvd.c:1407 plugins/sudoers/iolog_client.c:378 +#: logsrvd/logsrvd.c:1153 logsrvd/logsrvd.c:1161 #, c-format -msgid "Unable to attach user data to the ssl object: %s" -msgstr "Не могу да прикачим податке корисника ссл објекту: %s" +msgid "unable to set TLS 1.3 ciphersuite to %s: %s" +msgstr "не могу да подесим шифрарник ТЛС-а 1.3 на „%s“: %s" + +#: logsrvd/logsrvd.c:1197 +#, c-format +msgid "unable to get TLS server method: %s" +msgstr "не могу да добавим метод ТЛС сервера: %s" + +#: logsrvd/logsrvd.c:1202 +#, c-format +msgid "unable to create TLS context: %s" +msgstr "Не могу да створим ТЛС контекст: %s" -#: logsrvd/logsrvd.c:1443 plugins/sudoers/iolog_client.c:1596 -#: plugins/sudoers/iolog_client.c:1604 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#, c-format +msgid "unable to load certificate %s" +msgstr "не могу да учитам уверење „%s“" + +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#, c-format +msgid "unable to load certificate authority bundle %s" +msgstr "не могу да учитам комплет ауторитета уверења „%s“" + +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#, c-format +msgid "unable to load private key %s" +msgstr "не могу да учитам лични кључ „%s“" + +#: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 +#, c-format +msgid "unable to set diffie-hellman parameters: %s" +msgstr "не могу да подесим „diffie-hellman“ параметре: %s" + +#: logsrvd/logsrvd.c:1306 +#, c-format +msgid "unable to set minimum protocol version to TLS 1.2: %s" +msgstr "не могу да подесим најмање издање протокола на „TLS 1.2“: %s" + +#: logsrvd/logsrvd.c:1491 msgid "unable to get remote IP addr" msgstr "не могу да добавим удаљену ИП адресу" -#: logsrvd/logsrvd.c:1692 logsrvd/sendlog.c:113 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#, c-format +msgid "Unable to attach user data to the ssl object: %s" +msgstr "Не могу да прикачим податке корисника ссл објекту: %s" + +#: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 +#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 +#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 +#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 +#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 +#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 +#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 +#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 +#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 +#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 +#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 +#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 +#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 +#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 +#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 +#: plugins/sudoers/sudoreplay.c:1164 +msgid "unable to add event to queue" +msgstr "не могу да додам догађај у ред" + +#: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 +msgid "unable setup listen socket" +msgstr "не могу да подесим прикључницу ослушкивања" + +#: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 #, c-format msgid "" "%s - send sudo I/O log to remote server\n" @@ -467,7 +584,7 @@ msgstr "" "%s – шаље У/И дневник судоа удаљеном серверу\n" "\n" -#: logsrvd/logsrvd.c:1695 +#: logsrvd/logsrvd.c:1846 msgid "" "\n" "Options:\n" @@ -485,276 +602,293 @@ msgstr "" " -R, --random-drop процентуалне шансе везе ће одбацити\n" " -V, --version приказује податке о издању и излази\n" -#: logsrvd/logsrvd.c:1747 logsrvd/sendlog.c:1513 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 msgid "Protobuf-C version 1.3 or higher required" msgstr "Потребно је „Protobuf-C“ издање 1.3 или новије" -#: logsrvd/logsrvd.c:1765 +#: logsrvd/logsrvd.c:1916 #, c-format msgid "invalid random drop value: %s" msgstr "неисправна вредност одбацивања насумичности: %s" -#: logsrvd/logsrvd.c:1769 logsrvd/sendlog.c:1551 -#: plugins/sudoers/cvtsudoers.c:233 plugins/sudoers/sudoreplay.c:302 -#: plugins/sudoers/visudo.c:184 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 +#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 +#: plugins/sudoers/visudo.c:178 #, c-format msgid "%s version %s\n" msgstr "%s издање %s\n" -#: logsrvd/logsrvd_conf.c:688 +#: logsrvd/logsrvd_conf.c:393 +msgid "TLS not supported" +msgstr "ТЛС није подржано" + +#: logsrvd/logsrvd_conf.c:405 +#, c-format +msgid "%s:%s" +msgstr "%s:%s" + +#: logsrvd/logsrvd_conf.c:471 logsrvd/logsrvd_conf.c:715 #, c-format msgid "%s: not a fully qualified path" msgstr "%s: није потпуно квалификована путања" -#: logsrvd/logsrvd_conf.c:802 +#: logsrvd/logsrvd_conf.c:829 #, c-format msgid "%s:%d unmatched '[': %s" msgstr "„%s:%d“ непоклопљена [: %s" -#: logsrvd/logsrvd_conf.c:813 +#: logsrvd/logsrvd_conf.c:840 #, c-format msgid "%s:%d invalid config section: %s" msgstr "„%s:%d“ неисправан одељак подешавања: %s" -#: logsrvd/logsrvd_conf.c:821 +#: logsrvd/logsrvd_conf.c:848 #, c-format msgid "%s:%d invalid configuration line: %s" msgstr "„%s:%d“ неисправан ред подешавања: %s" -#: logsrvd/logsrvd_conf.c:827 +#: logsrvd/logsrvd_conf.c:854 #, c-format msgid "%s:%d expected section name: %s" msgstr "„%s:%d“ очекиван је назив одељка: %s" -#: logsrvd/logsrvd_conf.c:841 +#: logsrvd/logsrvd_conf.c:868 #, c-format msgid "invalid value for %s: %s" msgstr "неисправна вредност за „%s“: %s" -#: logsrvd/logsrvd_conf.c:849 +#: logsrvd/logsrvd_conf.c:876 #, c-format msgid "%s:%d unknown key: %s" msgstr "„%s:%d“ непознат кључ: %s" -#: logsrvd/logsrvd_conf.c:977 +#: logsrvd/logsrvd_conf.c:1032 #, c-format msgid "unknown syslog facility %s" msgstr "непознато постројење системског дневика „%s“" -#: logsrvd/logsrvd_conf.c:981 logsrvd/logsrvd_conf.c:985 -#: logsrvd/logsrvd_conf.c:989 +#: logsrvd/logsrvd_conf.c:1036 logsrvd/logsrvd_conf.c:1040 +#: logsrvd/logsrvd_conf.c:1044 #, c-format msgid "unknown syslog priority %s" msgstr "непознат приоритет системског дневика „%s“" -#: logsrvd/sendlog.c:116 +#: logsrvd/sendlog.c:126 msgid "" "\n" "Options:\n" " --help display help message and exit\n" +" -A, --accept only send an accept event (no I/O)\n" " -h, --host host to send logs to\n" " -i, --iolog_id remote ID of I/O log to be resumed\n" " -p, --port port to use when connecting to host\n" " -r, --restart restart previous I/O log transfer\n" -" -t, --test test audit server by sending selected I/O log n times in parallel\n" +" -R, --reject reject the command with the given reason\n" " -b, --ca-bundle certificate bundle file to verify server's cert against\n" " -c, --cert certificate file for TLS handshake\n" " -k, --key private key file\n" +" -n, --no-verify do not verify server certificate\n" +" -t, --test test audit server by sending selected I/O log n times in parallel\n" " -V, --version display version information and exit\n" msgstr "" "\n" "Опције:\n" " --help приказује поруку помоћи и излази\n" +" -A, --accept шаље само догађај прихвата (не У/И)\n" " -h, --host домаћин коме се шаљу дневници\n" " -i, --iolog_id удаљени ИБ У/И дневника који ће се наставити\n" " -p, --port прикључник за коришћење приликом повезивања са домаћином\n" " -r, --restart поново покреће претходни пренос У/И дневника\n" -" -t, --test проба сервер испитивања шаљући изабрани У/И дневник n-пута у паралели\n" +" -R, --reject одбацује наредбу са датим разлогом\n" " -b, --ca-bundle датотека групе уверења за проверу уверења сервера\n" " -c, --cert датотека уверења за ТЛС руковање\n" " -k, --key датотека личног кључа\n" +" -n, --no-verify не потврђује уверење сервера\n" +" -t, --test проверава сервер испитивања шаљући изабрани У/И дневник n пута у паралели\n" " -V, --version приказује податке о издању и излази\n" -#: logsrvd/sendlog.c:216 plugins/sudoers/iolog_client.c:409 -msgid "TLS handshake timeout occurred" -msgstr "дошло је до временског истека ТЛС руковања" - -#: logsrvd/sendlog.c:237 logsrvd/sendlog.c:252 -#: plugins/sudoers/iolog_client.c:430 plugins/sudoers/iolog_client.c:446 -msgid "unable to set event" -msgstr "не могу да подесим догађај" - -#: logsrvd/sendlog.c:262 -#, c-format -msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" -msgstr "„SSL_повезивање“ није успело: ssl_грешка=%d, спремник=%s\n" - -#: logsrvd/sendlog.c:294 plugins/sudoers/iolog_client.c:115 -#: plugins/sudoers/iolog_client.c:495 plugins/sudoers/iolog_client.c:1065 -#: plugins/sudoers/iolog_client.c:1671 -msgid "error in event loop" -msgstr "грешка у петљи догађаја" - -#: logsrvd/sendlog.c:311 -msgid "CA bundle file was not specified" -msgstr "датотека групних издавача уверења није наведена" - -#: logsrvd/sendlog.c:315 -msgid "Client certificate was not specified" -msgstr "Уверење клијента није наведено" - -#: logsrvd/sendlog.c:319 -#, c-format -msgid "Unable to initialize ssl context: %s" -msgstr "Не могу да покренем ссл контекст: %s" - -#: logsrvd/sendlog.c:324 -#, c-format -msgid "Unable to allocate ssl object: %s\n" -msgstr "Не могу да доделим ссл објекат: %s\n" - -#: logsrvd/sendlog.c:329 -#, c-format -msgid "Unable to attach socket to the ssl object: %s\n" -msgstr "Не могу да прикачим прикључницу ссл објекту: %s\n" - -#: logsrvd/sendlog.c:367 plugins/sudoers/iolog_client.c:150 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 #, c-format msgid "unable to look up %s:%s: %s" msgstr "не могу да потражим „%s:%s“: %s" -#: logsrvd/sendlog.c:522 plugins/sudoers/sudoreplay.c:815 +#: logsrvd/sendlog.c:186 +msgid "unable to get server IP addr" +msgstr "не могу да добавим ИП адресу сервера" + +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 #, c-format msgid "unable to read %s/%s: %s" msgstr "не могу да прочитам „%s/%s“: %s" -#: logsrvd/sendlog.c:543 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 #, c-format -msgid "client message too large: %zu\n" -msgstr "порука клијента је превелика: %zu\n" +msgid "client message too large: %zu" +msgstr "порука клијента је превелика: %zu" -#: logsrvd/sendlog.c:941 +#: logsrvd/sendlog.c:791 #, c-format msgid "%s: write buffer already in use" msgstr "%s: међумеморија писања је већ у употреби" -#: logsrvd/sendlog.c:993 plugins/sudoers/iolog.c:824 -#: plugins/sudoers/iolog.c:893 +#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 +#: plugins/sudoers/iolog.c:914 #, c-format msgid "unexpected I/O event %d" msgstr "неочекивани У/И догађај „%d“" -#: logsrvd/sendlog.c:1025 logsrvd/sendlog.c:1042 logsrvd/sendlog.c:1092 -#: plugins/sudoers/iolog_client.c:1037 plugins/sudoers/iolog_client.c:1090 -#: plugins/sudoers/iolog_client.c:1151 +#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 +#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 +#: plugins/sudoers/iolog_client.c:1273 #, c-format msgid "%s: unexpected state %d" msgstr "%s: неочекивано стање „%d“" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1096 +#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 msgid "invalid ServerHello" msgstr "неисправан „Поздрав_сервера“" -#: logsrvd/sendlog.c:1130 plugins/sudoers/iolog_client.c:1195 +#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 #, c-format msgid "error message received from server: %s" msgstr "порука грешке је примљена са сервера: %s" -#: logsrvd/sendlog.c:1143 plugins/sudoers/iolog_client.c:1208 +#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 #, c-format msgid "abort message received from server: %s" msgstr "порука прекида је примљена са сервера: %s" -#: logsrvd/sendlog.c:1162 plugins/sudoers/iolog_client.c:1227 +#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 msgid "unable to unpack ServerMessage" msgstr "не могу да отпакујем „Поруку_сервера“" -#: logsrvd/sendlog.c:1207 plugins/sudoers/iolog_client.c:1260 +#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: неочекивана вредност врсте_слова „%d“" -#: logsrvd/sendlog.c:1291 +#: logsrvd/sendlog.c:1077 +msgid "timeout reading from server" +msgstr "истекло је време читања са сервера" + +#: logsrvd/sendlog.c:1155 msgid "premature EOF" msgstr "прерани крај датотеке" -#: logsrvd/sendlog.c:1304 +#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 #, c-format -msgid "server message too large: %u\n" -msgstr "порука сервера је превелика: %u\n" +msgid "server message too large: %u" +msgstr "порука сервера је превелика: %u" + +#: logsrvd/sendlog.c:1219 +msgid "timeout writing to server" +msgstr "истекло је време писања на сервер" + +#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +msgid "TLS handshake timeout occurred" +msgstr "дошло је до временског истека ТЛС руковања" -#: logsrvd/sendlog.c:1569 +#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 +#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +msgid "unable to set event" +msgstr "не могу да подесим догађај" + +#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#, c-format +msgid "TLS connection failed: %s" +msgstr "ТЛС веза није успела: %s" + +#: logsrvd/sendlog.c:1519 +#, c-format +msgid "Unable to initialize ssl context: %s" +msgstr "Не могу да покренем ссл контекст: %s" + +#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#, c-format +msgid "Unable to allocate ssl object: %s" +msgstr "Не могу да доделим ссл објекат: %s" + +#: logsrvd/sendlog.c:1529 +#, c-format +msgid "Unable to attach socket to the ssl object: %s" +msgstr "Не могу да прикачим прикључницу ссл објекту: %s" + +#: logsrvd/sendlog.c:1773 msgid "both restart point and iolog ID must be specified" msgstr "мора бити наведена и тачка поновног покретања и ИБ уи_дневника" -#: logsrvd/sendlog.c:1636 +#: logsrvd/sendlog.c:1777 +msgid "a restart point may not be set when no I/O is sent" +msgstr "тачка поновног покретања се не може подесити када није послат У/И" + +#: logsrvd/sendlog.c:1852 #, c-format msgid "exited prematurely with state %d" msgstr "изађох прерано са стањем „%d“" -#: logsrvd/sendlog.c:1637 +#: logsrvd/sendlog.c:1853 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "протекло време послато серверу [%lld, %ld]" -#: logsrvd/sendlog.c:1639 +#: logsrvd/sendlog.c:1855 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "тачка слања примљена са сервера [%lld, %ld]" -#: plugins/sudoers/alias.c:151 +#: plugins/sudoers/alias.c:144 #, c-format msgid "Alias \"%s\" already defined" msgstr "Псеудоним „%s“ је већ одређен" -#: plugins/sudoers/auth/aix_auth.c:203 plugins/sudoers/logging.c:792 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 msgid "unable to fork" msgstr "не могу да исцепим" -#: plugins/sudoers/auth/aix_auth.c:283 +#: plugins/sudoers/auth/aix_auth.c:278 #, c-format msgid "unable to change password for %s" msgstr "не могу да изменим лозинку за „%s“" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:70 #, c-format msgid "unable to get login class for user %s" msgstr "не могу да добавим разред пријаве за корисника „%s“" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:75 msgid "unable to begin bsd authentication" msgstr "не могу да почнем бсд потврђивање идентитета" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:83 msgid "invalid authentication type" msgstr "неисправна врста потврђивање идентитета" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:92 msgid "unable to initialize BSD authentication" msgstr "не могу да покренем БСД потврђивање идентитета" -#: plugins/sudoers/auth/bsdauth.c:185 +#: plugins/sudoers/auth/bsdauth.c:180 msgid "your account has expired" msgstr "ваш налог је истекао" -#: plugins/sudoers/auth/bsdauth.c:187 +#: plugins/sudoers/auth/bsdauth.c:182 msgid "approval failed" msgstr "доказивање није успело" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:54 msgid "unable to read fwtk config" msgstr "не могу да читам „fwtk“ подешавања" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:59 msgid "unable to connect to authentication server" msgstr "не могу да се повежем на сервер потврђивања идентитета" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:126 +#: plugins/sudoers/auth/fwtk.c:65 plugins/sudoers/auth/fwtk.c:89 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "изгубио сам везу са сервером потврђивања идентитета" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:69 #, c-format msgid "" "authentication server error:\n" @@ -763,161 +897,161 @@ msgstr "" "грешка сервера потврђивања идентитета:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:115 +#: plugins/sudoers/auth/kerb5.c:110 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: не могу да претворим главника у ниску („%s“): %s" -#: plugins/sudoers/auth/kerb5.c:165 +#: plugins/sudoers/auth/kerb5.c:160 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: не могу да обрадим „%s“: %s" -#: plugins/sudoers/auth/kerb5.c:174 +#: plugins/sudoers/auth/kerb5.c:169 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: не могу да решим оставу пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:221 +#: plugins/sudoers/auth/kerb5.c:216 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: не могу да доделим опције: %s" -#: plugins/sudoers/auth/kerb5.c:236 +#: plugins/sudoers/auth/kerb5.c:231 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: не могу да добавим пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:249 +#: plugins/sudoers/auth/kerb5.c:244 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: не могу да покренем оставу пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:252 +#: plugins/sudoers/auth/kerb5.c:247 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: не могу да сместим пуномоћства у оставу: %s" -#: plugins/sudoers/auth/kerb5.c:316 +#: plugins/sudoers/auth/kerb5.c:311 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: не могу да добавим главника домаћина: %s" -#: plugins/sudoers/auth/kerb5.c:330 +#: plugins/sudoers/auth/kerb5.c:325 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Не могу потврдити ТГТ! Могући напад!: %s" -#: plugins/sudoers/auth/pam.c:223 +#: plugins/sudoers/auth/pam.c:218 #, c-format msgid "unable to initialize PAM: %s" msgstr "не могу да покренем ПАМ: %s" -#: plugins/sudoers/auth/pam.c:322 +#: plugins/sudoers/auth/pam.c:317 #, c-format msgid "PAM authentication error: %s" msgstr "Грешка ПАМ потврђивања идентитета: %s" -#: plugins/sudoers/auth/pam.c:341 +#: plugins/sudoers/auth/pam.c:336 msgid "account validation failure, is your account locked?" msgstr "неуспех провере налога, да ли је ваш налог закључан?" -#: plugins/sudoers/auth/pam.c:352 +#: plugins/sudoers/auth/pam.c:347 msgid "Account or password is expired, reset your password and try again" msgstr "Налог или лозинка је истекла, поново поставите лозинку и покушајте поново" -#: plugins/sudoers/auth/pam.c:358 +#: plugins/sudoers/auth/pam.c:353 #, c-format msgid "unable to change expired password: %s" msgstr "не могу да изменим истеклу лозинку: %s" -#: plugins/sudoers/auth/pam.c:369 +#: plugins/sudoers/auth/pam.c:364 msgid "Password expired, contact your system administrator" msgstr "Лозинка је истекла, обратите се администратору система" -#: plugins/sudoers/auth/pam.c:374 +#: plugins/sudoers/auth/pam.c:369 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Налог је истекао или ПАМ подешавањима недостаје одељак „налог“ за судо, обратите се администратору система" -#: plugins/sudoers/auth/pam.c:382 plugins/sudoers/auth/pam.c:387 +#: plugins/sudoers/auth/pam.c:377 plugins/sudoers/auth/pam.c:382 #, c-format msgid "PAM account management error: %s" msgstr "грешка управљања ПАМ налогом: %s" -#: plugins/sudoers/auth/rfc1938.c:104 plugins/sudoers/visudo.c:248 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 #, c-format msgid "you do not exist in the %s database" msgstr "ви не постојите у бази подтака „%s“" -#: plugins/sudoers/auth/securid5.c:77 +#: plugins/sudoers/auth/securid5.c:72 msgid "failed to initialise the ACE API library" msgstr "нисам успео да покренем АЦЕ АПИ библиотеку" -#: plugins/sudoers/auth/securid5.c:103 +#: plugins/sudoers/auth/securid5.c:98 msgid "unable to contact the SecurID server" msgstr "не могу да ступим у везу са сервером безбеднног ИБ-а" -#: plugins/sudoers/auth/securid5.c:112 +#: plugins/sudoers/auth/securid5.c:107 msgid "User ID locked for SecurID Authentication" msgstr "ИБ корисника је закључан за потврђивање идентитета безбедног ИБ-а" -#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:167 +#: plugins/sudoers/auth/securid5.c:111 plugins/sudoers/auth/securid5.c:162 msgid "invalid username length for SecurID" msgstr "неисправна дужина корисничког имена за безбедни ИБ" -#: plugins/sudoers/auth/securid5.c:120 plugins/sudoers/auth/securid5.c:172 +#: plugins/sudoers/auth/securid5.c:115 plugins/sudoers/auth/securid5.c:167 msgid "invalid Authentication Handle for SecurID" msgstr "неисправна ручка потврђивања идентитета за безбедни ИБ" -#: plugins/sudoers/auth/securid5.c:124 +#: plugins/sudoers/auth/securid5.c:119 msgid "SecurID communication failed" msgstr "Није успело комуницирање безбедног ИБ-а" -#: plugins/sudoers/auth/securid5.c:128 plugins/sudoers/auth/securid5.c:217 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 msgid "unknown SecurID error" msgstr "непозната грешка безбедног ИБ-а" -#: plugins/sudoers/auth/securid5.c:162 +#: plugins/sudoers/auth/securid5.c:157 msgid "invalid passcode length for SecurID" msgstr "неисправна дужина пропусне шифре за безбедни ИБ" -#: plugins/sudoers/auth/sia.c:74 plugins/sudoers/auth/sia.c:129 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 msgid "unable to initialize SIA session" msgstr "не могу да покренем СИА сесију" -#: plugins/sudoers/auth/sudo_auth.c:138 +#: plugins/sudoers/auth/sudo_auth.c:132 msgid "invalid authentication methods" msgstr "неисправни начини потврђивања идентитета" -#: plugins/sudoers/auth/sudo_auth.c:140 +#: plugins/sudoers/auth/sudo_auth.c:134 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Неисправни начини потврђивања идентитета су преведени у судоу! Не можете мешати самостално и несамостално потврђивање идентитета." -#: plugins/sudoers/auth/sudo_auth.c:261 plugins/sudoers/auth/sudo_auth.c:311 +#: plugins/sudoers/auth/sudo_auth.c:255 plugins/sudoers/auth/sudo_auth.c:305 msgid "no authentication methods" msgstr "нема начина потврђивања идентитета" -#: plugins/sudoers/auth/sudo_auth.c:263 +#: plugins/sudoers/auth/sudo_auth.c:257 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:313 +#: plugins/sudoers/auth/sudo_auth.c:307 msgid "Unable to initialize authentication methods." msgstr "Не могу да покренем методе потврђивања идентитета." -#: plugins/sudoers/auth/sudo_auth.c:479 +#: plugins/sudoers/auth/sudo_auth.c:473 msgid "Authentication methods:" msgstr "Начини потврђивања идентитета:" -#: plugins/sudoers/bsm_audit.c:125 plugins/sudoers/bsm_audit.c:217 +#: plugins/sudoers/bsm_audit.c:123 plugins/sudoers/bsm_audit.c:214 msgid "Could not determine audit condition" msgstr "Не могу да утврдим услов прегледа" -#: plugins/sudoers/bsm_audit.c:190 plugins/sudoers/bsm_audit.c:281 +#: plugins/sudoers/bsm_audit.c:188 plugins/sudoers/bsm_audit.c:277 msgid "unable to commit audit record" msgstr "не могу да предам снимак прегледа" -#: plugins/sudoers/check.c:264 +#: plugins/sudoers/check.c:258 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -937,118 +1071,118 @@ msgstr "" " #3) Са великом моћи долази и велика одговорност.\n" "\n" -#: plugins/sudoers/check.c:307 plugins/sudoers/check.c:317 -#: plugins/sudoers/sudoers.c:778 plugins/sudoers/sudoers.c:826 -#: plugins/sudoers/tsdump.c:126 +#: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 +#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "непознат јиб: %u" -#: plugins/sudoers/check.c:312 plugins/sudoers/iolog.c:121 -#: plugins/sudoers/policy.c:1034 plugins/sudoers/sudoers.c:391 -#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:1255 -#: plugins/sudoers/testsudoers.c:227 plugins/sudoers/testsudoers.c:400 +#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 +#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 +#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 +#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 #, c-format msgid "unknown user: %s" msgstr "непознат корисник: %s" -#: plugins/sudoers/cvtsudoers.c:199 +#: plugins/sudoers/cvtsudoers.c:195 #, c-format msgid "order increment: %s: %s" msgstr "повећање поретка: %s: %s" -#: plugins/sudoers/cvtsudoers.c:215 +#: plugins/sudoers/cvtsudoers.c:211 #, c-format msgid "starting order: %s: %s" msgstr "поредак почетка: %s: %s" -#: plugins/sudoers/cvtsudoers.c:225 +#: plugins/sudoers/cvtsudoers.c:221 #, c-format msgid "order padding: %s: %s" msgstr "попуњавање поретка: %s: %s" -#: plugins/sudoers/cvtsudoers.c:235 plugins/sudoers/visudo.c:186 +#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 #, c-format msgid "%s grammar version %d\n" msgstr "%s граматика издање %d\n" -#: plugins/sudoers/cvtsudoers.c:252 plugins/sudoers/testsudoers.c:175 +#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "неподржан запис улаза „%s“" -#: plugins/sudoers/cvtsudoers.c:267 +#: plugins/sudoers/cvtsudoers.c:263 #, c-format msgid "unsupported output format %s" msgstr "неподржан запис излаза „%s“" -#: plugins/sudoers/cvtsudoers.c:319 +#: plugins/sudoers/cvtsudoers.c:315 #, c-format msgid "%s: input and output files must be different" msgstr "%s: улазна датотека треба да се разликује од излазне" -#: plugins/sudoers/cvtsudoers.c:335 plugins/sudoers/sudoers.c:185 -#: plugins/sudoers/testsudoers.c:266 plugins/sudoers/visudo.c:254 -#: plugins/sudoers/visudo.c:610 plugins/sudoers/visudo.c:933 +#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 +#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 msgid "unable to initialize sudoers default values" msgstr "не могу да покренем основне вредности судоерса" -#: plugins/sudoers/cvtsudoers.c:421 plugins/sudoers/ldap_conf.c:436 +#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:480 +#: plugins/sudoers/cvtsudoers.c:476 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: непозната реч кључа: %s" -#: plugins/sudoers/cvtsudoers.c:526 +#: plugins/sudoers/cvtsudoers.c:522 #, c-format msgid "invalid defaults type: %s" msgstr "неисправна врста основности: %s" -#: plugins/sudoers/cvtsudoers.c:549 +#: plugins/sudoers/cvtsudoers.c:545 #, c-format msgid "invalid suppression type: %s" msgstr "неисправна врста потискивања: %s" -#: plugins/sudoers/cvtsudoers.c:589 plugins/sudoers/cvtsudoers.c:603 +#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 #, c-format msgid "invalid filter: %s" msgstr "неисправан филтер: %s" -#: plugins/sudoers/cvtsudoers.c:622 plugins/sudoers/cvtsudoers.c:639 -#: plugins/sudoers/cvtsudoers.c:1249 plugins/sudoers/cvtsudoers_json.c:868 -#: plugins/sudoers/cvtsudoers_ldif.c:683 plugins/sudoers/sudoers.c:1001 -#: plugins/sudoers/sudoreplay.c:1391 plugins/sudoers/timestamp.c:448 -#: plugins/sudoers/tsdump.c:135 plugins/sudoers/visudo.c:929 +#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 +#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 +#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 +#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 #, c-format msgid "unable to open %s" msgstr "не могу да отворим „%s“" -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/visudo.c:938 +#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 #, c-format msgid "failed to parse %s file, unknown error" msgstr "нисам успео да обрадим %s датотеку, непозната грешка" -#: plugins/sudoers/cvtsudoers.c:650 plugins/sudoers/visudo.c:955 +#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 #, c-format msgid "parse error in %s near line %d\n" msgstr "грешка обраде у %s близу реда %d\n" -#: plugins/sudoers/cvtsudoers.c:653 plugins/sudoers/visudo.c:958 +#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 #, c-format msgid "parse error in %s\n" msgstr "грешка обраде у %s\n" -#: plugins/sudoers/cvtsudoers.c:1296 plugins/sudoers/sudoreplay.c:1088 -#: plugins/sudoers/timestamp.c:332 plugins/sudoers/timestamp.c:335 +#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "не могу да пишем у „%s“" -#: plugins/sudoers/cvtsudoers.c:1319 +#: plugins/sudoers/cvtsudoers.c:1315 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1057,7 +1191,7 @@ msgstr "" "%s – претвара међусобно записе датотеке судоерса\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1321 +#: plugins/sudoers/cvtsudoers.c:1317 msgid "" "\n" "Options:\n" @@ -1097,30 +1231,30 @@ msgstr "" " -s, --suppress=одељци потискује излаз неких одељака\n" " -V, --version приказује податке о издању и излази" -#: plugins/sudoers/cvtsudoers_json.c:487 plugins/sudoers/cvtsudoers_json.c:521 -#: plugins/sudoers/cvtsudoers_json.c:709 +#: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 +#: plugins/sudoers/cvtsudoers_json.c:702 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "непознат унос основности „%s“" -#: plugins/sudoers/cvtsudoers_json.c:647 plugins/sudoers/cvtsudoers_json.c:660 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 -#: plugins/sudoers/ldap.c:482 +#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 +#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "не могу да добавим ГМТ време" -#: plugins/sudoers/cvtsudoers_json.c:650 plugins/sudoers/cvtsudoers_json.c:663 -#: plugins/sudoers/cvtsudoers_ldif.c:351 plugins/sudoers/cvtsudoers_ldif.c:362 -#: plugins/sudoers/ldap.c:488 +#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 +#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "не могу да обликујем временску ознаку" -#: plugins/sudoers/cvtsudoers_ldif.c:635 +#: plugins/sudoers/cvtsudoers_ldif.c:632 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "превише уноса судоерса, највише %u" -#: plugins/sudoers/cvtsudoers_ldif.c:678 +#: plugins/sudoers/cvtsudoers_ldif.c:675 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "променљива „SUDOERS_BASE“ окружења није постављена и „-b“ опција није наведена." @@ -1388,7 +1522,7 @@ msgid "File descriptors >= %d will be closed before executing a command" msgstr "Описници датотека >= %d ће бити затворени пре извршавања наредбе" #: plugins/sudoers/def_data.c:278 -msgid "If set, users may override the value of `closefrom' with the -C option" +msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Ако је подешено, корисници могу да препишу вредност „closefrom“ са опцијом „-C“" #: plugins/sudoers/def_data.c:282 @@ -1669,338 +1803,289 @@ msgid "Path to the sudoers private key file: %s" msgstr "Путања до датотеке датотеке личног кључа судоерса: %s" #: plugins/sudoers/def_data.c:534 +msgid "Verify that the log server's certificate is valid" +msgstr "Потврђује да је исправно уверење дневника сервера" + +#: plugins/sudoers/def_data.c:538 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Допушта коришћење непознатог „runas“ корисника и/или ИБ-а групе" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:542 msgid "Only permit running commands as a user with a valid shell" msgstr "Допушта покретање наредби као корисник само са исправном шкољком" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:546 msgid "Set the pam remote user to the user running sudo" msgstr "Поставља пам удаљеног корисника на корисника покретача судо-а" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:550 msgid "Set the pam remote host to the local host name" msgstr "Поставља пам удаљеног домаћина на назив локалног домаћина" -#: plugins/sudoers/defaults.c:190 +#: plugins/sudoers/defaults.c:183 #, c-format msgid "%s:%d unknown defaults entry \"%s\"" msgstr "%s:%d непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:193 +#: plugins/sudoers/defaults.c:186 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:236 +#: plugins/sudoers/defaults.c:229 #, c-format msgid "%s:%d no value specified for \"%s\"" msgstr "%s:%d није наведена вредност за „%s“" -#: plugins/sudoers/defaults.c:239 +#: plugins/sudoers/defaults.c:232 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: није наведена вредност за „%s“" -#: plugins/sudoers/defaults.c:259 +#: plugins/sudoers/defaults.c:252 #, c-format msgid "%s:%d values for \"%s\" must start with a '/'" msgstr "%s:%d вредност за „%s“ мора да почиње /" -#: plugins/sudoers/defaults.c:262 +#: plugins/sudoers/defaults.c:255 #, c-format msgid "%s: values for \"%s\" must start with a '/'" msgstr "%s: вредност за „%s“ мора да почиње /" -#: plugins/sudoers/defaults.c:284 +#: plugins/sudoers/defaults.c:277 #, c-format msgid "%s:%d option \"%s\" does not take a value" msgstr "%s:%d опција „%s“ не узима вредност" -#: plugins/sudoers/defaults.c:287 +#: plugins/sudoers/defaults.c:280 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: опција „%s“ не узима вредност" -#: plugins/sudoers/defaults.c:312 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" msgstr "%s:%d неисправна врста основности 0x%x за опцију „%s“" -#: plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:308 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: неисправна врста основности 0x%x за опцију „%s“" -#: plugins/sudoers/defaults.c:325 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s:%d value \"%s\" is invalid for option \"%s\"" msgstr "%s:%d вредност „%s“ је неисправна за опцију „%s“" -#: plugins/sudoers/defaults.c:328 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: вредност „%s“ је неисправна за опцију „%s“" -#: plugins/sudoers/env.c:411 +#: plugins/sudoers/env.c:404 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: оштећено стави окружење, дужине не одговарају" -#: plugins/sudoers/env.c:1133 +#: plugins/sudoers/env.c:1131 msgid "unable to rebuild the environment" msgstr "не могу поново да изградим окружење" -#: plugins/sudoers/env.c:1207 +#: plugins/sudoers/env.c:1205 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "извините, није вам дозвољено да подесите следеће променљиве окружења: %s" -#: plugins/sudoers/file.c:116 +#: plugins/sudoers/file.c:104 #, c-format msgid "parse error in %s near line %d" msgstr "грешка обраде у %s близу реда %d" -#: plugins/sudoers/file.c:119 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s" msgstr "грешка обраде у %s" -#: plugins/sudoers/filedigest.c:61 +#: plugins/sudoers/filedigest.c:49 #, c-format msgid "unsupported digest type %d for %s" msgstr "неподржана врста прихватања потврђивања иднтитета „%d“ за „%s“" -#: plugins/sudoers/filedigest.c:90 +#: plugins/sudoers/filedigest.c:78 #, c-format msgid "%s: read error" msgstr "%s: грешка читања" -#: plugins/sudoers/group_plugin.c:91 +#: plugins/sudoers/group_plugin.c:83 #, c-format msgid "%s must be owned by uid %d" msgstr "„%s“ мора бити у власништву јиб-а %d" -#: plugins/sudoers/group_plugin.c:95 +#: plugins/sudoers/group_plugin.c:87 #, c-format msgid "%s must only be writable by owner" msgstr "Само корисник може да пише у „%s“" -#: plugins/sudoers/group_plugin.c:104 plugins/sudoers/sssd.c:562 +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:571 #, c-format msgid "unable to load %s: %s" msgstr "не могу да учитам %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:102 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "не могу да нађем симбол „group_plugin“ у „%s“" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:107 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: несагласно веће издање прикључка групе %d, очекивано је %d" -#: plugins/sudoers/interfaces.c:86 plugins/sudoers/interfaces.c:103 +#: plugins/sudoers/interfaces.c:80 plugins/sudoers/interfaces.c:97 #, c-format msgid "unable to parse IP address \"%s\"" msgstr "не могу да обрадим ИП адресу „%s“" -#: plugins/sudoers/interfaces.c:91 plugins/sudoers/interfaces.c:108 +#: plugins/sudoers/interfaces.c:85 plugins/sudoers/interfaces.c:102 #, c-format msgid "unable to parse netmask \"%s\"" msgstr "не могу да обрадим мрежну маску „%s“" -#: plugins/sudoers/interfaces.c:136 +#: plugins/sudoers/interfaces.c:130 msgid "Local IP address and netmask pairs:\n" msgstr "Месна ИП адреса и парови мрежне маске:\n" -#: plugins/sudoers/iolog.c:146 plugins/sudoers/sudoers.c:398 -#: plugins/sudoers/sudoers.c:400 plugins/sudoers/sudoers.c:1289 -#: plugins/sudoers/testsudoers.c:424 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 +#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 +#: plugins/sudoers/testsudoers.c:416 #, c-format msgid "unknown group: %s" msgstr "непозната група: %s" -#: plugins/sudoers/iolog.c:505 plugins/sudoers/iolog.c:788 -#: plugins/sudoers/iolog.c:938 plugins/sudoers/iolog.c:945 -#: plugins/sudoers/iolog.c:1066 plugins/sudoers/iolog.c:1073 -#: plugins/sudoers/iolog.c:1172 plugins/sudoers/iolog.c:1179 +#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 +#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 +#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 +#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 #, c-format msgid "unable to write to I/O log file: %s" msgstr "не могу да пишем у датотеку дневника У/И: %s" -#: plugins/sudoers/iolog.c:555 +#: plugins/sudoers/iolog.c:566 msgid "unable to update sequence file" msgstr "не могу да освежим датотеку низа" -#: plugins/sudoers/iolog.c:594 +#: plugins/sudoers/iolog.c:605 #, c-format msgid "unable to create %s/%s" msgstr "не могу да направим „%s/%s“" -#: plugins/sudoers/iolog.c:622 +#: plugins/sudoers/iolog.c:631 msgid "unable to connect to log server" msgstr "не могу да се повежем на сервер дневника" -#: plugins/sudoers/iolog.c:830 +#: plugins/sudoers/iolog.c:851 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: унутрашња грешка, датотека У/И дневника за догађај %d није отворена" -#: plugins/sudoers/iolog.c:923 plugins/sudoers/iolog.c:1051 -#: plugins/sudoers/iolog.c:1156 plugins/sudoers/timestamp.c:862 -#: plugins/sudoers/timestamp.c:954 plugins/sudoers/visudo.c:498 -#: plugins/sudoers/visudo.c:504 +#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 +#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 +#: plugins/sudoers/visudo.c:498 msgid "unable to read the clock" msgstr "не могу да прочитам сат" -#: plugins/sudoers/iolog.c:1148 plugins/sudoers/iolog_client.c:862 +#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: унутрашња грешка, неисправан сигнал %d" -#: plugins/sudoers/iolog_client.c:297 +#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 +#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +msgid "error in event loop" +msgstr "грешка у петљи догађаја" + +#: plugins/sudoers/iolog_client.c:194 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Стварање новог „SSL_CTX“ објекта није успело: %s" -#: plugins/sudoers/iolog_client.c:320 -msgid "CA bundle file is not set in sudoers" -msgstr "Датотека групних издавача уверења није постављена у судоерсу" - -#: plugins/sudoers/iolog_client.c:327 -#, c-format -msgid "Calling SSL_CTX_load_verify_locations() failed: %s" -msgstr "Позивање „SSL_CTX_load_verify_locations()“ није успело: %s" - -#: plugins/sudoers/iolog_client.c:339 -msgid "Signed certificate file is not set in sudoers" -msgstr "Потписана датотека уверења није постављена у судоерсу" - -#: plugins/sudoers/iolog_client.c:345 +#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 #, c-format -msgid "Unable to load cert into the ssl context: %s" -msgstr "Не могу да учитам уверење у ссл контекст: %s" +msgid "TLS connection to %s:%s failed: %s" +msgstr "ТЛС повезивање са „%s:%s“ није успело: %s" -#: plugins/sudoers/iolog_client.c:356 -#, c-format -msgid "Unable to load private key into the ssl context: %s" -msgstr "Не могу да учитам лични кључ у ссл контекст: %s" - -#: plugins/sudoers/iolog_client.c:363 -#, c-format -msgid "Unable to allocate ssl object: %s" -msgstr "Не могу да доделим ссл објекат: %s" - -#: plugins/sudoers/iolog_client.c:369 -#, c-format -msgid "Unable to attach socket to the ssl object: %s" -msgstr "Не могу да прикачим прикључницу ссл објекту: %s" - -#: plugins/sudoers/iolog_client.c:457 -#, c-format -msgid "SSL_connect failed: ssl_error=%d, stack=%s" -msgstr "„SSL_повезивање“ није успело: ssl_грешка=%d, спремник=%s" +#: plugins/sudoers/iolog_client.c:496 +msgid "TLS initialization was unsuccessful" +msgstr "ТЛС покретање беше безуспешно" -#: plugins/sudoers/iolog_client.c:599 -#, c-format -msgid "client message too large: %zu" -msgstr "порука клијента је превелика: %zu" +#: plugins/sudoers/iolog_client.c:505 +msgid "TLS handshake was unsuccessful" +msgstr "ТЛС руковање беше безуспешно" -#: plugins/sudoers/iolog_client.c:656 plugins/sudoers/iolog_client.c:844 +#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 msgid "unable to get time of day" msgstr "не могу да добавим време дана" -#: plugins/sudoers/iolog_client.c:871 +#: plugins/sudoers/iolog_client.c:986 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: унутрашња грешка, неисправно излазно стање %d" -#: plugins/sudoers/iolog_client.c:1104 -msgid "TLS initialization was unsuccessful" -msgstr "ТЛС покретање беше безуспешно" - -#: plugins/sudoers/iolog_client.c:1109 -msgid "TLS handshake was unsuccessful" -msgstr "ТЛС руковање беше безуспешно" - -#: plugins/sudoers/iolog_client.c:1361 -#, c-format -msgid "SSL_read failed: ssl_error=%d, stack=%s" -msgstr "„SSL_читање“ није успело: ssl_грешка=%d, спремник=%s" - -#: plugins/sudoers/iolog_client.c:1384 +#: plugins/sudoers/iolog_client.c:1523 msgid "lost connection to log server" msgstr "изгубих везу са сервером дневника" -#: plugins/sudoers/iolog_client.c:1397 -#, c-format -msgid "server message too large: %u" -msgstr "порука сервера је превелика: %u" - -#: plugins/sudoers/iolog_client.c:1461 +#: plugins/sudoers/iolog_client.c:1600 msgid "missing write buffer" msgstr "недостаје међумеморија писања" -#: plugins/sudoers/iolog_client.c:1486 -#, c-format -msgid "SSL_write failed: ssl_error=%d, stack=%s" -msgstr "„SSL_писање“ није успело: ssl_грешка=%d, спремник=%s" - -#: plugins/sudoers/iolog_client.c:1610 -#, c-format -msgid "unknown address family: %d" -msgstr "непозната породица адресе: %d" - -#: plugins/sudoers/ldap.c:178 plugins/sudoers/ldap_conf.c:296 +#: plugins/sudoers/ldap.c:176 plugins/sudoers/ldap_conf.c:291 msgid "starttls not supported when using ldaps" msgstr "старттлс није подржано када се користи лдапс" -#: plugins/sudoers/ldap.c:249 +#: plugins/sudoers/ldap.c:247 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "не могу да покренем ССЛ уверење и бп кључа: %s" -#: plugins/sudoers/ldap.c:252 +#: plugins/sudoers/ldap.c:250 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "морате да подесите „TLS_CERT“ у „%s“ да користите ССЛ" -#: plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1658 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не могу да покренем ЛДАП: %s" -#: plugins/sudoers/ldap.c:1656 +#: plugins/sudoers/ldap.c:1694 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:1793 plugins/sudoers/parse_ldif.c:747 +#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "неисправна особина „sudoOrder“: %s" -#: plugins/sudoers/ldap_conf.c:205 +#: plugins/sudoers/ldap_conf.c:200 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: прикључник је превелик" -#: plugins/sudoers/ldap_conf.c:265 +#: plugins/sudoers/ldap_conf.c:260 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "неподржана врста ЛДАП путање: %s" -#: plugins/sudoers/ldap_conf.c:292 +#: plugins/sudoers/ldap_conf.c:287 msgid "unable to mix ldap and ldaps URIs" msgstr "не могу да помешам лдап и лдапс путање" -#: plugins/sudoers/ldap_util.c:553 plugins/sudoers/ldap_util.c:555 +#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "не могу да претворим „sudoOption“: %s%s%s" -#: plugins/sudoers/linux_audit.c:59 +#: plugins/sudoers/linux_audit.c:58 msgid "unable to open audit system" msgstr "не могу да отворим систем прегледа" @@ -2008,62 +2093,62 @@ msgstr "не могу да отворим систем прегледа" msgid "unable to send audit message" msgstr "не могу да пошаљем поруку прегледа" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:167 #, c-format msgid "unable to open log file: %s" msgstr "не могу да отворим датотеку дневника: %s" -#: plugins/sudoers/logging.c:183 +#: plugins/sudoers/logging.c:175 #, c-format msgid "unable to lock log file: %s" msgstr "не могу да закључам датотеку дневника: %s" -#: plugins/sudoers/logging.c:216 +#: plugins/sudoers/logging.c:208 #, c-format msgid "unable to write log file: %s" msgstr "не могу да запишем датотеку дневника: %s" -#: plugins/sudoers/logging.c:249 +#: plugins/sudoers/logging.c:241 msgid "user NOT in sudoers" msgstr "корисник НИЈЕ у судоерсу" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:243 msgid "user NOT authorized on host" msgstr "корисник НИЈЕ овлашћен на домаћину" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:245 msgid "command not allowed" msgstr "наредба није допуштена" -#: plugins/sudoers/logging.c:296 +#: plugins/sudoers/logging.c:288 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "„%s“ се не налази у датотеци судоерса. О овом инциденту ће бити поднет извештај.\n" -#: plugins/sudoers/logging.c:299 +#: plugins/sudoers/logging.c:291 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "„%s“ нема права да покрене судо над „%s“. О овом инциденту ће бити поднет извештај.\n" -#: plugins/sudoers/logging.c:303 +#: plugins/sudoers/logging.c:295 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Извините, корисник %s не може покренути судо на %s.\n" -#: plugins/sudoers/logging.c:306 +#: plugins/sudoers/logging.c:298 #, 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:343 plugins/sudoers/sudoers.c:518 -#: plugins/sudoers/sudoers.c:520 plugins/sudoers/sudoers.c:522 -#: plugins/sudoers/sudoers.c:524 plugins/sudoers/sudoers.c:675 -#: plugins/sudoers/sudoers.c:677 +#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 +#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 +#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 +#: plugins/sudoers/sudoers.c:667 #, c-format msgid "%s: command not found" msgstr "%s: нема такве наредбе" -#: plugins/sudoers/logging.c:345 plugins/sudoers/sudoers.c:514 +#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2072,15 +2157,15 @@ msgstr "" "занемарујем „%s“ пронађено у „.“\n" "Користите „sudo ./%s“ ако је то „%s“ које желите да покренете." -#: plugins/sudoers/logging.c:362 +#: plugins/sudoers/logging.c:354 msgid "authentication failure" msgstr "потврђивање идентитета није успело" -#: plugins/sudoers/logging.c:388 +#: plugins/sudoers/logging.c:380 msgid "a password is required" msgstr "потребна је лозинка" -#: plugins/sudoers/logging.c:458 +#: plugins/sudoers/logging.c:450 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2088,32 +2173,32 @@ msgstr[0] "%u покушај нетачне лозинке" msgstr[1] "%u покушаја нетачне лозинке" msgstr[2] "%u покушаја нетачне лозинке" -#: plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:714 #, c-format msgid "unable to dup stdin: %m" msgstr "не могу да удвостручим стандардни улаз: %m" -#: plugins/sudoers/logging.c:759 +#: plugins/sudoers/logging.c:751 #, c-format msgid "unable to execute %s: %m" msgstr "не могу да извршим „%s“: %m" -#: plugins/sudoers/logging.c:800 plugins/sudoers/logging.c:856 +#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 #, c-format msgid "unable to fork: %m" msgstr "не могу да исцепим: %m" -#: plugins/sudoers/logging.c:846 +#: plugins/sudoers/logging.c:838 #, c-format msgid "unable to open pipe: %m" msgstr "не могу да отворим спојку: %m" -#: plugins/sudoers/match_digest.c:123 +#: plugins/sudoers/match_digest.c:116 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "приказ за %s (%s) није у %s облику" -#: plugins/sudoers/parse.c:449 +#: plugins/sudoers/parse.c:442 #, c-format msgid "" "\n" @@ -2122,7 +2207,7 @@ msgstr "" "\n" "ЛДАП улога: %s\n" -#: plugins/sudoers/parse.c:452 +#: plugins/sudoers/parse.c:445 #, c-format msgid "" "\n" @@ -2131,98 +2216,98 @@ msgstr "" "\n" "Унос судоерса:\n" -#: plugins/sudoers/parse.c:454 +#: plugins/sudoers/parse.c:447 #, c-format msgid " RunAsUsers: " msgstr " „Покрени-као“ корисници: " -#: plugins/sudoers/parse.c:469 +#: plugins/sudoers/parse.c:462 #, c-format msgid " RunAsGroups: " msgstr " „Покрени-као“ групе: " -#: plugins/sudoers/parse.c:479 +#: plugins/sudoers/parse.c:472 #, c-format msgid " Options: " msgstr " Опције: " -#: plugins/sudoers/parse.c:529 +#: plugins/sudoers/parse.c:522 #, c-format msgid " Commands:\n" msgstr " Наредбе:\n" -#: plugins/sudoers/parse.c:720 +#: plugins/sudoers/parse.c:713 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Упоређује уносе основности за „%s“ на %s:\n" -#: plugins/sudoers/parse.c:738 +#: plugins/sudoers/parse.c:731 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Покрени-као и Наредбено-посебне основности за „%s“:\n" -#: plugins/sudoers/parse.c:756 +#: plugins/sudoers/parse.c:749 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Корисник „%s“ може да покреће следеће наредбе на %s:\n" -#: plugins/sudoers/parse.c:771 +#: plugins/sudoers/parse.c:764 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Корисник „%s“ нема права да покрене судо над „%s“.\n" -#: plugins/sudoers/parse_ldif.c:617 +#: plugins/sudoers/parse_ldif.c:614 #, c-format msgid "ignoring incomplete sudoRole: cn: %s" msgstr "занемарујем непотпуно „sudoRole“: cn: %s" -#: plugins/sudoers/parse_ldif.c:677 +#: plugins/sudoers/parse_ldif.c:674 #, c-format msgid "invalid LDIF attribute: %s" msgstr "неисправна особина „LDIF“: %s" -#: plugins/sudoers/policy.c:90 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "судо челник је поставио неисправну „%.*s“" -#: plugins/sudoers/policy.c:294 plugins/sudoers/testsudoers.c:280 +#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "не могу да обрадим списак адреса мреже" -#: plugins/sudoers/policy.c:439 +#: plugins/sudoers/policy.c:426 msgid "user name not set by sudo front-end" msgstr "судо челник није поставио име корисника" -#: plugins/sudoers/policy.c:443 +#: plugins/sudoers/policy.c:430 msgid "user-ID not set by sudo front-end" msgstr "судо челник није поставио ИБ корисника" -#: plugins/sudoers/policy.c:447 +#: plugins/sudoers/policy.c:434 msgid "group-ID not set by sudo front-end" msgstr "судо челник није поставио ИБ групе" -#: plugins/sudoers/policy.c:451 +#: plugins/sudoers/policy.c:438 msgid "host name not set by sudo front-end" msgstr "судо челник није поставио назив домаћина" -#: plugins/sudoers/policy.c:897 plugins/sudoers/visudo.c:236 -#: plugins/sudoers/visudo.c:867 +#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 +#: plugins/sudoers/visudo.c:861 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим „%s“" -#: plugins/sudoers/policy.c:1055 +#: plugins/sudoers/policy.c:1060 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Издање %s прикључка политике судоерса\n" -#: plugins/sudoers/policy.c:1057 +#: plugins/sudoers/policy.c:1062 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматика датотеке судоерса издање %d\n" -#: plugins/sudoers/policy.c:1061 +#: plugins/sudoers/policy.c:1066 #, c-format msgid "" "\n" @@ -2231,386 +2316,382 @@ msgstr "" "\n" "Путања судоерса: %s\n" -#: plugins/sudoers/policy.c:1064 +#: plugins/sudoers/policy.c:1069 #, c-format msgid "nsswitch path: %s\n" msgstr "путања нс-прекидача: %s\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1071 #, c-format msgid "ldap.conf path: %s\n" msgstr "путања лдап.подешавања: %s\n" -#: plugins/sudoers/policy.c:1067 +#: plugins/sudoers/policy.c:1072 #, c-format msgid "ldap.secret path: %s\n" msgstr "путања лдап.тајне: %s\n" -#: plugins/sudoers/policy.c:1100 +#: plugins/sudoers/policy.c:1105 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "немогу да региструјем прикачку врсте „%d“ (издање %d.%d)" -#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:240 +#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 #, c-format msgid "unable to cache uid %u" msgstr "не могу да сместим у оставу јиб „%u“" -#: plugins/sudoers/pwutil.c:234 +#: plugins/sudoers/pwutil.c:226 #, c-format msgid "unable to cache uid %u, already exists" msgstr "не могу да сместим у оставу јиб „%u“, већ постоји" -#: plugins/sudoers/pwutil.c:294 plugins/sudoers/pwutil.c:312 -#: plugins/sudoers/pwutil.c:375 plugins/sudoers/pwutil.c:420 +#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 +#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 #, c-format msgid "unable to cache user %s" msgstr "не могу да сместим у оставу корисника „%s“" -#: plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:299 #, c-format msgid "unable to cache user %s, already exists" msgstr "не могу да сместим у оставу корисника „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:539 plugins/sudoers/pwutil.c:557 +#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 #, c-format msgid "unable to cache gid %u" msgstr "не могу да сместим у оставу гиб „%u“" -#: plugins/sudoers/pwutil.c:551 +#: plugins/sudoers/pwutil.c:543 #, c-format msgid "unable to cache gid %u, already exists" msgstr "не могу да сместим у оставу гиб „%u“, већ постоји" -#: plugins/sudoers/pwutil.c:604 plugins/sudoers/pwutil.c:622 -#: plugins/sudoers/pwutil.c:670 plugins/sudoers/pwutil.c:712 +#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 +#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 #, c-format msgid "unable to cache group %s" msgstr "не могу да сместим у оставу групу „%s“" -#: plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:609 #, c-format msgid "unable to cache group %s, already exists" msgstr "не могу да сместим у оставу групу „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:839 plugins/sudoers/pwutil.c:891 -#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:994 +#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 +#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "не могу да сместим у оставу списак групе за „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:845 plugins/sudoers/pwutil.c:896 -#: plugins/sudoers/pwutil.c:947 plugins/sudoers/pwutil.c:999 +#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 +#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 #, c-format msgid "unable to cache group list for %s" msgstr "не могу да сместим у оставу списак групе за „%s“" -#: plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:877 #, c-format msgid "unable to parse groups for %s" msgstr "не могу да обрадим групе за „%s“" -#: plugins/sudoers/pwutil.c:988 +#: plugins/sudoers/pwutil.c:980 #, c-format msgid "unable to parse gids for %s" msgstr "не могу да обрадим гид-ове за „%s“" -#: plugins/sudoers/set_perms.c:120 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1156 -#: plugins/sudoers/set_perms.c:1450 +#: 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 msgid "perm stack overflow" msgstr "стално прекорачење спремника" -#: plugins/sudoers/set_perms.c:128 plugins/sudoers/set_perms.c:378 -#: plugins/sudoers/set_perms.c:455 plugins/sudoers/set_perms.c:717 -#: plugins/sudoers/set_perms.c:858 plugins/sudoers/set_perms.c:1080 -#: plugins/sudoers/set_perms.c:1164 plugins/sudoers/set_perms.c:1383 -#: plugins/sudoers/set_perms.c:1458 plugins/sudoers/set_perms.c:1548 +#: 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 msgid "perm stack underflow" msgstr "стално поткорачење спремника" -#: plugins/sudoers/set_perms.c:187 plugins/sudoers/set_perms.c:501 -#: plugins/sudoers/set_perms.c:1217 plugins/sudoers/set_perms.c:1491 +#: plugins/sudoers/set_perms.c:181 plugins/sudoers/set_perms.c:495 +#: plugins/sudoers/set_perms.c:1211 plugins/sudoers/set_perms.c:1485 msgid "unable to change to root gid" msgstr "не могу да пређем на гиб администратора" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:598 -#: plugins/sudoers/set_perms.c:989 plugins/sudoers/set_perms.c:1294 +#: plugins/sudoers/set_perms.c:272 plugins/sudoers/set_perms.c:592 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas gid" msgstr "не могу да пређем на гиб покреникао" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:603 -#: plugins/sudoers/set_perms.c:994 plugins/sudoers/set_perms.c:1299 +#: plugins/sudoers/set_perms.c:277 plugins/sudoers/set_perms.c:597 +#: plugins/sudoers/set_perms.c:988 plugins/sudoers/set_perms.c:1293 msgid "unable to set runas group vector" msgstr "не могу да подесим вектор „покрени-као група“" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:614 -#: plugins/sudoers/set_perms.c:1003 plugins/sudoers/set_perms.c:1308 +#: plugins/sudoers/set_perms.c:288 plugins/sudoers/set_perms.c:608 +#: plugins/sudoers/set_perms.c:997 plugins/sudoers/set_perms.c:1302 msgid "unable to change to runas uid" msgstr "не могу да пређем на јиб покреникао" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:632 -#: plugins/sudoers/set_perms.c:1019 plugins/sudoers/set_perms.c:1324 +#: plugins/sudoers/set_perms.c:306 plugins/sudoers/set_perms.c:626 +#: plugins/sudoers/set_perms.c:1013 plugins/sudoers/set_perms.c:1318 msgid "unable to change to sudoers gid" msgstr "не могу да пређем на гиб судоерса" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1067 plugins/sudoers/set_perms.c:1370 -#: plugins/sudoers/set_perms.c:1535 +#: 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 msgid "too many processes" msgstr "превише процеса" -#: plugins/sudoers/solaris_audit.c:58 +#: plugins/sudoers/solaris_audit.c:61 msgid "unable to get current working directory" msgstr "не могу да добавим тренутни радни директоријум" -#: plugins/sudoers/solaris_audit.c:66 +#: plugins/sudoers/solaris_audit.c:69 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "корисничка_наредба скраћене путање прегледа: %s" -#: plugins/sudoers/solaris_audit.c:73 +#: plugins/sudoers/solaris_audit.c:76 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "„argv[0]“ скраћене путање прегледа: %s" -#: plugins/sudoers/solaris_audit.c:122 -msgid "audit_failure message too long" -msgstr "порука неуспеха прегледа је предуга" - -#: plugins/sudoers/sssd.c:564 +#: plugins/sudoers/sssd.c:573 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "не могу да покренем ССС извор. Да ли је СССД инсталиран на вашем рачунару?" -#: plugins/sudoers/sssd.c:572 plugins/sudoers/sssd.c:581 -#: plugins/sudoers/sssd.c:590 plugins/sudoers/sssd.c:599 -#: plugins/sudoers/sssd.c:608 +#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 +#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 +#: plugins/sudoers/sssd.c:617 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "не могу да нађем симбол „%s“ у „%s“" -#: plugins/sudoers/sudoers.c:221 plugins/sudoers/sudoers.c:958 +#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 msgid "problem with defaults entries" msgstr "неприлике са основним уносима" -#: plugins/sudoers/sudoers.c:225 +#: plugins/sudoers/sudoers.c:221 msgid "no valid sudoers sources found, quitting" msgstr "нисам пронашао исправне изворе судоерса, прекидам" -#: plugins/sudoers/sudoers.c:301 +#: plugins/sudoers/sudoers.c:297 msgid "sudoers specifies that root is not allowed to sudo" msgstr "судоерси наводе да администратор није дозвољен у судоу" -#: plugins/sudoers/sudoers.c:361 +#: plugins/sudoers/sudoers.c:357 msgid "user not allowed to override closefrom limit" msgstr "кориснику није дозвољено да препише „closefrom“ ограничење" -#: plugins/sudoers/sudoers.c:362 +#: plugins/sudoers/sudoers.c:358 msgid "you are not permitted to use the -C option" msgstr "није вам допуштено да користите опцију „-C“" -#: plugins/sudoers/sudoers.c:426 +#: plugins/sudoers/sudoers.c:420 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник временске ознаке (%s): нема таквог корисника" -#: plugins/sudoers/sudoers.c:441 +#: plugins/sudoers/sudoers.c:435 msgid "no tty" msgstr "нема конзоле" -#: plugins/sudoers/sudoers.c:442 +#: plugins/sudoers/sudoers.c:436 msgid "sorry, you must have a tty to run sudo" msgstr "извините, морате имати конзолу да покренете судо" -#: plugins/sudoers/sudoers.c:448 plugins/sudoers/sudoers.c:450 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 #, c-format msgid "invalid shell for user %s: %s" msgstr "неисправна шкољка за корисника „%s“: %s" -#: plugins/sudoers/sudoers.c:513 +#: plugins/sudoers/sudoers.c:507 msgid "command in current directory" msgstr "наредба у текућем директоријуму" -#: plugins/sudoers/sudoers.c:532 +#: plugins/sudoers/sudoers.c:525 msgid "user not allowed to set a command timeout" msgstr "кориснику није дозвољено да подеси време истека наредбе" -#: plugins/sudoers/sudoers.c:533 +#: plugins/sudoers/sudoers.c:526 msgid "sorry, you are not allowed set a command timeout" msgstr "извините, није вам дозвољено да подесите време истека наредбе" -#: plugins/sudoers/sudoers.c:541 -msgid "user not allowed to set a preserve the environment" +#: plugins/sudoers/sudoers.c:534 +msgid "user not allowed to preserve the environment" msgstr "кориснику није дозвољено да сачува окружење" -#: plugins/sudoers/sudoers.c:542 +#: plugins/sudoers/sudoers.c:535 msgid "sorry, you are not allowed to preserve the environment" msgstr "извините, није вам дозвољено да сачувате окружење" -#: plugins/sudoers/sudoers.c:893 +#: plugins/sudoers/sudoers.c:878 msgid "command too long" msgstr "наредба је предуга" -#: plugins/sudoers/sudoers.c:951 +#: plugins/sudoers/sudoers.c:936 msgid "sudoedit doesn't need to be run via sudo" msgstr "„sudoedit“ не треба да се покреће путем „sudo“-а" -#: plugins/sudoers/sudoers.c:1005 plugins/sudoers/sudoreplay.c:1502 -#: plugins/sudoers/tsdump.c:145 +#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "не могу да прочитам „%s“" -#: plugins/sudoers/sudoers.c:1030 plugins/sudoers/visudo.c:437 -#: plugins/sudoers/visudo.c:733 +#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 +#: plugins/sudoers/visudo.c:727 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: plugins/sudoers/sudoers.c:1034 +#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: plugins/sudoers/sudoers.c:1038 plugins/sudoers/timestamp.c:259 toke.l:967 +#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:1042 toke.l:972 +#: plugins/sudoers/sudoers.c:1027 toke.l:1065 #, c-format msgid "%s is world writable" msgstr "Сви могу да пишу у „%s“" -#: plugins/sudoers/sudoers.c:1046 toke.l:975 +#: plugins/sudoers/sudoers.c:1031 toke.l:1068 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:1079 +#: plugins/sudoers/sudoers.c:1064 #, c-format msgid "only root can use \"-c %s\"" msgstr "само администратор може да користи „-c %s“" -#: plugins/sudoers/sudoers.c:1098 +#: plugins/sudoers/sudoers.c:1083 #, c-format msgid "unknown login class: %s" msgstr "непознат разред пријављивања: %s" -#: plugins/sudoers/sudoers.c:1183 plugins/sudoers/sudoers.c:1198 +#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 #, c-format msgid "unable to resolve host %s" msgstr "не могу да решим домаћина „%s“" -#: plugins/sudoers/sudoreplay.c:263 +#: plugins/sudoers/sudoreplay.c:258 #, c-format msgid "invalid filter option: %s" msgstr "неисправна опција пропусника: %s" -#: plugins/sudoers/sudoreplay.c:276 +#: plugins/sudoers/sudoreplay.c:274 #, c-format msgid "invalid max wait: %s" msgstr "неисправно најдуже чекање: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:297 #, c-format msgid "invalid speed factor: %s" msgstr "неисправан чинилац брзине: %s" -#: plugins/sudoers/sudoreplay.c:335 +#: plugins/sudoers/sudoreplay.c:333 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:338 #, c-format msgid "%s/timing: %s" msgstr "%s/временисање: %s" -#: plugins/sudoers/sudoreplay.c:344 +#: plugins/sudoers/sudoreplay.c:342 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:372 +#: plugins/sudoers/sudoreplay.c:366 #, c-format msgid "Replaying sudo session: %s" msgstr "Понављам сесију судоа: %s" -#: plugins/sudoers/sudoreplay.c:634 +#: plugins/sudoers/sudoreplay.c:628 msgid "unable to set tty to raw mode" msgstr "не могу да подесим конзолу на сирови режим" -#: plugins/sudoers/sudoreplay.c:685 +#: plugins/sudoers/sudoreplay.c:679 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Упозорење: ваш терминал је премали да би исправно приказао дневник.\n" -#: plugins/sudoers/sudoreplay.c:686 +#: plugins/sudoers/sudoreplay.c:680 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Геометрија дневника је %d x %d, а геометрија терминала је %d x %d." -#: plugins/sudoers/sudoreplay.c:714 +#: plugins/sudoers/sudoreplay.c:708 msgid "Replay finished, press any key to restore the terminal." msgstr "Одговор је завршен, притисните неки тастер да повратите терминал." -#: plugins/sudoers/sudoreplay.c:1161 plugins/sudoers/sudoreplay.c:1186 +#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 #, c-format msgid "ambiguous expression \"%s\"" msgstr "нејасан израз „%s“" -#: plugins/sudoers/sudoreplay.c:1208 +#: plugins/sudoers/sudoreplay.c:1250 msgid "unmatched ')' in expression" msgstr "непоклопљена ) у изразу" -#: plugins/sudoers/sudoreplay.c:1212 +#: plugins/sudoers/sudoreplay.c:1254 #, c-format msgid "unknown search term \"%s\"" msgstr "непознат појам претраге „%s“" -#: plugins/sudoers/sudoreplay.c:1227 +#: plugins/sudoers/sudoreplay.c:1269 #, c-format msgid "%s requires an argument" msgstr "„%s“ захтева аргумент" -#: plugins/sudoers/sudoreplay.c:1230 plugins/sudoers/sudoreplay.c:1478 +#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 #, c-format msgid "invalid regular expression: %s" msgstr "неисправан регуларан израз: %s" -#: plugins/sudoers/sudoreplay.c:1234 +#: plugins/sudoers/sudoreplay.c:1277 #, c-format msgid "could not parse date \"%s\"" msgstr "не могу да обрадим датум „%s“" -#: plugins/sudoers/sudoreplay.c:1243 +#: plugins/sudoers/sudoreplay.c:1286 msgid "unmatched '(' in expression" msgstr "непоклопљена ( у изразу" -#: plugins/sudoers/sudoreplay.c:1245 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"or\"" msgstr "недозвољено пратеће „или“" -#: plugins/sudoers/sudoreplay.c:1247 +#: plugins/sudoers/sudoreplay.c:1290 msgid "illegal trailing \"!\"" msgstr "недозвољени пратећи „!“" -#: plugins/sudoers/sudoreplay.c:1297 +#: plugins/sudoers/sudoreplay.c:1348 #, c-format msgid "unknown search type %d" msgstr "непозната врста претраге „%d“" -#: plugins/sudoers/sudoreplay.c:1569 +#: plugins/sudoers/sudoreplay.c:1615 #, 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:1572 +#: plugins/sudoers/sudoreplay.c:1618 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "употреба: %s [-h] [-d дир] -l [израз претраге]\n" -#: plugins/sudoers/sudoreplay.c:1581 +#: plugins/sudoers/sudoreplay.c:1627 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2619,7 +2700,7 @@ msgstr "" "%s — понавља дневнике сесије судоа\n" "\n" -#: plugins/sudoers/sudoreplay.c:1583 +#: plugins/sudoers/sudoreplay.c:1629 msgid "" "\n" "Options:\n" @@ -2647,11 +2728,11 @@ msgstr "" " -s, --speed=број убрзава или успорава излаз\n" " -V, --version приказује податке о издању и излази" -#: plugins/sudoers/testsudoers.c:362 +#: plugins/sudoers/testsudoers.c:354 msgid "\thost unmatched" msgstr "\tдомаћин није поклопљен" -#: plugins/sudoers/testsudoers.c:365 +#: plugins/sudoers/testsudoers.c:357 msgid "" "\n" "Command allowed" @@ -2659,7 +2740,7 @@ msgstr "" "\n" "Наредба је допуштена" -#: plugins/sudoers/testsudoers.c:366 +#: plugins/sudoers/testsudoers.c:358 msgid "" "\n" "Command denied" @@ -2667,7 +2748,7 @@ msgstr "" "\n" "Наредба је одбијена" -#: plugins/sudoers/testsudoers.c:366 +#: plugins/sudoers/testsudoers.c:358 msgid "" "\n" "Command unmatched" @@ -2675,126 +2756,126 @@ msgstr "" "\n" "Наредба није поклопљена" -#: plugins/sudoers/timestamp.c:267 +#: plugins/sudoers/timestamp.c:260 #, c-format msgid "%s is group writable" msgstr "Група може да пише у „%s“" -#: plugins/sudoers/timestamp.c:343 plugins/sudoers/timestamp.c:687 +#: plugins/sudoers/timestamp.c:336 plugins/sudoers/timestamp.c:680 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "не могу да скратим датотеку временске ознаке на %lld бајта" -#: plugins/sudoers/timestamp.c:873 +#: plugins/sudoers/timestamp.c:866 msgid "ignoring time stamp from the future" msgstr "занемарујем временску ознаку из будућности" -#: plugins/sudoers/timestamp.c:896 +#: plugins/sudoers/timestamp.c:889 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "временска ознака је превише у будућности: %20.20s" -#: plugins/sudoers/timestamp.c:1018 +#: plugins/sudoers/timestamp.c:1011 #, c-format msgid "unable to lock time stamp file %s" msgstr "не могу да закључам датотеку временске ознаке „%s“" -#: plugins/sudoers/timestamp.c:1062 plugins/sudoers/timestamp.c:1082 +#: plugins/sudoers/timestamp.c:1055 plugins/sudoers/timestamp.c:1075 #, c-format msgid "lecture status path too long: %s/%s" msgstr "путања стања обучавања је предуга: %s/%s" -#: plugins/sudoers/toke_util.c:132 +#: plugins/sudoers/toke_util.c:124 msgid "sudoedit should not be specified with a path" msgstr "„sudoedit“ не треба да се наводи са путањом" -#: plugins/sudoers/visudo.c:232 +#: plugins/sudoers/visudo.c:226 msgid "the -x option will be removed in a future release" msgstr "опција „-x“ биће уклоњена у наредном издању" -#: plugins/sudoers/visudo.c:233 +#: plugins/sudoers/visudo.c:227 msgid "please consider using the cvtsudoers utility instead" msgstr "размотрите коришћење помагала „cvtsudoers“" -#: plugins/sudoers/visudo.c:284 plugins/sudoers/visudo.c:666 +#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 #, c-format msgid "press return to edit %s: " msgstr "притисните „унеси“ да уредите „%s“: " -#: plugins/sudoers/visudo.c:345 +#: plugins/sudoers/visudo.c:339 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "наведени уређивач (%s) не постоји" -#: plugins/sudoers/visudo.c:347 +#: plugins/sudoers/visudo.c:341 #, c-format msgid "no editor found (editor path = %s)" msgstr "нисам пронашао уређивача (путања уређивача = %s)" -#: plugins/sudoers/visudo.c:457 plugins/sudoers/visudo.c:465 +#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 msgid "write error" msgstr "грешка писања" -#: plugins/sudoers/visudo.c:511 +#: plugins/sudoers/visudo.c:505 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не могу да добавим податке привремене датотеке (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:512 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "привремена датотека нулте дужине (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:524 +#: plugins/sudoers/visudo.c:518 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "уређивач (%s) није успео, %s је неизмењено" -#: plugins/sudoers/visudo.c:546 +#: plugins/sudoers/visudo.c:540 #, c-format msgid "%s unchanged" msgstr "„%s“ је неизмењено" -#: plugins/sudoers/visudo.c:605 +#: plugins/sudoers/visudo.c:599 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не могу поново да отворим привремену датотеку (%s), %s је неизмењено." -#: plugins/sudoers/visudo.c:617 +#: plugins/sudoers/visudo.c:611 #, c-format -msgid "unabled to parse temporary file (%s), unknown error" +msgid "unable to parse temporary file (%s), unknown error" msgstr "не могу да обрадим привремену датотеку (%s), непозната грешка" -#: plugins/sudoers/visudo.c:655 +#: plugins/sudoers/visudo.c:649 #, c-format msgid "internal error, unable to find %s in list!" msgstr "унутрашња грешка, не могу да пронађем „%s“ на списку!" -#: plugins/sudoers/visudo.c:735 plugins/sudoers/visudo.c:744 +#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не могу да подесим (јиб, гиб) за %s на (%u, %u)" -#: plugins/sudoers/visudo.c:767 +#: plugins/sudoers/visudo.c:761 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "„%s“ и „%s“ нису на истом систему датотека, користим „mv“ за преименовање" -#: plugins/sudoers/visudo.c:781 +#: plugins/sudoers/visudo.c:775 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "наредба није успела: „%s %s %s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:791 +#: plugins/sudoers/visudo.c:785 #, c-format msgid "error renaming %s, %s unchanged" msgstr "грешка преименовања „%s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:812 +#: plugins/sudoers/visudo.c:806 msgid "What now? " msgstr "Шта сада? " -#: plugins/sudoers/visudo.c:826 +#: plugins/sudoers/visudo.c:820 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2806,66 +2887,66 @@ msgstr "" " x — излази без чувања измена у датотеци судоерса\n" " Q — прекида и чува измене у датотеци судоерса (ОПАСНО!)\n" -#: plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:866 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" -#: plugins/sudoers/visudo.c:902 +#: plugins/sudoers/visudo.c:896 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: погрешан власник (јиб, гиб) треба бити (%u, %u)\n" -#: plugins/sudoers/visudo.c:909 +#: plugins/sudoers/visudo.c:903 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: лоша овлашћења, требају бити у режиму 0%o\n" -#: plugins/sudoers/visudo.c:966 plugins/sudoers/visudo.c:973 +#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 #, c-format msgid "%s: parsed OK\n" msgstr "%s: успешно је обрађено\n" -#: plugins/sudoers/visudo.c:992 +#: plugins/sudoers/visudo.c:986 #, c-format msgid "%s busy, try again later" msgstr "„%s“ је заузет, покушајте касније" -#: plugins/sudoers/visudo.c:995 +#: plugins/sudoers/visudo.c:989 #, c-format msgid "unable to lock %s" msgstr "не могу да закључам „%s“" -#: plugins/sudoers/visudo.c:996 +#: plugins/sudoers/visudo.c:990 msgid "Edit anyway? [y/N]" msgstr "Да ипак уреим? [д/Н]" -#: plugins/sudoers/visudo.c:1080 +#: plugins/sudoers/visudo.c:1083 #, c-format msgid "Error: %s:%d cycle in %s \"%s\"" msgstr "Грешка: %s:%d циклус у „%s“ „%s“" -#: plugins/sudoers/visudo.c:1081 +#: plugins/sudoers/visudo.c:1084 #, c-format msgid "Warning: %s:%d cycle in %s \"%s\"" msgstr "Упозорење: %s:%d циклус у „%s“ „%s“" -#: plugins/sudoers/visudo.c:1085 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Error: %s:%d %s \"%s\" referenced but not defined" msgstr "Грешка: %s:%d упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1086 +#: plugins/sudoers/visudo.c:1089 #, c-format msgid "Warning: %s:%d %s \"%s\" referenced but not defined" msgstr "Упозорење: %s:%d упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1177 +#: plugins/sudoers/visudo.c:1180 #, c-format msgid "Warning: %s:%d unused %s \"%s\"" msgstr "Упозорење: %s:%d некоришћено „%s“ „%s“" -#: plugins/sudoers/visudo.c:1292 +#: plugins/sudoers/visudo.c:1295 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2874,7 +2955,7 @@ msgstr "" "%s — безбедно уређује датотеку судоерса\n" "\n" -#: plugins/sudoers/visudo.c:1294 +#: plugins/sudoers/visudo.c:1297 msgid "" "\n" "Options:\n" @@ -2894,10 +2975,58 @@ msgstr "" " -s, --strict строга провера синтаксе\n" " -V, --version приказује податке о издању и излази\n" -#: toke.l:941 +#: toke.l:1032 msgid "too many levels of includes" msgstr "превише нивоа укључивања" +#~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" +#~ msgstr "„SSL_повезивање“ није успело: ssl_грешка=%d, спремник=%s\n" + +#~ msgid "CA bundle file was not specified" +#~ msgstr "датотека групних издавача уверења није наведена" + +#~ msgid "Client certificate was not specified" +#~ msgstr "Уверење клијента није наведено" + +#~ msgid "Unable to allocate ssl object: %s\n" +#~ msgstr "Не могу да доделим ссл објекат: %s\n" + +#~ msgid "Unable to attach socket to the ssl object: %s\n" +#~ msgstr "Не могу да прикачим прикључницу ссл објекту: %s\n" + +#~ msgid "client message too large: %zu\n" +#~ msgstr "порука клијента је превелика: %zu\n" + +#~ msgid "server message too large: %u\n" +#~ msgstr "порука сервера је превелика: %u\n" + +#~ msgid "CA bundle file is not set in sudoers" +#~ msgstr "Датотека групних издавача уверења није постављена у судоерсу" + +#~ msgid "Calling SSL_CTX_load_verify_locations() failed: %s" +#~ msgstr "Позивање „SSL_CTX_load_verify_locations()“ није успело: %s" + +#~ msgid "Signed certificate file is not set in sudoers" +#~ msgstr "Потписана датотека уверења није постављена у судоерсу" + +#~ msgid "Unable to load private key into the ssl context: %s" +#~ msgstr "Не могу да учитам лични кључ у ссл контекст: %s" + +#~ msgid "SSL_connect failed: ssl_error=%d, stack=%s" +#~ msgstr "„SSL_повезивање“ није успело: ssl_грешка=%d, спремник=%s" + +#~ msgid "SSL_read failed: ssl_error=%d, stack=%s" +#~ msgstr "„SSL_читање“ није успело: ssl_грешка=%d, спремник=%s" + +#~ msgid "SSL_write failed: ssl_error=%d, stack=%s" +#~ msgstr "„SSL_писање“ није успело: ssl_грешка=%d, спремник=%s" + +#~ msgid "unknown address family: %d" +#~ msgstr "непозната породица адресе: %d" + +#~ msgid "audit_failure message too long" +#~ msgstr "порука неуспеха прегледа је предуга" + #~ msgid "" #~ "\n" #~ "LDAP Role: UNKNOWN\n" diff --git a/plugins/sudoers/po/uk.mo b/plugins/sudoers/po/uk.mo index 903f3e5bde05df4febb0970e56349744d2efe18f..547200102fedb3899ccb0c7211e606c08fe02f24 100644 GIT binary patch delta 13249 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 delta 12146 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 diff --git a/plugins/sudoers/po/uk.po b/plugins/sudoers/po/uk.po index 5a3a61f1ed..a040ebad9c 100644 --- a/plugins/sudoers/po/uk.po +++ b/plugins/sudoers/po/uk.po @@ -4,10 +4,10 @@ # Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 15:29+0300\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 11:51+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -42,70 +42,73 @@ msgstr "*** Дані щодо ЗАХИСТУ %h ***" msgid "Sorry, try again." msgstr "Вибачте, повторіть спробу." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -115,323 +118,340 @@ msgstr "Вибачте, повторіть спробу." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "не вдалося отримати потрібний об’єм пам’яті" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "для контрольної суми слід вказати шлях" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "значення «CWD» мають починатися з «/», «~» або «*»" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "значення «CHROOT» мають починатися з «/», «~» або «*»" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "некоректне значення notbefore" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "некоректне значення notafter" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "значення часу очікування є надто великим" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "некоректне значення часу очікування" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s існує, але не є каталогом (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "не вдалося створити каталог %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не вдалося змінити режим доступу до %s на значення 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "мало бути використано JSON_STRING, отримано %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "пропущено подвійні лапки у назві" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "мало бути використано JSON_OBJECT, отримано %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "внутрішня помилка, переповнення %s" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "завершальна фігурна дужка без початкової" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "неочікуваний масив" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "завершальна дужка без початкової" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "неочікуваний рядок" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "пропущено двокрапку після назви" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "неочікуване булеве значення" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "неочікуване число" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u не вдалося обробити «%s»" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: некоректний файл журналу" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: не вказано даних щодо часової позначки" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: часова позначка %s: %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: не вказано даних щодо користувача" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: не вказано даних щодо користувача, від імені якого відбуватиметься виконання" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: не вказано даних щодо групи, від імені якої відбуватиметься виконання" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "помилка під час спроби читання файла часових позначок: %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "некоректний рядок у файлі timing: %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (команда продовжується) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "журнал вже завершено — його не можна перезапустити" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "не вдалося перезапустити журнал" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "не вдалося відкрити %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "не вистачає файла журналу введення-виведення, %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s: неможливо виконати позиціювання вперед на %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "не вдалося знайти точку відновлення [%lld, %ld] у %s/%s" @@ -518,17 +538,17 @@ msgstr "не вдалося отримати спосіб TLS сервера: %s msgid "unable to create TLS context: %s" msgstr "не вдалося створити контекст TLS: %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "не вдалося завантажити сертифікат %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "не вдалося завантажити комплект служби сертифікації %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "не вдалося завантажити закритий ключ %s" @@ -547,28 +567,28 @@ msgstr "не вдалося встановити мінімальну версі msgid "unable to get remote IP addr" msgstr "не вдалося отримати віддалену IP-адресу" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "Не вдалося долучити дані користувача до об'єкта SSL: %s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "не вдалося додати подію до черги обробки" @@ -603,7 +623,7 @@ msgstr "" " -R, --random-drop ймовірність скидання з'єднань у відсотках\n" " -V, --version вивести дані щодо версії і завершити роботу\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Потрібна версія Protobuf-C 1.3 або новіша" @@ -612,9 +632,9 @@ msgstr "Потрібна версія Protobuf-C 1.3 або новіша" msgid "invalid random drop value: %s" msgstr "некоректне значення ймовірності скидання: %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s, версія %s\n" @@ -709,7 +729,7 @@ msgstr "" " паралельно n разів\n" " -V, --version вивести дані щодо версії і завершити роботу\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "не вдалося виконати пошук %s:%s: %s" @@ -718,122 +738,122 @@ msgstr "не вдалося виконати пошук %s:%s: %s" msgid "unable to get server IP addr" msgstr "не вдалося отримати IP-адресу сервера" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "не вдалося прочитати %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "повідомлення клієнта є надто довгим: %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: буфер запису вже використовується" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "неочікувана подія введення-виведення — %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: неочікуваний стан — %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "некоректне ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "отримано повідомлення про помилку від сервера: %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "отримано повідомлення про переривання від сервера: %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "не вдалося розпакувати ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: неочікуване значення type_case — %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "перевищено час очікування на читання з сервера" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "передчасне завершення файла" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "повідомлення сервера є надто великим: %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "перевищено час очікування на запис на сервері" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "сталося перевищення часу очікування на узгодження зв'язку TLS" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "не вдалося встановити подію" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "Не вдалося встановити з'єднання TLS: %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Не вдалося ініціалізувати контекст SSL: %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Не вдалося розмістити об'єкт SSL у пам'яті: %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Не вдалося долучити сокет до об'єкта SSL: %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "слід вказати одночасно точку перезапуску та ідентифікатор журналу введення-виведення" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "точку перезапуску не можна встановлювати, якщо не надсилається жодних даних введення-виведення" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "передчасний вихід зі станом %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "на сервер надіслано дані щодо часу, який лишився [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "отримано точку внеску від сервера [%lld, %ld]" @@ -843,11 +863,11 @@ msgstr "отримано точку внеску від сервера [%lld, %l msgid "Alias \"%s\" already defined" msgstr "Замінник «%s» вже визначено" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "не вдалося створити відгалуження" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "не вдалося змінити пароль до %s" @@ -869,11 +889,11 @@ msgstr "некоректний тип розпізнавання" msgid "unable to initialize BSD authentication" msgstr "не вдалося ініціалізувати розпізнавання за BSD" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "термін дії вашого облікового запису вичерпано" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "не вдалося підтвердити" @@ -980,7 +1000,7 @@ msgstr "Строк дії облікового запису збіг або у msgid "PAM account management error: %s" msgstr "Помилка керування обліковими записами PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "вас немає у базі даних %s" @@ -1009,7 +1029,7 @@ msgstr "некоректний дескриптор розпізнавання msgid "SecurID communication failed" msgstr "спроба обміну даними з SecurID зазнала невдачі" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "невідома помилка SecurID" @@ -1017,7 +1037,7 @@ msgstr "невідома помилка SecurID" msgid "invalid passcode length for SecurID" msgstr "некоректна довжина коду пароля для SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "не вдалося ініціалізувати сеанс SIA" @@ -1041,7 +1061,7 @@ msgstr "sudo зібрано без можливостей з взаємодії msgid "Unable to initialize authentication methods." msgstr "Не вдалося ініціалізувати методи розпізнавання." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Способи розпізнавання:" @@ -1074,117 +1094,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "невідоме значення uid: %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "невідомий користувач: %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "збільшення порядку: %s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "початковий порядок: %s: %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "доповнення порядку: %s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "Граматична перевірка %s, версія %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "непідтримуваний формат вхідних даних, %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "непідтримуваний формат виведення, %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s: файли вхідних і вихідних даних мають бути різними файлами" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "не вдалося ініціалізувати типові значення sudoers" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: невідоме ключове слово: %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "некоректний тип типових значень: %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "некоректний тип придушення: %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "некоректний фільтр: %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "не вдалося обробити файл %s, невідома помилка" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "помилка обробки у %s поблизу рядка %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "помилка обробки у %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1193,7 +1214,7 @@ msgstr "" "%s — перетворення форматів файлів sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1234,675 +1255,695 @@ msgstr "" " -V, --version вивести дані щодо версії і завершити роботу" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "невідомий запис типових параметрів «%s»" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "не вдалося отримати гринвіцький час" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "не вдалося виконати форматування часового штампа" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "забагато записів sudoers, максимальна кількість — %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "не встановлено значення змінної середовища SUDOERS_BASE і не вказано параметра -b." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Інструмент ведення журналу, якщо використано syslog: %s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Пріоритетність, яка використовуватиметься у syslog для успішних розпізнавань: %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Пріоритетність, яка використовуватиметься у syslog для неуспішних розпізнавань: %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Розташовувати запит щодо OTP у окремому рядку" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "Ігнорувати «.» у $PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Завжди надсилати листа, коли викликано sudo" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Надсилати листа, якщо користувачу не вдалося пройти розпізнавання" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Надсилати листа, якщо користувача немає серед sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Надсилати листа, якщо користувача немає у списку sudoers цього вузла" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Надсилати листа, якщо користувачеві заборонено виконувати команду" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Надсилати листа, якщо користувач намагається віддати команду" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Окремий часовий штамп для кожної комбінації користувач/tty" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Показувати настанови користувачеві під час першого запуску sudo" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Файл з настановами щодо sudo: %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Типово, вимагати розпізнавання" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Root може виконувати sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Записувати назву вузла до файла журналу (не syslog)" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Записувати рік до файла журналу (не syslog)" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Якщо sudo викликано без параметрів, запускати командну оболонку" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Встановлювати $HOME відповідно до вказаного користувача для запуску оболонки з -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Завжди встановлювати значенням $HOME домашній каталог вказаного користувача" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Дозволити збирання даних з метою формування зрозумілих повідомлень про помилки" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "У файлі sudoers слід вказати повні назви вузлів" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "Знущатися з користувача, якщо введено помилковий пароль" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Дозволяти користувачеві виконувати sudo, лише якщо з ним пов’язано tty" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo зважатимwill honor the EDITOR environment variable" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Надсилати запит на пароль root, а не користувача" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Надсилати запит щодо пароля runas_default, але пароля самого користувача" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Надсилати запит щодо пароля потрібного користувача, але пароля самого користувача" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Застосовувати типові параметри у класі вказаного користувача, якщо такий клас є" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Встановити значення змінних середовища LOGNAME і USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Встановлювати для потрібного користувача ефективний uid, а не справжній uid" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "Не ініціалізувати вектор групи відповідно до вказаного користувача" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Позиція, на якій слід переносити рядки файла журналу (0 — без перенесення): %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Час очікування на часовий штамп розпізнавання: %.1f хвилина" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Час очікування на введення пароля: %.1f хвилина" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Кількість спроб введення пароля: %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Потрібне значення umask або 0777 для користувачевого: 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Шлях до файла журналу: %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Шлях до програми ел. пошти: %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Параметри програми ел. пошти: %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Адреса, на яку надсилатимуться листи: %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Адреса, з якої надсилатимуться листи: %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Тема листів: %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Повідомлення про помилковий пароль: %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Шлях до каталогу стану отримання настанов: %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Шлях до каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Користувачів цієї групи звільнено від потреби у введенні пароля і PATH: %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Типовий запит пароля: %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "Якщо встановлено, запит щодо паролю замінюватиме запит системи." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Типовий користувач для запуску команд: %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Значення для заміни $PATH користувача: %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Шлях до редактора, який використовуватиме visudo: %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «list»: %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «verify»: %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Попередньо завантажувати фіктивні функції виконання з бібліотеки sudo_noexec" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Чи слід ігнорувати локальний файл sudoers, якщо є доступ до каталогу LDAP" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Дескриптори файлів >= %d буде закрито перед виконанням команди" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Якщо встановлено, користувачі можуть перевизначати значення closefrom за допомогою параметра -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Дозволити користувачам встановлювати значення довільних змінних середовища" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Відновити типовий набір змінних середовища" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Змінні середовища, коректність яких слід перевіряти:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Змінні середовища, які слід вилучити:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Змінні середовища, які слід зберегти:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Роль SELinux, яку слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Тип SELinux, який слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Шлях до специфічного для sudo файла середовища: %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Шлях до специфічного для sudo файла середовища з обмеженим доступом: %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Локаль, яку слід використати під час обробки sudoers: %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозволити sudo надсилати запит щодо пароля, навіть якщо цей пароль буде видимим" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Супроводжувати введення користувачем пароля показом замінників символів пароля" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Швидше встановлення відповідності, менш точне, але без доступу до файлової системи" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Значення umask, вказане у sudoers, перевизначатиме значення користувача, навіть якщо це значення відкриває ширший доступ" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "Записувати дані, вказані користувачем під час виконання команди" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "Записувати дані, виведені командою під час виконання" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "Стискати журнали за допомогою zlib" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Завжди запускати команди у псевдо-tty" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Додаток для підтримки не-Unix груп: %s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Каталог, у якому слід зберігати журнали введення/виведення: %s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Файл, у якому слід зберігати журнал введення/виведення даних: %s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додати запис до файла utmp/utmpx під час розміщення pty" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Встановити користувача у utmp у значення користувача, від імені якого виконується команда" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Набір дозвільних прав доступу: %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Набір обмежувальних прав доступу: %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "Виконувати команди у pty у фоновому режимі" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "Назва служби PAM, якою слід скористатися: %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "Назва служби PAM, якою слід скористатися для оболонок входу до системи: %s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "Спробувати встановити реєстраційні дані PAM для користувача, від імені якого виконуватимуться дії" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "Створити сеанс PAM для виконання команди" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Виконати керування коректністю облікового запису PAM" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "Максимальний номер у послідовності журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Увімкнути підтримку мережевих груп у sudoers" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "Перевіряти можливість запису до батьківського каталогу під час редагування фалів за допомогою sudoedit" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "Переходити за символічними посиланнями під час редагування файлів за допомогою sudoedit" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "Надсилати запит до додатка груп щодо невідомих груп системи" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "Встановлювати відповідність мережевим групам за усім кортежем даних: користувачем, вузлом і доменом" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до журналу аудиту" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до журналу введення-виведення" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "Дозволити виконання команд, навіть якщо sudo не може здійснювати запис до файла журналу" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "Визначати групи у sudoers і встановлювати відповідність не назві, а ідентифікатору групи" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "Записи журналу, які виявляться довшими за це значення, буде поділено на декілька повідомлень журналу системи: %u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "Користувач, який буде власником усіх файлів журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "Група, яка буде власником усіх файлів журналу введення-виведення: %s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, c-format msgid "File mode to use for the I/O log files: 0%o" msgstr "Режим доступу до файлів, яким слід скористатися для файлів журналу введення-виведення: 0%o" -#: plugins/sudoers/def_data.c:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "Виконати команди за дескриптором файла замість виконання за шляхом: %s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "Ігнорувати невідомі записи Defaults у sudoers замість показу попередження" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "Час у секундах, який має минути, щоб команду буде перервано: %u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "Надати змогу користувачеві встановлювати час очікування у командному рядку" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "Скидати дані журналу введення-виведення на диск негайно, без буферизації" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "Включати ідентифікатор процесу до журналів syslog" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "Тип запису часової позначки розпізнавання: %s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Повідомлення про помилку розпізнавання: %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Ігнорувати регістр символів при пошуку імен користувачів" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Ігнорувати регістр символів при пошуку назв груп" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "Записувати до журналу дані, коли виконання команди дозволене sudoers" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "Записувати до журналу дані, коли виконання команди заборонене sudoers" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "Сервер або сервери журналу sudo, з якими слід встановити з'єднання, з необов'язковим зазначенням порту" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Час очікування на дії сервера журналу sudo у секундах: %u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "Увімкнути параметр сокета SO_KEEPALIVE на сокеті, який з'єднано із сервером журналу" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "Шлях до файла пакета CA сервера аудиту: %s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Шлях до файла сертифікатів sudoers: %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "Шлях до файла закритого ключа sudoers: %s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "Перевірити, чи є сертифікат сервера журналювання чинним" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "Дозволити використання невідомих значень імені користувача і/або ідентифікатора групи для runas" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "Дозволяти виконання команд лише від імені користувачів із коректним записом командної оболонки" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "Встановити для віддаленого користувача PAM те саме ім'я, що і для користувача, від імені якого запущено sudo" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "Встановити для віддаленого вузла PAM назву локального вузла" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 +#, c-format +msgid "Working directory to change to before executing the command: %s" +msgstr "Робочий каталог, до якого слід перейти перед виконанням команди: %s" + +#: plugins/sudoers/def_data.c:560 +#, c-format +msgid "Root directory to change to before executing the command: %s" +msgstr "Кореневий каталог, до якого слід перейти перед виконанням команди: %s" + +#: plugins/sudoers/defaults.c:184 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d невідомий запис типових параметрів, «%s»" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: невідомий запис типових параметрів, «%s»" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: невідомий запис типових параметрів, «%s»" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d не вказано значення для «%s»" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: не вказано значення для «%s»" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: не вказано значення для «%s»" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d значення для «%s» має починатися з «/»" - -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: значення для «%s» має починатися з «/»" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: параметру «%s» не потрібно передавати значення" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d параметру «%s» не потрібно передавати значення" - -#: plugins/sudoers/defaults.c:280 -#, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: параметру «%s» не потрібно передавати значення" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d некоректний тип Defaults, 0x%x, для параметра «%s»" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: некоректний тип Defaults, 0x%x, для параметра «%s»" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: некоректний тип Defaults, 0x%x, для параметра «%s»" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d значення «%s» є некоректним для параметра «%s»" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: значення «%s» є некоректним для параметра «%s»" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: значення «%s» є некоректним для параметра «%s»" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d значення для «%s» має починатися з «/», «*» або «*»" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: значення для «%s» має починатися з «/», «*» або «*»" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: значення для «%s» має починатися з «/»" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: значення для «%s» має починатися з «/»" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: помилкове значення envp, невідповідність довжин" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "не вдалося перебудувати середовище" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "вибачте, вам не дозволено встановлювати такі змінні середовища: %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "помилка обробки у %s поблизу рядка %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "помилка обробки у %s" @@ -1956,88 +1997,88 @@ msgstr "не вдалося обробити маску мережі «%s»" msgid "Local IP address and netmask pairs:\n" msgstr "Пари локальних IP-адрес і масок мережі:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "невідома група: %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "не вдалося здійснити запис до файла журналу введення-виведення: %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "не вдалося оновити файл послідовності" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "не вдалося створити %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "не вдалося встановити з'єднання із сервером журналу" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s: внутрішня помилка, файл журналу введення-виведення для події %d не відкрито" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "не вдалося прочитати час на годиннику" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: внутрішня помилка, некоректний сигнал %d" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "помилка у циклі обробки подій" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "Не вдалося створити об'єкт SSL_CTX: %s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "Не вдалося встановити з'єднання TLS із %s:%s: %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "Спроба ініціалізувати TLS завершилася невдало" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "Спроба узгодити зв'язок TLS завершилася невдало" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "не вдалося отримати дані щодо пори доби" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: внутрішня помилка, некоректний стан виходу %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "втрачено зв’язок з сервером журналу" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "не вказано буфер запису" @@ -2060,18 +2101,19 @@ msgstr "щоб скористатися SSL, вам слід встановит msgid "unable to initialize LDAP: %s" msgstr "не вдалося ініціалізувати LDAP: %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls вказано, але у бібліотеках LDAP не передбачено підтримки ldap_start_tls_s() або ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "некоректний атрибут sudoOrder: %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports: занадто великий номер порту" +#, c-format +msgid "%s: port too large" +msgstr "%s: порт є надто великим" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2082,7 +2124,7 @@ msgstr "непідтримуваний тип адреси LDAP: %s" msgid "unable to mix ldap and ldaps URIs" msgstr "не можна використовувати суміш з адрес ldap і ldaps" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "не вдалося перетворити запис sudoOption: %s%s%s" @@ -2091,66 +2133,66 @@ msgstr "не вдалося перетворити запис sudoOption: %s%s%s msgid "unable to open audit system" msgstr "не вдалося відкрити систему аудита" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "не вдалося надіслати повідомлення аудита" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "не вдалося відкрити файл журналу: %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "не вдалося заблокувати файл журналу: %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "не вдалося виконати запис до файла журналу: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "користувача немає у списку sudoers" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "користувача не уповноважено на дії на вузлі" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "виконання команди заборонено" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s немає у файлі sudoers. Запис про подію додано до звіту.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s заборонено виконувати sudo на %s. Запис про подію додано до звіту.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Вибачте, користувач %s не має права виконувати sudo на %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Вибачте, користувач %s не має права виконувати «%s%s%s» від імені %s%s%s на %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s: команду не знайдено" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2159,15 +2201,15 @@ msgstr "" "пропущено «%s» знайдений у «.»\n" "Скористайтеся командою «sudo ./%s», якщо вам потрібно виконати саме «%s»." -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "помилка під час спроби розпізнавання" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "слід вказати пароль" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -2176,22 +2218,22 @@ msgstr[1] "%u невдалих спроби введення пароля" msgstr[2] "%u невдалих спроб введення пароля" msgstr[3] "одна невдала спроба введення пароля" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "не вдалося здублювати stdin: %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "не вдалося виконати %s: %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "не вдалося створити відгалуження: %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "не вдалося відкрити канал: %m" @@ -2201,7 +2243,7 @@ msgstr "не вдалося відкрити канал: %m" msgid "digest for %s (%s) is not in %s form" msgstr "контрольну суму для %s (%s) подано не у формі %s" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2210,8 +2252,7 @@ msgstr "" "\n" "Роль LDAP: %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2219,42 +2260,38 @@ msgstr "" "\n" "Запис sudoers:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " Користувачі для запуску: " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " Групи для запуску: " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Параметри: " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Команди:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Відповідність записів Defaults для %s на %s:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Типові значення для запуску від імені і команд для %s:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Користувач %s має право виконувати на %s такі команди:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Користувач %s не має права виконувати sudo на %s.\n" @@ -2269,48 +2306,58 @@ msgstr "ігноруємо неповний запис sudoRole: cn: %s" msgid "invalid LDIF attribute: %s" msgstr "некоректний атрибут LDIF: %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "оболонкою sudo встановлено некоректне значення параметра %.*s" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "не вдалося обробити список мережевих адрес" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "ім'я користувача не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "ідентифікатор користувача не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "ідентифікатор групи не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "назву вузла не встановлено за допомогою оболонки sudo" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "некоректний робочий каталог: %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "некоректний каталог chroot: %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Додаток правил sudoers версії %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматична перевірка файла sudoers версії %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2319,86 +2366,86 @@ msgstr "" "\n" "Шлях до sudoers: %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "Шлях до nsswitch: %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "Шлях до ldap.conf: %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "Шлях до ldap.secret: %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "неможливо зареєструвати процедуру перехоплення типу %d (версія %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "не вдалося кешувати uid %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "не вдалося кешувати uid %u, запис вже існує" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "не вдалося кешувати користувача %s" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "не вдалося кешувати користувача %s, запис вже існує" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "не вдалося кешувати gid %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "не вдалося кешувати gid %u, запис вже існує" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "не вдалося кешувати групу %s" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "не вдалося кешувати групу %s, запис вже існує" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "не вдалося кешувати список груп %s, запис вже існує" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "не вдалося кешувати список груп %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "не вдалося обробити записи груп %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "не вдалося обробити записи ідентифікаторів груп %s" @@ -2462,239 +2509,259 @@ msgstr "обрізаний шлях аудиту user_cmnd: %s" msgid "truncated audit path argv[0]: %s" msgstr "обрізаний шлях аудиту argv[0]: %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "Не вдалося ініціалізувати джерело SSS. Чи встановлено у вашій системі SSSD?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "не вдалося знайти символ «%s» у %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "проблема з типовими записами" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "не знайдено коректних джерел даних sudoers, завершення роботи" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "користувачеві заборонено змінювати кореневий каталог на %s" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "вам не дозволено використовувати параметр -R з %s" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "користувачеві заборонено змінювати каталог на %s" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "вам не дозволено використовувати параметр -D з %s" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers вказує, що sudo не можна користуватися для виконання команд від root" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "користувачеві заборонено перевизначати обмеження closefrom" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "вам не дозволено використовувати параметр -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник часового штампа (%s): не знайдено користувача з таким іменем" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "немає tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "вибачте, для виконання sudo вашому користувачеві потрібен tty" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "некоректний запис оболонки для користувача %s: %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "команда у поточному каталозі" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "користувачеві заборонено встановлювати час очікування на виконання команди" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "вибачте, вам не дозволено встановлювати час очікування на виконання команди" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "користувачеві заборонено зберігати середовище" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "вибачте, вам не дозволено зберігати середовище" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "надто довга команда" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "Немає потреби у запуску sudoedit за допомогою sudo" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "не вдалося прочитати %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "не вдалося виконати stat для %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s не є звичайним файлом" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s належить uid %u, має належати %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "Запис до «%s» можливий для довільного користувача" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s належить gid %u, має належати %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "використовувати «-c %s» може лише root" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "невідомий клас входу: %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "не вдалося визначити адресу вузла %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "некоректний параметр фільтрування: %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "некоректне значення макс. очікування: %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "некоректний коефіцієнт швидкості: %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/розклад за часом: %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "Відтворення сеансу sudo: %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "не вдалося перевести tty у режим без обробки даних" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Попередження: розміри вашого термінала є замалими для належного показу журналу.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Встановлено формат журналу %d x %d, тоді як формат термінала — %d x %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Відтворення завершено, натисніть будь-яку клавішу, щоб повернутися до термінала." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "неоднозначний вираз «%s»" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "зайва дужка, «)», у виразі" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "невідомий ключ пошуку «%s»" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s потребує визначення аргументу" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "некоректний формальний вираз: %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "не вдалося обробити дату «%s»" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "зайва дужка, «(», у виразі" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "помилкове завершальне «or»" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "помилкове завершальне «!»" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "невідомий тип пошуку %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "користування: %s [-hnRS] [-d каталог] [-m число] [-s число] ідентифікатор\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "використання: %s [-h] [-d каталог] -l [вираз для пошуку]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2703,7 +2770,7 @@ msgstr "" "%s — відтворення журналів сеансів sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2731,11 +2798,11 @@ msgstr "" " -s, --speed=коеф_швидк коефіцієнт прискорення або сповільнення виводу даних\n" " -V, --version показати дані щодо версії і завершити роботу" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tвідповідника вузла не знайдено" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2743,7 +2810,7 @@ msgstr "" "\n" "Команду дозволено" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2751,7 +2818,7 @@ msgstr "" "\n" "Команду заборонено" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2796,89 +2863,89 @@ msgstr "sudoedit не слід вказувати разом із шляхом" msgid "the -x option will be removed in a future release" msgstr "параметр -x буде вилучено у наступному випуску" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "будь ласка, скористайтеся замість нього програмою cvtsudoers" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "натисніть Enter для редагування %s: " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "вказаного редактора (%s) не існує" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "не знайдено жодного редактора (шлях до редактора = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "помилка запису" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не вдалося обробити stat файл тимчасових даних (%s), %s не змінено" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "файл тимчасових даних має нульовий об’єм (%s), %s не змінено" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "помилка редактора (%s), %s не змінено" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s не змінено" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не вдалося повторно відкрити файл тимчасових даних (%s), %s не змінено." -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "не вдалося обробити файл тимчасових даних (%s), невідома помилка" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "внутрішня помилка, не вдалося знайти %s у списку!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не вдалося встановити (uid, gid) %s у значення (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s і %s не перебувають у одній файловій системі, використовуємо mv для перейменування" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "помилка команди: «%s %s %s», %s не змінено" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "помилка перейменування %s, %s не змінено" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "А зараз що? " -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2890,66 +2957,66 @@ msgstr "" " (x) — вийти без внесення змін до файла sudoers\n" " (Q) — вийти зі збереженням файла sudoers (НЕБЕЗПЕЧНО!)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: помилковий власник (uid, gid), має бути (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: помилкові права доступу, режим доступу має бути 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s: вдала обробка\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s зайнято, повторіть спробу пізніше" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "не вдалося заблокувати %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Редагувати попри усе? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Помилка: %s:%d цикл у %s «%s»" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "Помилка: %s:%d: цикл у %s «%s»" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Попередження: %s:%d цикл у %s «%s»" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "Попередження: %s:%d: цикл у %s «%s»" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Помилка: виявлено посилання %s:%d %s «%s», яке не визначено" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Помилка: виявлено посилання %s:%d: %s «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Попередження: виявлено посилання %s:%d %s «%s», яке не визначено" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Попередження: виявлено посилання %s:%d: %s «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Попердження: %s:%d не використано %s «%s»" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "Попередження: %s:%d: не використано %s «%s»" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2958,7 +3025,7 @@ msgstr "" "%s — безпечне редагування файла sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2978,6 +3045,9 @@ msgstr "" " -s, --strict строга перевірка синтаксису\n" " -V, --version показати дані щодо версії і завершити роботу\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "занадто високий рівень вкладеності" + +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports: занадто великий номер порту" diff --git a/plugins/sudoers/po/zh_TW.mo b/plugins/sudoers/po/zh_TW.mo index 42eba5a517d886267e19909021fce3c98fc60bd5..cbe1505d43329f4a80790c0ea6c69668cd3b779b 100644 GIT binary patch delta 13475 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 delta 12334 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 Pyzludqn2m, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 19:01+0800\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-16 01:14+0800\n" "Last-Translator: Yi-Jyun Pan \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" @@ -18,7 +18,7 @@ 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-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4\n" #: confstr.sh:1 msgid "syntax error" @@ -44,70 +44,73 @@ msgstr "*** %h 須知的安全資訊 ***" msgid "Sorry, try again." msgstr "抱歉,請重試。" -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -117,323 +120,340 @@ msgstr "抱歉,請重試。" #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "無法分配記憶體" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "摘要需要路徑名稱" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "\"CWD\" 的值開頭必須是 '/'、'~' 或 '*'" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "\"CHROOT\" 的值開頭必須是 '/'、'~' 或 '*'" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "notbefore 的值無效" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "notafter 的值無效" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "timeout 值過長" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "timeout 值無效" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s:%s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s 存在,但非目錄 (0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "無法建立目錄 %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "無法將 %s 的模式變更為 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "應為 JSON_STRNG,但收到 %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "名稱中缺少雙引號" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "應為 JSON_OBJECT,但收到 %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "內部錯誤,%s 溢出" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "未對稱的右大括弧" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "不應有陣列" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "未對稱的右中括弧" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "不應有字串" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "名稱後缺少冒號" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "不應有布林值" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "不應有數字" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u 無法解析「%s」" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s:無效的記錄檔案" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s:缺少 時間戳 欄位" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s:時間戳 %s:%s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s:缺少 使用者 欄位" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s:缺少 runas 使用者 欄位" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s:缺少 runas 群組 欄位" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "讀取計時檔案時發生錯誤:%s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "無效的計時檔案行號:%s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (指令繼續執行) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "記錄已完成,無法重新開始" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "無法重新啟動記錄" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "無法開啟 %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "缺少 I/O 記錄檔 %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s:無法往前搜尋 %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "%3$s/%4$s 中找不到繼續點 [%1$lld, %2$ld]" @@ -520,17 +540,17 @@ msgstr "無法取得 TLS 伺服器方法:%s" msgid "unable to create TLS context: %s" msgstr "無法建立 TLS 情境:%s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "無法載入 %s 憑證" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "無法載入 %s 憑證授權單位組合" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "無法載入 %s 私鑰" @@ -549,28 +569,28 @@ msgstr "無法將最低通訊協定版本設為 TLS 1.2:%s" msgid "unable to get remote IP addr" msgstr "無法取得遠端 IP 地址" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "無法將使用者資料連結至 SSL 物件:%s" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "無法將事件附加到佇列" @@ -606,7 +626,7 @@ msgstr "" " -R, --random-drop percent chance connections will drop\n" " -V, --version 顯示版本資訊後離開\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "需要 Protobuf-C 版本 1.3 或更高版本" @@ -615,9 +635,9 @@ msgstr "需要 Protobuf-C 版本 1.3 或更高版本" msgid "invalid random drop value: %s" msgstr "隨機丟棄值無效:%s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s 版本 %s\n" @@ -711,7 +731,7 @@ msgstr "" " -t, --test 透過並行傳送選取的 I/O 記錄 n 次來測試稽核伺服器\n" " -V, --version 顯示版本資訊後離開\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "無法查看 %s:%s: %s" @@ -720,122 +740,122 @@ msgstr "無法查看 %s:%s: %s" msgid "unable to get server IP addr" msgstr "無法取得伺服器 IP 地址" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "無法讀取 %s/%s: %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "用戶端訊息過長:%zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s:寫入緩衝區正被使用" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "不應有的 I/O 事件 %d" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s:不應有的狀態 %d" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "無效的 ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "自伺服器接收到錯誤訊息:%s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "自伺服器接收到中止訊息:%s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "無法解開 ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s:不應有的 type_case 值 %d" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "從伺服器讀取逾時" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "檔案過早結束" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "伺服器訊息過長:%u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "寫入至伺服器逾時" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "遇到 TLS 交握逾時" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "無法設定事件" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "TLS 連線失敗:%s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "無法初始化 SSL 上下文:%s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "無法配置 SSL 物件:%s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "無法將 socket 通訊端連結至 SSL 物件:%s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "必須指定重新啟動點 (restart point) 和 iolog ID" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "未傳送 I/O 時,不應設定重新開始點" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "過早結束,狀態碼 %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "已傳送耗用時間至伺服器 [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "自伺服器接收到提交點 (commit point) [%lld, %ld]" @@ -845,11 +865,11 @@ msgstr "自伺服器接收到提交點 (commit point) [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "別名「%s」已定義過" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "無法執行 fork" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "無法變更 %s 的密碼" @@ -871,11 +891,11 @@ msgstr "無效的認證類型" msgid "unable to initialize BSD authentication" msgstr "無法初始化 BSD 認證程序" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "您的帳號已經過期" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "核可失敗" @@ -982,7 +1002,7 @@ msgstr "帳號已過期或是 PAM 組態設定缺少 sudo 的 \"account\" 部份 msgid "PAM account management error: %s" msgstr "PAM 帳號管理發生錯誤:%s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "您不在 %s 資料庫中" @@ -1011,7 +1031,7 @@ msgstr "用於 SecurID 的認證處理無效" msgid "SecurID communication failed" msgstr "SecurID 通訊失敗" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "未知 SecurID 錯誤" @@ -1019,7 +1039,7 @@ msgstr "未知 SecurID 錯誤" msgid "invalid passcode length for SecurID" msgstr "用於 SecurID 的密碼長度無效" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "無法初始化 SIA 工作階段" @@ -1043,7 +1063,7 @@ msgstr "沒有編譯進 sudo 的認證方式!若要關閉認證功能,請使 msgid "Unable to initialize authentication methods." msgstr "無法初始化認證方式。" -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "認證方式:" @@ -1076,117 +1096,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "未知 UID:%u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "未知使用者:%s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "新增順序:%s:%s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "順序開頭:%s:%s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "順序間距:%s:%s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s 語法版本 %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "不支援的輸入格式 %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "不支援的輸出格式 %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s:輸入及輸出檔案必須不一致" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "無法初始化 sudoers 預設值" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s:關鍵詞未知:%s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "預設類型無效:%s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "隱藏類型無效:%s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "篩選器無效:%s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "無法開啟 %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "無法解析 %s 檔案,原因:未知錯誤" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "因接近行 %2$d 的 %1$s 字串而導致解析錯誤\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "因 %s 導致解析錯誤\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "無法寫入 %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1195,7 +1216,7 @@ msgstr "" "%s - 轉換 sudoers 檔案之間的格式\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1236,675 +1257,695 @@ msgstr "" " -V, --version 顯示版本訊息後退出" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "預設項目「%s」未知" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "無法取得 GMT 時間" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "無法格式化時間戳" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "過多 sudoers 項,最大值為 %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "未設定 SUDOERS_BASE 環境變數,且亦未指定 -b 選項。" -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "若使用了 syslog 記錄,要使用的 syslog 裝置:%s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "使用者認證成功時要使用的 syslog 記錄優先級:%s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "使用者認證不成功時使用的 syslog 記錄優先級:%s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "將 OPT 提示放在獨自的行中" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "忽略 $PATH 中的「.」" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "永遠在 sudo 執行時傳送信件" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "使用者認證失敗後傳送信件" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "當使用者不在 sudoers 中時傳送信件" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "當使用者不在此主機的 sudoers 中時傳送信件" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "當使用者不允許執行某指令時傳送信件" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "當使用者嘗試執行某指令時傳送信件" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "對每個使用者和終端組合使用單獨的時間戳" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "在使用者第一次執行 sudo 時,通知使用者相關使用指引" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "包含 sudo 使用指引的檔案:%s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "預設要求使用者認證" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "Root 可以執行 sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "在(非 syslog)記錄檔中記錄主機名稱" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "在(非 syslog)記錄檔中記錄年份" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "若 sudo 不傳入參數呼叫,就開啟 shell" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "若以 -s 參數開啟 shell,就設定目標使用者的 $HOME" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "永遠將 $HOME 設定為目標使用者的家目錄" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "允許收集一些訊息以提供有用的錯誤訊息" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "要求在 sudoers 檔案中包含完整的主機名稱" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "在使用者輸入錯誤密碼時嘲諷他們" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "只允許有終端的使用者執行 sudo" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo 將優先考慮 EDITOR 環境變數" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "詢問 root 使用者的密碼而非使用者的密碼" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "詢問 runas_default 使用者的密碼,而非使用者密碼" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "詢問目標使用者的密碼,而非使用者密碼" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "若有則套用目標使用者登入類別中的預設設定" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "設定 LOGNAME 和 USER 環境變數" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "只將有效使用者 ID 設為目標使用者的 ID,而非實際使用者的 ID" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "不將群組集合初始化成目標使用者的群組集合" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "記錄檔案要換行的長度 (0 則不換行):%u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "認證時間戳逾時:%.1f 分鐘" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "密碼提示逾時:%.1f 分鐘" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "密碼輸入嘗試次數:%u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "要使用的 umask,或設定 0777 以使用使用者的 umask:0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "記錄檔案路徑:%s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "郵件程式路徑:%s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "郵件程式旗標:%s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "傳送郵件的位址:%s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "接收郵件的位址:%s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "郵件訊息的主旨:%s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "密碼不正確的訊息:%s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "指引狀態資料夾的路徑:%s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "認證時間戳資料夾的路徑:%s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "認證時間戳的所有者:%s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "此群組內的使用者不需要輸入密碼和 PATH:%s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "預設密碼提示:%s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "如果設定,密碼提示將覆蓋所有情況下的系統提示。" -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "要執行指令的預設使用者:%s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "要覆蓋使用者 $PATH 變數的值:%s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo 所使用編輯器的路徑:%s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "何時要為「list」偽指令請求密碼:%s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "何時要為「verify」偽指令請求密碼:%s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "預載「sudo_noexec」函式庫中包含的空 exec 函數" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "如果有啟用 LDAP 目錄,是否要忽略本機的 sudoers 檔案" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr ">= %d 的檔案描述符將會在執行指令前關閉" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "如果設定,使用者可以透過 -C 選項覆蓋「closefrom」的值" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "允許使用者設定任意的環境變數" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "將環境重設為預設的變數集" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "要檢查完整性的環境變數:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "要移除的環境變數:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "要保留的環境變數:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "要在新的安全上下文中使用的 SELinux 角色:%s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "要在新的安全上下文中使用的 SELinux 類型:%s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 特定環境檔案的路徑:%s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "受限 sudo 特定環境檔案的路徑:%s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "解析 sudoers 時要使用的區域設定:%s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "允許 sudo 詢問密碼,即使它不可見" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "使用者在密碼提示輸入時提供視覺回饋" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "使用不太精確但不用存取檔案系統的較快 glob 方法" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "sudoers 中指定的 umask 會覆蓋使用者的 umask,即使使用者允許的權限更多" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "記錄指令執行時使用者的輸入內容" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "記錄指令執行時的輸出內容" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "使用 zlib 壓縮 I/O 記錄" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "總是在偽終端中執行指令" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "用於非 Unix 群組支援的外掛程式:%s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "用於儲存輸入/輸出記錄的目錄:%s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "用於儲存輸入/輸出記錄的檔案:%s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "在分配偽終端時向 utmp/utmpx 檔案中附加一條記錄" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "將 utmp 中的使用者設為 runas 使用者,而不是呼叫使用者" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "核准的權限集合:%s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "限制的權限集合:%s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "在背景的偽終端上執行指令" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "要使用的 PAM 服務名稱:%s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "用於登入 shell 的 PAM 服務名稱:%s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "嘗試為目標使用者建立 PAM 憑證" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "建立一個新的 PAM 工作階段來執行該指令" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "執行 PAM 帳戶驗證管理工具" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, c-format msgid "Maximum I/O log sequence number: %s" msgstr "最大 I/O 記錄序號:%s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "啟用 sudoers netgroup 支援" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "在使用 sudoedit 編輯檔案時檢查上層目錄是否可寫" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "使用 sudoedit 編輯檔案時跟隨符號連結(定位到原檔案)" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "透過群組外掛程式查詢未知的系統群組" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "基於整個元組(使用者、主機和網域)來符合網路群組" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "即使 sudo 無法寫入稽核記錄也允許執行指令" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "即使 sudo 無法寫入 I/O 記錄也允許執行指令" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "即使 sudo 無法寫入記錄檔案也允許執行指令" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "解析 sudoers 中的群組並基於群組 ID(不是名稱)比較" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "大於此數值的記錄條目會分為多條 syslog 訊息:%u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "將擁有 I/O 記錄檔案的使用者:%s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "將擁有 I/O 記錄檔案的群組:%s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, 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:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "根據檔案描述符執行指令,而非根據路徑:%s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "忽略 sudoers 中未知的預設 (Defaults) 條目而非產生警告" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "超過指定時間後終止指令 (秒):%u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "允許使用者在指令行中指定逾時時間" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "立即重新整理 I/O 記錄資料而非快取資料" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "透過 syslog 登入時包含行程 ID" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "認證時間戳記錄的類型:%s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "認證失敗訊息:%s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "在比較使用者名稱時忽略大小寫" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "在比較群組名稱時忽略大小寫" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "當指令被 sudoers 允許通行時記錄" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "當指令被 sudoers 拒絕通行時記錄" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "要連線的 Sudo 記錄伺服器 (可加連線埠)" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" msgstr "Sudo 記錄伺服器逾時 (秒):%u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "請在已連線至記錄伺服器的 socket 通訊端啟用 SO_KEEPALIVE socket 選項" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, c-format msgid "Path to the audit server's CA bundle file: %s" msgstr "稽核伺服器的 CA 組合 (bundle) 檔案路徑:%s" -#: plugins/sudoers/def_data.c:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "sudoers 憑證檔案的路徑:%s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, c-format msgid "Path to the sudoers private key file: %s" msgstr "sudoers 私鑰檔案的路徑:%s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" msgstr "核驗記錄伺服器的憑證是否有效" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "允許使用未知 runas 使用者及 (或) 群組 ID" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "只允許以使用有效 Shell 的使用者執行命令" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "設定 pam 遠端使用者為執行 sudo 的使用者" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "設定 pam 遠端主機至本機主機名稱" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 +#, c-format +msgid "Working directory to change to before executing the command: %s" +msgstr "執行命令前,要切換到的工作目錄:%s" + +#: plugins/sudoers/def_data.c:560 +#, c-format +msgid "Root directory to change to before executing the command: %s" +msgstr "執行命令前,要切換到的根目錄:%s" + +#: plugins/sudoers/defaults.c:184 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d 未知的預設條目「%s」" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: 未知的預設條目「%s」" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s:未知的預設條目「%s」" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d 沒有給「%s」指定值" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: 沒有指定「%s」的值" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s:沒有給「%s」指定值" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d 「%s」的值必須以「/」開頭" - -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s:「%s」的值必須以「/」開頭" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: 「%s」選項不帶值" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d 「%s」選項不帶值" - -#: plugins/sudoers/defaults.c:280 -#, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s:「%s」選項不帶值" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%1$s:%2$d 選項「%4$s」的預設類型 0x%3$x 無效" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%1$s:%2$d: 選項「%4$s」的預設 (Defaults) 類型 0x%3$x 無效" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%1$s:選項「%3$s」的預設類型 0x%2$x 無效" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%1$s:%2$d 值「%3$s」對選項「%4$s」無效" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: 「%s」值對「%s」選項無效" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s:值「%s」對選項「%s」無效" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s:%d: \"%s\" 的值開頭必須是 '/'、'~' 或 '*'" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgstr "%s: \"%s\" 的值開頭必須是 '/'、'~' 或 '*'" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: \"%s\" 的值開頭必須是 '/'" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s:「%s」的值必須以「/」開頭" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv:envp 損壞,長度不符" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "無法重建環境" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "對不起,您沒有權限設定以下環境變數:%s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "解析接近第 %2$d 行的 %1$s 時發生錯誤" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "解析 %s 中的內容時發生錯誤" @@ -1958,88 +1999,88 @@ msgstr "無法解析網路遮罩「%s」" msgid "Local IP address and netmask pairs:\n" msgstr "本機 IP 位址和網路遮罩配對:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "未知群組:%s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "無法寫入 I/O 記錄檔案:%s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "無法更新序列檔" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "無法建立 %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "無法連線到記錄伺服器" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s:內部錯誤,未開啟事件 %d 的 I/O 記錄檔案" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "無法讀取時鐘" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s:內部錯誤,訊號 %d 無效" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "事件循環中發生錯誤" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" msgstr "建立新 SSL_CTX 物件失敗:%s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "TLS 連線至 %s:%s 失敗:%s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "TLS 初始化失敗" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "TLS 交握失敗" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "無法取得一日時間" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s:內部錯誤,退出狀態碼 %d 無效" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "失去對記錄伺服器的連線" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "缺少寫入緩衝區" @@ -2062,18 +2103,19 @@ msgstr "要使用 SSL,您必須在 %s 設定 TLS_CERT" msgid "unable to initialize LDAP: %s" msgstr "無法初始化 LDAP:%s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "指定了 start_tls,但 LDAP 函式庫不支援 ldap_start_tls_s() 或 ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "無效的 sudoOrder 屬性:%s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports:連線埠過大" +#, c-format +msgid "%s: port too large" +msgstr "%s:連線埠過大" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2084,7 +2126,7 @@ msgstr "不支援的 LDAP URI 類型:%s" msgid "unable to mix ldap and ldaps URIs" msgstr "無法混合 ldap 和 ldaps URI" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "無法轉換 sudoOption: %s%s%s" @@ -2093,66 +2135,66 @@ msgstr "無法轉換 sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "無法開啟稽核系統" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "無法傳送稽核訊息" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "無法開啟記錄檔案:%s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "無法鎖定記錄檔案:%s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "無法寫入記錄檔案:%s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "使用者不在 sudoers 中" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "使用者未取得此主機上的授權" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "不允許使用指令" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s 不在 sudoers 檔案中。此事件將會回報。\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s 沒有權限在 %s 上執行 sudo。此事件將會回報。\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "對不起,使用者 %s 不能在 %s 上執行 sudo。\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "對不起,使用者 %1$s 不允許以 %8$s 上的 %5$s%6$s%7$s 身份執行「%2$s%3$s%4$s」\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s:找不到指令" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2161,36 +2203,36 @@ msgstr "" "忽略在「.」中找到的「%s」\n" "請使用「sudo ./%s」,若這是您想執行的「%s」。" -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "認證失敗" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "需要密碼" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u 次密碼錯誤嘗試" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "無法 dup stdin:%m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "無法執行 %s:%m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "無法執行 fork:%m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "無法開啟管線:%m" @@ -2200,7 +2242,7 @@ msgstr "無法開啟管線:%m" msgid "digest for %s (%s) is not in %s form" msgstr "%s(%s) 的摘要的形式不是 %s" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2209,8 +2251,7 @@ msgstr "" "\n" "LDAP 角色:%s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2218,42 +2259,38 @@ msgstr "" "\n" "Sudoers 條目:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAs 使用者:" -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAs 群組:" -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " 選項:" -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " 指令:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "比較 %s (%s 上) 的預設條目:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "%s RunAs 和指令指定的預設值:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "使用者 %s 可以在 %s 上執行以下指令:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "使用者 %s 沒有權限在 %s 上執行 sudo。\n" @@ -2268,48 +2305,58 @@ msgstr "將忽略不完整的 sudoRole:cn:%s" msgid "invalid LDIF attribute: %s" msgstr "LDIF 屬性無效:%s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "sudo 前端設定的 %.*s 無效" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "無法解析網路位址列表" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "sudo 前端未設定使用者名稱" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "sudo 前端未設定使用者 ID (user-ID)" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "sudo 前端未設定群組 ID (group-ID)" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "sudo 前端未設定主機名稱" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "無效的工作目錄:%s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "無效的 chroot 目錄:%s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "無法執行 %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers 策略外掛程式版本 %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers 檔案文法版本 %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2318,86 +2365,86 @@ msgstr "" "\n" "Sudoers 路徑:%s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch 路徑:%s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf 路徑:%s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret 路徑:%s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "無法註冊類型為 %d 的觸發器 (版本 %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "無法快取使用者 ID %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "無法快取使用者 ID %u,原因:使用者 ID 已存在" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "無法快取 %s 使用者" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "無法快取使用者 %s,原因:已存在" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "無法快取群組 ID %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "無法快取群組 ID %u,原因:已經存在" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "無法快取 %s 群組" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "無法快取群組 %s,原因:已經存在" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "無法快取群組列表 %s,原因:已經存在" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "無法快取 %s 的群組列表" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "無法解析 %s 的群組" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "無法解析 %s 的群組 ID" @@ -2461,239 +2508,259 @@ msgstr "截短的稽核路徑 user_cmnd:%s" msgid "truncated audit path argv[0]: %s" msgstr "截短的稽核路徑 argv[0]:%s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "無法初始化 SSS 來源。是否已在您的電腦上安裝 SSSD?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "無法在 %2$s 中找到符號「%1$s」" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "預設條目有問題" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "未找到有效的 sudoers 來源,退出" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "不允許使用者切換根目錄至 %s" + #: plugins/sudoers/sudoers.c:297 +#, c-format +msgid "you are not permitted to use the -R option with %s" +msgstr "不允許您將 -R 選項與 %s 一起使用" + +#: plugins/sudoers/sudoers.c:321 +#, c-format +msgid "user not allowed to change directory to %s" +msgstr "不允許使用者切換至 %s 目錄" + +#: plugins/sudoers/sudoers.c:322 +#, c-format +msgid "you are not permitted to use the -D option with %s" +msgstr "不允許您將 -D 選項與 %s 一起使用" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers 指定 root 不允許執行 sudo" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "使用者不允許覆蓋 closefrom 限制" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "您沒有權限使用 -C 選項" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "時間戳所有者 (%s):無此使用者" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "找不到終端" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "抱歉,您必須先要有終端才能執行 sudo" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "%s 使用者的 Shell 無效:%s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "目前目錄中的指令" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 msgid "user not allowed to set a command timeout" msgstr "使用者不允許設定命令逾時" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "抱歉,您沒有權限設定逾時時間" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "使用者不允許保留環境" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "抱歉,您沒有權限保留環境" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "指令過長" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit 不用以 sudo 執行" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "無法讀取 %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "無法 stat %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s 不是一般檔案" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s 由使用者 ID %u 所有,應為 %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s 允許任何人寫入" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s 屬於群組 ID %u,應為 %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "只有 root 才能使用「-c %s」" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "未知的登入類別:%s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "無法解析主機:%s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "無效的過濾器選項:%s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "無效的最大等待時間:%s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "無效的速度因數:%s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s: %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/計時:%s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s: %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "重播 sudo 工作階段:%s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "無法將終端設為原始 (RAW) 模式" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "警告:您的終端尺寸太小,不能正常地重播記錄。\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "記錄的幾何尺寸為 %dx%d,但您終端的幾何尺寸為 %dx%d。" -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "重播完成,請按任意鍵返回終端。" -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "不明確的表達式「%s」" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "表達式中的「)」不對稱" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "未知的搜尋詞彙「%s」" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s 需要參數" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "無效的正規表示式:%s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "無法解析日期「%s」" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "表達式中的「(」不對稱" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "無效的結尾字元「or」" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "無效的結尾字元「!」" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "未知的搜尋類型 %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "用法:%s [-hnRS] [-d 目錄] [-m 數值] [-s 數值] ID\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "用法:%s [-h] [-d 目錄] -l [搜尋表達式]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2702,7 +2769,7 @@ msgstr "" "%s - 重播 sudo 工作階段記錄\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2730,11 +2797,11 @@ msgstr "" " -s, --speed=數值 加速或減速輸出速度\n" " -V, --version 顯示版本訊息並退出" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\t主機不相符" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2742,7 +2809,7 @@ msgstr "" "\n" "指令已允許" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2750,7 +2817,7 @@ msgstr "" "\n" "指令被拒" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2795,89 +2862,89 @@ msgstr "sudoedit 不應用路徑指定" msgid "the -x option will be removed in a future release" msgstr "未來版本會移除 -x 選項" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "請考慮換用 cvtsudoers 工具" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "按確認鍵編輯 %s:" -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "指定的編輯器 (%s) 不存在" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "未找到編輯器 (編輯器路徑 = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "寫入時發生錯誤" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "無法 stat 暫存檔 (%s),%s 未變更" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "暫存檔內沒有內容 (%s),%s 未變更" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "編輯器 (%s) 執行失敗,%s 未變更" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s 未變更" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "無法重新開啟暫存檔 (%s),%s 未變更。" -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "無法解析暫存檔 (%s),未知錯誤" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "內部錯誤,原因:列表中找不到 %s!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "無法將 %s 的 (uid, gid) 設為 (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s 和 %s 不在同一個檔案系統,將使用 mv 進行重新命名" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "指令失敗:「%s %s %s」,%s 未變更" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "重新命名 %s 發生錯誤,%s 未變更" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "現在該做些什麼?" -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2889,66 +2956,66 @@ msgstr "" " 退出,不儲存對 sudoers 檔案的變更 (x)\n" " 退出並將變更儲存到 sudoers 檔案(十分危險!)(Q)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "無法執行 %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s:所有者無效,(uid, gid) 應為 (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s:權限不正確,模式應該是 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s:解析正確\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s 忙碌中,請稍後重試" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "無法鎖定 %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "仍然編輯?[y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "錯誤:%s:%d 在 %s「%s」中發生循環" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "錯誤:%s:%d:%s「%s」中有循環" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "警告:%s:%d 在 %s「%s」中發生循環" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "警告:%s:%d:%s「%s」中有循環" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "錯誤:%s:%d 引用了 %s「%s」但尚未定義" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "錯誤:%s:%d:已引用但未定義 %s「%s」" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "警告:%s:%d 引用了 %s「%s」但尚未定義" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "警告:%s:%d:已引用但未定義 %s「%s」" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "警告:%s:%d 未使用的 %s「%s」" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "警告:%s:%d:%s「%s」未使用" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2957,7 +3024,7 @@ msgstr "" "%s - 安全地編輯 sudoers 檔案\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2977,10 +3044,13 @@ msgstr "" " -s, --strict 嚴格語法檢查\n" " -V, --version 顯示版本訊息並退出\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "include 嵌套層數過多" +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports:連線埠過大" + #~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" #~ msgstr "SSL_connect 失敗:ssl_error=%d, stack=%s\n" diff --git a/po/cs.mo b/po/cs.mo index 83ef882f217da0944e1f5e6837f70ec28fa329fa..b1b2881bb1bbee394e7291c2336f18297cc8d9c1 100644 GIT binary patch delta 4786 zcmajh3vg7`9mny1Fh&FeNeBrf1}=m^0t5(e!Yhb?p(H9IEg-d7D%cbMM`I z?>Xmx&RuBV9kXR`Oypux>^5UNM{Xx&ac1!`W`}OmS+hSRn03PUu@8QX+1Mq~j6WO0 zM}I8DWURtrxE_1pQS6E5F%vJNu8U7H<1b=;`RvDuQJ9AFaWvMT`fvz4;xVLeb_(GX@J%-3KqnAsja% zowQTv;IA+Xzr?Je-6LsF9pP z&Fw{0!#6W*H9QD)z8K@N2DK&{kW1|l-i>E)G^X${+O#5^ii=RsJCIKO)$q?b!F1Z+ zaWKYHXLT$eb?nD6xCKYzo2U|B!=X5W;g7;nRK=Q5Yoi%;{clhu@4`H)vZGN`>+ePV z9d;h$1b?=V4_$Z`)#Fc54R`GAmaG7ImIY89dlL1)W2li`!ihN8aVxqM^_;D!iZvs% zZSSHw_~!^aDrqX+QA7EtRU1Ox(15DM0o3AbM>QD7P3q_<%)^B^2{$2Cw|6`*BSo@U zCSFt12i1Y`=wM_vJ5=4OQ4MZF+OVTI6W>EUIFqHT#a4nE(Q@P~dkR^P_A>IK*xQ~T zpsxE89ZX=tyI>w_stS`9M%5qU1z7KU>5H+Ip zsE+JHHT)9l`nOSQYA6k9y9;q10bD6fr@X zqg8z9{XOIzpG1e_tEh$&c?DE~V$>X$qkae0qB?pMRjK!oKG;=MMKc)PIGlj-Sc@HT zT^{w1V`l>=if}7(k9~le>u$q&Rd6h7O@vV;+>G~N3u;xz(u+jwhC46|b^Qrc!@tF` zn9Q#cW3eL7ha>E$=gp|abRIRQAEP?dorzM1N>M*7TT!p$1=PqAsjo^q3^n38*ocqd z-PnDM`@J9YIer3l-)ZE}A|LXp2GZ%C9xw~F=vE+aj5VPuaT2vAKJx6$uyj5Tb>Cdn zNE`UjgO4MFw!h*G%%OF4bQw}y+lDN!h@E9ei|Y&24H?v1rMwq)T#D+*cC5e?sF4k1 zK{!~C^KmCm!M`Dcx3QEf8H1>bu0uVi8TI|UI8yI_XX>dN3y`YXT2v2TMFwkEuqS3t zcIR#)(g&+VJ$OIzEW3bO8wmyOzZD};Q|m)jr~y^67qJ-Iadd>8ezcyB3s9x2Lp6LD zXX7Qj1IP2BO0CB3xDWYFvJ=V_+*4)&eqmVA=ugP6kkHK+!*qdIf|RhbKzf&akX*mF7y6vrWtw2jlL zzee&)PNd>x)SSn#V)WoqI2>nT0!EM*!!~0kwqf)>qz#L?%k97nWY#Q*{qY6VT4=}H z@d~QLw-i!;&2?I#JF;1r#c?I-f<{zFo<}uw9Q$HBYEHjGl|E~xdprsIa9n{J*apz_2en8)M>U*1%XJE>i)=VcA`DTG)`6T;s88{4t|DAZN!r9aTnJ#R0n*h#jy%CS8t#?a1nE{^S$l^ z$DtNi7-Mh&=|I+#AgLqT){@xhp8KI^Kj|H(>is{=K^HQQloCBui{&lm?LGlwqaqLB+t%fi-dz3s*v}sDUJw;ZLL*y|si}s_Vb8r#Sb`w#_{(GCsiJe5# zMKPkAR=M7YCFFZV+e_pe$s;UuW2smZ(e^_!j2tApNknr@1?_3_15!@3btWm~AyP^7 z3parbBHC^x-zCS%GP0OFL9TDhy`4933fWHfk<;YcL>mh`68-mHuSO@bhg6WQ3a z2UXsQe)!`XzKmyI>qOggq>OAJ`W-n*8p(~@&ECPQxL@=CO?Hlu@x(_KlGWrG(bn6= zPT(1D{{`&t?TcJ8hs2Q?Z+QyJ>lqOl{(ehT;Z#)vFmqMg?y#KT0P@GZ!G&?H`dhqYI(3z+qTEwa%6bQ Zt;y=Rzoe$jA8oOU#sk5YGvm7^{~P0SVqE|L delta 4321 zcmY+`dvF!y9merrxP+L7kN^pXOUMQSAt5J_00|@zA{+yRn^tHIh>9q;K!M0j1(pCR z0g-TtAR;K2dc%mEq6I`mjJD2n3Q}4%1DXEQmO()31#71rzt8S6jyrkI=iNPf_I>yF zzPqq>f6RrwG47@It?G@fk#r-GShF@UX7dts)NFl{Sv=Na25!eb_%I7>Co5vDsWK#zoi{4`C{P z7I+;Qi^X;@8-txt`_nNIt8q2fU<&r(dxQeFpvK25Df-nP3Yit?1f34%z9uU@>{D!b+7`voBBsyn(7@n&bCVhFXlvQRmmXG*pVisK=%W z)nNj|*GNk+A7@}G)+1H4zXV=KZr9Eb!Bm#K9fjVQcm;Lg1Rf1tCle`( zm7|`PxqRq%+mPjBZ=nW$7Srk9zN4WFq|%EhX;R`yb~~e}@A%IiQY0oTUm(M$Pd;)O(;7 zHPDl&N;M;W*iBSPGkJ7|;7HVqY9+?uMvTSnI3Axz{_HXzn(8k3)L)BXIQ3EKrsAEr z3KQ|qn2eWjCw_%GzqY`?ql1ALPy=kuXtidtP*WE{bvz%{@d?!X<4e?2m*evK(jCk} zm2f@k&JN)={2V9Zd?r-ipTuJPJL-4csDBZbpgMR2_4@)LLh?l{EBn)_ja z?hG3Gq89bT22?4VkUvWq>`%dX9L0VOY9N0^ieXogvyWqxLTSLR)z^6C`zsB2fLW#e)>QJTp7nf&CX5 zn}w-&XPk*F7h8>7!VY5}J^x?Q;LlQ+5Uqi`QU4Y!Ma}5}RAoLwRqAV;fT7|30B2!W z_V=JFb{y65zwwvYw~R*-SD`9&8dLBJX1O$C7=8$|k(;*>sJUE;x=;hQ$A6+a_yKuf ztbnV^>8MK71^bPt-+hBRKRnVO;KS&!UlX_w-Bb>op`i}GKwf5c6;<+-i2vp)#dP-X z#YwmV`LlC;=uT4a@E^-u)Z9l<*IkZ07`7Rc@B`F9&tp%FE2sXQXylgjy2S`;02`1h z+Y#)IH?SjySb^Ozj2dtSYObfDgPXAz9uB_$D{3H@QT^Cxe~Lq>DJ>aI{Z;ze!GRjg zV7~!%XJ=7&{twh5iXG$MiGy18`Ka@!q0V!$JMKj-w)e0HUPIk+a)rN02ci0{a)ZV? z)W~1J;dlleY&q7ya3-n}5zNLa)CKC%8!&cZ|14@vTtQW+%Q*i|!^kVZreGi3f|=+Z zr;$UW8MUh8d0pwmN-V=V)S^6xS(v~{4h}@k?PS#IUymBV0o2+!g_^2XJmk5Ufnl70 zy50&*)ARohjTjE-VhhNJL?wKg+)JJ#>xs4~h_*L;ytPpqw1pPu38H_* zwv)Tbt?kz|_K@c_|JpW^IFhOzwh^S>Yxy6OgLWIdjSMHdNNduPXj@7gHP}v)I`X)7 z*k+P@h!&tWy$eQpt!>5a;@t;n9`$zpe@X_^W^LLF!LdTDBGbrfGJ`xyipVdBUO`7l z9?`bS$9wy$d5Gvnj}zWx-qwRpJs)g-4es)H>@Dm^mXlJlnT#XvlNDqvd5^q977?B^ z@1^=ACX)z>lC|X4)`vzlX(0Q_uShPLP7bR7bu_efASGVwr;oNYA0xdf=Gb}YGNLG_Gne+Z9>FAC=mcJc=l_b-fg%}Z+)U0g6TCOUp#kK3Z_h9!3V5hWkM ARsaA1 diff --git a/po/cs.po b/po/cs.po index d4ba906454..03858738c5 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-18 13:06+02:00\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 19:42+02:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -51,17 +51,17 @@ msgstr "registr nelze obnovit" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -84,20 +84,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "nelze alokovat paměť" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "%s nelze otevřít" @@ -175,12 +175,22 @@ msgstr "%s je zapisovatelný pro všechny" msgid "%s is group writable" msgstr "%s je zapisovatelný pro skupinu" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, 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:95 +#, c-format +msgid "not overwriting %s" +msgstr "%s nebude přepsáno" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "z %s nelze číst" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "do %s nelze zapsat" @@ -261,7 +271,7 @@ msgid "unable to set controlling tty" msgstr "řídicí terminál nelze nastavit" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "nelze vytvořit rouru" @@ -270,7 +280,7 @@ msgid "unable to receive message from parent" msgstr "od rodiče nelze přijmout zprávu" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "nelze vytvořit potomka" @@ -278,7 +288,7 @@ msgstr "nelze vytvořit potomka" msgid "unable to restore tty label" msgstr "nelze obnovit značku TTY" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "%s nelze spustit" @@ -329,7 +339,7 @@ msgstr "dohlížejícímu procesu nelze odeslat zprávu" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "chyba v %s na řádku %d při zavádění modulu „%s“" @@ -374,67 +384,67 @@ msgstr "neslučitelná hlavní verze modulu %d (očekáváno %d) nalezena v %s" msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignoruje se modul politiky „%s“ v %s na řádku %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "lze zadat pouze jeden modul s politikou" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, 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:541 +#: src/load_plugins.c:552 #, 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:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "vnitřní chyba, přetečení v %s" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "neplatný název proměnné prostředí: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argument u -C musí být číslo větší nebo rovno 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 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:536 +#: src/parse_args.c:557 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:546 +#: src/parse_args.c:567 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:548 +#: src/parse_args.c:570 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:557 +#: src/parse_args.c:580 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:561 +#: src/parse_args.c:584 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:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "na této platformě není sudoedit podporován" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Smí být zadán pouze jeden z přepínačů -e, -h, -i, -K, -l, -s, -v nebo -V" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -443,7 +453,7 @@ msgstr "" "%s – upraví soubory jako jiný uživatel\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -452,8 +462,7 @@ msgstr "" "%s – vykoná příkaz jako jiný uživatel\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -461,123 +470,131 @@ msgstr "" "\n" "Přepínače:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "dotazuje se na heslo prostřednictvím pomocného programu" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "použije zadaný druh BSD autentizace" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "spustí příkaz na pozadí" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "při výzvě vydá zvukové znamení" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "uzavře všechny deskriptory souboru >= číslu" -#: src/parse_args.c:771 +#: src/parse_args.c:795 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:774 +#: src/parse_args.c:798 +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:800 msgid "preserve user environment when running command" msgstr "při spuštění příkazu zachová uživatelské prostředí" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "zachová určité proměnné prostředí" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "místo spuštění příkazu upraví soubory" -#: src/parse_args.c:780 +#: src/parse_args.c:806 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:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "nastaví proměnnou HOME na domovský adresář uživatele" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "zobrazí nápovědu a skončí" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "spustí příkaz na stroji (je-li podporováno modulem)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "spustí přihlašovací shell jako cílový uživatel; příkaz lze rovněž zadat" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "úplně odstraní soubor s časovými údaji" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "zneplatní soubor s časovými údaji" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "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:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "neinteraktivní režim, nepoužijí se žádné dotazy" -#: src/parse_args.c:798 +#: src/parse_args.c:824 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:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "použije určený dotaz na heslo" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +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:831 msgid "create SELinux security context with specified role" msgstr "vytvoří selinuxový bezpečnostní kontext se zadanou rolí" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "načte heslo ze standardní vstupu" -#: src/parse_args.c:808 +#: src/parse_args.c:836 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:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "vytvoří selinuxový bezpečnostní kontext se zadaným typem" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "po uplynutí zadaného času ukončí příkaz" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "v režimu výpisu zobrazí oprávnění uživatele" -#: src/parse_args.c:818 +#: src/parse_args.c:846 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:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "zobrazí údaje o verzi a skončí" -#: src/parse_args.c:822 +#: src/parse_args.c:850 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:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "přestane zpracovávat argumenty příkazového řádku" @@ -682,16 +699,16 @@ 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:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "je třeba alespoň jeden argument" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "neplatné číslo deskriptoru souboru: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s nelze spustit jako přihlašovací shell" @@ -744,124 +761,124 @@ msgstr "volání setproject selhalo u projektu „%s“" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "pozor, nepodařilo se přiřadit řízení zdrojů projektu „%s“" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo verze %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Přepínače configure: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "nepřekonatelná chyba, moduly nelze zavést" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "modul nevrátil příkaz k provedení" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "neočekávaný režim programu sudo 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "neexistujete v databázi %s" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "nelze určit terminál" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s musí být vlastněn UID %d a mít nastaven bit setuid" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "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:914 +#: src/sudo.c:922 #, 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:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "nelze nastavit ID doplňkových skupin" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "efektivní GID nelze nastavit na %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID nelze nastavit na %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "neočekávaný důvod ukončení potomka: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "modul s politikami nelze inicializovat" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "modulu s politikami %s chybí metoda „check_policy“" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "příkaz zamítnut politikou" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "chyba modulu s politikou" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, 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:1256 +#: src/sudo.c:1264 #, 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:1294 +#: src/sudo.c:1302 #, 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:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "chyba při inicializaci vstupně-výstupního modulu %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "chyba při inicializaci auditního modulu %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "chyba při inicializaci schvalovacího modulu %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "příkaz zamítnut schvalovatelem" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "chyba schvalovacího modulu" @@ -898,7 +915,7 @@ msgstr "%s ponechán nezměněn" msgid "%s unchanged" msgstr "%s nezměněn" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "obsah relace s úpravami ponechán v %s" @@ -911,33 +928,33 @@ 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:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: zabit signálem" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: neznámá chyba %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 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:897 +#: src/sudo_edit.c:899 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:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "UID nelze změnit na roota (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "chyba modulu: programu sudoedit chybí seznam souborů" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "nelze přečíst hodiny" @@ -953,25 +970,25 @@ msgstr "žádné heslo nebylo poskytnuto" msgid "unable to read password" msgstr "heslo nelze přečíst" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "po terminálu se vyžaduje načtení hesla; buď jej přečtěte ze standardního vstupu pomocí přepínače -S, nebo nastavte pomocný program askpass" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "program pro dotazování se na heslo nebyl zadán, zkuste nastavit SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "GID nelze nastavit na %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "UID nelze nastavit na %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "%s nelze spustit" diff --git a/po/de.mo b/po/de.mo index 8157324b67d3f536ede90cda9b775aff887bbb97..ff049ed655bab69514fdfb2373a766836bcf5aed 100644 GIT binary patch delta 4784 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 delta 4330 zcmYk-dwfrI9LMp`HmzAUW6Wh{Ki6#he!H<{W=6uc$|d1PDXq|`n9CG(5ORq~E0z>O zMK1l46scI(hex_SS_zN-=}{^kdORpndcDs%UCv|g^ZcH(-|u|C-_Q4ZwqJKd?cWyV zoM_sh#yILo8`3}4?8+#!$&GZ^Y;lrVJTAd@_yl&r*RTnm#LjpYn_)|CW@8Xr;#h2j z)z|@7p+2_WH5si-AIF79`n!EX!h8n|gjKgur*sKx@aVmDj?U;h~zGslJSZuOc zDYigekHbW)!nrsPo72BVGaSvVCAP&vR3*Zw0nJ2rix2R?l69A^NxNG#HE>!vLPaPMFlftUcx<-?cERgZoe=UGBTp_Z{D3 zr~#kDAhu#1GI1bgU=Gmezo9yA%hT0yf7Ja6n1Cx#YrhWpu{utJ@g(MB z7SrMpHXg4<2lc!|sE&WcZkSA`8c<0p_1BF_+$g{`*d33eN_z$CkcB<52i}dU)U&9y zkDxw(5>@JElqZBms3o0*0bGt++8wCR9YGEBTpIOP$BFz_r5b?z&ZeUV_BiT+2T?OR zjlD59-J8)A)PrhKm5Ly%XWyU(cotR3w1C%732HOWLVbRTLqnz5g?ep{p*n2D@HNt2 zn1dBqj5SCV?F-*C$mA`aUbG}vqXy6y12_sPrrnR~um<^x?Z+~7PSDVUGuScOWD`*{ zdI`i3D+vmPNpg#8}1~7#!uh**pwNwL89nL{bU=z}neTnMlcjQfVERh|; zt8eX4nelM(vFas16Qd0DnR~xDl_0p3@O2iVZ-$EtQ<~ zz17I}vE8VFAH{U~xAQdgfE0SsNJFTKlp?>fF{nx`K<$-U|9%~6%}=8$6vr=B;&jv! z^h0gpS*Ru0j2ie?r~$-q;b_DeGD>& zHWZiPLL7)qsIxi>qn2bY>U#%}B3V7^fpG=iTK7ejcp7R?Y(Q1)uc8-$<6zb_!<_^@->_(Q^KJmST8em4D_q`#giY`HQREyecAK^s&8Cf#N zZtmqR!6v+wUmQk?V(l4CDUL)YXB&{^wR+!%)RCqY;&oV!`a^aADVkkE9%Z@QY=QTp z?k_@pem`dF{g3YB{UV5(K?UmdSc)3)F4RmvLzVP0j>cdK|G{uErvQG4TB=j1f#y=i z!B~OXd=b?B%b1SY{g{|TV+f5@d;~S(O{mRs5;fAqYrRqqM^)x7WFJ~BG8Q|6Ox6E_q(wjo<&V0nTM*M5_Gg%=g`e60|Z$OjrcCMes;dlwP zsfIFbZQeP^3uK#79e#!S{snB0JqCHt9fhjIib2%BEscZRP)Sc9`@(v%@FQ?KYV&=J zo$)eivvw}?20RRzyiG$@Y%glFeUIueg}Qgdp4b7$qP{;L)z6M{>d(ftAGx6tcDUZ# zRO3+B>rs{X7I|Z=DO*+#E<+9M9&|S+s^fap(!}vcgfUnz)Jzv4`_1;EIzEpXnB%ZR zRPr&XFRnzYYKQ#m_#xh=>y7&2Bn;se)C0am&FC^_V%MSGW*dPT=tk58>QK-B1KVI| znD@`fDW?(SMkO+MTZ4McPKb0*2TSvIv=+m0>qri>l;% zz71~nmaHH0ea9Bjh~fjecExOeB=gJznLUN~RFKcK<(0 z{EI~2Xw-5%NuDK6CMO-*T<^Fo@2}G%v@6LLQc9+g*T|jZZqkV8c-h1KueZc+i9`bPi^Q*a?XrgZry;C~c6TOHWUJZCL-D5ZBEHaA}lgG&QX)xSN!v4M6e2eg1zugJ5$?Gb^I+914lShe;Lu7vBcv59_WNLC|)GN&| z#zqp_>}wK}TUD|8gJ5ZVK`^Hvkkg|uFE5fBs*Z~39?Ff>WEI6kF6K^&ihS2S+%Ph- HIJMQ^53I}O diff --git a/po/de.po b/po/de.po index dc8bb28bbe..06988b3cff 100644 --- a/po/de.po +++ b/po/de.po @@ -4,10 +4,10 @@ # Mario Blättermann , 2012, 2014-2017, 2019-2020. msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-17 15:33+0200\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-15 20:11+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 20.04.2\n" +"X-Generator: Lokalize 20.08.1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -51,17 +51,17 @@ msgstr "Registrierungsdatenbank konnte nicht wiederhergestellt werden" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -84,20 +84,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "Speicher konnte nicht zugewiesen werden" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "%s konnte nicht geöffnet werden" @@ -174,12 +174,22 @@ msgstr "%s kann von allen verändert werden" msgid "%s is group writable" msgstr "%s kann von der Gruppe verändert werden" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: %s auf null Byte kürzen? (j/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "%s wird nicht überschrieben" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "Aus %s konnte nicht gelesen werden" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "%s konnte nicht beschrieben werden" @@ -260,7 +270,7 @@ msgid "unable to set controlling tty" msgstr "Kontrollierendes TTY konnte nicht gesetzt werden" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "Weiterleitung konnte nicht erstellt werden" @@ -269,7 +279,7 @@ msgid "unable to receive message from parent" msgstr "Die Nachricht konnte nicht empfangen werden" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "Es konnte nicht geforkt werden" @@ -277,7 +287,7 @@ msgstr "Es konnte nicht geforkt werden" msgid "unable to restore tty label" msgstr "TTY-Kennzeichnung konnte nicht wiederhergestellt werden" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "%s konnte nicht ausgeführt werden" @@ -328,7 +338,7 @@ msgstr "Die Nachricht konnte nicht an den überwachenden Prozess verschickt werd #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "Fehler in %s, Zeile %d, während Plugin »%s« geladen wurde" @@ -373,67 +383,67 @@ msgstr "Inkompatible Hauptversion %d des Regelwerks (%d erwartet) wurde in %s ge msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "Regelwerks-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "Nur ein einziges Regelwerks-Plugin kann geladen werden" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "Unbekannter Plugintyp %d wurde in %s gefunden" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, 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:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "Interner Fehler: %s-Überlauf" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "Unzulässiger Name der Umgebungsvariable: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "Das Argument für -C muss eine Zahl größer oder gleich 3 sein" -#: src/parse_args.c:532 +#: src/parse_args.c:552 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:536 +#: src/parse_args.c:557 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:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "Die Option -E ist im Bearbeiten-Modus ungültig" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "Im Bearbeiten-Modus können keine Umgebungsvariablen gesetzt werden" -#: src/parse_args.c:557 +#: src/parse_args.c:580 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:561 +#: src/parse_args.c:584 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:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ist auf dieser Plattform nicht verfügbar" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Nur eine der Optionen -e, -h, -i, -K, -l, -s, -v oder -V darf angegeben werden" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -442,7 +452,7 @@ msgstr "" "%s - Dateien als anderer Benutzer verändern\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -451,8 +461,7 @@ msgstr "" "%s - Einen Befehl als anderer Benutzer ausführen\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -460,123 +469,131 @@ msgstr "" "\n" "Optionen:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "Hilfsprogramm zum Eingeben des Passworts verwenden" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "Angegebenen BSD-Legitimierungstypen verwenden" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "Befehl im Hintergrund ausführen" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "Bei Eingabeaufforderung Systemklang abspielen" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "Alle Dateideskriptoren >= num schließen" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "Befehl unter angegebener Login-Klasse ausführen" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "Arbeitsverzeichnis vor der Ausführung des Befehls wechseln" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "Benutzerumgebung beim Starten des Befehls beibehalten" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "Spezifische Umgebungsvariablen beibehalten" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "Dateien bearbeiten, statt einen Befehl auszuführen" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "Befehl unter angegebenem Gruppennamen oder Gruppen-ID ausführen" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "HOME-Variable als Home-Verzeichnis des Zielbenutzers setzen" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "Hilfe ausgeben und beenden" -#: src/parse_args.c:786 +#: src/parse_args.c:812 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:788 +#: src/parse_args.c:814 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:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "Zeitstempeldateien komplett entfernen" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "Zeitstempeldatei ungültig machen" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "Benutzerrechte aufzählen oder einen bestimmten Befehl testen; für ein längeres Format zweimal angeben" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "Nicht-interaktiver Modus, es werden keine Eingabeaufforderungen verwendet" -#: src/parse_args.c:798 +#: src/parse_args.c:824 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:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "Angegebene Passwort-Eingabeaufforderung benutzen" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "Wurzelverzeichnis vor der Ausführung des Befehls wechseln" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "SELinux-Sicherheitskontext mit angegebener Funktion erstellen" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "Passwort von der Standardeingabe lesen" -#: src/parse_args.c:808 +#: src/parse_args.c:836 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:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "SELinux-Sicherheitskontext mit angegebenem Typ erstellen" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "Befehlausführung nach der angegebenen Zeitbegrenzung abbrechen" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "im Aufzählungsmodus, Rechte des Benutzers anzeigen" -#: src/parse_args.c:818 +#: src/parse_args.c:846 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:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "Versionsinformation anzeigen und beenden" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "Den Zeitstempel des Benutzers erneuern, ohne einen Befehl auszuführen" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "Aufhören, die Befehlszeilenargumente zu verarbeiten" @@ -685,16 +702,16 @@ 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:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "Benötigt mindestens ein Argument" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "Unzulässige Dateideskriptornummer: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s konnte nicht als Anmeldeshell ausgeführt werden" @@ -747,124 +764,124 @@ msgstr "»setproject« schlug für Projekt »%s« fehl" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "Warnung: Ressourcenkontrolle von Projekt »%s« konnte nicht zugewiesen werden" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo-Version %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Optionen für »configure«: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "Schwerwiegender Fehler, Plugins konnten nicht geladen werden" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "Plugin gab keinen auszuführenden Befehl zurück" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "Unerwarteter sudo-Modus 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "Sie sind in der %s-Datenbank nicht enthalten" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "TTY konnte nicht ermittelt werden" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s muss dem Benutzer mit UID %d gehören und das »setuid«-Bit gesetzt haben" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "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:914 +#: src/sudo.c:922 #, 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:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "Zusätzliche Gruppenkennungen konnten nicht gesetzt werden" -#: src/sudo.c:937 +#: src/sudo.c:945 #, 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:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID konnte nicht auf »runas«-GID %u gesetzt werden" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "Unerwartete Abbruchbedingung eines Unterprozesses: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "Regelwerks-Plugin konnte nicht initialisiert werden" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, 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:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "Befehl wurde durch Regelwerk abgewiesen" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "Regelwerk-Plugin-Fehler" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, 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:1256 +#: src/sudo.c:1264 #, 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:1294 +#: src/sudo.c:1302 #, 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:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "E/A-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "Audit-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "Genehmigungs-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "Befehl wurde vom Genehmigenden abgewiesen" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "Genehmigungs-Plugin-Fehler" @@ -901,7 +918,7 @@ msgstr "%s blieb unverändert" msgid "%s unchanged" msgstr "%s unverändert" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "Bearbeitungssitzung wurden in %s gelassen" @@ -914,33 +931,33 @@ 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:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: von einem Signal getötet" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: unbekannter Fehler %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 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:897 +#: src/sudo_edit.c:899 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:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "UID konnte nicht zu Root (%u) geändert werden" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "Plugin-Fehler: Fehlende Dateiliste für sudoedit" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "Die Uhr konnte nicht gelesen werden" @@ -956,25 +973,25 @@ msgstr "Es wurde kein Passwort angegeben" msgid "unable to read password" msgstr "Passwort konnte nicht gelesen werden" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "Zum Lesen des Passworts ist ein Terminal erforderlich; verwenden Sie entweder die Option -S, um aus der Standardeingabe zu lesen oder richten Sie das Askpass-Hilfsprogramm ein" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "Kein »askpass«-Programm angegeben, es wird versucht, SUDO_ASKPASS zu setzen" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "GID konnte nicht als %u festgelegt werden" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "UID konnte nicht als %u festgelegt werden" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" diff --git a/po/eo.mo b/po/eo.mo index 5f972e2161b9f80ccbc738a19f34b48bbbc50c5e..3610355e6725d7f28e479ea76707d0d5cc5d9d2d 100644 GIT binary patch delta 4770 zcmajhdvp}#9merDT+)=15JJK&1SZ6UU=nh{5D2#bLF8gA*NTd=Nfxq6*nz!}5L;Io zBBCOdfaQ`1E!H9z3tgl_X|V{QKn2^Xr*e8M*7hL9(^_k_r-w_wPi8pcU!9X@KQps4 z^STxAHikb_ z!bcWP$7EcN1=xc9@h}d+3z&gdP}jvL8N*-14CV67rYzL^tP zif1qfyY(@qFBaf%oaP>{K>BK)#Ob)zJ^m0AIQ|SDr+w3v?xb*H4XWqca3r2Xjrb-G z#&j-Hh00JJU4$A@BaX&4OvQIl_y5y1lisCqybv|e1{{WM_$ck0lkAjWSwH8&jW~ki zR-}{W1X}nmX5tq(6w|0LZJ07t0}D{44!J(-y4&>xs>6T8Jk-UJJ8=X%D&0byfX%3p zoIuU(`>2MyGi)`SgF0V<@fb#}iDu+dvk&jX4jhGjc^GY)dvOXbK|OCzD)m>xZ*hX@ zH2=k1jHk}(SSjk*izT=b@4~aF65qsp9LeyDu?khOt*EuJA9ekEsFEizkE-k_)YN(h zQ-6z{wVdG3?B+uko<{ZfAE<`ohBzfFL!M>)sE$2@df*Y%$UegHm}@x|twlX&6RKkS zk=ZtHqdIss!j4MXkM5|UQq-yqpl)bJRbmfnalV6UFqWIt(PAvbMK}RBAXPW#U9TWT zGToSXO-(wg17p#`$Q*X4x(T8h+<>%U4&w~`1M0yUEL|%Kq>6PfS?EJRIJ8PZXUV&O0+ffZ1K@0zidTuNi={bW@l`F$++Beng=*IQPdNX@bJwJ=AC-VvF z0f{UGbu=4QktxWt&3sfP9z*`jCinbt)SQ2Ws!$htr3w!~O~E*fXcY(8(G=`J{>*Rr zPzSD~dYr*U^ubKUUTC}O=5ZWvK#k}(sKxn->kxirMsZw$`o0A(#u)Q5#&f(T-+li# zGC}J3G1N#dqegZebz>GwpL@&;P)YE~4)L996lVj7sL>-8c(-VJpVr zu0rY`%g#PdOu{H~ulYCXL0LskMaH2@Sc7UPf_f{qVUMU4y8p*^F8XZ{Qfz z2SqfcI1TGji~A62ei1sFO-xj+&z|s#Gng4jsfwd>8pMW5zlU4B;3;5JN%h!ez^HFUOuRv*@YAFJxs#^OgPhO zN|1GFYEhNghPwV3>bg%+9ZuwC3yV?LEx=T4ME=Ys8DZybcKTs*ne#<1YOd<>9^8rQ z;1$#evL-oi!Ccfx{iyr5;1oQ7dV4-YjXZ6#^LtT&x_&Wg08e2=i{>ah8rc=pTn^$X zx?l$C0Zljr_o9X8Pz`*HYB;6bDRmyEb6k!?aS7`A>riX#HJpVXVi^`prT%@`Suxca zQ44AT#ah@CDe$2hl4R@x>GR=bvy|* zkj0pZ4H0%!@^(~-&!H~7it1R88P54))ClLJZhRV5nS-d`gY&2kbe-uO=c77S?Ya*2 zcD&*qUqam<>CS{`L_<*{EJtQ-!*}4Vf)- z7S)l&3TMiSQTN@C!}b0L*-7F=JF3A0s0VeRI(8G)^Yr^1=i(@iTQCEUVGKS}Gws)$CX#nF@8+8$u%P7)<*{0*Y*5ps+$NOOQ_ z3lsWeo*+*WZJJVT&yjDFePk_}Mf;uQwQvd1)|HfY?tS%R3WwW?s`5?us|l$2uOT~$ zwnO9$QPo(7oxhG-QQMD+Ug^DL2Z^Zkv&r-1N5n_8eS>JF){|vqJQ+uFh_sTL^Zx5y??HY*>c}Q?`?isTvm1H2%*2}>xz{BJO8SS3?7S1RA z$qZ6Sv<)ZuoqL*a=bzu7;Z*0)`7e~dPa)e#8>t|3$gOP{J6|I~5+J`OMdUbXCl8Tk zvW95OcIf<^>+Ubc4a7@I$SM%yI*uJdWkC)<5N%O9?{Dm}F!`?f(xrxfPJ3_I2C@tv}!d2(HBcM^!Xn}E=<+{ delta 4365 zcmY+`4Nz5O9>?)NqQsI43aF^yK_$Zk0ojWoA}V5N<*L+5_Oe6*A{%(Y_v)x+qGn}E zmQt?ylBHRC^DQm2)NN{->1|tQ6>WB!sisMCny7YGcfY@Tj#HiCcR$ZL_ul9Ixx*J* zB0{YZ?)jdbTa4=z=}(HI%&v(rtLv(#X3cSCF}Mm-aRXkD2eAiU!0Yf5CSV^PW?=^Q z!MiaD7vLaVhx*(B>}lrO`xFNApbh(CC!Pi{8P$g}jK&J2Z&r)>I2UigJ=hD+__iZ` zv8Z^nQtXYoufXmY#HF|l6KUT%(H)Jf52j!~Y9`829h#5fp5sXF4`4sMh$Ap2(X$Yf zxeuZS^dt_!1Gog+Fb~V=t?FHenY3?vD9{-@iw?G98picD8;AkqyH<{BpdK})Ykgnz zJ>h#6)!`p81Cv;Xp*RuKF^GlOimpa-mV(ysCse~J)UJk$QO~Qf8$OO&`&Q)7PVq7Y zFJJ(NGc2mGDjbh4s=jwo4S$2fFrG%$p`w1wzaGrtK^{JXx%d%kYP+xw!|_J^BhE(6 z)E3m*hftrtfST$ArY92%P)j-o9bAiA+P$dHeTeGlkIBrx8t%@!nyM1yJ!?XB>?u@* z$5A7?h@&xQfH$HBR7IOmGZjKs&;Et#;3d>dCOcj`MX1fV5cT<0E(J}+Yp7#$7S&)^ zy04y&!fdR>LTo{1(LVESM+R>(w4x;$g6hCnbZ`bTnYIYkU<>jUJBE|cJx@Uur?X?U z$!bs|dI?pF~?Ni^cQJ=ev4)$Wp>v-j%mZ}8R-~*@uY(tu|f1uj=89Ax0 zb!Ufg^eq*&Sw`@p9+#s&I1e?VHK>lffNJ;+??CO|1*pBT71h9TbnshL#a%fXs%J1VDOQ3y zEw#Mpd+U+yWBX7Y{|E=rzI9Mg1-)oRJIr@D105q;!)(!F7u*#GP9X~O!-Kwm z$Hm;AL3M0;jyIJJs1CNG*7!7PYQOZ2;a5yck%bOcp?=P%OLiy?X-~SK?;1zT*Wt><47YwW0*P!ZOQOx{zr?86$T7pBU&GH?x&n#(z*VCz}1{R~1pam0f zAF5-gQ60a8>Oee4M(^jN1~>)v{c6MdYemM^2{*doE z)TxM=QCEi&sw)s$S8XU=uM?e$2BInd?N#L8=#=T|MEKpZr^y!L4&_Bx zJ~OMU#(SsS@a=C$$GMZOea^bKT~*~Y}Weg zT0^3Vj+U-*q$OPPUT*Wt*We$>7_y0UA(2GaeB!9U^(J|eEYS^D6`4UYbi<|Jgo)wO z`ux}!_g;zz!nfYP2|5QlB+vQJ0yu}40GUkQB8SLa!tn|JOYtc7AjKp^9wt|> z>nQ}uUb2ncPKJ>RvP11ZLP1wN85J)5`qGW!VsahnOrpqx1-8g}U`W(jzh_Sh@ba zjM6|}Ms~o-$HtVU{zV=fQfXplViC bWkqACB(ozjRFg9-A{3Pyhz?CJSR4O;_+!yt diff --git a/po/eo.po b/po/eo.po index 7f9aa9a171..a44d3ba2d6 100644 --- a/po/eo.po +++ b/po/eo.po @@ -1,15 +1,15 @@ # Esperanto translations for sudo package. # This file is distributed under the same license as the sudo package. -# Keith Bowes , 2012. +# Keith Bowes , 2012, 2020. # Felipe Castro , 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 21:41-0400\n" -"Last-Translator: Felipe Castro \n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-15 20:02-0400\n" +"Last-Translator: Keith Bowes \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" @@ -52,17 +52,17 @@ msgstr "ne eblas restarigi registrejon" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -85,20 +85,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "ne eblas generi memoron" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "ne eblas malfermi %s" @@ -175,12 +175,22 @@ msgstr "%s estas skribebla de ĉiuj" msgid "%s is group writable" msgstr "%s estas skribebla de la tuta grupo" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: ĉu trunki %s ĝis nul bajto? (y/n) [n]" + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "ne anstataŭigos je %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "ne eblas legi ell %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "ne eblas skribi al %s" @@ -261,7 +271,7 @@ msgid "unable to set controlling tty" msgstr "ne eblas elekti la regan tty-on" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "ne eblas krei tubon" @@ -270,7 +280,7 @@ msgid "unable to receive message from parent" msgstr "ne eblas ricevi mesaĝon el supre" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "ne eblas forki" @@ -278,7 +288,7 @@ msgstr "ne eblas forki" msgid "unable to restore tty label" msgstr "ne eblis reatingi tty-etikedon" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "ne eblas plenumigi: %s" @@ -329,7 +339,7 @@ msgstr "ne eblas sendi mesaĝon al observa procezo" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "eraro en %s, linio %d dum ŝargi kromprogramon \"%s\"" @@ -374,67 +384,67 @@ msgstr "malkongrua granda versio %d de kromprogramo (atendite %d) trovita en %s" msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ni malatentas kondutan kromprogramon \"%s\" en %s, linio %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "nur unu konduta kromprogramo povas esti indikata" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "nekonata kromprograma tipo %d trovita en %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "konduta kromprogramo %s ne inkluzivas la metodon check_policy" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "interna eraro, superfluo en %s" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "malvalida medivariabla nomo: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "la parametro de -C devas esti nombron almenaŭ 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "vi ne rajtas specifi ambaŭ parametrojn -i kaj -s" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "vi ne rajtas specifi ambaŭ parametrojn -i kaj -E" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "la parametro -E ne validas en redakta reĝimo" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "vi ne rajtas specifi medivariablojn en redakta reĝimo" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "la parametro '-U' nur povas esti uzata kun '-l'" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "vi ne rajtas kune uzi la parametrojn '-A' kaj '-S'" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ne estas havebla en ĉi tiu platformon" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Vi rajtas specifi nur unu el -e, -h, -i, -K, -l, -s, -v aŭ -V" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -443,7 +453,7 @@ msgstr "" "%s - redakti dosierojn kiel alia uzanto\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -452,8 +462,7 @@ msgstr "" "%s - plenumigi komandon kiel alia uzanto\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -461,123 +470,131 @@ msgstr "" "\n" "Parametroj:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "uzi helpoprogrogramon por pasvortilo" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "uzi specifitan BSD-konstatan tipon" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "plenumigi komandon fone" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "sonigi pepon kiam invitanta" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "fermi ĉiujn dosierpriskribilojn >= numeron" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "plenumigi komandon per specifita BSD-ensaluta klaso" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "ŝanĝu la kurantan dosierujon antaŭ plenumi komandon" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "konservi uzanto-medivariablojn dum plenumigi komandon" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "konservi specifajn medivariablojn" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "redakti dosierojn anstataŭ plenumigi komandon" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "plenumigi komandon kiel la specifitan grupnomon aŭ identigilon" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "valorizi medivariablon HOME je la hejma dosierujo de la cela uzanto" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "elmontri helpan mesaĝon kaj eliri" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "plenumigi komandon en gastiganto (se permesata de kromprogramo)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "plenumigi ensalutan ŝelon kiel celan uzanton; komando ankaŭ enmeteblas" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "tute forigi tempo-indikilan dosieron" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "eksvalidigi tempo-indikilan dosieron" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "listigi privilegiojn de la uzanto aŭ kontroli specifan komandon; uzu dufoje por pli longa formato" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "neinteraga reĝimo, ne demandos al uzanto" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "konservi grupan vektoron anstataŭ elekti celan" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "uzi specifitan pasvortilon" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "ŝanĝu la radikan dosierujon antaŭ ol plenumigi komandon" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "krei SELinux-sekurecan kuntekston kun specifita rolo" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "legi pasvorton el norma enigo" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "plenumigi ŝelon kiel cela uzanto; komando ankaŭ specifebla" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "krei SELinux-sekurecan kuntekston kun specifita rolo" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "finigi la komandon post la specifita tempolimo" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "en lista reĝimo elmontri privilegiojn por uzanto" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "plenumigi komandon (aŭ redakti dosieron) kiel specifita uzanto" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "elmontri eldonan informon kaj eliri" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "ĝisdatigi la tempo-indikilon de la uzanto, sed ne plenumigi komandon" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "ĉesigi procedi komandliniajn parametrojn" @@ -682,16 +699,16 @@ msgstr "ne eblas elekti exec-kuntekston al %s" msgid "unable to set key creation context to %s" msgstr "ne eblas elekti kuntekston de kreo de ŝlosilo al %s" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "postulas almenaŭ unu parametron" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "malvalida dosierpriskribila numero: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "ne eblas lanĉi %s kiel ensalut-ŝelo" @@ -744,124 +761,124 @@ msgstr "setproject malsukcesis por projekto \"%s\"" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "averto, rimedo-rega asigno malsukcesis por projekto \"%s\"" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo: eldono %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Muntaj parametroj: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "ĉesiga eraro: ne eblas ŝargi kromprogramojn" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "kromprogramo ne liveris komandon por plenumi" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "neatendita sudo-reĝimon 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "vi ne ekzistas en la datumbazo %s" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "ne eblas determini tty-on" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s devas esti posedata de uid %d kaj la setuid-bito devas esti markita" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "efektiva uid ne estas %d; ĉu %s estas en dosiersistemo kun la elekto 'nosuid' aŭ reta dosiersistemo sen ĉefuzanto-privilegioj?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "efektiva uid ne estas %d; ĉu sudo estas instalita kiel setuid-radiko?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "ne eblas elekti suplementajn grupajn identigilojn" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "ne eblas elekti efikan gid-on al plenumigkiela gid %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "ne eblas elekti gid-on kiel plenumigkielan gid-on %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "neatendita ido finiĝis laŭ la kondiĉo: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "ne eblas komenci konduktan kromprogramon" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "konduta kromprogramo %s ne inkluzivas la metodon \"check_policy\"" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "komando rifuzita pro konduto-regularo" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "eraro de konduta kromprogramo" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "konduta kromprogramo %s ne komprenas listigon de privilegioj" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "konduta kromprogramo %s ne komprenas la parametron -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "konduta kromprogramo %s ne komprenas la parametrojn -k kaj -K" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "eraro dum lanĉo de eneliga kromprogramo %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "eraro dum lanĉo de ekzamena kromprogramo %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "eraro dum lanĉo de aproba kromprogramo %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "komando rifuzita de aprobanto" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "eraro de aproba kromprogramo" @@ -898,7 +915,7 @@ msgstr "%s restas ne modifita" msgid "%s unchanged" msgstr "%s ne ŝanĝita" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "enhavo de redakta seanco restas en %s" @@ -911,33 +928,33 @@ msgstr "sesh: interna eraro: malpara nombro da vojoj" msgid "sesh: unable to create temporary files" msgstr "sesh: ne eblas krei provizorajn dosierojn" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: mortigita de signalo" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: nekonata eraro %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "ne eblas retrokopii provizorajn dosierojn al ilia originala loko" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "ne eblas retrokopii kelkajn el la provizoraj dosieroj al ilia originala loko" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "ne eblas ŝanĝi uid-on al ĉefuzanto (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "kromprograma eraro: malhavas dosieran liston por sudoedit" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "ne eblas legi la horloĝon" @@ -953,25 +970,25 @@ msgstr "neniu pasvorto estis provizata" msgid "unable to read password" msgstr "ne eblas legi pasvorton" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "terminalo estas postulata por legi la pasvorton; uzu la parametron -S por legi el norma enigo aŭ agordu helpanton askpass" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "neniu programo askpass indikita, provu difini SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "ne eblas elekti gid-on al %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "ne eblas elekti uid-on al %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "ne eblas plenumigi: %s" diff --git a/po/fi.mo b/po/fi.mo index 05512e457564eea67fc7b4e6046d1172ba4d3abe..ea52b6e66ed0dc017718ac0c47a9575ed587827b 100644 GIT binary patch delta 2656 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\n" "Language-Team: Finnish \n" "Language: fi\n" @@ -62,8 +62,8 @@ msgstr "rekisterin palautus epäonnistui" #: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 #: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 #: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:767 src/sudo_edit.c:851 src/sudo_edit.c:971 -#: src/sudo_edit.c:991 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 +#: src/sudo_edit.c:994 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -93,8 +93,8 @@ msgstr "%s: %s" #: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 #: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 #: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:767 src/sudo_edit.c:851 -#: src/sudo_edit.c:971 src/sudo_edit.c:991 +#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:974 src/sudo_edit.c:994 msgid "unable to allocate memory" msgstr "muistin varaaminen epäonnistui" @@ -274,7 +274,7 @@ msgid "unable to receive message from parent" msgstr "viestin vastaanotto vanhemmalta epäonnistui" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:732 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:308 msgid "unable to fork" msgstr "fork-kutsu epäonnistui" @@ -409,28 +409,28 @@ msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argumentin valitsimelle -C on oltava vähintään 3" #: src/parse_args.c:532 -msgid "you may not specify both the `-i' and `-s' options" -msgstr "valitsimia ”-i” ja ”-s” ei voi käyttää yhdessä" +msgid "you may not specify both the -i and -s options" +msgstr "valitsimia -i ja -s ei voi käyttää yhdessä" #: src/parse_args.c:536 -msgid "you may not specify both the `-i' and `-E' options" -msgstr "valitsimia ”-i” ja ”-E” ei voi käyttää yhdessä" +msgid "you may not specify both the -i and -E options" +msgstr "valitsimia -i ja -E ei voi käyttää yhdessä" #: src/parse_args.c:546 -msgid "the `-E' option is not valid in edit mode" -msgstr "valitsin ”-E” ei kelpaa muokkaustilassa" +msgid "the -E option is not valid in edit mode" +msgstr "valitsin -E ei kelpaa muokkaustilassa" #: src/parse_args.c:548 msgid "you may not specify environment variables in edit mode" msgstr "ympäristömuuttujia ei voi määritellä muokkaustilassa" #: src/parse_args.c:557 -msgid "the `-U' option may only be used with the `-l' option" -msgstr "valitsinta ”-U” voi käyttää vain valitsimen ”-l” kanssa" +msgid "the -U option may only be used with the -l option" +msgstr "valitsinta -U voi käyttää vain valitsimen -l kanssa" #: src/parse_args.c:561 -msgid "the `-A' and `-S' options may not be used together" -msgstr "valitsimia ”-A” ja ”-S” ei voi käyttää yhdessä" +msgid "the -A and -S options may not be used together" +msgstr "valitsimia -A ja -S ei voi käyttää yhdessä" #: src/parse_args.c:654 msgid "sudoedit is not supported on this platform" @@ -726,27 +726,27 @@ msgstr "kutsuva tehtävä on final-tyyppinen" msgid "could not join project \"%s\"" msgstr "”%s”-hankkeeseen liittyminen epäonnistui" -#: src/solaris.c:87 +#: src/solaris.c:89 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "”%s”-hankkeelle ei ole oletusyhteydet hyväksyvää resurssivarantoa" -#: src/solaris.c:91 +#: src/solaris.c:93 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "määriteltyä resurssivarantoa ei ole olemassa ”%s”-hankkeelle" -#: src/solaris.c:95 +#: src/solaris.c:97 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "”%s”-hanketta ei voitu sitoa oletusresurssivarantoon" -#: src/solaris.c:101 +#: src/solaris.c:104 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject-kutsu ”%s”-hankkeelle epäonnistui" -#: src/solaris.c:103 +#: src/solaris.c:106 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "varoitus, ”%s”-hankkeen resurssivalvontaosoitus epäonnistui" @@ -825,7 +825,7 @@ msgstr "käytäntölisäosan alustaminen epäonnistui" #: src/sudo.c:1158 #, c-format -msgid "policy plugin %s is missing the `check_policy' method" +msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "käytäntölisäosalta %s puuttuu ”check_policy”-metodi" #: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 @@ -903,51 +903,51 @@ msgstr "%s: tiedostojen muokkaus kirjoitettavassa hakemistossa ei ole sallittua" msgid "%s left unmodified" msgstr "%s jätetty muuttamattomaksi" -#: src/sudo_edit.c:680 src/sudo_edit.c:868 +#: src/sudo_edit.c:680 src/sudo_edit.c:871 #, c-format msgid "%s unchanged" msgstr "%s muuttamaton" -#: src/sudo_edit.c:703 src/sudo_edit.c:904 +#: src/sudo_edit.c:706 src/sudo_edit.c:907 #, c-format msgid "contents of edit session left in %s" msgstr "muokkausistunnon sisältö jätetty kohteeseen %s" -#: src/sudo_edit.c:811 +#: src/sudo_edit.c:814 msgid "sesh: internal error: odd number of paths" msgstr "sesh: sisäinen virhe: polkujen pariton määrä" -#: src/sudo_edit.c:813 +#: src/sudo_edit.c:816 msgid "sesh: unable to create temporary files" msgstr "sesh: väliaikaistiedostojen luominen epäonnistui" -#: src/sudo_edit.c:815 src/sudo_edit.c:897 +#: src/sudo_edit.c:818 src/sudo_edit.c:900 msgid "sesh: killed by a signal" msgstr "sesh: signaali tappoi" -#: src/sudo_edit.c:817 src/sudo_edit.c:900 +#: src/sudo_edit.c:820 src/sudo_edit.c:903 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: tuntematon virhe %d" -#: src/sudo_edit.c:891 +#: src/sudo_edit.c:894 msgid "unable to copy temporary files back to their original location" msgstr "väliaikaistiedostojen kopioiminen takaisin niiden alkuperäiseen sijaintiin epäonnistui" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:897 msgid "unable to copy some of the temporary files back to their original location" msgstr "joidenkin väliaikaistiedostojen kopioiminen takaisin niiden alkuperäiseen sijaintiin epäonnistui" -#: src/sudo_edit.c:938 +#: src/sudo_edit.c:941 #, c-format msgid "unable to change uid to root (%u)" msgstr "käyttäjä-ID:n vaihtaminen rootiksi (%u) epäonnistui" -#: src/sudo_edit.c:955 +#: src/sudo_edit.c:958 msgid "plugin error: missing file list for sudoedit" msgstr "lisäosavirhe: puuttuu sudoedit-tiedostoluettelo" -#: src/sudo_edit.c:1006 src/sudo_edit.c:1019 +#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 msgid "unable to read the clock" msgstr "kellon lukeminen epäonnistui" diff --git a/po/fr.mo b/po/fr.mo index fd6faa468f575192c3e07a74445d5a8068c91bc6..3ebfc1ed499592d2f98ec1a120e3fa51c14f7dfa 100644 GIT binary patch delta 2660 zcmXxke@su~}w$I0Z|v38&#M9D^4l{)uU{W3tUgV;-j940P~u9E;sJ9(N&K z>?Bs>71X%-IcCY&l4D^@_bg_0{PknP80DKI+)L_1z3&B zU>7Q5dr|$5qcZXhCg62cM*c-&GAB$gtu%y6?IO&_b(oHCp(Z$u4*rfBIQBkopm9i2 ztP1(sGn~}V#SA=x3jAx##G9!8DNLe3!$n*uC3BHywiuO(%{T#fNA90P)%*`shN5|> z6lbDJFcS;$IaCSuqXNH-3SbBgtvnwY!scN-^V?eQ!nR-~4|bte^et+0-i(;b=nv3d zh>oJS@Z66m(%~@2(t4Mh)hh8JF z8cXp>)cu_}1CL=m-o|K*VcElQ1UBFpRA$zoO8YKqo^z-YT*LXyZ-ZPU;5=sWVMTe0X>;l%{(EGj8)uICJ!RdGk)&DN){qaN>R)h_l-o))# zjYZ^H_q$O8^rJf7K(cMAEZTZ85znAXcnKXGImK)PmZ9zs;As2{8!@($ z{ALTS_Px)`LmdT{Wu4|L~XVd22nmtg%&Z_gaX zRN7ZjnHr3=OBk$%cDR}gHoWzrBK`~$Fn+d|0SE5|gj#VgvS|APwSs7tqvz$wVyz8x z@dG4@b`kYnVwG2t={T15GGu{a+Yoth5Vc9pqc+nmd=zttYCd*h8lFW5e?kQw^^n&t zMNM3Xs&RLu?V?tG9QEtEjt}D&0MobxbXri(#x2E!`OkDn2RYGLanqB^YB$v z?N6ctyMfv0r{HRrU;!>by|*5$K9IU}~Y{vrJfm+E4RE;m9HsvtV zp}?l10$GA8%@))IpP)9|Z&--V0xz)nsCGN*{XG~~jlSbTyFQt`D5X`X2)nQd`%x>q zf&uiAE(JUhHBcRD#XC>|yoZ|T5^D2B)p|7_iyEgK8Oj#bl79tokQf z=VvQW1MNjNww=c$jH~l>uz_|E73fyfdnY2^L8@ZY7JAQLLLco?jy8_7=B|&;@R|F1 zY@ctPTN1a}ciP<^m*Z=9kHigdzu8~z+wJc0XZl`oKlbNw=bFDxHL;C4@gbsnpZ7V3 z-P-tBi9K9VT06z@A;)TWe|!!-KacOt|CF{q+Ni}G$2i{L2y!HIY~#@9%)q9E=vaSt zQ%iHxil^G!R<<^EXAktHbq^gLnBgp2^|TYHbJMfNM+HLe9PyaDIx9OWuyUX;>xG!% zfmZLGkh`QXJ!yGcXN%L>((L?yyMx=ChLo;pa(^tG8&e)A4LZdYlZ(p+f`Ox>qM4w% zQ{&&A9n|=hp@7Ek2u;xV?}WPi(F~+lLhg$Ti$<<&?r_@LJ6qdUb!Y}X=-|Q2{{e&U BVbTBq delta 2736 zcmZwId2Ccw6vy#1&>$)8bYU&D<+Y_9yG(5vmaP(f|tA0}W`{xI?Tn>QN%kj%W#yZ60&@44sP zDJQyoufFH|puK;1teGWbndM_Sj>i^!7!Tq|yb<#rrqdphZI*_mI1J~ZgDY?pZpS=4 zhzzmMaW3|v<_+bT4aH}3ENmmV*+mB*dz;H}JdZ>0ddxeh_Z}GIE##n|b_FWnMW_XL zVky3ltYtS*3-!x2OT`hGf`!P(rsamch#P3>#V~3|dr^TLMJ?QeeC#@xhp<1ZIT*r1 zti=GnfXdim)cA9#j9kNH{1cUtfxJv?RuJY!JADL|+LfqMY{LvZf?D7rI@pJrc-Vv9 zM8!yQY!ULYja)SD0A}JzRN&v@Xw>8y@1Oz=mvN(%)FAIzBPtUwV*wtD^Q0FV02&SE_6HO1ceHq;?Ij><$Imf&FOrhqGP9yVbX>sy2yrRFQtz&@l*HjYt) zu?`i$T2%i#Sb-NY2?w#=fj9~W;22zrg{aJIN0s(d)H+vDCHMmuu)g`3JsFpyA6H`+ zZb1#m3wejG8Wq4MjAj6}qq9gXb{ps8&~aYrR-gjy!0C7yH9ncB^!`K)E5c?jo%j~c z#d7kj{@thv&Y%YNo9NXzA61ISP!n~aYI-VWZ_Ly(FOaDi0{2jdEoY&3hL)iM+Zk(jq29lWVbv&weCX6KM4g2&D#Bw}jJ>D{ zhLffsPDTaXjGCw&wc`t@0B&Ou`WJhLZ3?R9wWxX4Ayb;WnEWe%TXaxXb0|1JQENv2 z_}L-UL|-EZ+~R7y|HrFiF2kktx1s{=L8h|1F{^65za#rl&woT8YVKF~_L#dlA=4Lj z-$>Z!Gq*Icj%!C^j_-u~VPeF$&TaHh^sRRf_(%IryPx?3zHav?e@)sshHmA1|G%R& z*1C(6W~LBp^f!MBKjHhF`)*Q>Z;N{|X;1!s+WM!1S`xi8dlN%^hw^QY^;u+F^1uXt zeM56&!>T9Ot!-^-XbVL4rMJZ;)(0yB&QohvI`zStfSZ<;7gryw3b+-~nFx|xba!^2bQ(80(N>LG?v2V&e6(2=Z4Ryqdd(%#=8UQWui2_*WKGp3zc*Ej+W$@E WjV-P%c1PAG{ND>3qO%p(?*0e#{E(&q diff --git a/po/fr.po b/po/fr.po index e72ea867f2..5316cfe935 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.1b1\n" +"Project-Id-Version: sudo 1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-05 10:24-0600\n" -"PO-Revision-Date: 2020-06-08 06:03+0200\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-07-23 08:05+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -61,8 +61,8 @@ msgstr "impossible de rétablir le registre" #: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 #: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 #: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:767 src/sudo_edit.c:851 src/sudo_edit.c:971 -#: src/sudo_edit.c:991 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 +#: src/sudo_edit.c:994 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -92,8 +92,8 @@ msgstr "%s: %s" #: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 #: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 #: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:767 src/sudo_edit.c:851 -#: src/sudo_edit.c:971 src/sudo_edit.c:991 +#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:974 src/sudo_edit.c:994 msgid "unable to allocate memory" msgstr "impossible d'allouer la mémoire" @@ -270,7 +270,7 @@ msgid "unable to receive message from parent" msgstr "impossible de recevoir un message du parent" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:732 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:308 msgid "unable to fork" msgstr "erreur de fork" @@ -403,28 +403,28 @@ 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:532 -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" +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:536 -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" +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:546 -msgid "the `-E' option is not valid in edit mode" -msgstr "l'option « -E » n'est pas valable en mode édition" +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:548 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:557 -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 »" +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:561 -msgid "the `-A' and `-S' options may not be used together" -msgstr "les options « -A » et « -S » ne peuvent pas être utilisées ensemble" +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:654 msgid "sudoedit is not supported on this platform" @@ -719,27 +719,27 @@ msgstr "la tâche appelante est « final »" msgid "could not join project \"%s\"" msgstr "impossible de joindre le projet « %s »" -#: src/solaris.c:87 +#: src/solaris.c:89 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "aucun pool de ressources acceptant les liaisons par défaut existe pour le projet « %s »" -#: src/solaris.c:91 +#: src/solaris.c:93 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "le pool de ressources spécifié n'existe pas pour le projet « %s »" -#: src/solaris.c:95 +#: src/solaris.c:97 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "impossible de se lier au pool de ressources par défaut du projet « %s »" -#: src/solaris.c:101 +#: src/solaris.c:104 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject a échoué pour le projet « %s »" -#: src/solaris.c:103 +#: src/solaris.c:106 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "attention, l'assignement du contrôle de ressources a échoue pour le projet « %s »" @@ -816,7 +816,7 @@ msgstr "impossible d'initialiser le greffon de règles" #: src/sudo.c:1158 #, c-format -msgid "policy plugin %s is missing the `check_policy' method" +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:1173 src/sudo.c:1226 src/sudo.c:1270 @@ -893,51 +893,51 @@ msgstr "%s: l'édition de fichiers dans un répertoire accessible en écriture n msgid "%s left unmodified" msgstr "%s laissé tel quel" -#: src/sudo_edit.c:680 src/sudo_edit.c:868 +#: src/sudo_edit.c:680 src/sudo_edit.c:871 #, c-format msgid "%s unchanged" msgstr "%s non modifié" -#: src/sudo_edit.c:703 src/sudo_edit.c:904 +#: src/sudo_edit.c:706 src/sudo_edit.c:907 #, c-format msgid "contents of edit session left in %s" msgstr "contenu de la session d'édition laissé dans %s" -#: src/sudo_edit.c:811 +#: src/sudo_edit.c:814 msgid "sesh: internal error: odd number of paths" msgstr "sesh: erreur interne: nombre impaire de chemins" -#: src/sudo_edit.c:813 +#: src/sudo_edit.c:816 msgid "sesh: unable to create temporary files" msgstr "sesh: impossible de créer des fichiers temporaires" -#: src/sudo_edit.c:815 src/sudo_edit.c:897 +#: src/sudo_edit.c:818 src/sudo_edit.c:900 msgid "sesh: killed by a signal" msgstr "sesh: tué par un signal" -#: src/sudo_edit.c:817 src/sudo_edit.c:900 +#: src/sudo_edit.c:820 src/sudo_edit.c:903 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: erreur %d inconnue" -#: src/sudo_edit.c:891 +#: src/sudo_edit.c:894 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:894 +#: src/sudo_edit.c:897 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:938 +#: src/sudo_edit.c:941 #, c-format msgid "unable to change uid to root (%u)" msgstr "impossible de changer le uid en root (%u)" -#: src/sudo_edit.c:955 +#: src/sudo_edit.c:958 msgid "plugin error: missing file list for sudoedit" msgstr "erreur de greffon : liste de fichiers manquantes pour sudoedit" -#: src/sudo_edit.c:1006 src/sudo_edit.c:1019 +#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 msgid "unable to read the clock" msgstr "impossible de lire l'horloge" diff --git a/po/hr.mo b/po/hr.mo index 2a1ffa3cf4944a5336c16fc25a2398a26f00fe22..baa83af0a7fe230f0fa8d669ea8dee4ef7c777f7 100644 GIT binary patch delta 2911 zcmb`{du&r>7{~FqAY|Y!FfNYE;A~@z!aBDxwlSE(<~G>4j9XNQA#+q#*w)c@j7_qF zATit|9tcQ41A>~cL`hLpP>4trLsUdUOcWtRAt49}apE5kzrUSh;y?ap)An=T_q>wD1;c z;rMaRLSvAmm`dbrR`8{HHjcuhsKCF&(b$ceKa@=rXf%flrDP^@&n!V@Vk3^ny>9~C6~3-dBg<;E`5iM~fY zoZYUOtX@caA?p4XjPx?*J?uw&40XxH9Mrs}sM2jmrTQIYDRUl6@qW*J>R-q#4V;UL ztN|^24F_QiwcwYiT6W`;n9MO%y7?G~%ds!EU=6k*dzdq*%-uuHPsn!;;Kd5|H?z4I zh&B$u!?*)KMAfirqVsUQfJ)_dw|xwKw10B#Utr7(+QrCJvmQ(EnCl%>0OP5bGEs?9 zvS&hEY{fTGCCDbvl+6UN2zR0$mh*1^4P;M~%uQ`ni3+qG^-SzR)%t|n{uxyQQ|y?D z+PAux`V*9Cqk}a~7wRFrj?*xHvNK^el06eb)&3CjLoi<Wp%s1rFdS{05c!+pZ}*X=Sv_QMKNL!|@nu;crm^ zKRV5+eF@TKHlPl028ZBn)VSW$oeboo4iKHgg#zeAo$v@I;Z;=1@1jbQP83wd)S$+1 zL}lhEDzF=cXjb*6r^#$2m|TDl_v@0fmsNoBeahzaqIt zhaRqhbDf8!8kK?7s8sL496XIf@ebSBZg4${B-8wY7JBDVE>!x1 ze7-PtNBk&{v0snh?P;^~5|(&Q+1nB_JT3Oogc$w)#3IjLdw=3+&kp<3#4LJ#OuX;bHt(TsUTs|N1*~dp&)X#J) zAHB}R)(?n_PfV|G@YkS4}{gD!D(ZWh!aqMAESz=nN6}DPJb*lr7fu=eu zGi){cmj%O-x)pw_$sY+WtBWluP3cn@Y^e{>MZf{VWsnta3antV-&z?A1;UX)Bw%$g zYgu#9^bD@EIM0c)g0a3uJ!Acme-91UH3hBK4$IeQ^^9(frI%;+sqLSaKe1p^VNvnq q-2de&Ry89bZaCouSBLyf{^p>wTTl8pNQFJEcJP1S4%=O|jei5L^sU$c delta 2851 zcmZwHTWnNC9LMolF1AQ-V1btFDWzRXyQMdvmLe3W6pBzSXbg%i?E+icF0w@e7#3^- z#ZVzR5(J6_)C5A&%3>rcXt^cuAnKDsfk-4YF=`|d)EE8!_8d$f-0bdWX3m_M|NQ@F z_v%s4J4ZcTyZVOE*yyf~Aj;5bH-k4O($KhCs7Ouci*ov8W z7`eq<#s%1mTDLIWm|?gs-GogFjWz~&nF7EZ$V-SKOvn*WK) z&`>Ta#aXBlEW{jq166{LP=Wu53Lu`2PF{#CVU}Vd`Ono6T2&U} zR9uO=eh6RaXG}K^qMu4#@-Q89aS5t)t*BIYAWNEVoPobYuT%eQ?$X4$sK{PM3wPiX zcnr1R7pPkPj59HYW2$uXFcx3J$Iy?J*of?5&Y&{ai@Lubr_lk%VmbSp*))b=8z$ia z+=C}jH7qT39&Rl~S(#Z( z{Rzr6GQgVV2;SB2jQdFjz!ZftN9vq8jQK|27jp0d~O}_wD>-9Ji-$N~Y4i)gV z|E6Xqrec@dzv}jX$I*-re%i_CMAZChp5@VO{h-2z^z;O z^nG>G3EIyl&KdF?Ed_Os&!>Dg*dHXOdtSG%B<{{SKwmFCA9>Lh*+pehKhs_An2Bsl zij7OCsax%@Tl31=U}Km!XbQU+Eu`>jw@pkcig@>`o~8~pXn zL2FHLT_DsFXbD(%w!Z5tyR)^!a+=j@2G`aF8vG_oZFELC!}e#hiwZS;spd2VFP&py zf1jm7wM{`Q6rJDr-!j3bNb;PFfsvgR@v-Bbg`+b9nh~&kEU3jFMP_$ZCI8PfZ5!%4 I?N(Lezw, 2016, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudo-1.9.1b1\n" +"Project-Id-Version: sudo-1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-05 10:24-0600\n" -"PO-Revision-Date: 2020-06-08 20:25-0700\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-08-07 10:27+0200\n" "Last-Translator: Božidar Putanec \n" "Language-Team: Croatian \n" "Language: hr\n" @@ -16,13 +16,16 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4\n" "X-Poedit-Basepath: sources/sudo-1.8.26b1\n" +"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" -msgstr "nije moguće otvoriti userdb (korisničku baza podataka)" +msgstr "" +"nije moguće otvoriti userdb (korisničku baza podataka)\n" +"1234567890123456789012345678901234567890123456789012345678901234567890123456789" #: lib/util/aix.c:224 #, c-format @@ -62,8 +65,8 @@ msgstr "nije moguće obnoviti registar" #: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 #: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 #: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:767 src/sudo_edit.c:851 src/sudo_edit.c:971 -#: src/sudo_edit.c:991 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 +#: src/sudo_edit.c:994 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -93,8 +96,8 @@ msgstr "%s: %s" #: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 #: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 #: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:767 src/sudo_edit.c:851 -#: src/sudo_edit.c:971 src/sudo_edit.c:991 +#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:974 src/sudo_edit.c:994 msgid "unable to allocate memory" msgstr "nije moguće dodijeliti memoriju" @@ -272,7 +275,7 @@ msgid "unable to receive message from parent" msgstr "nije moguće primiti poruku od pretka (roditelja)" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:732 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:308 msgid "unable to fork" msgstr "nije moguće kreirati potomka (dijete)" @@ -406,28 +409,28 @@ msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argument za -C mora biti broj veći ili jednak 3" #: src/parse_args.c:532 -msgid "you may not specify both the `-i' and `-s' options" -msgstr "ne smijete navesti opcije „-i“ i „-s“ zajedno" +msgid "you may not specify both the -i and -s options" +msgstr "ne smijete navesti istovremeno opcije -i i -s" #: src/parse_args.c:536 -msgid "you may not specify both the `-i' and `-E' options" -msgstr "ne smijete navesti opcije „-i“ i -„E“ zajedno" +msgid "you may not specify both the -i and -E options" +msgstr "ne smijete navesti istovremeno opcije -i i -E" #: src/parse_args.c:546 -msgid "the `-E' option is not valid in edit mode" -msgstr "opcija „-E“ nije valjana kad se redigira (in edit mode)" +msgid "the -E option is not valid in edit mode" +msgstr "opcija -E nije valjana kad se redigira (in edit mode)" #: src/parse_args.c:548 msgid "you may not specify environment variables in edit mode" msgstr "ne smijete specificirati varijable okoline kad se redigira (in edit mode)" #: src/parse_args.c:557 -msgid "the `-U' option may only be used with the `-l' option" -msgstr "opciju „-U“ može se koristiti samo s „-l“ opcijom" +msgid "the -U option may only be used with the -l option" +msgstr "opciju -U smijete koristiti samo uz -l opciju" #: src/parse_args.c:561 -msgid "the `-A' and `-S' options may not be used together" -msgstr "ne smiju se zajedno koristiti „-A“ i „-S“ opcije" +msgid "the -A and -S options may not be used together" +msgstr "opcije -A i -S ne smiju se koristiti zajedno" #: src/parse_args.c:654 msgid "sudoedit is not supported on this platform" @@ -722,27 +725,27 @@ msgstr "pozvani zadatak je zadnji -- svršetak" msgid "could not join project \"%s\"" msgstr "nije bilo moguće pridružiti se projektu „%s“" -#: src/solaris.c:87 +#: src/solaris.c:89 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "ne postoji skup resursa koji prihvaća zadane poveznice za projekt „%s“" -#: src/solaris.c:91 +#: src/solaris.c:93 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "ne postoji navedeni skup resursa za projekt „%s“" -#: src/solaris.c:95 +#: src/solaris.c:97 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "nije bilo moguće povezati se na zadani skup resursa za projekt „%s“" -#: src/solaris.c:101 +#: src/solaris.c:104 #, c-format msgid "setproject failed for project \"%s\"" msgstr "neuspješna setproject() za projekt „%s“" -#: src/solaris.c:103 +#: src/solaris.c:106 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "upozorenje: nije uspjelo dodijeliti upravljanje resursima projekta „%s“" @@ -819,8 +822,8 @@ msgstr "nije moguće inicijalizirati plugin s pravilima" #: src/sudo.c:1158 #, c-format -msgid "policy plugin %s is missing the `check_policy' method" -msgstr "plugin s pravilima %s nema metodu „check_policy“" +msgid "policy plugin %s is missing the \"check_policy\" method" +msgstr "pluginu s pravilima %s nedostaje metoda „check_policy“" #: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 msgid "command rejected by policy" @@ -898,51 +901,51 @@ msgstr "%s: datoteke nije dopušteno redigirati u direktoriju koji dopušta pisa msgid "%s left unmodified" msgstr "%s nije izmijenjeno" -#: src/sudo_edit.c:680 src/sudo_edit.c:868 +#: src/sudo_edit.c:680 src/sudo_edit.c:871 #, c-format msgid "%s unchanged" msgstr "%s nije promijenjeno" -#: src/sudo_edit.c:703 src/sudo_edit.c:904 +#: src/sudo_edit.c:706 src/sudo_edit.c:907 #, c-format msgid "contents of edit session left in %s" msgstr "sadržaj sesije redigiranja je ostavljen u %s" -#: src/sudo_edit.c:811 +#: src/sudo_edit.c:814 msgid "sesh: internal error: odd number of paths" msgstr "sesh: interna greška: neparni broj staza" -#: src/sudo_edit.c:813 +#: src/sudo_edit.c:816 msgid "sesh: unable to create temporary files" msgstr "sesh: nije moguće čitati privremenu datoteku" -#: src/sudo_edit.c:815 src/sudo_edit.c:897 +#: src/sudo_edit.c:818 src/sudo_edit.c:900 msgid "sesh: killed by a signal" msgstr "sesh: ubijen signalom" -#: src/sudo_edit.c:817 src/sudo_edit.c:900 +#: src/sudo_edit.c:820 src/sudo_edit.c:903 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: nepoznata greška: %d" -#: src/sudo_edit.c:891 +#: src/sudo_edit.c:894 msgid "unable to copy temporary files back to their original location" msgstr "nije moguće kopirati privremene datoteke u njihovu originalnu lokaciju" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:897 msgid "unable to copy some of the temporary files back to their original location" msgstr "nije moguće kopirati neke od privremenih datoteka u njihovu originalnu lokaciju" -#: src/sudo_edit.c:938 +#: src/sudo_edit.c:941 #, c-format msgid "unable to change uid to root (%u)" msgstr "nije moguće promijeniti UID na root (%u)" -#: src/sudo_edit.c:955 +#: src/sudo_edit.c:958 msgid "plugin error: missing file list for sudoedit" msgstr "greška plugina: nedostaje popis datoteka za sudoedit" -#: src/sudo_edit.c:1006 src/sudo_edit.c:1019 +#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 msgid "unable to read the clock" msgstr "nije moguće očitati vrijeme (clock)" diff --git a/po/it.mo b/po/it.mo index 296234d5f6caabcf1595bf1ee8bc637a9479886e..a79aad1c8f1aee01cd9ecaf80ec1f1bcc6c56e64 100644 GIT binary patch delta 2664 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 i<#Y2l{WAiQlENS2B1Odq\n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4.1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -52,17 +52,17 @@ msgstr "无法恢复注册表" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s:%s" @@ -85,23 +85,23 @@ msgstr "%s:%s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "无法分配内存" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" -msgstr "打不开 %s" +msgstr "无法打开 %s" #: lib/util/mkdir_parents.c:84 #, c-format @@ -175,12 +175,22 @@ msgstr "%s 可被任何人写" msgid "%s is group writable" msgstr "%s 可被用户组写" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s:截断 %s 至零字节? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "不覆盖 %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "无法读取 %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "无法写入 %s" @@ -261,7 +271,7 @@ msgid "unable to set controlling tty" msgstr "无法设置控制终端" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "无法创建管道" @@ -270,7 +280,7 @@ msgid "unable to receive message from parent" msgstr "无法从父(进程)接收消息" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "无法执行 fork" @@ -278,7 +288,7 @@ msgstr "无法执行 fork" msgid "unable to restore tty label" msgstr "无法恢复终端标签" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "无法执行 %s" @@ -329,7 +339,7 @@ msgstr "无法向监视进程发送消息" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "在加载插件“%3$s”时在 %1$s 第 %2$d 行出错" @@ -374,67 +384,67 @@ msgstr "%3$s 中发现不兼容的插件主版本号 %1$d(应为 %2$d)" msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "忽略位于 %2$s 第 %3$d 行的策略插件“%1$s”" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "只能指定一个策略插件" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "未知的插件类型 %d,在 %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "策略插件 %s 不包含 check_policy 方法" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "内部错误,%s 溢出" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "无效的环境变量名:%s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C 选项的参数必须是一个大于等于 3 的数字" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "您不能同时指定 -i 和 -s 选项" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "您不能同时指定 -i 和 -E 选项" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "-E 选项在编辑模式中无效" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "在编辑模式中您不能指定环境变量" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "-U 选项只能与 -l 选项一起使用" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "-A 和 -S 选项不可同时使用" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "此平台不支持 sudoedit" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "只能指定 -e、-h、-i、-K、-l、-s、-v 或 -V 选项中的一个" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -443,7 +453,7 @@ msgstr "" "%s - 以其他用户身份编辑文件\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -452,8 +462,7 @@ msgstr "" "%s - 以其他用户身份执行一条命令\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -461,123 +470,131 @@ msgstr "" "\n" "选项:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "使用助手程序进行密码提示" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "使用指定的 BSD 认证类型" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "在后台运行命令" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "提示时响铃" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "关闭所有 >= num 的文件描述符" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "以指定的 BSD 登录类别运行命令" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "运行命令前改变工作目录" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "在执行命令时保留用户环境" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "保留特定的环境变量" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "编辑文件而非执行命令" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "以指定的用户组或 ID 执行命令" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "将 HOME 变量设为目标用户的主目录" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "显示帮助消息并退出" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "在主机上运行命令(如果插件支持)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "以目标用户身份运行一个登录 shell;可同时指定一条命令" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "完全移除时间戳文件" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "无效的时间戳文件" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "列出用户权限或检查某个特定命令;对于长格式,使用两次" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "非交互模式,不提示" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "保留组向量,而非设置为目标的组向量" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "使用指定的密码提示" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "运行命令前改变根目录" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "以指定的角色创建 SELinux 安全环境" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "从标准输入读取密码" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "以目标用户运行 shell;可同时指定一条命令" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "以指定的类型创建 SELinux 安全环境" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "在达到指定时间限制后终止命令" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "在列表模式中显示用户的权限" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "以指定用户或 ID 运行命令(或编辑文件)" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "显示版本信息并退出" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "更新用户的时间戳而不执行命令" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "停止处理命令行参数" @@ -682,16 +699,16 @@ msgstr "无法向 %s 设置 exec 环境" msgid "unable to set key creation context to %s" msgstr "无法向 %s 设置键创建环境" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "要求至少有一个参数" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "无效的文件描述符数字:%s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "无法以登录 shell 执行 %s" @@ -744,124 +761,124 @@ msgstr "对项目“%s”执行 setproject 失败" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "警告,对项目“%s”的资源控制分配失败" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo 版本 %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "当前选项:%s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "致命错误,无法加载插件" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "插件未返回能执行的命令" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "异常的 sudo 模式 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "%s 数据库中没有您" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "无法确定终端" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s 必须属于用户 ID %d(的用户)并且设置 setuid 位" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "有效用户 ID 不是 %d,%s 位于一个设置了“nosuid”选项的文件系统或没有 root 权限的 NFS 文件系统中吗?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "有效用户 ID 不是 %d,sudo 属于 root 并设置了 setuid 位吗?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "无法设置补充组 ID" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "无法设置有效组 ID 来以组 ID %u 运行" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "无法设置组 ID 来以组 ID %u 运行" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "异常的子进程终止条件:%d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "无法初始化策略插件" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "check_policy 方法中缺少策略插件 %s" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "命令被策略拒绝" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "策略插件错误" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "策略插件 %s 不支持列出权限" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "策略插件 %s不支持 -v 选项" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "策略插件 %s 不支持 -k/-K 选项" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "初始化 I/O 插件 %s 出错" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "初始化审计插件 %s 出错" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "初始化批准插件 %s 出错" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "命令被批准者拒绝" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "批准插件出错" @@ -898,7 +915,7 @@ msgstr "%s 并未修改" msgid "%s unchanged" msgstr "%s 已更改" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "编辑会话的内容留在了 %s 中" @@ -911,33 +928,33 @@ msgstr "sesh:内部错误:路径数量异常" msgid "sesh: unable to create temporary files" msgstr "sesh:无法创建临时文件" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh:被信号杀死" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh:未知错误 %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "无法将临时文件复制回其原位置" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "无法将某些临时文件复制回其原位置" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "无法将用户 ID 切换到 root(%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "插件错误:缺少 sudoedit 的文件列表" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "无法读取时钟" @@ -953,25 +970,25 @@ msgstr "未提供密码" msgid "unable to read password" msgstr "无法读取密码" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "读取密码需要一个终端;请使用 -S 选项以从标准输入进行读取,或者配置一个 askpass 助手程序" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "没有指定 askpass 程序,尝试设置 SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "无法将组 ID 设为 %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "无法将用户 ID 设为 %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "无法执行 %s" From 4f1fff953b6eea69446e7ec42839d846401399a5 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 17 Sep 2020 20:05:30 -0600 Subject: [PATCH 108/113] Guard use of ttyslot() with HAVE_TTYSLOT, fix guard for utmp_setid(). This should make it easier to compile sudo on Android which doesn't provide a way to write to the utmp file. Bug #940. --- src/utmp.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/utmp.c b/src/utmp.c index 5c3ddbec6b..b9f87c6013 100644 --- a/src/utmp.c +++ b/src/utmp.c @@ -92,7 +92,7 @@ typedef struct utmp sudo_utmp_t; # define __e_exit e_exit #endif -#if defined(HAVE_GETUTSID) || defined(HAVE_GETUTXID) || defined(HAVE_GETUTID) +#if defined(HAVE_STRUCT_UTMP_UT_ID) /* * Create ut_id from the new ut_line and the old ut_id. */ @@ -124,7 +124,7 @@ utmp_setid(sudo_utmp_t *old, sudo_utmp_t *new) debug_return; } -#endif /* HAVE_GETUTSID || HAVE_GETUTXID || HAVE_GETUTID */ +#endif /* HAVE_STRUCT_UTMP_UT_ID */ /* * Store time in utmp structure. @@ -272,7 +272,7 @@ utmp_slot(const char *line, int ttyfd) endttyent(); debug_return_int(tty ? slot : 0); } -# else +# elif defined(HAVE_TTYSLOT) static int utmp_slot(const char *line, int ttyfd) { @@ -294,6 +294,12 @@ utmp_slot(const char *line, int ttyfd) debug_return_int(slot); } +# else /* !HAVE_TTYSLOT */ +static int +utmp_slot(const char *line, int ttyfd) +{ + retun -1; +} # endif /* HAVE_GETTTYENT */ bool From 90bcae7986c727c1887f99f4103f9ff3cc9259ca Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 17 Sep 2020 20:17:38 -0600 Subject: [PATCH 109/113] Only use faccessat(3) if AT_EACCESS is defined. Apparently Android (bionic) has faccessat() but not AT_EACCESS. Bug #940. --- src/sudo_edit.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sudo_edit.c b/src/sudo_edit.c index 78c407f43e..82e04a71b9 100644 --- a/src/sudo_edit.c +++ b/src/sudo_edit.c @@ -85,7 +85,7 @@ switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups) debug_return; } -#ifdef HAVE_FACCESSAT +#if defined(HAVE_FACCESSAT) && defined(AT_EACCESS) /* * Returns true if the open directory fd is owned or writable by the user. */ @@ -193,7 +193,7 @@ dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) errno = EACCES; debug_return_int(false); } -#endif /* HAVE_FACCESSAT */ +#endif /* HAVE_FACCESSAT && AT_EACCESS */ /* * Find our temporary directory, one of /var/tmp, /usr/tmp, or /tmp From 44a1058aa3f1fbfb48d05acb4fe86178861f61e9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 18 Sep 2020 06:09:57 -0600 Subject: [PATCH 110/113] Fix typo in last commit. --- src/utmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utmp.c b/src/utmp.c index b9f87c6013..544a37519b 100644 --- a/src/utmp.c +++ b/src/utmp.c @@ -298,7 +298,7 @@ utmp_slot(const char *line, int ttyfd) static int utmp_slot(const char *line, int ttyfd) { - retun -1; + return -1; } # endif /* HAVE_GETTTYENT */ From 874c2b27c650172def2e3dcd5dffd100cad8a4fe Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Fri, 18 Sep 2020 08:18:07 -0600 Subject: [PATCH 111/113] Use a simple string compare on systems without crypt(3). This is only used on systems without PAM, BSD authentication or AIX authentication. Bug #940. --- config.h.in | 3 +++ configure | 18 +++++++++++------- configure.ac | 18 ++++++++++-------- plugins/sudoers/auth/passwd.c | 15 +++++++++++++++ 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/config.h.in b/config.h.in index 2946936901..18d97490cf 100644 --- a/config.h.in +++ b/config.h.in @@ -100,6 +100,9 @@ /* Define to 1 if you have the `closefrom' function. */ #undef HAVE_CLOSEFROM +/* Define to 1 if you have the `crypt' function. */ +#undef HAVE_CRYPT + /* Define to 1 if you use OSF DCE. */ #undef HAVE_DCE diff --git a/configure b/configure index d0b64a792f..8e60a15fa8 100755 --- a/configure +++ b/configure @@ -15941,8 +15941,7 @@ else fi - LIB_CRYPT=1 - SUDOERS_LIBS="${SUDOERS_LIBS} -lcrypt" + ac_cv_search_crypt="-lcrypt" shadow_funcs="getspnam" shadow_libs="-lsec" @@ -25476,9 +25475,8 @@ fi fi if test ${with_passwd-'no'} != "no"; then - if test -z "$LIB_CRYPT"; then - _LIBS="$LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 + _LIBS="$LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 $as_echo_n "checking for library containing crypt... " >&6; } if ${ac_cv_search_crypt+:} false; then : $as_echo_n "(cached) " >&6 @@ -25532,11 +25530,16 @@ ac_res=$ac_cv_search_crypt if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - test "${ac_cv_search_crypt}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_crypt}" + test "${ac_cv_search_crypt}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_crypt}" + $as_echo "#define HAVE_CRYPT 1" >>confdefs.h + fi - LIBS="$_LIBS" + LIBS="$_LIBS" + if test test "${ac_cv_search_crypt}" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No crypt function found, assuming plaintext passwords" >&5 +$as_echo "$as_me: WARNING: No crypt function found, assuming plaintext passwords" >&2;} fi if test "$CHECKSHADOW" = "true" -a -n "$shadow_funcs"; then @@ -30413,5 +30416,6 @@ fi + diff --git a/configure.ac b/configure.ac index 8732a96f20..69495381a2 100644 --- a/configure.ac +++ b/configure.ac @@ -2134,8 +2134,7 @@ case "$host" in ;; *-*-isc*) AX_APPEND_FLAG([-D_ISC], [CPPFLAGS]) - LIB_CRYPT=1 - SUDOERS_LIBS="${SUDOERS_LIBS} -lcrypt" + ac_cv_search_crypt="-lcrypt" shadow_funcs="getspnam" shadow_libs="-lsec" @@ -4009,12 +4008,14 @@ if test ${with_passwd-'no'} != "no"; then dnl dnl if crypt(3) not in libc, look elsewhere dnl - if test -z "$LIB_CRYPT"; then - _LIBS="$LIBS" - AC_SEARCH_LIBS([crypt], [crypt crypt_d ufc], [ - test "${ac_cv_search_crypt}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_crypt}" - ]) - LIBS="$_LIBS" + _LIBS="$LIBS" + AC_SEARCH_LIBS([crypt], [crypt crypt_d ufc], [ + test "${ac_cv_search_crypt}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_crypt}" + AC_DEFINE(HAVE_CRYPT) + ]) + LIBS="$_LIBS" + if test test "${ac_cv_search_crypt}" = "no"; then + AC_MSG_WARN([No crypt function found, assuming plaintext passwords]) fi if test "$CHECKSHADOW" = "true" -a -n "$shadow_funcs"; then @@ -4858,6 +4859,7 @@ AH_TEMPLATE(HAVE_AFS, [Define to 1 if you use AFS.]) AH_TEMPLATE(HAVE_AIXAUTH, [Define to 1 if you use AIX general authentication.]) AH_TEMPLATE(HAVE_BSD_AUTH_H, [Define to 1 if you use BSD authentication.]) AH_TEMPLATE(HAVE_BSM_AUDIT, [Define to 1 to enable BSM audit support.]) +AH_TEMPLATE(HAVE_CRYPT, [Define to 1 if you have the `crypt' function.]) AH_TEMPLATE(HAVE_DCE, [Define to 1 if you use OSF DCE.]) AH_TEMPLATE(HAVE_DD_FD, [Define to 1 if your `DIR' contains dd_fd.]) AH_TEMPLATE(HAVE_DIRFD, [Define to 1 if you have the `dirfd' function or macro.]) diff --git a/plugins/sudoers/auth/passwd.c b/plugins/sudoers/auth/passwd.c index 18e7f30b65..0e4d1b7f87 100644 --- a/plugins/sudoers/auth/passwd.c +++ b/plugins/sudoers/auth/passwd.c @@ -55,6 +55,7 @@ sudo_passwd_init(struct passwd *pw, sudo_auth *auth) debug_return_int(auth->data ? AUTH_SUCCESS : AUTH_FATAL); } +#ifdef HAVE_CRYPT int sudo_passwd_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { @@ -93,6 +94,20 @@ sudo_passwd_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_c debug_return_int(matched ? AUTH_SUCCESS : AUTH_FAILURE); } +#else +int +sudo_passwd_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) +{ + char *pw_passwd = auth->data; + int matched; + debug_decl(sudo_passwd_verify, SUDOERS_DEBUG_AUTH); + + /* Dummy version for systems without crypt(). */ + matched = !strcmp(pass, pw_passwd); + + debug_return_int(matched ? AUTH_SUCCESS : AUTH_FAILURE); +} +#endif int sudo_passwd_cleanup(struct passwd *pw, sudo_auth *auth, bool force) From e2c72300cff5a6822b024adf09a2adc81bce3f12 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sun, 20 Sep 2020 19:18:39 -0600 Subject: [PATCH 112/113] Move warning about plaintext password to the end of configure. It is unlikely to be noticed at the beginning of the output. --- configure | 8 ++++---- configure.ac | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/configure b/configure index 8e60a15fa8..9c07c43654 100755 --- a/configure +++ b/configure @@ -25537,10 +25537,6 @@ if test "$ac_res" != no; then : fi LIBS="$_LIBS" - if test test "${ac_cv_search_crypt}" = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No crypt function found, assuming plaintext passwords" >&5 -$as_echo "$as_me: WARNING: No crypt function found, assuming plaintext passwords" >&2;} - fi if test "$CHECKSHADOW" = "true" -a -n "$shadow_funcs"; then _LIBS="$LIBS" @@ -27921,6 +27917,10 @@ fi case "$with_passwd" in yes|maybe) AUTH_OBJS="$AUTH_OBJS getspwuid.lo passwd.lo" + if test test "${ac_cv_search_crypt}" = "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No crypt function found, assuming plaintext passwords" >&5 +$as_echo "$as_me: WARNING: No crypt function found, assuming plaintext passwords" >&2;} + fi ;; *) $as_echo "#define WITHOUT_PASSWD 1" >>confdefs.h diff --git a/configure.ac b/configure.ac index 69495381a2..a0d46308f8 100644 --- a/configure.ac +++ b/configure.ac @@ -4014,9 +4014,6 @@ if test ${with_passwd-'no'} != "no"; then AC_DEFINE(HAVE_CRYPT) ]) LIBS="$_LIBS" - if test test "${ac_cv_search_crypt}" = "no"; then - AC_MSG_WARN([No crypt function found, assuming plaintext passwords]) - fi if test "$CHECKSHADOW" = "true" -a -n "$shadow_funcs"; then _LIBS="$LIBS" @@ -4615,6 +4612,9 @@ dnl case "$with_passwd" in yes|maybe) AUTH_OBJS="$AUTH_OBJS getspwuid.lo passwd.lo" + if test test "${ac_cv_search_crypt}" = "no"; then + AC_MSG_WARN([No crypt function found, assuming plaintext passwords]) + fi ;; *) AC_DEFINE(WITHOUT_PASSWD) From d4428133b4830de1b83a12aec316d9f0267fbe55 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 19 Sep 2020 09:57:33 -0600 Subject: [PATCH 113/113] Updated translations from translationproject.org --- plugins/sudoers/po/de.mo | Bin 67494 -> 67494 bytes plugins/sudoers/po/de.po | 10 +- plugins/sudoers/po/eo.mo | Bin 62133 -> 62133 bytes plugins/sudoers/po/eo.po | 17 +- plugins/sudoers/po/fr.mo | Bin 69757 -> 71431 bytes plugins/sudoers/po/fr.po | 1434 +++++++++++++++++--------------- plugins/sudoers/po/ja.mo | Bin 73149 -> 73149 bytes plugins/sudoers/po/ja.po | 14 +- plugins/sudoers/po/pl.mo | Bin 65403 -> 65403 bytes plugins/sudoers/po/pl.po | 14 +- plugins/sudoers/po/pt.mo | Bin 63696 -> 63696 bytes plugins/sudoers/po/pt.po | 10 +- plugins/sudoers/po/pt_BR.mo | Bin 65919 -> 65919 bytes plugins/sudoers/po/pt_BR.po | 14 +- plugins/sudoers/po/uk.mo | Bin 88346 -> 88346 bytes plugins/sudoers/po/uk.po | 16 +- plugins/sudoers/po/zh_CN.mo | Bin 49169 -> 51524 bytes plugins/sudoers/po/zh_CN.po | 1547 ++++++++++++++++++----------------- plugins/sudoers/po/zh_TW.mo | Bin 59152 -> 59152 bytes plugins/sudoers/po/zh_TW.po | 10 +- po/eo.mo | Bin 20448 -> 20452 bytes po/eo.po | 4 +- po/fi.mo | Bin 21067 -> 21496 bytes po/fi.po | 255 +++--- po/fr.mo | Bin 21688 -> 22124 bytes po/fr.po | 253 +++--- 26 files changed, 1886 insertions(+), 1712 deletions(-) diff --git a/plugins/sudoers/po/de.mo b/plugins/sudoers/po/de.mo index 4e098c64cce93f3095835c19bf3c3885f1812c77..9cb94781b3a230e361b2eafe4b3992abb7ffb31b 100644 GIT binary patch delta 87 zcmZ41&$6taWy2k1CI*Jd_mum9)aE>uZH$b;n^o1UnVFIpHz#SHV`N&#xY=p_}hE^t)n^}4mRRaLSjT>M9 delta 87 zcmZ41&$6taWy2k1rge;y?0VzxO3KvGh$(y>p*-aFT46TgJHna3Bss;edks7W5 diff --git a/plugins/sudoers/po/de.po b/plugins/sudoers/po/de.po index 38158d2126..f8e28dbff7 100644 --- a/plugins/sudoers/po/de.po +++ b/plugins/sudoers/po/de.po @@ -6,10 +6,10 @@ # Jochen Hein , 2001-2020. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.3b1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-09-14 21:26+0200\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-18 21:49+0200\n" "Last-Translator: Jochen Hein \n" "Language-Team: German \n" "Language: de\n" @@ -1912,12 +1912,12 @@ msgstr "%s: Der Wert »%s« ist für die Option »%s« ungültig" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" msgstr "%s:%d: Werte für »%s« müssen mit »/«, »~« oder »*« beginnen" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" msgstr "%s: Werte für »%s« müssen mit »/«, »~« oder »*« beginnen" #: plugins/sudoers/defaults.c:1040 diff --git a/plugins/sudoers/po/eo.mo b/plugins/sudoers/po/eo.mo index b49e2af96791a8ec7730d05eae26e4533c8238fc..fda64908161ea9af3061d08377c5616279a01d49 100644 GIT binary patch delta 105 zcmdn`lzHn@<_&k0nHU%*-&5`bQk(NswlOjWZ&p>aW@bua+?=F&j*)2{<7Ol6O-zhQ zo1f|$h%?r07IRf%0#cUl6)ucMlQ(sHvs)+_nphc_ZD#3Fk(}KBk$bc8QZFVjqhqPh}e;Bg1A@HEU+3V1~^}n&%jqk{C7{X>Vcz z3P05~5NFidEas}j1f(q8D_j^2CvWQZW;azZGO#i*+|1IWA_\n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -1907,13 +1907,13 @@ msgstr "%s: valoro \"%s\" estas malvalida por parametro \"%s\"" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s:%d: valoroj por \"%s\" devas komenciĝi per '/', '*' aŭ '*'" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d: valoroj por \"%s\" devas komenciĝi per '/', '~' aŭ '*'" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s: valoroj por \"%s\" devas komenciĝi per '/', '*' aŭ '*'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: valoroj por \"%s\" devas komenciĝi per '/', '~' aŭ '*'" #: plugins/sudoers/defaults.c:1040 #, c-format @@ -3046,6 +3046,3 @@ msgstr "" #: toke.l:1093 msgid "too many levels of includes" msgstr "tro da niveloj de inkluzivaĵoj" - -#~ msgid "sudo_ldap_conf_add_ports: port too large" -#~ msgstr "sudo_ldap_conf_add_ports: pordo tro granda" diff --git a/plugins/sudoers/po/fr.mo b/plugins/sudoers/po/fr.mo index 6f08fe7de8f9c7119a6d09423c9422eabeab43ea..b352a1bebf1781a96a510202adcf06101213a817 100644 GIT binary patch delta 13277 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, 2020 msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-23 08:07+0200\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-20 13:45+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -42,70 +42,73 @@ msgstr "*** Informations de sécurité pour %h ***" msgid "Sorry, try again." msgstr "Désolé, essayez de nouveau." -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -115,323 +118,340 @@ msgstr "Désolé, essayez de nouveau." #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "impossible d'allouer la mémoire" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "un résumé (digest) nécessite un chemin d'accès" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "les valeurs de « CWD » doivent commencer par « / », « ~ » ou « * »" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "les valeurs de « CHROOT » doivent commencer par « / », « ~ » ou « * »" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "valeur « notbefore » (pas avant) invalide" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "valeur « notafter » (pas après) invalide" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "valeur trop grande pour le délai d'expiration" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "valeur invalide pour le délai d'expiration" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s : %s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format 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_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "création du répertoire (mkdir) %s impossible" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "impossible de changer le mode de %s pour lui affecter 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" msgstr "JSON_STRING attendue, %d obtenu" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" msgstr "guillemet manquante dans le nom" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" msgstr "JSON_OBJECT attendu, %d obtenu" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "erreur interne, dépassement de %s" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "accolade fermante non appariée" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "tableau attendu" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "crochet fermant non apparié" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "chaîne inattendue" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "deux points manquants après le nom" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" msgstr "booléen inattendu" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "nombre inattendu" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u analyse grammaticale (parse) de « %s » impossible" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s: fichier de journalisation incorrect" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: il manque le champ d'horodatage" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: horodatage %s : %s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s: il manque le champ utilisateur" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s: il manque le champ précisant l'utilisateur effectif (runas)" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s: il manque le champ précisant le groupe effectif (runas)" -#: lib/iolog/iolog_util.c:419 +#: lib/iolog/iolog_util.c:418 #, c-format msgid "error reading timing file: %s" msgstr "erreur de lecture dans le fichier de timing : %s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "ligne invalide dans le fichier de timing : %s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (suite de la commande) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "l'enregistrement du journal est déjà terminé, impossible de redémarrer" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "impossible de redémarrer l'enregistrement du journal" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "ouverture de %si/%s impossible" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "fichier du journal E/S %s/%s manquant" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, c-format msgid "%s/%s: unable to seek forward %zu" msgstr "%s/%s : impossible d'examiner vers l'avant de %zu" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, c-format msgid "unable to find resume point [%lld, %ld] in %s/%s" msgstr "impossible de trouver le point de redémarrage [%lld, %ld] dans %s/%s" @@ -518,17 +538,17 @@ msgstr "impossible d'obtenir la méthode TLS du serveur : %s" msgid "unable to create TLS context: %s" msgstr "impossible de créer le contexte TLS : %s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 #, c-format msgid "unable to load certificate %s" msgstr "impossible de charger le certificat %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, c-format msgid "unable to load certificate authority bundle %s" msgstr "impossible de charger le paquet de l'autorité du certificat %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 #, c-format msgid "unable to load private key %s" msgstr "impossible de charger la clé privée %s" @@ -547,28 +567,28 @@ msgstr "impossible de définir TLS 1.2 comme étant la version minimale du proto msgid "unable to get remote IP addr" msgstr "impossible d'obtenir l'adresse IP distante" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, 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:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "impossible d'ajouter l'événement à la queue" @@ -603,7 +623,7 @@ msgstr "" " -R, --random-drop pourcentage de chances que la connexion soit abandonnée\n" " -V, --version affiche la version, puis termine l'exécution\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "Version 1.3 ou supérieure de Protobuf-C requise" @@ -612,9 +632,9 @@ msgstr "Version 1.3 ou supérieure de Protobuf-C requise" msgid "invalid random drop value: %s" msgstr "valeur d'abandon aléatoire invalide : %s" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" @@ -708,7 +728,7 @@ msgstr "" " -t, --test tester le serveur d'audit en envoyant le journal des E/S sélectionné n fois en parallèle\n" " -V, --version afficher les informations de version et terminer\n" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, c-format msgid "unable to look up %s:%s: %s" msgstr "impossible de rechercher %s:%s : %s" @@ -717,122 +737,122 @@ msgstr "impossible de rechercher %s:%s : %s" msgid "unable to get server IP addr" msgstr "impossible d'obtenir l'adresse IP du serveur" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "impossible de lire %s/%s : %s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "message client trop grand : %zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "%s: tampon d'écriture déjà en cours d'utilisation" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "événement d'E/S %d inattendu" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "%s: état %d inattendu" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "ServerHello invalide" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "message d'erreur reçu du serveur : %s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "message d'interruption reçu du serveur : %s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "impossible de décompresser ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "%s: valeur type_case %d inattendue" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "délai d'attente expiré durant la lecture depuis le serveur" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "fin de fichier prématurée" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "message serveur trop grand : %u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "délai d'attente expiré durant l'écriture vers le serveur" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "le délai de la négociation TLS a expiré" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "impossible de définir l'événement" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "la communication TLS a échoué : %s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "Impossible d'initialiser le contexte ssl : %s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "Impossible d'allouer l'objet ssl : %s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" msgstr "Impossible d'attacher le socket à l'objet ssl : %s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 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:1777 +#: logsrvd/sendlog.c:1780 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:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" msgstr "terminé prématurément avec l'état %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "temps écoulé envoyé au serveur [%lld, %ld]" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "point d'enregistrement reçu du serveur [%lld, %ld]" @@ -842,11 +862,11 @@ msgstr "point d'enregistrement reçu du serveur [%lld, %ld]" msgid "Alias \"%s\" already defined" msgstr "L'alias « %s » est déjà défini" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "création du processus fils impossible" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "changement du mot de passe impossible pour %s" @@ -868,11 +888,11 @@ msgstr "type d'authentification non valide" msgid "unable to initialize BSD authentication" msgstr "démarrage de l'authentification BSD impossible" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "votre compte est expiré" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "échec de l'approbation" @@ -979,7 +999,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:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "votre compte n'existe pas dans la base de données %s" @@ -1008,7 +1028,7 @@ msgstr "l'identifiant d'authentification (« Authentication Handle ») est inv msgid "SecurID communication failed" msgstr "la communication avec SecurID a échoué" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "erreur SecurID non identifiée" @@ -1016,7 +1036,7 @@ msgstr "erreur SecurID non identifiée" msgid "invalid passcode length for SecurID" msgstr "la longueur du mot de passe est invalide pour SecurID" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "initialisation de la session SIA impossible" @@ -1040,7 +1060,7 @@ msgstr "Aucune méthode d'authentification compilée dans sudo ! Si vous souhai msgid "Unable to initialize authentication methods." msgstr "Initialisation des méthodes d'authentification impossible." -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "Méthodes d'authentification : " @@ -1073,117 +1093,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "identifiant utilisateur inconnu : %u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "utilisateur inconnu : %s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "incrément d'ordre : %s : %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "ordre de départ : %s : %s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "remplissage de l'ordre : %s : %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "Version de la grammaire de %s : %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "format d'entrée %s non supporté" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "format de sortie %s non supporté" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format 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:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "initialisation des valeurs par défaut de sudoers impossible" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s : %s : %s : %s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s: mot clé inconnu : %s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "type par défaut invalide : %s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "type de suppression invalide : %s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "filtre invalide : %s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "ouverture de %s impossible" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "échec lors de l'analyse grammaticale de %s, erreur inconnue" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "erreur lors de l'analyse grammaticale de %s au environs de la ligne %d\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "erreur lors de l'analyse grammaticale de %s\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "écriture impossible dans %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1192,7 +1213,7 @@ msgstr "" "%s - convertir entre des formats de fichiers sudoers\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1235,675 +1256,695 @@ msgstr "" " -V, --version afficher la version et terminer" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "entrée par défaut inconnue « %s »" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "récupération de l'heure GMT impossible" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "impossible de formater l'horodatage" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "trop d'entrées sudoers, maximum %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "la variable d'environnement SUDOERS_BASE n'est pas définie et l'option -b n'a pas été spécifiée." -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "Mécanisme syslog si syslog est utilisé pour la journalisation des événements : %s " -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "Priorité syslog utilisée lorsque l'authentification de l'utilisateur est réussie : %s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "Priorité Syslog utilisée lorsque l'authentification de l'utilisateur a échoué : %s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "Présentation de l'invite OTP sur une ligne distincte" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "Ne pas tenir compte de « . » dans $PATH" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "Toujours envoyer un courriel à chaque exécution de sudo" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "Envoi d'un courriel lorsqu'une authentification échoue" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "Envoi d'un courriel si l'utilisateur ne figure pas dans sudoers" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "Envoi d'un courriel si l'utilisateur ne figure pas dans sudoers pour l'hôte sur lequel sudo est exécuté" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "Envoi d'un courriel si l'utilisateur n'est pas autorisé à exécuter une commande" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "Envoi d'un courriel si l'utilisateur tente d'exécuter une commande" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "Utilisation d'un horodatage distinct pour chaque couple utilisateur/terminal (user/tty)" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "Adresse les recommandations d'usage à l'utilisateur lors de la première exécution de sudo" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Fichier contenant les recommandations sur l'usage de sudo : %s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "Exige l'authentification de l'utilisateur par défaut" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "L'utilisateur root peut exécuter sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "Consignation du nom de l'hôte dans le fichier de journalisation (qui n'est pas syslog)" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "Consignation de l'année dans le fichier de journalisation (qui n'est pas syslog)" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Démarrage d'un interpréteur de commande lorsque sudo est lancé sans argument" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Assigner le répertoire de l'utilisateur cible dans $HOME lorsque l'interpréteur de commandes est lancé avec l'option -s" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "Assignation systématique du répertoire personnel de l'utilisateur cible dans $HOME" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "Autorise la collecte de certaines informations dans le but d'afficher des messages d'erreurs pertinents" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Exige l'emploi du nom complet (fully qualified) de l'ordinateur dans le fichier sudoers" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "Sermonne l'utilisateur lorsqu'un mot de passe incorrect est saisi" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "Autorise l'utilisateur à exécuter sudo seulement à la condition qu'il dispose d'un terminal tty" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo se conformera au contenu de la variable d'environnement EDITOR" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "Demande de la saisie du mot de passe de root et non de celui de l'utilisateur" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Demande de la saisie du mot de passe runas_default de l'utilisateur et non de son propre mot de passe" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "Demande de la saisie du mot de passe de l'utilisateur cible et non de celui de l'utilisateur exécutant la commande" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "Utilisation des paramètres par défaut de la classe de connexion de l'utilisateur cible (lorsqu'elle existe)" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "Définir les variables d'environnement LOGNAME et USER" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Assigne uniquement l'identifiant utilisateur (UID) effectif à l'utilisateur cible, et non à l'identifiant réel." -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "N'initialise pas le vecteur de groupe avec les valeurs de l'utilisateur cible" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Longueur après laquelle intercaler un retour à la ligne dans le fichier journal (0 indique qu'il n'y a pas de retour à la ligne) : %u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Délai d'expiration de l'horodatage de l'authentification : %.1f minutes" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Délai d'expiration de l'invite de saisie de mot de passe : %.1f minutes" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Nombre de tentatives de saisie du mot de passe : %u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask à utiliser, ou 0777 pour hériter de celui de l'utilisateur : 0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "Emplacement du fichier de journalisation : %s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "Emplacement du programme d'envoi de courriel : %s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "Attributs à utiliser avec le programme d'envoi de courriel : %s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "Adresse du destinataire des courriels : %s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "Adresse de l'expéditeur des courriels : %s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "Champ objet des courriels envoyés : %s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "Message informant de la saisie d'un mot de passe incorrect : %s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "Répertoire contenant l'attestation que l'utilisateur a déjà reçu les recommandations : %s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Répertoire contenant l'horodatage de l'authentification : %s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Propriétaire du répertoire contenant l'horodatage de l'authentification : %s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Les utilisateurs de ce groupe sont affranchis des contraintes relatives au mot de passe et à PATH : %s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "Invite de mot de passe par défaut : %s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "S'il est défini, passprompt se substituera toujours à l'invite du système." -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "Utilisateur par défaut avec l'identité duquel exécuter les commandes : %s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Nouvelle valeur prise par la variable $PATH de l'utilisateur : %s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Emplacement de l'éditeur appelé par visudo : %s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quand demander un mot de passe pour l'usage de la pseudo commande « list » : %s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quand demander un mot de passe pour l'utilisation de la pseudo commande « verify » : %s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Préchargement des fonctions d'exécution « à blanc » contenues dans la bibliothèque sudo_noexec" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Si un annuaire LDAP est actif, faut-il tenir compter du fichier sudoers local" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Les descripteurs de fichiers >= %d seront fermés avant l'exécution d'une commande" -#: plugins/sudoers/def_data.c:278 +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "Si elle est définie, les utilisateurs peuvent passer outre la valeur de « closeform » grâce à l'option -C" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "Autorise les utilisateurs à définir des variables d'environnement arbitraires" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "Réinitialise l'environnement à un jeu de variables par défaut" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "Variables d'environnement à valider pour s'assurer du bon fonctionnement :" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "Variables d'environnement à supprimer :" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "Variables d'environnement à conserver :" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Rôle SELinux à utiliser dans le nouveau contexte de sécurité : %s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Type SELinux à utiliser dans le nouveau contexte de sécurité : %s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Emplacement du fichier d'environnement propre à sudo : %s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "Emplacement du fichier d'environnement restreint propre à sudo : %s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Environnement linguistique à utiliser lors de l'analyse syntaxique de sudoers : %s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Autoriser sudo à demander la saisie d'un mot de passe même lorsque celui-ci sera affiché « en clair »" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Afficher un contrôle visuel lors de la saisie du mot de passe" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Utiliser le développement rapide des noms de fichiers, qui est moins fiable, mais ne nécessite pas d'accès au système de fichiers" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "L'umask indiqué dans sudoers se substituera à celui de l'utilisateur, même s'il est plus permissif" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 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" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 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:346 +#: plugins/sudoers/def_data.c:348 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:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "Exécute toujours les commandes dans un pseudo-terminal (tty)" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, 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:358 +#: plugins/sudoers/def_data.c:360 #, 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:362 +#: plugins/sudoers/def_data.c:364 #, 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:366 +#: plugins/sudoers/def_data.c:368 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:370 +#: plugins/sudoers/def_data.c:372 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:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "Ensemble des privilèges permis : %s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "Ensemble des privilèges limités : %s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 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:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "Nom de service PAM à utiliser : %s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, 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:394 +#: plugins/sudoers/def_data.c:396 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:398 +#: plugins/sudoers/def_data.c:400 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:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "Réaliser la gestion de la validation du compte PAM" -#: plugins/sudoers/def_data.c:406 +#: plugins/sudoers/def_data.c:408 #, 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:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "Activation de la prise en charge de netgroup par sudoers" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 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:418 +#: plugins/sudoers/def_data.c:420 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:422 +#: plugins/sudoers/def_data.c:424 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:426 +#: plugins/sudoers/def_data.c:428 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:430 +#: plugins/sudoers/def_data.c:432 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:434 +#: plugins/sudoers/def_data.c:436 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:438 +#: plugins/sudoers/def_data.c:440 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:442 +#: plugins/sudoers/def_data.c:444 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:446 +#: plugins/sudoers/def_data.c:448 #, 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:450 +#: plugins/sudoers/def_data.c:452 #, 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:454 +#: plugins/sudoers/def_data.c:456 #, 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:458 +#: plugins/sudoers/def_data.c:460 #, 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:462 +#: plugins/sudoers/def_data.c:464 #, 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:466 +#: plugins/sudoers/def_data.c:468 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:470 +#: plugins/sudoers/def_data.c:472 #, 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:474 +#: plugins/sudoers/def_data.c:476 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:478 +#: plugins/sudoers/def_data.c:480 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:482 +#: plugins/sudoers/def_data.c:484 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:486 +#: plugins/sudoers/def_data.c:488 #, 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:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "Message de l'échec de l'authentification : %s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "Ignorer la casse lors de la correspondance des noms d'utilisateurs" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "Ignorer la casse lors de la correspondance des noms de groupes" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 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:506 +#: plugins/sudoers/def_data.c:508 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:510 +#: plugins/sudoers/def_data.c:512 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:514 +#: plugins/sudoers/def_data.c:516 #, 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:518 +#: plugins/sudoers/def_data.c:520 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:522 +#: plugins/sudoers/def_data.c:524 #, 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:526 +#: plugins/sudoers/def_data.c:528 #, c-format msgid "Path to the sudoers certificate file: %s" msgstr "Emplacement du fichier de certificat de sudoers : %s" -#: plugins/sudoers/def_data.c:530 +#: plugins/sudoers/def_data.c:532 #, 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:534 +#: plugins/sudoers/def_data.c:536 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:538 +#: plugins/sudoers/def_data.c:540 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:542 +#: plugins/sudoers/def_data.c:544 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:546 +#: plugins/sudoers/def_data.c:548 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:550 +#: plugins/sudoers/def_data.c:552 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/defaults.c:183 +#: plugins/sudoers/def_data.c:556 +#, 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:560 +#, 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/defaults.c:184 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d entrée par défaut inconnue « %s »" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d: entrées par défaut inconnues « %s »" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s: entrée par défaut inconnue « %s »" -#: plugins/sudoers/defaults.c:229 +#: plugins/sudoers/defaults.c:233 #, c-format -msgid "%s:%d no value specified for \"%s\"" -msgstr "%s:%d pas de valeur précisée pour « %s »" +msgid "%s:%d: no value specified for \"%s\"" +msgstr "%s:%d: pas de valeur précisée pour « %s »" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s: pas de valeur précisée pour « %s »" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d les valeurs de « %s » doivent commencer par « / »" - -#: plugins/sudoers/defaults.c:255 +#: plugins/sudoers/defaults.c:274 #, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s: les valeurs de « %s » doivent commencer par « / »" +msgid "%s:%d: option \"%s\" does not take a value" +msgstr "%s:%d: l'option « %s » ne prend pas de valeur" #: plugins/sudoers/defaults.c:277 #, c-format -msgid "%s:%d option \"%s\" does not take a value" -msgstr "%s:%d l'option « %s » ne prend pas de valeur" - -#: plugins/sudoers/defaults.c:280 -#, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s: l'option « %s » ne prend pas de valeur" -#: plugins/sudoers/defaults.c:305 +#: plugins/sudoers/defaults.c:302 #, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" -msgstr "%s:%d type Defaults 0x%x invalide pour l'option « %s »" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" +msgstr "%s:%d: type Defaults 0x%x invalide pour l'option « %s »" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%s: type Defaults 0x%x invalide pour l'option «␣%s␣»" -#: plugins/sudoers/defaults.c:318 +#: plugins/sudoers/defaults.c:315 #, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" -msgstr "%s:%d la valeur « %s » ne convient pas pour l'option « %s »" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" +msgstr "%s:%d: la valeur « %s » ne convient pas pour l'option « %s »" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s: la valeur « %s » ne convient pas pour l'option « %s »" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d: les valeurs de « %s » doivent commencer par « / », « ~ » ou « * »" + +#: plugins/sudoers/defaults.c:1029 +#, c-format +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: les valeurs de « %s » doivent commencer par « / », « ~ » ou « * »" + +#: plugins/sudoers/defaults.c:1040 +#, c-format +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d: les valeurs de « %s » doivent commencer par « / »" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s: les valeurs de « %s » doivent commencer par « / »" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv : envp est corrompu, longueur incorrecte" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "impossible de créer à nouveau l'environnement" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "désolé, vous n'êtes pas autorisé à définir ces variables d'environnement : %s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "erreur d'analyse grammaticale dans %s aux environs de la ligne %d" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "erreur d'analyse grammaticale dans %s" @@ -1957,88 +1998,88 @@ msgstr "impossible de reconnaître le format du masque de sous-réseau « %s  msgid "Local IP address and netmask pairs:\n" msgstr "Couples adresse IP locale/masque de sous-réseau :\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "groupe inconnu : %s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "impossible d'écrire dans le journal des E/S : %s" -#: plugins/sudoers/iolog.c:566 +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" msgstr "mise à jour du fichier de séquence impossible" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "impossible de créer %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "impossible de se connecter au serveur de journal" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, 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:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "lecture de l'horloge impossible" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s: erreur interne, signal %d invalide" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "erreur dans la boucle des événements" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, 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/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" msgstr "la connexion TLS à %s:%s a échoué : %s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "l'initialisation TLS n'a pas réussi" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "la négociation TLS n'a pas réussi" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "récupération de l'heure du jour impossible" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s: erreur interne, statut de sortie %d invalide" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "perte de la connexion au serveur de journalisation" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "tampon d'écriture manquant" @@ -2061,18 +2102,19 @@ msgstr "TLS_CERT doit être défini dans %s pour pouvoir utiliser SSL" msgid "unable to initialize LDAP: %s" msgstr "initialisation de LDAP impossible : %s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 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:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "attribut sudoOrder invalide : %s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports : valeur de port trop élevée" +#, c-format +msgid "%s: port too large" +msgstr "%s: port trop grand" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2083,7 +2125,7 @@ msgstr "type d'uri LDAP non pris en charge : %s" msgid "unable to mix ldap and ldaps URIs" msgstr "fusion des URIs ldap et ldaps impossible" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "impossible de convertir sudoOption: %s%s%s" @@ -2092,66 +2134,66 @@ msgstr "impossible de convertir sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "ouverture du fichier d'audit du système impossible" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "envoi du message d'audit impossible" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "ouverture du fichier de journalisation impossible : %s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "verrouillage du fichier de journalisation impossible : %s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "impossible d'écrire le fichier journal : %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "l'utilisateur n'apparaît PAS dans sudoers" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "l'utilisateur n'est PAS autorisé sur cet hôte" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "commande non autorisée" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s n'apparaît pas dans le fichier sudoers. Cet incident sera signalé.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s n'est pas autorisé à exécuter sudo sur %s. Cet incident sera signalé.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, 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:298 +#: plugins/sudoers/logging.c:297 #, 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:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s : commande introuvable" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2160,37 +2202,37 @@ 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:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "échec de l'authentification" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "il est nécessaire de saisir un mot de passe" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, 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:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "duplication (dup) de stdin impossible : %m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "exécution de %s impossible : %m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "création du processus fils impossible : %m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "ouverture du tube impossible : %m" @@ -2200,7 +2242,7 @@ msgstr "ouverture du tube impossible : %m" 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:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2209,8 +2251,7 @@ msgstr "" "\n" "Rôle LDAP : %s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2218,42 +2259,38 @@ msgstr "" "\n" "Entrée sudoers :\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAsUsers : " -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAsGroups : " -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " Options : " -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " Commandes :\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, 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:731 +#: plugins/sudoers/parse.c:811 #, 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:749 +#: plugins/sudoers/parse.c:829 #, 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:764 +#: plugins/sudoers/parse.c:844 #, 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" @@ -2268,48 +2305,58 @@ msgstr "le sudoRole incomplet est ignoré : cn : %s" msgid "invalid LDIF attribute: %s" msgstr "attribut LDIF invalide : %s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "%.*s invalide défini par l'interface utilisateur de sudo" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "impossible d'analyser la liste des adresses réseau" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 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:430 +#: plugins/sudoers/policy.c:454 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:434 +#: plugins/sudoers/policy.c:458 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:438 +#: plugins/sudoers/policy.c:462 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:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "répertoire de travail invalide : %s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "répertoire chroot invalide : %s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "exécution de %s impossible" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, 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:1062 +#: plugins/sudoers/policy.c:1108 #, 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:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2318,86 +2365,86 @@ msgstr "" "\n" "Chemin d'accès à sudoers : %s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "chemin d'accès à nsswitch : %s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "chemin d'accès à ldap.conf : %s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "chemin d'accès à ldap.secret : %s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, 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/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "enregistrement de l'uid %u dans le cache impossible" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "enregistrement de l'uid %u dans le cache impossible, l'entrée existe déjà" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "impossible d'écrire l'utilisateur %s dans la cache" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "enregistrement des informations de l'utilisateur %s dans le cache impossible, l'entrée existe déjà" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "enregistrement du gid %u dans le cache impossible" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "enregistrement du gid %u dans le cache impossible, l'entrée existe déjà" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "impossible d'écrire le groupe %s dans la cache" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "enregistrement du groupe %s dans le cache impossible, l'entrée existe déjà" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "enregistrement de la liste de groupe %s dans le cache impossible, l'entrée existe déjà" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "impossible d'écrire la liste de groupes dans la cache pour %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "impossible d'analyser les groupes pour %s" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "impossible d'analyser les gids pour %s" @@ -2461,239 +2508,259 @@ msgstr "le chemin d'accès à l'audit user_cmnd a été tronqué : %s" msgid "truncated audit path argv[0]: %s" msgstr "le chemin d'accès à l'audit argv[0] a été tronqué : %s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "initialisation de la source SSS impossible. SSSD est-il installé sur cette machine ?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "Le symbole « %s » est introuvable dans %s" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "les entrées par défaut posent un problème" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 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:295 +#, 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:297 +#, 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:321 +#, 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:322 +#, 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:353 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:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "l'utilisateur n'est pas autorisé à outrepasser la limite closeform" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "vous n'êtes pas autorisé à utiliser l'option -C" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "propriétaire du fichier d'horodatage (%s) : utilisateur inconnu" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "pas de terminal tty" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 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:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, c-format msgid "invalid shell for user %s: %s" msgstr "interpréteur de commande invalide pour l'utilisateur %s : %s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "commande dans le répertoire courant" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 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:526 +#: plugins/sudoers/sudoers.c:602 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:534 +#: plugins/sudoers/sudoers.c:610 msgid "user not allowed to preserve the environment" msgstr "l'utilisateur n'est pas autorisé à conserver l'environnement" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 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:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "commande trop longue" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 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:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "lecture de %s impossible" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "impossible d'appliquer la fonction stat à %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s n'est pas un fichier ordinaire" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, 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:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "Le fichier %s est ouvert en écriture pour tous" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, 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:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "« -c %s » est réservé à l'utilisateur root" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "classe de connexion inconnue : %s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "impossible de résoudre l'hôte %s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "option du filtre invalide : %s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "attente maximum invalide : %s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "facteur de vitesse invalide : %s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, c-format msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s : %s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/timing : %s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s : %s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "Rejeu de la session sudo : %s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "impossible d'initialiser le terminal tty en mode direct" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Attention : la taille du terminal n'est pas suffisante pour pouvoir rejouer correctement la séquence.\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "La taille du journal est %d × %d, la taille de votre terminal est %d × %d." -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "Rejeu terminé, appuyez sur n'importe quelle touche pour rétablir le terminal." -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expression ambiguë « %s »" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "« ) » sans parenthèse ouvrante dans l'expression" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "terme de recherche « %s » inconnu" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s requiert un argument" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "expression rationnelle invalide : %s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "analyse de la date « %s » impossible" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "« ( » sans parenthèse fermante dans l'expression" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "« or » n'est pas autorisé en fin d'expression" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "« ! » n'est pas autorisé en fin d'expression" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "type de recherche %d inconnu" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, 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:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, 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:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2702,7 +2769,7 @@ msgstr "" "%s - rejeu du journal de la session sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2731,11 +2798,11 @@ msgstr "" " -s, --speed=valeur accélère ou ralentit l'exécution\n" " -V, --version affiche la version du programme, puis termine l'exécution" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\tl'hôte n'a pas de correspondance" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2743,7 +2810,7 @@ msgstr "" "\n" "Commande autorisée" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2751,7 +2818,7 @@ msgstr "" "\n" "Commande refusée" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2796,89 +2863,89 @@ msgstr "sudoedit ne devrait pas être spécifié avec un chemin" 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:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "envisagez plutôt l'utilisation de l'utilitaire cvtsudoers" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "appuyer sur entrée pour éditer %s : " -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "l'éditeur indiqué (%s) n'existe pas" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "aucun éditeur trouvé (chemin d'accès à l'éditeur : %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "erreur en écriture" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, 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:512 +#: plugins/sudoers/visudo.c:513 #, 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:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "l'éditeur (%s) a échoué, %s n'a pas été modifié" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s n'a pas été modifié" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, 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:611 +#: plugins/sudoers/visudo.c:610 #, 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:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "erreur interne, impossible de trouver %s dans la liste !" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "impossible de définir (uid, gid) de %s à (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s 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:775 +#: plugins/sudoers/visudo.c:774 #, 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:785 +#: plugins/sudoers/visudo.c:784 #, 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:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "Et maintenant ?" -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2890,66 +2957,66 @@ 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:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "exécution de %s impossible" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s : mauvais propriétaire (uid, gid), celui-ci devrait être (%u,%u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s : mauvais droits d'utilisation, le mode devrait être 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s : analyse réussie\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s n'est pas disponible, réessayez plus tard" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "impossible de verrouiller %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "Éditer quand même ? [y/N]" -#: plugins/sudoers/visudo.c:1083 +#: plugins/sudoers/visudo.c:1089 #, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" -msgstr "Erreur : %s:%d boucle dans %s « %s »" +msgid "Error: %s:%d: cycle in %s \"%s\"" +msgstr "Erreur : %s:%d: boucle dans %s « %s »" -#: plugins/sudoers/visudo.c:1084 +#: plugins/sudoers/visudo.c:1090 #, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" -msgstr "Attention : %s:%d boucle dans %s « %s »" +msgid "Warning: %s:%d: cycle in %s \"%s\"" +msgstr "Attention : %s:%d: boucle dans %s « %s »" -#: plugins/sudoers/visudo.c:1088 +#: plugins/sudoers/visudo.c:1094 #, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" -msgstr "Erreur : %s:%d il est fait mention de %s « %s » alors qu'il n'a pas été défini" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Erreur : %s:%d: il est fait mention de %s « %s » alors qu'il n'a pas été défini" -#: plugins/sudoers/visudo.c:1089 +#: plugins/sudoers/visudo.c:1095 #, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" -msgstr "Attention : %s:%d il est fait mention de %s « %s » alors qu'il n'a pas été défini" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" +msgstr "Attention : %s:%d: il est fait mention de %s « %s » alors qu'il n'a pas été défini" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "Attention : %s:%d %s « %s » n'est pas utilisé" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "Attention : %s:%d: %s « %s » n'est pas utilisé" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2958,7 +3025,7 @@ msgstr "" "%s - édite le fichier sudoers en toute sécurité\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2978,10 +3045,13 @@ msgstr "" " -s, --strict validation stricte de la syntaxe\n" " -V, --version affiche la version, puis termine l'exécution\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "nombre de niveaux d'inclusions trop élevé" +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports : valeur de port trop élevée" + #~ msgid "SSL_connect failed: ssl_error=%d, stack=%s\n" #~ msgstr "SSL_connect a échoué : ssl_error=%d, pile=%s\n" diff --git a/plugins/sudoers/po/ja.mo b/plugins/sudoers/po/ja.mo index 202d0aade7d66be106c90ad0a1f6a5bf69a83831..43cfa28b358ffabd0299ec7b671ad8419676d953 100644 GIT binary patch delta 106 zcmdnHn`Q5AmJN55nHU%*-&5`bQk(NswlOjWZ&p>aW@bua+?=F&j*)2{<7Ol6O-zhQ zo1f|$h%?r07IRf%0#cUl6)ucMlQ(sHvso$_7+9HZX6`XmoX#fAXtgc delta 104 zcmdnHn`Q5AmJN55nbt8*zNg&Bl*G6>Ph}e;Bg1A@HEU+3V1~^}n&%jqk{C7{X>Vcz z3P05~5NFidEas}j1f(q8D_j^2CvWQZW;0PRGPE+-%-mzB$fz|raD&a}!nOB7Y63Up G, 2012, 2015, 2016, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.3b1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-09-14 21:02+0900\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-19 00:52+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -1909,13 +1909,13 @@ msgstr "%s: \"%s\" はオプション \"%s\" の値としては無効です" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s:%d: \"%s\" の値は '/', '*', または '*' で開始しなければいけません" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d: \"%s\" の値は '/', '~', または '*' で開始しなければいけません" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s: \"%s\" の値は '/', '*', または '*' で開始しなければいけません" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: \"%s\" の値は '/', '~', または '*' で開始しなければいけません" #: plugins/sudoers/defaults.c:1040 #, c-format diff --git a/plugins/sudoers/po/pl.mo b/plugins/sudoers/po/pl.mo index 10c506c42a5126f7f1caef3a81a921489c4a866c..d2aa2d3ea1f5d3c1c6a649d2fcc6c3ba402366a6 100644 GIT binary patch delta 105 zcmezUkNNjM<_&k0nHU%*-&5`bQk(NswlOjWZ&p>aW@bua+?=F&j*)2{<7Ol6O-zhQ zo1f|$h%?r07IRf%0#cUl6)ucMlQ(sHvs)+_npv5eZD#2?D?QogANS@v%LACe4D(ek Fp#Y!nB{%>8 delta 101 zcmezUkNNjM<_&k0nbt8*zNg&Bl*G6>Ph}e;Bg1A@HEU+3V1~^}n&%jqk{C7{X>Vcz z3P05~5NFidEas}j1f(q8D_j^2CvWQZW;anVw6rob-OSQ+RvIXCX?YY#f$l25PyqV$ BArAlm diff --git a/plugins/sudoers/po/pl.po b/plugins/sudoers/po/pl.po index f4864fcea2..e9509dd0ba 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.3b1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-09-14 19:15+0200\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-18 16:56+0200\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -1906,13 +1906,13 @@ msgstr "%s: błędna wartość \"%s\" dla opcji \"%s\"" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s:%d: wartości \"%s\" muszą zaczynać się od '/', '*' lub '*'" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d: wartości \"%s\" muszą zaczynać się od '/', '~' lub '*'" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s: wartości \"%s\" muszą zaczynać się od '/', '*' lub '*'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: wartości \"%s\" muszą zaczynać się od '/', '~' lub '*'" #: plugins/sudoers/defaults.c:1040 #, c-format diff --git a/plugins/sudoers/po/pt.mo b/plugins/sudoers/po/pt.mo index d197992195bcc4ec69a14452ebf24021b4464772..c415c3df8e4be5d050b2ba732b93fb35a99134f2 100644 GIT binary patch delta 87 zcmccck@><$<_&k0nHU%*-&5`bQk(NswlOjWZ&p>aW@bua+?=F&j*)2{<7Ol6O-zhQ qo1f|$h%?r07IRf%0#cUl6)ucMlQ(sHvs)?{m{}Q`ZD#2?lLG)B_#BS_ delta 87 zcmccck@><$<_&k0nbt8*zNg&Bl*G6>Ph}e;Bg1A@HEU+3V1~^}n&%jqk{C7{X>Vcz q3P05~5NFidEas}j1f(q8D_j^2CvWQZW;azZFtakX+|1H*CI\n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -1908,12 +1908,12 @@ msgstr "%s valor \"%s\" é inválido para a opção \"%s\"" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" msgstr "%s:%d: valores para \"%s\" têm de começar com \"/\", \"~\" ou \"*\"" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" msgstr "%s: valores para \"%s\" têm de começar com \"/\", \"~\" ou \"*\"" #: plugins/sudoers/defaults.c:1040 diff --git a/plugins/sudoers/po/pt_BR.mo b/plugins/sudoers/po/pt_BR.mo index 88b1b5e75197050992ca68944cf00e2fcfbcf494..dd51d00c774755b0b840f71c8ce2bdbdfda162dc 100644 GIT binary patch delta 103 zcmez0#PYw1Wy2k1CI*Jd_mum9)aE>uZH$b;n^o1UnVFIpHz#SHV`N&#xY=p_JmR1HPn^}5PWPmc7D{7b~-~P|FdHt#j FVF2W)BSHWG delta 101 zcmez0#PYw1Wy2k1rge;y?0VzxO3KvGh$(y>p*-aD-%&iQ~Hna4o$N*(DSJZ$MEL(Lm3;>a+ BANBwM diff --git a/plugins/sudoers/po/pt_BR.po b/plugins/sudoers/po/pt_BR.po index 9c12dbf60a..0b00ff6eb7 100644 --- a/plugins/sudoers/po/pt_BR.po +++ b/plugins/sudoers/po/pt_BR.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.3b1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-09-14 07:16-0300\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-18 09:04-0300\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -1916,13 +1916,13 @@ msgstr "%s: o valor \"%s\" é inválido para a opção \"%s\"" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s:%d: valores para \"%s\" devem iniciar com um \"/\", \"*\" ou \"*\"" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d: valores para \"%s\" devem iniciar com um \"/\", \"~\" ou \"*\"" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s: valores para \"%s\" devem iniciar com um \"/\", '*', ou '*'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: valores para \"%s\" devem iniciar com um \"/\", '~', ou '*'" #: plugins/sudoers/defaults.c:1040 #, c-format diff --git a/plugins/sudoers/po/uk.mo b/plugins/sudoers/po/uk.mo index 547200102fedb3899ccb0c7211e606c08fe02f24..3e923c5129b4aa23e5e12defa3e73210e4710b26 100644 GIT binary patch delta 125 zcmbQWiFMW{)(v-*nHU%*-&5`bQk(NswlOjWZ&p>aW@bua+?=F&j*)2{<7Ol6O-zhQ zo1f|$h%?r07IRf%0#cUl6)ucMlQ(sHvs)+_8e17zZf5D(%*bJAsAq1##lSiF;R2D( ZmwO#_r(1_H3T{@}{eT(565Y=_3jo0$C+`3N delta 119 zcmbQWiFMW{)(v-*nbt8*zNg&Bl*G6>Ph}e;Bg1A@HEU+3V1~^}n&%jqk{C7{X>Vcz z3P05~5NFidEas}j1f(q8D_j^2CvWQZW;anVG_*1`+|1ImnUTZ5SkK&mi-B|U!v!Ln VFZVj=0@aG_{=f{RSoe$00szK`B_03( diff --git a/plugins/sudoers/po/uk.po b/plugins/sudoers/po/uk.po index a040ebad9c..a89d550774 100644 --- a/plugins/sudoers/po/uk.po +++ b/plugins/sudoers/po/uk.po @@ -4,10 +4,10 @@ # Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.3b1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-09-14 11:51+0300\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-18 13:29+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\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=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.03.70\n" +"X-Generator: Lokalize 20.11.70\n" #: confstr.sh:1 msgid "syntax error" @@ -1907,13 +1907,13 @@ msgstr "%s: значення «%s» є некоректним для парам #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s:%d значення для «%s» має починатися з «/», «*» або «*»" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d значення для «%s» має починатися з «/», «~» або «*»" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" -msgstr "%s: значення для «%s» має починатися з «/», «*» або «*»" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s: значення для «%s» має починатися з «/», «~» або «*»" #: plugins/sudoers/defaults.c:1040 #, c-format diff --git a/plugins/sudoers/po/zh_CN.mo b/plugins/sudoers/po/zh_CN.mo index 0deca455df91010956be1ad24959b0e4349a81b7..fa50131e2b6b0e785918e100410a6bf50ae5a748 100644 GIT binary patch delta 13347 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 GhyMpzomC(J delta 11186 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 WpE=+k=xX1_<$3*FCC~En`~C%{C;OxT diff --git a/plugins/sudoers/po/zh_CN.po b/plugins/sudoers/po/zh_CN.po index 843532e5b0..eb9d94a8b7 100644 --- a/plugins/sudoers/po/zh_CN.po +++ b/plugins/sudoers/po/zh_CN.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.2rc1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-19 12:35-0400\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-18 19:53-0400\n" "Last-Translator: Boyuan Yang <073plan@gmail.com>\n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" @@ -17,7 +17,7 @@ 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-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4.1\n" #: confstr.sh:1 msgid "syntax error" @@ -43,70 +43,73 @@ msgstr "*** %h 安全信息 ***" msgid "Sorry, try again." msgstr "对不起,请重试。" -#: gram.y:203 gram.y:251 gram.y:258 gram.y:265 gram.y:272 gram.y:279 -#: gram.y:295 gram.y:319 gram.y:326 gram.y:333 gram.y:340 gram.y:347 -#: gram.y:410 gram.y:419 gram.y:430 gram.y:463 gram.y:470 gram.y:477 -#: gram.y:484 gram.y:511 gram.y:583 gram.y:590 gram.y:599 gram.y:608 -#: gram.y:625 gram.y:737 gram.y:744 gram.y:752 gram.y:758 gram.y:858 -#: gram.y:865 gram.y:872 gram.y:879 gram.y:886 gram.y:912 gram.y:919 -#: gram.y:926 gram.y:1068 gram.y:1347 lib/iolog/iolog_fileio.c:1101 -#: lib/iolog/iolog_json.c:120 lib/iolog/iolog_json.c:283 -#: lib/iolog/iolog_json.c:313 lib/iolog/iolog_json.c:435 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/sendlog.c:443 plugins/sudoers/alias.c:125 +#: gram.y:218 gram.y:284 gram.y:291 gram.y:298 gram.y:305 gram.y:312 +#: gram.y:332 gram.y:356 gram.y:363 gram.y:370 gram.y:377 gram.y:384 +#: gram.y:453 gram.y:462 gram.y:473 gram.y:508 gram.y:515 gram.y:522 +#: gram.y:529 gram.y:556 gram.y:652 gram.y:659 gram.y:668 gram.y:677 +#: gram.y:694 gram.y:814 gram.y:821 gram.y:829 gram.y:835 gram.y:935 +#: gram.y:942 gram.y:949 gram.y:956 gram.y:963 gram.y:989 gram.y:996 +#: gram.y:1003 gram.y:1176 gram.y:1465 lib/iolog/iolog_fileio.c:1111 +#: lib/iolog/iolog_json.c:119 lib/iolog/iolog_json.c:304 +#: lib/iolog/iolog_json.c:334 lib/iolog/iolog_json.c:456 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/sendlog.c:464 plugins/sudoers/alias.c:125 #: plugins/sudoers/alias.c:132 plugins/sudoers/alias.c:148 -#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:212 +#: plugins/sudoers/audit.c:108 plugins/sudoers/audit.c:217 #: plugins/sudoers/auth/bsdauth.c:143 plugins/sudoers/auth/kerb5.c:118 #: plugins/sudoers/auth/kerb5.c:144 plugins/sudoers/auth/pam.c:669 #: plugins/sudoers/auth/rfc1938.c:111 plugins/sudoers/auth/sia.c:59 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:161 -#: plugins/sudoers/cvtsudoers.c:178 plugins/sudoers/cvtsudoers.c:189 -#: plugins/sudoers/cvtsudoers.c:301 plugins/sudoers/cvtsudoers.c:429 -#: plugins/sudoers/cvtsudoers.c:562 plugins/sudoers/cvtsudoers.c:579 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:765 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:160 +#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 +#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 +#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:76 plugins/sudoers/cvtsudoers_ldif.c:151 #: plugins/sudoers/cvtsudoers_ldif.c:194 plugins/sudoers/cvtsudoers_ldif.c:235 #: plugins/sudoers/cvtsudoers_ldif.c:300 plugins/sudoers/cvtsudoers_ldif.c:371 -#: plugins/sudoers/cvtsudoers_ldif.c:426 plugins/sudoers/cvtsudoers_ldif.c:434 -#: plugins/sudoers/cvtsudoers_ldif.c:451 plugins/sudoers/cvtsudoers_ldif.c:460 -#: plugins/sudoers/cvtsudoers_ldif.c:607 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:133 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:382 -#: plugins/sudoers/iolog_client.c:559 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 +#: plugins/sudoers/cvtsudoers_ldif.c:421 plugins/sudoers/cvtsudoers_ldif.c:429 +#: plugins/sudoers/cvtsudoers_ldif.c:440 plugins/sudoers/cvtsudoers_ldif.c:447 +#: plugins/sudoers/cvtsudoers_ldif.c:460 plugins/sudoers/cvtsudoers_ldif.c:468 +#: plugins/sudoers/cvtsudoers_ldif.c:615 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:381 plugins/sudoers/iolog_client.c:547 +#: plugins/sudoers/iolog_client.c:561 plugins/sudoers/iolog_client.c:680 +#: plugins/sudoers/iolog_client.c:698 plugins/sudoers/iolog_client.c:1192 +#: plugins/sudoers/iolog_client.c:1421 plugins/sudoers/iolog_client.c:1739 +#: plugins/sudoers/iolog_client.c:1767 plugins/sudoers/ldap.c:183 #: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 #: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 #: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 #: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 +#: plugins/sudoers/ldap.c:1707 plugins/sudoers/ldap.c:1744 +#: plugins/sudoers/ldap.c:1825 plugins/sudoers/ldap.c:1960 +#: plugins/sudoers/ldap.c:2061 plugins/sudoers/ldap.c:2077 #: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 #: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 #: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 #: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 #: plugins/sudoers/ldap_conf.c:678 plugins/sudoers/ldap_conf.c:760 #: plugins/sudoers/ldap_util.c:326 plugins/sudoers/ldap_util.c:333 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:586 plugins/sudoers/logging.c:723 -#: plugins/sudoers/logging.c:1083 plugins/sudoers/match_command.c:243 -#: plugins/sudoers/match_command.c:391 plugins/sudoers/match_command.c:438 -#: plugins/sudoers/match_command.c:509 plugins/sudoers/match_digest.c:80 -#: plugins/sudoers/parse.c:193 plugins/sudoers/parse.c:205 -#: plugins/sudoers/parse.c:220 plugins/sudoers/parse.c:232 +#: plugins/sudoers/ldap_util.c:604 plugins/sudoers/linux_audit.c:84 +#: plugins/sudoers/logging.c:102 plugins/sudoers/logging.c:191 +#: plugins/sudoers/logging.c:518 plugins/sudoers/logging.c:544 +#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:722 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:280 +#: plugins/sudoers/match_command.c:448 plugins/sudoers/match_command.c:498 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:199 plugins/sudoers/parse.c:213 +#: plugins/sudoers/parse.c:230 plugins/sudoers/parse.c:244 +#: plugins/sudoers/parse.c:264 plugins/sudoers/parse.c:275 #: plugins/sudoers/parse_ldif.c:153 plugins/sudoers/parse_ldif.c:184 #: plugins/sudoers/parse_ldif.c:253 plugins/sudoers/parse_ldif.c:260 #: plugins/sudoers/parse_ldif.c:265 plugins/sudoers/parse_ldif.c:341 @@ -116,325 +119,341 @@ msgstr "对不起,请重试。" #: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:624 #: plugins/sudoers/parse_ldif.c:649 plugins/sudoers/parse_ldif.c:707 #: plugins/sudoers/parse_ldif.c:724 plugins/sudoers/parse_ldif.c:752 -#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 +#: plugins/sudoers/parse_ldif.c:759 plugins/sudoers/policy.c:521 +#: plugins/sudoers/policy.c:869 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/pwutil.c:194 plugins/sudoers/pwutil.c:265 +#: plugins/sudoers/pwutil.c:343 plugins/sudoers/pwutil.c:517 +#: plugins/sudoers/pwutil.c:581 plugins/sudoers/pwutil.c:652 +#: plugins/sudoers/pwutil.c:811 plugins/sudoers/pwutil.c:867 +#: plugins/sudoers/pwutil.c:911 plugins/sudoers/pwutil.c:968 #: plugins/sudoers/sssd.c:146 plugins/sudoers/sssd.c:409 #: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 -#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:755 -#: plugins/sudoers/stubs.c:96 plugins/sudoers/stubs.c:104 -#: plugins/sudoers/sudoers.c:316 plugins/sudoers/sudoers.c:327 -#: plugins/sudoers/sudoers.c:337 plugins/sudoers/sudoers.c:380 -#: plugins/sudoers/sudoers.c:720 plugins/sudoers/sudoers.c:849 -#: plugins/sudoers/sudoers.c:894 plugins/sudoers/sudoers.c:1198 -#: plugins/sudoers/sudoreplay.c:553 plugins/sudoers/sudoreplay.c:556 -#: plugins/sudoers/sudoreplay.c:1260 plugins/sudoers/sudoreplay.c:1470 -#: plugins/sudoers/sudoreplay.c:1474 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 #: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 #: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 #: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 #: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 #: plugins/sudoers/toke_util.c:129 plugins/sudoers/toke_util.c:157 -#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:146 -#: plugins/sudoers/visudo.c:322 plugins/sudoers/visudo.c:328 -#: plugins/sudoers/visudo.c:438 plugins/sudoers/visudo.c:616 -#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:1024 -#: plugins/sudoers/visudo.c:1121 toke.l:864 toke.l:981 toke.l:1039 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 msgid "unable to allocate memory" msgstr "无法分配内存" -#: gram.y:505 +#: gram.y:550 msgid "a digest requires a path name" msgstr "摘要需要路径参数" -#: gram.y:638 +#: gram.y:579 +msgid "values for \"CWD\" must start with a '/', '~', or '*'" +msgstr "“CWD”的值必须以“/”、“~”或“*”开头" + +#: gram.y:591 +msgid "values for \"CHROOT\" must start with a '/', '~', or '*'" +msgstr "“CHROOT”的值必须以“/”、“~”或“*”开头" + +#: gram.y:715 msgid "invalid notbefore value" msgstr "无效的 notbefore 值" -#: gram.y:646 +#: gram.y:723 msgid "invalid notafter value" msgstr "无效的 notafter 值" -#: gram.y:655 plugins/sudoers/policy.c:306 +#: gram.y:732 plugins/sudoers/policy.c:330 msgid "timeout value too large" msgstr "超时值过大" -#: gram.y:657 plugins/sudoers/policy.c:308 +#: gram.y:734 plugins/sudoers/policy.c:332 msgid "invalid timeout value" msgstr "无效的超时值" -#: gram.y:1347 lib/iolog/iolog_fileio.c:1101 lib/iolog/iolog_json.c:120 -#: lib/iolog/iolog_json.c:282 lib/iolog/iolog_json.c:313 -#: lib/iolog/iolog_json.c:435 lib/iolog/iolog_json.c:713 -#: lib/iolog/iolog_util.c:106 lib/iolog/iolog_util.c:115 -#: lib/iolog/iolog_util.c:125 lib/iolog/iolog_util.c:133 -#: lib/iolog/iolog_util.c:137 lib/iolog/iolog_util.c:196 -#: logsrvd/eventlog.c:223 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 -#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:443 logsrvd/sendlog.c:1302 -#: logsrvd/sendlog.c:1309 logsrvd/sendlog.c:1727 plugins/sudoers/audit.c:108 -#: plugins/sudoers/audit.c:212 plugins/sudoers/auth/pam.c:482 +#: gram.y:1041 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: gram.y:1465 lib/iolog/iolog_fileio.c:1111 lib/iolog/iolog_json.c:119 +#: lib/iolog/iolog_json.c:303 lib/iolog/iolog_json.c:334 +#: lib/iolog/iolog_json.c:456 lib/iolog/iolog_json.c:734 +#: lib/iolog/iolog_util.c:105 lib/iolog/iolog_util.c:114 +#: lib/iolog/iolog_util.c:124 lib/iolog/iolog_util.c:132 +#: lib/iolog/iolog_util.c:136 lib/iolog/iolog_util.c:195 +#: logsrvd/eventlog.c:233 logsrvd/logsrvd.c:1208 logsrvd/logsrvd.c:1221 +#: logsrvd/logsrvd.c:1266 logsrvd/sendlog.c:464 logsrvd/sendlog.c:1305 +#: logsrvd/sendlog.c:1312 logsrvd/sendlog.c:1730 plugins/sudoers/audit.c:108 +#: plugins/sudoers/audit.c:217 plugins/sudoers/auth/pam.c:482 #: plugins/sudoers/auth/pam.c:669 plugins/sudoers/auth/rfc1938.c:111 -#: plugins/sudoers/cvtsudoers.c:120 plugins/sudoers/cvtsudoers.c:160 -#: plugins/sudoers/cvtsudoers.c:177 plugins/sudoers/cvtsudoers.c:188 -#: plugins/sudoers/cvtsudoers.c:300 plugins/sudoers/cvtsudoers.c:428 -#: plugins/sudoers/cvtsudoers.c:561 plugins/sudoers/cvtsudoers.c:578 -#: plugins/sudoers/cvtsudoers.c:642 plugins/sudoers/cvtsudoers.c:757 -#: plugins/sudoers/cvtsudoers.c:764 plugins/sudoers/cvtsudoers.c:1179 -#: plugins/sudoers/cvtsudoers.c:1183 plugins/sudoers/cvtsudoers.c:1285 +#: plugins/sudoers/cvtsudoers.c:119 plugins/sudoers/cvtsudoers.c:159 +#: plugins/sudoers/cvtsudoers.c:176 plugins/sudoers/cvtsudoers.c:187 +#: plugins/sudoers/cvtsudoers.c:299 plugins/sudoers/cvtsudoers.c:427 +#: plugins/sudoers/cvtsudoers.c:560 plugins/sudoers/cvtsudoers.c:577 +#: plugins/sudoers/cvtsudoers.c:641 plugins/sudoers/cvtsudoers.c:756 +#: plugins/sudoers/cvtsudoers.c:763 plugins/sudoers/cvtsudoers.c:1178 +#: plugins/sudoers/cvtsudoers.c:1182 plugins/sudoers/cvtsudoers.c:1284 #: plugins/sudoers/cvtsudoers_json.c:75 plugins/sudoers/cvtsudoers_ldif.c:150 #: plugins/sudoers/cvtsudoers_ldif.c:193 plugins/sudoers/cvtsudoers_ldif.c:234 #: plugins/sudoers/cvtsudoers_ldif.c:299 plugins/sudoers/cvtsudoers_ldif.c:370 -#: plugins/sudoers/cvtsudoers_ldif.c:425 plugins/sudoers/cvtsudoers_ldif.c:433 -#: plugins/sudoers/cvtsudoers_ldif.c:450 plugins/sudoers/cvtsudoers_ldif.c:459 -#: plugins/sudoers/cvtsudoers_ldif.c:606 plugins/sudoers/defaults.c:626 -#: plugins/sudoers/defaults.c:919 plugins/sudoers/defaults.c:1052 -#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:84 -#: plugins/sudoers/editor.c:95 plugins/sudoers/env.c:261 -#: plugins/sudoers/filedigest.c:54 plugins/sudoers/filedigest.c:70 -#: plugins/sudoers/gc.c:56 plugins/sudoers/group_plugin.c:132 -#: plugins/sudoers/interfaces.c:72 plugins/sudoers/iolog.c:483 -#: plugins/sudoers/iolog_client.c:105 plugins/sudoers/iolog_client.c:215 -#: plugins/sudoers/iolog_client.c:236 plugins/sudoers/iolog_client.c:249 -#: plugins/sudoers/iolog_client.c:382 plugins/sudoers/iolog_client.c:678 -#: plugins/sudoers/iolog_client.c:696 plugins/sudoers/iolog_client.c:1176 -#: plugins/sudoers/iolog_client.c:1405 plugins/sudoers/iolog_client.c:1723 -#: plugins/sudoers/iolog_client.c:1751 plugins/sudoers/ldap.c:183 -#: plugins/sudoers/ldap.c:421 plugins/sudoers/ldap.c:431 -#: plugins/sudoers/ldap.c:436 plugins/sudoers/ldap.c:440 -#: plugins/sudoers/ldap.c:452 plugins/sudoers/ldap.c:743 -#: plugins/sudoers/ldap.c:907 plugins/sudoers/ldap.c:1279 -#: plugins/sudoers/ldap.c:1706 plugins/sudoers/ldap.c:1743 -#: plugins/sudoers/ldap.c:1824 plugins/sudoers/ldap.c:1959 -#: plugins/sudoers/ldap.c:2060 plugins/sudoers/ldap.c:2076 -#: plugins/sudoers/ldap_conf.c:218 plugins/sudoers/ldap_conf.c:249 -#: plugins/sudoers/ldap_conf.c:301 plugins/sudoers/ldap_conf.c:337 -#: plugins/sudoers/ldap_conf.c:441 plugins/sudoers/ldap_conf.c:456 -#: plugins/sudoers/ldap_conf.c:553 plugins/sudoers/ldap_conf.c:586 -#: plugins/sudoers/ldap_conf.c:677 plugins/sudoers/ldap_conf.c:760 -#: plugins/sudoers/ldap_util.c:325 plugins/sudoers/ldap_util.c:332 -#: plugins/sudoers/ldap_util.c:598 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:103 plugins/sudoers/logging.c:192 -#: plugins/sudoers/logging.c:519 plugins/sudoers/logging.c:545 -#: plugins/sudoers/logging.c:585 plugins/sudoers/logging.c:1083 -#: plugins/sudoers/match_command.c:242 plugins/sudoers/match_command.c:390 -#: plugins/sudoers/match_command.c:437 plugins/sudoers/match_command.c:509 -#: plugins/sudoers/match_digest.c:80 plugins/sudoers/parse.c:192 -#: plugins/sudoers/parse.c:204 plugins/sudoers/parse.c:219 -#: plugins/sudoers/parse.c:231 plugins/sudoers/parse_ldif.c:152 -#: plugins/sudoers/parse_ldif.c:183 plugins/sudoers/parse_ldif.c:252 -#: plugins/sudoers/parse_ldif.c:259 plugins/sudoers/parse_ldif.c:264 -#: plugins/sudoers/parse_ldif.c:340 plugins/sudoers/parse_ldif.c:351 -#: plugins/sudoers/parse_ldif.c:378 plugins/sudoers/parse_ldif.c:395 -#: plugins/sudoers/parse_ldif.c:407 plugins/sudoers/parse_ldif.c:411 -#: plugins/sudoers/parse_ldif.c:425 plugins/sudoers/parse_ldif.c:594 -#: plugins/sudoers/parse_ldif.c:623 plugins/sudoers/parse_ldif.c:648 -#: plugins/sudoers/parse_ldif.c:706 plugins/sudoers/parse_ldif.c:723 -#: plugins/sudoers/parse_ldif.c:751 plugins/sudoers/parse_ldif.c:758 -#: plugins/sudoers/policy.c:120 plugins/sudoers/policy.c:129 -#: plugins/sudoers/policy.c:138 plugins/sudoers/policy.c:164 -#: plugins/sudoers/policy.c:291 plugins/sudoers/policy.c:306 -#: plugins/sudoers/policy.c:308 plugins/sudoers/policy.c:337 -#: plugins/sudoers/policy.c:346 plugins/sudoers/policy.c:389 -#: plugins/sudoers/policy.c:399 plugins/sudoers/policy.c:408 -#: plugins/sudoers/policy.c:417 plugins/sudoers/policy.c:491 -#: plugins/sudoers/policy.c:823 plugins/sudoers/prompt.c:93 -#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:262 -#: plugins/sudoers/pwutil.c:340 plugins/sudoers/pwutil.c:514 -#: plugins/sudoers/pwutil.c:578 plugins/sudoers/pwutil.c:649 -#: plugins/sudoers/pwutil.c:808 plugins/sudoers/pwutil.c:865 -#: plugins/sudoers/pwutil.c:909 plugins/sudoers/pwutil.c:967 -#: plugins/sudoers/set_perms.c:359 plugins/sudoers/set_perms.c:698 -#: plugins/sudoers/set_perms.c:1061 plugins/sudoers/set_perms.c:1364 -#: plugins/sudoers/set_perms.c:1529 plugins/sudoers/sssd.c:145 -#: plugins/sudoers/sssd.c:409 plugins/sudoers/sssd.c:472 -#: plugins/sudoers/sssd.c:516 plugins/sudoers/sssd.c:563 -#: plugins/sudoers/sssd.c:755 plugins/sudoers/stubs.c:96 -#: plugins/sudoers/stubs.c:104 plugins/sudoers/sudoers.c:316 -#: plugins/sudoers/sudoers.c:327 plugins/sudoers/sudoers.c:337 -#: plugins/sudoers/sudoers.c:380 plugins/sudoers/sudoers.c:720 -#: plugins/sudoers/sudoers.c:849 plugins/sudoers/sudoers.c:894 -#: plugins/sudoers/sudoers.c:1198 plugins/sudoers/sudoreplay.c:553 -#: plugins/sudoers/sudoreplay.c:556 plugins/sudoers/sudoreplay.c:1260 -#: plugins/sudoers/sudoreplay.c:1470 plugins/sudoers/sudoreplay.c:1474 -#: plugins/sudoers/testsudoers.c:128 plugins/sudoers/testsudoers.c:228 -#: plugins/sudoers/testsudoers.c:245 plugins/sudoers/testsudoers.c:581 -#: plugins/sudoers/timestamp.c:432 plugins/sudoers/timestamp.c:476 -#: plugins/sudoers/timestamp.c:986 plugins/sudoers/toke_util.c:51 -#: plugins/sudoers/toke_util.c:104 plugins/sudoers/toke_util.c:128 -#: plugins/sudoers/toke_util.c:157 plugins/sudoers/tsdump.c:123 -#: plugins/sudoers/visudo.c:146 plugins/sudoers/visudo.c:322 -#: plugins/sudoers/visudo.c:328 plugins/sudoers/visudo.c:438 -#: plugins/sudoers/visudo.c:616 plugins/sudoers/visudo.c:936 -#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1121 toke.l:864 -#: toke.l:981 toke.l:1039 +#: plugins/sudoers/cvtsudoers_ldif.c:420 plugins/sudoers/cvtsudoers_ldif.c:428 +#: plugins/sudoers/cvtsudoers_ldif.c:439 plugins/sudoers/cvtsudoers_ldif.c:446 +#: plugins/sudoers/cvtsudoers_ldif.c:459 plugins/sudoers/cvtsudoers_ldif.c:467 +#: plugins/sudoers/cvtsudoers_ldif.c:614 plugins/sudoers/defaults.c:626 +#: plugins/sudoers/defaults.c:918 plugins/sudoers/defaults.c:1093 +#: plugins/sudoers/editor.c:66 plugins/sudoers/editor.c:85 +#: plugins/sudoers/editor.c:96 plugins/sudoers/env.c:261 +#: plugins/sudoers/exptilde.c:92 plugins/sudoers/filedigest.c:54 +#: plugins/sudoers/filedigest.c:70 plugins/sudoers/gc.c:56 +#: plugins/sudoers/group_plugin.c:132 plugins/sudoers/interfaces.c:72 +#: plugins/sudoers/iolog.c:491 plugins/sudoers/iolog_client.c:104 +#: plugins/sudoers/iolog_client.c:214 plugins/sudoers/iolog_client.c:235 +#: plugins/sudoers/iolog_client.c:248 plugins/sudoers/iolog_client.c:381 +#: plugins/sudoers/iolog_client.c:680 plugins/sudoers/iolog_client.c:698 +#: plugins/sudoers/iolog_client.c:1192 plugins/sudoers/iolog_client.c:1421 +#: plugins/sudoers/iolog_client.c:1739 plugins/sudoers/iolog_client.c:1767 +#: plugins/sudoers/ldap.c:183 plugins/sudoers/ldap.c:421 +#: plugins/sudoers/ldap.c:431 plugins/sudoers/ldap.c:436 +#: plugins/sudoers/ldap.c:440 plugins/sudoers/ldap.c:452 +#: plugins/sudoers/ldap.c:743 plugins/sudoers/ldap.c:907 +#: plugins/sudoers/ldap.c:1279 plugins/sudoers/ldap.c:1707 +#: plugins/sudoers/ldap.c:1744 plugins/sudoers/ldap.c:1825 +#: plugins/sudoers/ldap.c:1960 plugins/sudoers/ldap.c:2061 +#: plugins/sudoers/ldap.c:2077 plugins/sudoers/ldap_conf.c:218 +#: plugins/sudoers/ldap_conf.c:249 plugins/sudoers/ldap_conf.c:301 +#: plugins/sudoers/ldap_conf.c:337 plugins/sudoers/ldap_conf.c:441 +#: plugins/sudoers/ldap_conf.c:456 plugins/sudoers/ldap_conf.c:553 +#: plugins/sudoers/ldap_conf.c:586 plugins/sudoers/ldap_conf.c:677 +#: plugins/sudoers/ldap_conf.c:760 plugins/sudoers/ldap_util.c:325 +#: plugins/sudoers/ldap_util.c:332 plugins/sudoers/ldap_util.c:604 +#: plugins/sudoers/linux_audit.c:84 plugins/sudoers/logging.c:102 +#: plugins/sudoers/logging.c:191 plugins/sudoers/logging.c:518 +#: plugins/sudoers/logging.c:544 plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:1091 plugins/sudoers/match_command.c:279 +#: plugins/sudoers/match_command.c:447 plugins/sudoers/match_command.c:497 +#: plugins/sudoers/match_command.c:572 plugins/sudoers/match_digest.c:80 +#: plugins/sudoers/parse.c:198 plugins/sudoers/parse.c:212 +#: plugins/sudoers/parse.c:229 plugins/sudoers/parse.c:243 +#: plugins/sudoers/parse.c:263 plugins/sudoers/parse.c:274 +#: plugins/sudoers/parse_ldif.c:152 plugins/sudoers/parse_ldif.c:183 +#: plugins/sudoers/parse_ldif.c:252 plugins/sudoers/parse_ldif.c:259 +#: plugins/sudoers/parse_ldif.c:264 plugins/sudoers/parse_ldif.c:340 +#: plugins/sudoers/parse_ldif.c:351 plugins/sudoers/parse_ldif.c:378 +#: plugins/sudoers/parse_ldif.c:395 plugins/sudoers/parse_ldif.c:407 +#: plugins/sudoers/parse_ldif.c:411 plugins/sudoers/parse_ldif.c:425 +#: plugins/sudoers/parse_ldif.c:594 plugins/sudoers/parse_ldif.c:623 +#: plugins/sudoers/parse_ldif.c:648 plugins/sudoers/parse_ldif.c:706 +#: plugins/sudoers/parse_ldif.c:723 plugins/sudoers/parse_ldif.c:751 +#: plugins/sudoers/parse_ldif.c:758 plugins/sudoers/policy.c:134 +#: plugins/sudoers/policy.c:143 plugins/sudoers/policy.c:152 +#: plugins/sudoers/policy.c:178 plugins/sudoers/policy.c:315 +#: plugins/sudoers/policy.c:330 plugins/sudoers/policy.c:332 +#: plugins/sudoers/policy.c:361 plugins/sudoers/policy.c:370 +#: plugins/sudoers/policy.c:413 plugins/sudoers/policy.c:423 +#: plugins/sudoers/policy.c:432 plugins/sudoers/policy.c:441 +#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:869 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:265 plugins/sudoers/pwutil.c:343 +#: plugins/sudoers/pwutil.c:517 plugins/sudoers/pwutil.c:581 +#: plugins/sudoers/pwutil.c:652 plugins/sudoers/pwutil.c:811 +#: plugins/sudoers/pwutil.c:867 plugins/sudoers/pwutil.c:911 +#: plugins/sudoers/pwutil.c:968 plugins/sudoers/set_perms.c:359 +#: plugins/sudoers/set_perms.c:698 plugins/sudoers/set_perms.c:1061 +#: plugins/sudoers/set_perms.c:1364 plugins/sudoers/set_perms.c:1529 +#: plugins/sudoers/sssd.c:145 plugins/sudoers/sssd.c:409 +#: plugins/sudoers/sssd.c:472 plugins/sudoers/sssd.c:516 +#: plugins/sudoers/sssd.c:563 plugins/sudoers/sssd.c:756 +#: plugins/sudoers/stubs.c:103 plugins/sudoers/stubs.c:111 +#: plugins/sudoers/sudoers.c:303 plugins/sudoers/sudoers.c:328 +#: plugins/sudoers/sudoers.c:372 plugins/sudoers/sudoers.c:383 +#: plugins/sudoers/sudoers.c:393 plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:797 plugins/sudoers/sudoers.c:960 +#: plugins/sudoers/sudoers.c:994 plugins/sudoers/sudoers.c:1298 +#: plugins/sudoers/sudoreplay.c:551 plugins/sudoers/sudoreplay.c:554 +#: plugins/sudoers/sudoreplay.c:1258 plugins/sudoers/sudoreplay.c:1468 +#: plugins/sudoers/sudoreplay.c:1472 plugins/sudoers/testsudoers.c:128 +#: plugins/sudoers/testsudoers.c:228 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/testsudoers.c:581 plugins/sudoers/timestamp.c:432 +#: plugins/sudoers/timestamp.c:476 plugins/sudoers/timestamp.c:986 +#: plugins/sudoers/toke_util.c:51 plugins/sudoers/toke_util.c:104 +#: plugins/sudoers/toke_util.c:128 plugins/sudoers/toke_util.c:157 +#: plugins/sudoers/tsdump.c:123 plugins/sudoers/visudo.c:145 +#: plugins/sudoers/visudo.c:323 plugins/sudoers/visudo.c:329 +#: plugins/sudoers/visudo.c:439 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:935 plugins/sudoers/visudo.c:1008 +#: plugins/sudoers/visudo.c:1127 toke.l:922 toke.l:1042 toke.l:1100 #, c-format msgid "%s: %s" msgstr "%s:%s" -#: lib/iolog/iolog_fileio.c:157 +#: lib/iolog/iolog_fileio.c:155 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s 存在,但不是目录(0%o)" -#: lib/iolog/iolog_fileio.c:187 lib/iolog/iolog_fileio.c:233 +#: lib/iolog/iolog_fileio.c:185 lib/iolog/iolog_fileio.c:231 #: plugins/sudoers/timestamp.c:205 #, c-format msgid "unable to mkdir %s" msgstr "无法创建目录 %s" -#: lib/iolog/iolog_fileio.c:237 plugins/sudoers/visudo.c:733 -#: plugins/sudoers/visudo.c:744 +#: lib/iolog/iolog_fileio.c:235 plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:743 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "无法将 %s 的模式更改为 0%o" -#: lib/iolog/iolog_json.c:114 +#: lib/iolog/iolog_json.c:113 #, c-format msgid "expected JSON_STRING, got %d" -msgstr "" +msgstr "期望得到 JSON_STRING,但得到了 %d" -#: lib/iolog/iolog_json.c:305 +#: lib/iolog/iolog_json.c:326 msgid "missing double quote in name" -msgstr "" +msgstr "名称中缺少双引号" -#: lib/iolog/iolog_json.c:392 +#: lib/iolog/iolog_json.c:413 #, c-format msgid "expected JSON_OBJECT, got %d" -msgstr "" +msgstr "期望得到 JSON_OBJECT,但得到了 %d" -#: lib/iolog/iolog_json.c:441 lib/iolog/iolog_json.c:444 -#: lib/iolog/iolog_json.c:446 lib/iolog/iolog_json.c:538 -#: logsrvd/eventlog.c:228 plugins/sudoers/cvtsudoers_ldif.c:244 -#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:563 +#: lib/iolog/iolog_json.c:462 lib/iolog/iolog_json.c:465 +#: lib/iolog/iolog_json.c:467 lib/iolog/iolog_json.c:559 +#: logsrvd/eventlog.c:238 plugins/sudoers/cvtsudoers_ldif.c:244 +#: plugins/sudoers/cvtsudoers_ldif.c:251 plugins/sudoers/cvtsudoers_ldif.c:571 #: plugins/sudoers/env.c:323 plugins/sudoers/env.c:330 -#: plugins/sudoers/env.c:435 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:577 plugins/sudoers/ldap.c:516 +#: plugins/sudoers/env.c:437 plugins/sudoers/iolog.c:571 +#: plugins/sudoers/iolog.c:587 plugins/sudoers/ldap.c:516 #: plugins/sudoers/ldap.c:747 plugins/sudoers/ldap.c:1080 #: plugins/sudoers/ldap_conf.c:222 plugins/sudoers/ldap_conf.c:312 -#: plugins/sudoers/linux_audit.c:89 plugins/sudoers/logging.c:1088 -#: plugins/sudoers/policy.c:521 plugins/sudoers/policy.c:668 -#: plugins/sudoers/policy.c:678 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:916 plugins/sudoers/testsudoers.c:249 +#: plugins/sudoers/linux_audit.c:90 plugins/sudoers/logging.c:1096 +#: plugins/sudoers/policy.c:551 plugins/sudoers/policy.c:706 +#: plugins/sudoers/policy.c:716 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:1016 plugins/sudoers/testsudoers.c:249 #: plugins/sudoers/toke_util.c:169 #, c-format msgid "internal error, %s overflow" msgstr "内部错误,%s 溢出" -#: lib/iolog/iolog_json.c:607 lib/iolog/iolog_json.c:731 +#: lib/iolog/iolog_json.c:628 lib/iolog/iolog_json.c:752 msgid "unmatched close brace" msgstr "" -#: lib/iolog/iolog_json.c:616 +#: lib/iolog/iolog_json.c:637 msgid "unexpected array" msgstr "" -#: lib/iolog/iolog_json.c:629 lib/iolog/iolog_json.c:733 +#: lib/iolog/iolog_json.c:650 lib/iolog/iolog_json.c:754 msgid "unmatched close bracket" msgstr "" -#: lib/iolog/iolog_json.c:637 +#: lib/iolog/iolog_json.c:658 msgid "unexpected string" msgstr "未预期的字符串" -#: lib/iolog/iolog_json.c:647 +#: lib/iolog/iolog_json.c:668 msgid "missing colon after name" msgstr "名称后缺少冒号" -#: lib/iolog/iolog_json.c:658 lib/iolog/iolog_json.c:673 -#: lib/iolog/iolog_json.c:688 +#: lib/iolog/iolog_json.c:679 lib/iolog/iolog_json.c:694 +#: lib/iolog/iolog_json.c:709 msgid "unexpected boolean" -msgstr "" +msgstr "未预期的布尔值" -#: lib/iolog/iolog_json.c:704 +#: lib/iolog/iolog_json.c:725 msgid "unexpected number" msgstr "未预期的数字" -#: lib/iolog/iolog_json.c:741 +#: lib/iolog/iolog_json.c:762 #, c-format msgid "%s:%u unable to parse \"%s\"" msgstr "%s:%u 无法解析 \"%s\"" -#: lib/iolog/iolog_util.c:71 +#: lib/iolog/iolog_util.c:70 #, c-format msgid "%s: invalid log file" msgstr "%s:无效的日志文件" -#: lib/iolog/iolog_util.c:89 +#: lib/iolog/iolog_util.c:88 #, c-format msgid "%s: time stamp field is missing" msgstr "%s:缺少 时间戳 字段" -#: lib/iolog/iolog_util.c:95 +#: lib/iolog/iolog_util.c:94 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s:时间戳 %s:%s" -#: lib/iolog/iolog_util.c:102 +#: lib/iolog/iolog_util.c:101 #, c-format msgid "%s: user field is missing" msgstr "%s:缺少 用户 字段" -#: lib/iolog/iolog_util.c:111 +#: lib/iolog/iolog_util.c:110 #, c-format msgid "%s: runas user field is missing" msgstr "%s:缺少 runas 用户 字段" -#: lib/iolog/iolog_util.c:120 +#: lib/iolog/iolog_util.c:119 #, c-format msgid "%s: runas group field is missing" msgstr "%s:缺少 runas 组 字段" -#: lib/iolog/iolog_util.c:419 -#, fuzzy, c-format -#| msgid "invalid timing file line: %s" +#: lib/iolog/iolog_util.c:418 +#, c-format msgid "error reading timing file: %s" -msgstr "无效的时序文件行:%s" +msgstr "读取时序文件出错:%s" -#: lib/iolog/iolog_util.c:426 +#: lib/iolog/iolog_util.c:425 #, c-format msgid "invalid timing file line: %s" msgstr "无效的时序文件行:%s" -#: logsrvd/eventlog.c:430 plugins/sudoers/logging.c:112 +#: logsrvd/eventlog.c:440 plugins/sudoers/logging.c:111 #, c-format msgid "%8s : %s" msgstr "%8s:%s" -#: logsrvd/eventlog.c:459 plugins/sudoers/logging.c:136 +#: logsrvd/eventlog.c:469 plugins/sudoers/logging.c:135 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s:(命令继续执行) %s" -#: logsrvd/iolog_writer.c:936 +#: logsrvd/iolog_writer.c:977 msgid "log is already complete, cannot be restarted" msgstr "" -#: logsrvd/iolog_writer.c:967 +#: logsrvd/iolog_writer.c:1008 msgid "unable to restart log" msgstr "无法重新启动 log" -#: logsrvd/logsrv_util.c:98 logsrvd/logsrv_util.c:105 -#: plugins/sudoers/sudoreplay.c:353 plugins/sudoers/sudoreplay.c:359 +#: logsrvd/logsrv_util.c:99 logsrvd/logsrv_util.c:106 +#: plugins/sudoers/sudoreplay.c:351 plugins/sudoers/sudoreplay.c:357 #, c-format msgid "unable to open %s/%s" msgstr "无法打开 %s/%s" -#: logsrvd/logsrv_util.c:132 +#: logsrvd/logsrv_util.c:133 #, c-format msgid "missing I/O log file %s/%s" msgstr "缺失 I/O 日志文件 %s/%s" -#: logsrvd/logsrv_util.c:139 +#: logsrvd/logsrv_util.c:140 #, fuzzy, c-format #| msgid "%s: unable to parse '%s': %s" msgid "%s/%s: unable to seek forward %zu" msgstr "%s:无法解析“%s”:%s" -#: logsrvd/logsrv_util.c:149 +#: logsrvd/logsrv_util.c:150 #, fuzzy, c-format #| msgid "unable to find symbol \"%s\" in %s" msgid "unable to find resume point [%lld, %ld] in %s/%s" @@ -456,11 +475,11 @@ msgstr "解析 AcceptMessage 出错" #: logsrvd/logsrvd.c:257 msgid "error creating I/O log" -msgstr "" +msgstr "创建 I/O 日志出错" #: logsrvd/logsrvd.c:265 msgid "error logging accept event" -msgstr "" +msgstr "记录接受事件时出错" #: logsrvd/logsrvd.c:308 msgid "invalid RejectMessage" @@ -472,11 +491,11 @@ msgstr "解析 RejectMessage 出错" #: logsrvd/logsrvd.c:325 msgid "error logging reject event" -msgstr "" +msgstr "记录拒绝事件时出错" #: logsrvd/logsrvd.c:430 msgid "error logging alert event" -msgstr "" +msgstr "记录警告事件时出错" #: logsrvd/logsrvd.c:451 logsrvd/logsrvd.c:502 logsrvd/logsrvd.c:534 msgid "protocol error" @@ -484,15 +503,15 @@ msgstr "协议错误" #: logsrvd/logsrvd.c:461 msgid "error writing IoBuffer" -msgstr "" +msgstr "写入 IoBuffer 出错" #: logsrvd/logsrvd.c:513 msgid "error writing ChangeWindowSize" -msgstr "" +msgstr "写入 ChangeWindowSize 出错" #: logsrvd/logsrvd.c:545 msgid "error writing CommandSuspend" -msgstr "" +msgstr "写入 CommandSuspend 出错" #: logsrvd/logsrvd.c:630 msgid "unrecognized ClientMessage type" @@ -515,39 +534,35 @@ msgid "unable to set TLS 1.3 ciphersuite to %s: %s" msgstr "无法执行 %s:%s" #: logsrvd/logsrvd.c:1197 -#, fuzzy, c-format -#| msgid "unable to resolve host %s" +#, c-format msgid "unable to get TLS server method: %s" -msgstr "无法解析主机:%s" +msgstr "无法获取 TLS 服务器方法:%s" #: logsrvd/logsrvd.c:1202 -#, fuzzy, c-format -#| msgid "unable to create %s" +#, c-format msgid "unable to create TLS context: %s" -msgstr "无法创建 %s" +msgstr "无法创建 TLS 上下文:%s" -#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:237 -#, fuzzy, c-format -#| msgid "unable to create %s" +#: logsrvd/logsrvd.c:1209 plugins/sudoers/iolog_client.c:236 +#, c-format msgid "unable to load certificate %s" -msgstr "无法创建 %s" +msgstr "无法加载证书 %s" -#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:217 +#: logsrvd/logsrvd.c:1222 plugins/sudoers/iolog_client.c:216 #, fuzzy, c-format #| msgid "unable to lock time stamp file %s" msgid "unable to load certificate authority bundle %s" msgstr "无法锁定时间戳文件 %s" -#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:250 -#, fuzzy, c-format -#| msgid "unable to load %s: %s" +#: logsrvd/logsrvd.c:1267 plugins/sudoers/iolog_client.c:249 +#, c-format msgid "unable to load private key %s" -msgstr "无法加载 %s:%s" +msgstr "无法加载私钥 %s" #: logsrvd/logsrvd.c:1284 logsrvd/logsrvd.c:1293 #, c-format msgid "unable to set diffie-hellman parameters: %s" -msgstr "" +msgstr "无法设置 diffie-hellman 参数:%s" #: logsrvd/logsrvd.c:1306 #, c-format @@ -558,36 +573,34 @@ msgstr "无法将最低协议版本设置为 TLS 1.2:%s" msgid "unable to get remote IP addr" msgstr "无法获取远程 IP 地址" -#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:264 +#: logsrvd/logsrvd.c:1519 plugins/sudoers/iolog_client.c:263 #, c-format msgid "Unable to attach user data to the ssl object: %s" msgstr "" #: logsrvd/logsrvd.c:1527 logsrvd/logsrvd.c:1649 logsrvd/logsrvd.c:1749 -#: logsrvd/sendlog.c:1106 logsrvd/sendlog.c:1462 logsrvd/sendlog.c:1477 -#: logsrvd/sendlog.c:1535 plugins/sudoers/iolog.c:921 -#: plugins/sudoers/iolog.c:1054 plugins/sudoers/iolog.c:1152 -#: plugins/sudoers/iolog_client.c:109 plugins/sudoers/iolog_client.c:325 -#: plugins/sudoers/iolog_client.c:341 plugins/sudoers/iolog_client.c:387 -#: plugins/sudoers/iolog_client.c:567 plugins/sudoers/iolog_client.c:574 -#: plugins/sudoers/iolog_client.c:1150 plugins/sudoers/iolog_client.c:1186 -#: plugins/sudoers/iolog_client.c:1194 plugins/sudoers/iolog_client.c:1254 -#: plugins/sudoers/iolog_client.c:1361 plugins/sudoers/iolog_client.c:1477 -#: plugins/sudoers/iolog_client.c:1759 plugins/sudoers/iolog_client.c:1767 -#: plugins/sudoers/sudoreplay.c:513 plugins/sudoers/sudoreplay.c:560 -#: plugins/sudoers/sudoreplay.c:792 plugins/sudoers/sudoreplay.c:904 -#: plugins/sudoers/sudoreplay.c:994 plugins/sudoers/sudoreplay.c:1009 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/sudoreplay.c:1023 -#: plugins/sudoers/sudoreplay.c:1030 plugins/sudoers/sudoreplay.c:1037 -#: plugins/sudoers/sudoreplay.c:1164 +#: logsrvd/sendlog.c:1109 logsrvd/sendlog.c:1465 logsrvd/sendlog.c:1480 +#: logsrvd/sendlog.c:1538 plugins/sudoers/iolog.c:931 +#: plugins/sudoers/iolog.c:1064 plugins/sudoers/iolog.c:1162 +#: plugins/sudoers/iolog_client.c:108 plugins/sudoers/iolog_client.c:324 +#: plugins/sudoers/iolog_client.c:340 plugins/sudoers/iolog_client.c:386 +#: plugins/sudoers/iolog_client.c:569 plugins/sudoers/iolog_client.c:576 +#: plugins/sudoers/iolog_client.c:1166 plugins/sudoers/iolog_client.c:1202 +#: plugins/sudoers/iolog_client.c:1210 plugins/sudoers/iolog_client.c:1270 +#: plugins/sudoers/iolog_client.c:1377 plugins/sudoers/iolog_client.c:1493 +#: plugins/sudoers/iolog_client.c:1775 plugins/sudoers/iolog_client.c:1783 +#: plugins/sudoers/sudoreplay.c:511 plugins/sudoers/sudoreplay.c:558 +#: plugins/sudoers/sudoreplay.c:790 plugins/sudoers/sudoreplay.c:902 +#: plugins/sudoers/sudoreplay.c:992 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1014 plugins/sudoers/sudoreplay.c:1021 +#: plugins/sudoers/sudoreplay.c:1028 plugins/sudoers/sudoreplay.c:1035 +#: plugins/sudoers/sudoreplay.c:1162 msgid "unable to add event to queue" msgstr "无法将事件添加到队列" #: logsrvd/logsrvd.c:1703 logsrvd/logsrvd.c:1937 -#, fuzzy -#| msgid "unable to setup authentication" msgid "unable setup listen socket" -msgstr "无法设置认证" +msgstr "无法设置监听套接字" #: logsrvd/logsrvd.c:1843 logsrvd/sendlog.c:123 #, c-format @@ -595,6 +608,8 @@ msgid "" "%s - send sudo I/O log to remote server\n" "\n" msgstr "" +"%s - 将 sudo I/O 日志发送到远程服务器\n" +"\n" #: logsrvd/logsrvd.c:1846 msgid "" @@ -614,7 +629,7 @@ msgstr "" " -R, --random-drop 指定丢弃连接的百分比概率\n" " -V, --version 显示版本信息并退出\n" -#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1700 +#: logsrvd/logsrvd.c:1898 logsrvd/sendlog.c:1703 msgid "Protobuf-C version 1.3 or higher required" msgstr "需要 Protobuf-C 1.3 版或更高版本" @@ -624,9 +639,9 @@ msgstr "需要 Protobuf-C 1.3 版或更高版本" msgid "invalid random drop value: %s" msgstr "无效的 notafter 值" -#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1750 -#: plugins/sudoers/cvtsudoers.c:229 plugins/sudoers/sudoreplay.c:300 -#: plugins/sudoers/visudo.c:178 +#: logsrvd/logsrvd.c:1920 logsrvd/sendlog.c:1753 +#: plugins/sudoers/cvtsudoers.c:228 plugins/sudoers/sudoreplay.c:298 +#: plugins/sudoers/visudo.c:177 #, c-format msgid "%s version %s\n" msgstr "%s 版本 %s\n" @@ -669,10 +684,9 @@ msgid "%s:%d expected section name: %s" msgstr "" #: logsrvd/logsrvd_conf.c:868 -#, fuzzy, c-format -#| msgid "invalid uri: %s" +#, c-format msgid "invalid value for %s: %s" -msgstr "无效的 URI:%s" +msgstr "用于 %s 的无效的值:%s" #: logsrvd/logsrvd_conf.c:876 #, fuzzy, c-format @@ -711,7 +725,7 @@ msgid "" " -V, --version display version information and exit\n" msgstr "" -#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:433 +#: logsrvd/sendlog.c:163 plugins/sudoers/iolog_client.c:432 #, fuzzy, c-format #| msgid "unable to load %s: %s" msgid "unable to look up %s:%s: %s" @@ -721,122 +735,122 @@ msgstr "无法加载 %s:%s" msgid "unable to get server IP addr" msgstr "无法获取服务器 IP 地址" -#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:852 +#: logsrvd/sendlog.c:240 plugins/sudoers/sudoreplay.c:850 #, c-format msgid "unable to read %s/%s: %s" msgstr "无法读取 %s/%s:%s" -#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:684 +#: logsrvd/sendlog.c:261 plugins/sudoers/iolog_client.c:686 #, c-format msgid "client message too large: %zu" msgstr "客户端消息过大:%zu" -#: logsrvd/sendlog.c:791 +#: logsrvd/sendlog.c:794 #, c-format msgid "%s: write buffer already in use" msgstr "" -#: logsrvd/sendlog.c:843 plugins/sudoers/iolog.c:845 -#: plugins/sudoers/iolog.c:914 +#: logsrvd/sendlog.c:846 plugins/sudoers/iolog.c:855 +#: plugins/sudoers/iolog.c:924 #, c-format msgid "unexpected I/O event %d" msgstr "" -#: logsrvd/sendlog.c:889 logsrvd/sendlog.c:906 logsrvd/sendlog.c:940 -#: plugins/sudoers/iolog_client.c:1155 plugins/sudoers/iolog_client.c:1225 -#: plugins/sudoers/iolog_client.c:1273 +#: logsrvd/sendlog.c:892 logsrvd/sendlog.c:909 logsrvd/sendlog.c:943 +#: plugins/sudoers/iolog_client.c:1171 plugins/sudoers/iolog_client.c:1241 +#: plugins/sudoers/iolog_client.c:1289 #, c-format msgid "%s: unexpected state %d" msgstr "" -#: logsrvd/sendlog.c:912 plugins/sudoers/iolog_client.c:1231 +#: logsrvd/sendlog.c:915 plugins/sudoers/iolog_client.c:1247 msgid "invalid ServerHello" msgstr "无效的 ServerHello" -#: logsrvd/sendlog.c:976 plugins/sudoers/iolog_client.c:1317 +#: logsrvd/sendlog.c:979 plugins/sudoers/iolog_client.c:1333 #, c-format msgid "error message received from server: %s" msgstr "从服务器收到了错误消息:%s" -#: logsrvd/sendlog.c:989 plugins/sudoers/iolog_client.c:1330 +#: logsrvd/sendlog.c:992 plugins/sudoers/iolog_client.c:1346 #, c-format msgid "abort message received from server: %s" msgstr "从服务器收到了中止消息:%s" -#: logsrvd/sendlog.c:1008 plugins/sudoers/iolog_client.c:1349 +#: logsrvd/sendlog.c:1011 plugins/sudoers/iolog_client.c:1365 msgid "unable to unpack ServerMessage" msgstr "无法解包 ServerMessage" -#: logsrvd/sendlog.c:1048 plugins/sudoers/iolog_client.c:1382 +#: logsrvd/sendlog.c:1051 plugins/sudoers/iolog_client.c:1398 #, c-format msgid "%s: unexpected type_case value %d" msgstr "" -#: logsrvd/sendlog.c:1077 +#: logsrvd/sendlog.c:1080 msgid "timeout reading from server" msgstr "从服务器读取超时" -#: logsrvd/sendlog.c:1155 +#: logsrvd/sendlog.c:1158 msgid "premature EOF" msgstr "过早的文件结束" -#: logsrvd/sendlog.c:1168 plugins/sudoers/iolog_client.c:1536 +#: logsrvd/sendlog.c:1171 plugins/sudoers/iolog_client.c:1552 #, c-format msgid "server message too large: %u" msgstr "服务器消息过大:%u" -#: logsrvd/sendlog.c:1219 +#: logsrvd/sendlog.c:1222 msgid "timeout writing to server" msgstr "写入服务器时超时" -#: logsrvd/sendlog.c:1438 plugins/sudoers/iolog_client.c:297 +#: logsrvd/sendlog.c:1441 plugins/sudoers/iolog_client.c:296 msgid "TLS handshake timeout occurred" msgstr "TLS 握手超时" -#: logsrvd/sendlog.c:1457 logsrvd/sendlog.c:1472 -#: plugins/sudoers/iolog_client.c:319 plugins/sudoers/iolog_client.c:335 +#: logsrvd/sendlog.c:1460 logsrvd/sendlog.c:1475 +#: plugins/sudoers/iolog_client.c:318 plugins/sudoers/iolog_client.c:334 msgid "unable to set event" msgstr "无法设置事件" -#: logsrvd/sendlog.c:1482 logsrvd/sendlog.c:1486 +#: logsrvd/sendlog.c:1485 logsrvd/sendlog.c:1489 #, c-format msgid "TLS connection failed: %s" msgstr "TLS 连接失败:%s" -#: logsrvd/sendlog.c:1519 +#: logsrvd/sendlog.c:1522 #, c-format msgid "Unable to initialize ssl context: %s" msgstr "无法初始化 ssl 上下文:%s" -#: logsrvd/sendlog.c:1524 plugins/sudoers/iolog_client.c:259 +#: logsrvd/sendlog.c:1527 plugins/sudoers/iolog_client.c:258 #, c-format msgid "Unable to allocate ssl object: %s" msgstr "无法分配 ssl 对象:%s" -#: logsrvd/sendlog.c:1529 +#: logsrvd/sendlog.c:1532 #, c-format msgid "Unable to attach socket to the ssl object: %s" -msgstr "" +msgstr "无法将套接字附加给 ssl 对象:%s" -#: logsrvd/sendlog.c:1773 +#: logsrvd/sendlog.c:1776 msgid "both restart point and iolog ID must be specified" msgstr "" -#: logsrvd/sendlog.c:1777 +#: logsrvd/sendlog.c:1780 msgid "a restart point may not be set when no I/O is sent" msgstr "" -#: logsrvd/sendlog.c:1852 +#: logsrvd/sendlog.c:1855 #, c-format msgid "exited prematurely with state %d" -msgstr "" +msgstr "过早地退出,状态码为 %d" -#: logsrvd/sendlog.c:1853 +#: logsrvd/sendlog.c:1856 #, c-format msgid "elapsed time sent to server [%lld, %ld]" msgstr "" -#: logsrvd/sendlog.c:1855 +#: logsrvd/sendlog.c:1858 #, c-format msgid "commit point received from server [%lld, %ld]" msgstr "" @@ -846,11 +860,11 @@ msgstr "" msgid "Alias \"%s\" already defined" msgstr "别名“%s”已定义过" -#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:784 +#: plugins/sudoers/auth/aix_auth.c:198 plugins/sudoers/logging.c:783 msgid "unable to fork" msgstr "无法执行 fork" -#: plugins/sudoers/auth/aix_auth.c:278 +#: plugins/sudoers/auth/aix_auth.c:277 #, c-format msgid "unable to change password for %s" msgstr "无法为 %s 更改密码" @@ -872,11 +886,11 @@ msgstr "无效的认证类型" msgid "unable to initialize BSD authentication" msgstr "无法初始化 bsd 认证" -#: plugins/sudoers/auth/bsdauth.c:180 +#: plugins/sudoers/auth/bsdauth.c:179 msgid "your account has expired" msgstr "您的账户已过期" -#: plugins/sudoers/auth/bsdauth.c:182 +#: plugins/sudoers/auth/bsdauth.c:181 msgid "approval failed" msgstr "批准失败" @@ -983,7 +997,7 @@ msgstr "账户过期,或 PAM 配置缺少 sudo 使用的“account”节,联 msgid "PAM account management error: %s" msgstr "PAM 账户管理出错:%s" -#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:242 +#: plugins/sudoers/auth/rfc1938.c:99 plugins/sudoers/visudo.c:243 #, c-format msgid "you do not exist in the %s database" msgstr "%s 数据库中没有您" @@ -1012,7 +1026,7 @@ msgstr "SecurID 的认证句柄无效" msgid "SecurID communication failed" msgstr "SecurID 通讯失败" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:212 +#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:210 msgid "unknown SecurID error" msgstr "未知的 SecurID 错误" @@ -1020,7 +1034,7 @@ msgstr "未知的 SecurID 错误" msgid "invalid passcode length for SecurID" msgstr "无效的 SecurID 密码长度" -#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:123 msgid "unable to initialize SIA session" msgstr "无法初始化 SIA 会话" @@ -1044,7 +1058,7 @@ msgstr "sudo 编译时没有加入任何认证方法!如果您想关闭认证 msgid "Unable to initialize authentication methods." msgstr "无法初始化认证方法。" -#: plugins/sudoers/auth/sudo_auth.c:473 +#: plugins/sudoers/auth/sudo_auth.c:471 msgid "Authentication methods:" msgstr "认证方法:" @@ -1077,117 +1091,118 @@ msgstr "" "\n" #: plugins/sudoers/check.c:301 plugins/sudoers/check.c:311 -#: plugins/sudoers/sudoers.c:763 plugins/sudoers/sudoers.c:811 +#: plugins/sudoers/sudoers.c:840 plugins/sudoers/sudoers.c:891 #: plugins/sudoers/tsdump.c:119 #, c-format msgid "unknown uid: %u" msgstr "未知的用户 ID:%u" -#: plugins/sudoers/check.c:306 plugins/sudoers/iolog.c:117 -#: plugins/sudoers/policy.c:1037 plugins/sudoers/sudoers.c:387 -#: plugins/sudoers/sudoers.c:388 plugins/sudoers/sudoers.c:1240 -#: plugins/sudoers/testsudoers.c:219 plugins/sudoers/testsudoers.c:392 +#: plugins/sudoers/check.c:306 plugins/sudoers/exptilde.c:85 +#: plugins/sudoers/iolog.c:117 plugins/sudoers/policy.c:1083 +#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:443 +#: plugins/sudoers/sudoers.c:1340 plugins/sudoers/testsudoers.c:219 +#: plugins/sudoers/testsudoers.c:386 #, c-format msgid "unknown user: %s" msgstr "未知用户:%s" -#: plugins/sudoers/cvtsudoers.c:195 +#: plugins/sudoers/cvtsudoers.c:194 #, c-format msgid "order increment: %s: %s" msgstr "顺序增量:%s: %s" -#: plugins/sudoers/cvtsudoers.c:211 +#: plugins/sudoers/cvtsudoers.c:210 #, c-format msgid "starting order: %s: %s" msgstr "起始顺序:%s:%s" -#: plugins/sudoers/cvtsudoers.c:221 +#: plugins/sudoers/cvtsudoers.c:220 #, c-format msgid "order padding: %s: %s" msgstr "顺序填充:%s: %s" -#: plugins/sudoers/cvtsudoers.c:231 plugins/sudoers/visudo.c:180 +#: plugins/sudoers/cvtsudoers.c:230 plugins/sudoers/visudo.c:179 #, c-format msgid "%s grammar version %d\n" msgstr "%s 语法版本 %d\n" -#: plugins/sudoers/cvtsudoers.c:248 plugins/sudoers/testsudoers.c:167 +#: plugins/sudoers/cvtsudoers.c:247 plugins/sudoers/testsudoers.c:167 #, c-format msgid "unsupported input format %s" msgstr "不支持的输入格式 %s" -#: plugins/sudoers/cvtsudoers.c:263 +#: plugins/sudoers/cvtsudoers.c:262 #, c-format msgid "unsupported output format %s" msgstr "不支持的输出格式 %s" -#: plugins/sudoers/cvtsudoers.c:315 +#: plugins/sudoers/cvtsudoers.c:314 #, c-format msgid "%s: input and output files must be different" msgstr "%s:输入和输出文件不能相同" -#: plugins/sudoers/cvtsudoers.c:331 plugins/sudoers/sudoers.c:181 -#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:248 -#: plugins/sudoers/visudo.c:604 plugins/sudoers/visudo.c:927 +#: plugins/sudoers/cvtsudoers.c:330 plugins/sudoers/sudoers.c:182 +#: plugins/sudoers/testsudoers.c:258 plugins/sudoers/visudo.c:249 +#: plugins/sudoers/visudo.c:603 plugins/sudoers/visudo.c:926 msgid "unable to initialize sudoers default values" msgstr "无法初始化 sudoers 默认值" -#: plugins/sudoers/cvtsudoers.c:417 plugins/sudoers/ldap_conf.c:431 +#: plugins/sudoers/cvtsudoers.c:416 plugins/sudoers/ldap_conf.c:431 #, c-format msgid "%s: %s: %s: %s" msgstr "%s:%s:%s:%s" -#: plugins/sudoers/cvtsudoers.c:476 +#: plugins/sudoers/cvtsudoers.c:475 #, c-format msgid "%s: unknown key word: %s" msgstr "%s:未知的关键词:%s" -#: plugins/sudoers/cvtsudoers.c:522 +#: plugins/sudoers/cvtsudoers.c:521 #, c-format msgid "invalid defaults type: %s" msgstr "无效的默认值类型:%s" -#: plugins/sudoers/cvtsudoers.c:545 +#: plugins/sudoers/cvtsudoers.c:544 #, c-format msgid "invalid suppression type: %s" msgstr "无效的压缩类型:%s" -#: plugins/sudoers/cvtsudoers.c:585 plugins/sudoers/cvtsudoers.c:599 +#: plugins/sudoers/cvtsudoers.c:584 plugins/sudoers/cvtsudoers.c:598 #, c-format msgid "invalid filter: %s" msgstr "无效的过滤器:%s" -#: plugins/sudoers/cvtsudoers.c:618 plugins/sudoers/cvtsudoers.c:635 -#: plugins/sudoers/cvtsudoers.c:1245 plugins/sudoers/cvtsudoers_json.c:861 -#: plugins/sudoers/cvtsudoers_ldif.c:680 plugins/sudoers/sudoers.c:986 -#: plugins/sudoers/sudoreplay.c:1436 plugins/sudoers/timestamp.c:441 -#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:923 +#: plugins/sudoers/cvtsudoers.c:617 plugins/sudoers/cvtsudoers.c:634 +#: plugins/sudoers/cvtsudoers.c:1244 plugins/sudoers/cvtsudoers_json.c:872 +#: plugins/sudoers/cvtsudoers_ldif.c:688 plugins/sudoers/sudoers.c:1086 +#: plugins/sudoers/sudoreplay.c:1434 plugins/sudoers/timestamp.c:441 +#: plugins/sudoers/tsdump.c:128 plugins/sudoers/visudo.c:922 #, c-format msgid "unable to open %s" msgstr "无法打开 %s" -#: plugins/sudoers/cvtsudoers.c:638 plugins/sudoers/visudo.c:932 +#: plugins/sudoers/cvtsudoers.c:637 plugins/sudoers/visudo.c:931 #, c-format msgid "failed to parse %s file, unknown error" msgstr "解析 %s 文件失败,未知错误" -#: plugins/sudoers/cvtsudoers.c:646 plugins/sudoers/visudo.c:949 +#: plugins/sudoers/cvtsudoers.c:645 #, c-format msgid "parse error in %s near line %d\n" msgstr "%s 中第 %d 行附近出现解析错误\n" -#: plugins/sudoers/cvtsudoers.c:649 plugins/sudoers/visudo.c:952 +#: plugins/sudoers/cvtsudoers.c:648 #, c-format msgid "parse error in %s\n" msgstr "%s 中出现解析错误\n" -#: plugins/sudoers/cvtsudoers.c:1292 plugins/sudoers/sudoreplay.c:1125 +#: plugins/sudoers/cvtsudoers.c:1291 plugins/sudoers/sudoreplay.c:1123 #: plugins/sudoers/timestamp.c:325 plugins/sudoers/timestamp.c:328 #, c-format msgid "unable to write to %s" msgstr "无法写入 %s" -#: plugins/sudoers/cvtsudoers.c:1315 +#: plugins/sudoers/cvtsudoers.c:1314 #, c-format msgid "" "%s - convert between sudoers file formats\n" @@ -1196,7 +1211,7 @@ msgstr "" "%s - 转换 sudoers 文件格式\n" "\n" -#: plugins/sudoers/cvtsudoers.c:1317 +#: plugins/sudoers/cvtsudoers.c:1316 msgid "" "\n" "Options:\n" @@ -1237,681 +1252,705 @@ msgstr "" " -V, --version 显示版本信息并退出" #: plugins/sudoers/cvtsudoers_json.c:480 plugins/sudoers/cvtsudoers_json.c:514 -#: plugins/sudoers/cvtsudoers_json.c:702 +#: plugins/sudoers/cvtsudoers_json.c:713 #, c-format msgid "unknown defaults entry \"%s\"" msgstr "未知的默认条目“%s”" -#: plugins/sudoers/cvtsudoers_json.c:640 plugins/sudoers/cvtsudoers_json.c:653 -#: plugins/sudoers/cvtsudoers_ldif.c:345 plugins/sudoers/cvtsudoers_ldif.c:356 +#: plugins/sudoers/cvtsudoers_json.c:651 plugins/sudoers/cvtsudoers_json.c:664 +#: plugins/sudoers/cvtsudoers_ldif.c:346 plugins/sudoers/cvtsudoers_ldif.c:357 #: plugins/sudoers/ldap.c:502 msgid "unable to get GMT time" msgstr "无法获取 GMT 时间" -#: plugins/sudoers/cvtsudoers_json.c:643 plugins/sudoers/cvtsudoers_json.c:656 -#: plugins/sudoers/cvtsudoers_ldif.c:348 plugins/sudoers/cvtsudoers_ldif.c:359 +#: plugins/sudoers/cvtsudoers_json.c:654 plugins/sudoers/cvtsudoers_json.c:667 +#: plugins/sudoers/cvtsudoers_ldif.c:349 plugins/sudoers/cvtsudoers_ldif.c:360 #: plugins/sudoers/ldap.c:508 msgid "unable to format timestamp" msgstr "无法格式化时间戳" -#: plugins/sudoers/cvtsudoers_ldif.c:632 +#: plugins/sudoers/cvtsudoers_ldif.c:640 #, c-format msgid "too many sudoers entries, maximum %u" msgstr "sudoers 条目过多,最多为 %u" -#: plugins/sudoers/cvtsudoers_ldif.c:675 +#: plugins/sudoers/cvtsudoers_ldif.c:683 msgid "the SUDOERS_BASE environment variable is not set and the -b option was not specified." msgstr "没有设置 SUDOERS_BASE 环境变量,并且没有指定 -b 选项。" -#: plugins/sudoers/def_data.c:42 +#: plugins/sudoers/def_data.c:44 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" msgstr "若使用了 syslog,用于记录日志的 syslog 设施:%s" -#: plugins/sudoers/def_data.c:46 +#: plugins/sudoers/def_data.c:48 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" msgstr "用户认证成功时使用的 syslog 优先级:%s" -#: plugins/sudoers/def_data.c:50 +#: plugins/sudoers/def_data.c:52 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" msgstr "用户认证不成功时使用的 syslog 优先级:%s" -#: plugins/sudoers/def_data.c:54 +#: plugins/sudoers/def_data.c:56 msgid "Put OTP prompt on its own line" msgstr "将 OPT 提示放在独自的行中" -#: plugins/sudoers/def_data.c:58 +#: plugins/sudoers/def_data.c:60 msgid "Ignore '.' in $PATH" msgstr "忽略 $PATH 中的“.”" -#: plugins/sudoers/def_data.c:62 +#: plugins/sudoers/def_data.c:64 msgid "Always send mail when sudo is run" msgstr "在运行 sudo 时总是发送邮件" -#: plugins/sudoers/def_data.c:66 +#: plugins/sudoers/def_data.c:68 msgid "Send mail if user authentication fails" msgstr "在用户认证失败时发送邮件" -#: plugins/sudoers/def_data.c:70 +#: plugins/sudoers/def_data.c:72 msgid "Send mail if the user is not in sudoers" msgstr "在用户不在 sudoers 列表中时发送邮件" -#: plugins/sudoers/def_data.c:74 +#: plugins/sudoers/def_data.c:76 msgid "Send mail if the user is not in sudoers for this host" msgstr "在用户不在此主机的 sudoers 列表中时发送邮件" -#: plugins/sudoers/def_data.c:78 +#: plugins/sudoers/def_data.c:80 msgid "Send mail if the user is not allowed to run a command" msgstr "在用户不允许执行某个命令时发送邮件" -#: plugins/sudoers/def_data.c:82 +#: plugins/sudoers/def_data.c:84 msgid "Send mail if the user tries to run a command" msgstr "在用户尝试执行某个命令时发送邮件" -#: plugins/sudoers/def_data.c:86 +#: plugins/sudoers/def_data.c:88 msgid "Use a separate timestamp for each user/tty combo" msgstr "对每个用户/终端组合使用独立的时间戳" -#: plugins/sudoers/def_data.c:90 +#: plugins/sudoers/def_data.c:92 msgid "Lecture user the first time they run sudo" msgstr "在用户第一次运行 sudo 时向他致辞" -#: plugins/sudoers/def_data.c:94 +#: plugins/sudoers/def_data.c:96 #, c-format msgid "File containing the sudo lecture: %s" msgstr "包含 sudo 致辞的文件:%s" -#: plugins/sudoers/def_data.c:98 +#: plugins/sudoers/def_data.c:100 msgid "Require users to authenticate by default" msgstr "默认要求用户认证" -#: plugins/sudoers/def_data.c:102 +#: plugins/sudoers/def_data.c:104 msgid "Root may run sudo" msgstr "root 可以运行 sudo" -#: plugins/sudoers/def_data.c:106 +#: plugins/sudoers/def_data.c:108 msgid "Log the hostname in the (non-syslog) log file" msgstr "将主机名记录在(非 syslog)的日志文件中" -#: plugins/sudoers/def_data.c:110 +#: plugins/sudoers/def_data.c:112 msgid "Log the year in the (non-syslog) log file" msgstr "将年份记录在(非 syslog)的日志文件中" -#: plugins/sudoers/def_data.c:114 +#: plugins/sudoers/def_data.c:116 msgid "If sudo is invoked with no arguments, start a shell" msgstr "如果不带参数调用 sudo,启动一个 shell" -#: plugins/sudoers/def_data.c:118 +#: plugins/sudoers/def_data.c:120 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "若使用 -s 选项启动 shell,将 $HOME 设为目标用户的主目录" -#: plugins/sudoers/def_data.c:122 +#: plugins/sudoers/def_data.c:124 msgid "Always set $HOME to the target user's home directory" msgstr "总是将 $HOME 设为目标用户的主目录" -#: plugins/sudoers/def_data.c:126 +#: plugins/sudoers/def_data.c:128 msgid "Allow some information gathering to give useful error messages" msgstr "允许收集一些信息,以提供有用的错误消息" -#: plugins/sudoers/def_data.c:130 +#: plugins/sudoers/def_data.c:132 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "要求 sudoers 文件中包含完全限定的主机名" -#: plugins/sudoers/def_data.c:134 +#: plugins/sudoers/def_data.c:136 msgid "Insult the user when they enter an incorrect password" msgstr "在用户输入错误密码时对他们进行(玩笑式的)嘲讽" -#: plugins/sudoers/def_data.c:138 +#: plugins/sudoers/def_data.c:140 msgid "Only allow the user to run sudo if they have a tty" msgstr "只允许拥有终端的用户执行 sudo" -#: plugins/sudoers/def_data.c:142 +#: plugins/sudoers/def_data.c:144 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo 将优先考虑 EDITOR 环境变量" -#: plugins/sudoers/def_data.c:146 +#: plugins/sudoers/def_data.c:148 msgid "Prompt for root's password, not the users's" msgstr "询问 root 用户的密码而非用户的密码" -#: plugins/sudoers/def_data.c:150 +#: plugins/sudoers/def_data.c:152 msgid "Prompt for the runas_default user's password, not the users's" msgstr "询问 runas_default 用户的密码,而非用户密码" -#: plugins/sudoers/def_data.c:154 +#: plugins/sudoers/def_data.c:156 msgid "Prompt for the target user's password, not the users's" msgstr "询问目标用户的密码,而非用户密码" -#: plugins/sudoers/def_data.c:158 +#: plugins/sudoers/def_data.c:160 msgid "Apply defaults in the target user's login class if there is one" msgstr "应用目标用户登录类别中的默认设置,如果没有设置的话" -#: plugins/sudoers/def_data.c:162 +#: plugins/sudoers/def_data.c:164 msgid "Set the LOGNAME and USER environment variables" msgstr "设置 LOGNAME 和 USER 环境变量" -#: plugins/sudoers/def_data.c:166 +#: plugins/sudoers/def_data.c:168 msgid "Only set the effective uid to the target user, not the real uid" msgstr "只将有效用户 ID 设为目标用户的,而不是实际用户 ID" -#: plugins/sudoers/def_data.c:170 +#: plugins/sudoers/def_data.c:172 msgid "Don't initialize the group vector to that of the target user" msgstr "不将组向量初始化为目标用户的" -#: plugins/sudoers/def_data.c:174 +#: plugins/sudoers/def_data.c:176 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "日志文件折行的长度(0 则不折行):%u" -#: plugins/sudoers/def_data.c:178 +#: plugins/sudoers/def_data.c:180 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "认证时间戳延时:%.1f 分钟" -#: plugins/sudoers/def_data.c:182 +#: plugins/sudoers/def_data.c:184 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "密码提示延时:%.1f 分钟" -#: plugins/sudoers/def_data.c:186 +#: plugins/sudoers/def_data.c:188 #, c-format msgid "Number of tries to enter a password: %u" msgstr "输入密码的尝试次数:%u" -#: plugins/sudoers/def_data.c:190 +#: plugins/sudoers/def_data.c:192 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "要使用的 umask,或 0777 使用用户的:0%o" -#: plugins/sudoers/def_data.c:194 +#: plugins/sudoers/def_data.c:196 #, c-format msgid "Path to log file: %s" msgstr "日志文件路径:%s" -#: plugins/sudoers/def_data.c:198 +#: plugins/sudoers/def_data.c:200 #, c-format msgid "Path to mail program: %s" msgstr "邮件程序路径:%s" -#: plugins/sudoers/def_data.c:202 +#: plugins/sudoers/def_data.c:204 #, c-format msgid "Flags for mail program: %s" msgstr "邮件程序标志:%s" -#: plugins/sudoers/def_data.c:206 +#: plugins/sudoers/def_data.c:208 #, c-format msgid "Address to send mail to: %s" msgstr "发送邮件的地址:%s" -#: plugins/sudoers/def_data.c:210 +#: plugins/sudoers/def_data.c:212 #, c-format msgid "Address to send mail from: %s" msgstr "接收邮件的地址:%s" -#: plugins/sudoers/def_data.c:214 +#: plugins/sudoers/def_data.c:216 #, c-format msgid "Subject line for mail messages: %s" msgstr "邮件消息的主题行:%s" -#: plugins/sudoers/def_data.c:218 +#: plugins/sudoers/def_data.c:220 #, c-format msgid "Incorrect password message: %s" msgstr "密码错误消息:%s" -#: plugins/sudoers/def_data.c:222 +#: plugins/sudoers/def_data.c:224 #, c-format msgid "Path to lecture status dir: %s" msgstr "致辞(lecture)状态文件夹的路径:%s" -#: plugins/sudoers/def_data.c:226 +#: plugins/sudoers/def_data.c:228 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "认证时间戳文件夹的路径:%s" -#: plugins/sudoers/def_data.c:230 +#: plugins/sudoers/def_data.c:232 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "认证时间戳的所有者:%s" -#: plugins/sudoers/def_data.c:234 +#: plugins/sudoers/def_data.c:236 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "此组的用户不要求密码和 PATH:%s" -#: plugins/sudoers/def_data.c:238 +#: plugins/sudoers/def_data.c:240 #, c-format msgid "Default password prompt: %s" msgstr "默认密码提示:%s" -#: plugins/sudoers/def_data.c:242 +#: plugins/sudoers/def_data.c:244 msgid "If set, passprompt will override system prompt in all cases." msgstr "如果设置,密码提示将覆盖各种情况下的系统提示。" -#: plugins/sudoers/def_data.c:246 +#: plugins/sudoers/def_data.c:248 #, c-format msgid "Default user to run commands as: %s" msgstr "运行命令的默认用户:%s" -#: plugins/sudoers/def_data.c:250 +#: plugins/sudoers/def_data.c:252 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "覆盖用户的 $PATH 变量的值:%s" -#: plugins/sudoers/def_data.c:254 +#: plugins/sudoers/def_data.c:256 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo 所使用的编辑器的路径:%s" -#: plugins/sudoers/def_data.c:258 +#: plugins/sudoers/def_data.c:260 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "何时为“list”伪命令请求密码:%s" -#: plugins/sudoers/def_data.c:262 +#: plugins/sudoers/def_data.c:264 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "何时为“verify”伪命令请求密码:%s" -#: plugins/sudoers/def_data.c:266 +#: plugins/sudoers/def_data.c:268 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "预加载“sudo_noexec”库中包含的哑 exec 函数" -#: plugins/sudoers/def_data.c:270 +#: plugins/sudoers/def_data.c:272 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "如果 LDAP 目录有效,是不是忽略本地的 sudoers 文件" -#: plugins/sudoers/def_data.c:274 +#: plugins/sudoers/def_data.c:276 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr ">= %d 的文件描述符将会在执行命令前关闭" -#: plugins/sudoers/def_data.c:278 -#, fuzzy -#| msgid "If set, users may override the value of `closefrom' with the -C option" +#: plugins/sudoers/def_data.c:280 msgid "If set, users may override the value of \"closefrom\" with the -C option" msgstr "如果设置,用户可以通过 -C 选项覆盖“closefrom”的值" -#: plugins/sudoers/def_data.c:282 +#: plugins/sudoers/def_data.c:284 msgid "Allow users to set arbitrary environment variables" msgstr "允许用户设置任意的环境变量" -#: plugins/sudoers/def_data.c:286 +#: plugins/sudoers/def_data.c:288 msgid "Reset the environment to a default set of variables" msgstr "将环境重设为默认的变量集" -#: plugins/sudoers/def_data.c:290 +#: plugins/sudoers/def_data.c:292 msgid "Environment variables to check for sanity:" msgstr "要检查完整性的环境变量:" -#: plugins/sudoers/def_data.c:294 +#: plugins/sudoers/def_data.c:296 msgid "Environment variables to remove:" msgstr "要移除的环境变量:" -#: plugins/sudoers/def_data.c:298 +#: plugins/sudoers/def_data.c:300 msgid "Environment variables to preserve:" msgstr "要保留的环境变量:" -#: plugins/sudoers/def_data.c:302 +#: plugins/sudoers/def_data.c:304 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "在新的安全环境中使用的 SELinux 角色:%s" -#: plugins/sudoers/def_data.c:306 +#: plugins/sudoers/def_data.c:308 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "在新的安全环境中使用的 SELinux 类型:%s" -#: plugins/sudoers/def_data.c:310 +#: plugins/sudoers/def_data.c:312 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 特定环境文件的路径:%s" -#: plugins/sudoers/def_data.c:314 +#: plugins/sudoers/def_data.c:316 #, c-format msgid "Path to the restricted sudo-specific environment file: %s" msgstr "受限的 sudo 特定环境文件的路径:%s" -#: plugins/sudoers/def_data.c:318 +#: plugins/sudoers/def_data.c:320 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "解析 sudoers 时使用的区域设置:%s" -#: plugins/sudoers/def_data.c:322 +#: plugins/sudoers/def_data.c:324 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "允许 sudo 询问密码,即使它不可见" -#: plugins/sudoers/def_data.c:326 +#: plugins/sudoers/def_data.c:328 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "用户在询问密码窗口输入时提供视觉反馈" -#: plugins/sudoers/def_data.c:330 +#: plugins/sudoers/def_data.c:332 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "使用不太精确但不访问文件系统的较快通配方法" -#: plugins/sudoers/def_data.c:334 +#: plugins/sudoers/def_data.c:336 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "sudoers 中指定的 umask 会覆盖用户的,即使它允许的权限更多" -#: plugins/sudoers/def_data.c:338 +#: plugins/sudoers/def_data.c:340 msgid "Log user's input for the command being run" msgstr "记录用户在所执行命令中的输入" -#: plugins/sudoers/def_data.c:342 +#: plugins/sudoers/def_data.c:344 msgid "Log the output of the command being run" msgstr "记录所执行命令的输出" -#: plugins/sudoers/def_data.c:346 +#: plugins/sudoers/def_data.c:348 msgid "Compress I/O logs using zlib" msgstr "使用 zlib 压缩 I/O 日志" -#: plugins/sudoers/def_data.c:350 +#: plugins/sudoers/def_data.c:352 msgid "Always run commands in a pseudo-tty" msgstr "总是在伪终端中运行命令" -#: plugins/sudoers/def_data.c:354 +#: plugins/sudoers/def_data.c:356 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "用于非 Unix 组支持的插件:%s" -#: plugins/sudoers/def_data.c:358 +#: plugins/sudoers/def_data.c:360 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "用于保存输入/输出日志的目录:%s" -#: plugins/sudoers/def_data.c:362 +#: plugins/sudoers/def_data.c:364 #, c-format msgid "File in which to store the input/output log: %s" msgstr "用于保存输入/输出日志的文件:%s" -#: plugins/sudoers/def_data.c:366 +#: plugins/sudoers/def_data.c:368 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "在分配伪终端时向 utmp/utmpx 文件中添加一条记录" -#: plugins/sudoers/def_data.c:370 +#: plugins/sudoers/def_data.c:372 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "将 utmp 中的用户设为 runas 用户,而不是调用用户" -#: plugins/sudoers/def_data.c:374 +#: plugins/sudoers/def_data.c:376 #, c-format msgid "Set of permitted privileges: %s" msgstr "允许权限的集合:%s" -#: plugins/sudoers/def_data.c:378 +#: plugins/sudoers/def_data.c:380 #, c-format msgid "Set of limit privileges: %s" msgstr "限制权限的集合:%s" -#: plugins/sudoers/def_data.c:382 +#: plugins/sudoers/def_data.c:384 msgid "Run commands on a pty in the background" msgstr "在后台的伪终端上运行命令" -#: plugins/sudoers/def_data.c:386 +#: plugins/sudoers/def_data.c:388 #, c-format msgid "PAM service name to use: %s" msgstr "要使用的 PAM 服务名称:%s" -#: plugins/sudoers/def_data.c:390 +#: plugins/sudoers/def_data.c:392 #, c-format msgid "PAM service name to use for login shells: %s" msgstr "用于登录 shell 的 PAM 服务名称:%s" -#: plugins/sudoers/def_data.c:394 +#: plugins/sudoers/def_data.c:396 msgid "Attempt to establish PAM credentials for the target user" msgstr "尝试为目标用户建立 PAM 凭据" -#: plugins/sudoers/def_data.c:398 +#: plugins/sudoers/def_data.c:400 msgid "Create a new PAM session for the command to run in" msgstr "创建一个新的 PAM 会话来运行该命令" -#: plugins/sudoers/def_data.c:402 +#: plugins/sudoers/def_data.c:404 msgid "Perform PAM account validation management" msgstr "执行 PAM 账户验证管理" -#: plugins/sudoers/def_data.c:406 -#, fuzzy, c-format -#| msgid "Maximum I/O log sequence number: %u" +#: plugins/sudoers/def_data.c:408 +#, c-format msgid "Maximum I/O log sequence number: %s" -msgstr "最大 I/O 日志序列号:%u" +msgstr "最大 I/O 日志序列号:%s" -#: plugins/sudoers/def_data.c:410 +#: plugins/sudoers/def_data.c:412 msgid "Enable sudoers netgroup support" msgstr "启用 support netgroup 支持" -#: plugins/sudoers/def_data.c:414 +#: plugins/sudoers/def_data.c:416 msgid "Check parent directories for writability when editing files with sudoedit" msgstr "在使用 sudoedit 编辑文件时检查上级目录是否可写" -#: plugins/sudoers/def_data.c:418 +#: plugins/sudoers/def_data.c:420 msgid "Follow symbolic links when editing files with sudoedit" msgstr "使用 sudoedit 编辑文件时循符号连接(定位到原文件)" -#: plugins/sudoers/def_data.c:422 +#: plugins/sudoers/def_data.c:424 msgid "Query the group plugin for unknown system groups" msgstr "通过 组 插件查询未知的系统组" -#: plugins/sudoers/def_data.c:426 +#: plugins/sudoers/def_data.c:428 msgid "Match netgroups based on the entire tuple: user, host and domain" msgstr "基于整个元组(用户、主机和域)来匹配网络组" -#: plugins/sudoers/def_data.c:430 +#: plugins/sudoers/def_data.c:432 msgid "Allow commands to be run even if sudo cannot write to the audit log" msgstr "即使 sudo 无法写入审核日志也允许命令运行" -#: plugins/sudoers/def_data.c:434 +#: plugins/sudoers/def_data.c:436 msgid "Allow commands to be run even if sudo cannot write to the I/O log" msgstr "即使 sudo 无法写入 I/O 日志也允许命令运行" -#: plugins/sudoers/def_data.c:438 +#: plugins/sudoers/def_data.c:440 msgid "Allow commands to be run even if sudo cannot write to the log file" msgstr "即使 sudo 无法写入日志文件也允许命令允许" -#: plugins/sudoers/def_data.c:442 +#: plugins/sudoers/def_data.c:444 msgid "Resolve groups in sudoers and match on the group ID, not the name" msgstr "解析 sudoers 中的组并与 组 ID (而不是名字) 匹配" -#: plugins/sudoers/def_data.c:446 +#: plugins/sudoers/def_data.c:448 #, c-format msgid "Log entries larger than this value will be split into multiple syslog messages: %u" msgstr "大于此数值的日志条目会分为多条 syslog 消息:%u" -#: plugins/sudoers/def_data.c:450 +#: plugins/sudoers/def_data.c:452 #, c-format msgid "User that will own the I/O log files: %s" msgstr "将拥有 I/O 日志文件的用户:%s" -#: plugins/sudoers/def_data.c:454 +#: plugins/sudoers/def_data.c:456 #, c-format msgid "Group that will own the I/O log files: %s" msgstr "将拥有 I/O 日志文件的组:%s" -#: plugins/sudoers/def_data.c:458 +#: plugins/sudoers/def_data.c:460 #, 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:462 +#: plugins/sudoers/def_data.c:464 #, c-format msgid "Execute commands by file descriptor instead of by path: %s" msgstr "根据文件描述符执行命令,而非根据路径:%s" -#: plugins/sudoers/def_data.c:466 +#: plugins/sudoers/def_data.c:468 msgid "Ignore unknown Defaults entries in sudoers instead of producing a warning" msgstr "忽略 sudoers 中未知的 Defaults 条目而非产生警告" -#: plugins/sudoers/def_data.c:470 +#: plugins/sudoers/def_data.c:472 #, c-format msgid "Time in seconds after which the command will be terminated: %u" msgstr "超过指定时间后终止命令(秒):%u" -#: plugins/sudoers/def_data.c:474 +#: plugins/sudoers/def_data.c:476 msgid "Allow the user to specify a timeout on the command line" msgstr "允许用户在命令行中指定超时时间" -#: plugins/sudoers/def_data.c:478 +#: plugins/sudoers/def_data.c:480 msgid "Flush I/O log data to disk immediately instead of buffering it" msgstr "立即冲洗(flush) I/O 日志数据而非将其缓存" -#: plugins/sudoers/def_data.c:482 +#: plugins/sudoers/def_data.c:484 msgid "Include the process ID when logging via syslog" msgstr "通过 syslog 登录时包含进程 ID" -#: plugins/sudoers/def_data.c:486 +#: plugins/sudoers/def_data.c:488 #, c-format msgid "Type of authentication timestamp record: %s" msgstr "认证时间戳记录的类型:%s" -#: plugins/sudoers/def_data.c:490 +#: plugins/sudoers/def_data.c:492 #, c-format msgid "Authentication failure message: %s" msgstr "认证失败消息:%s" -#: plugins/sudoers/def_data.c:494 +#: plugins/sudoers/def_data.c:496 msgid "Ignore case when matching user names" msgstr "在匹配 用户 名时忽略大小写" -#: plugins/sudoers/def_data.c:498 +#: plugins/sudoers/def_data.c:500 msgid "Ignore case when matching group names" msgstr "在匹配 组 名时忽略大小写" -#: plugins/sudoers/def_data.c:502 +#: plugins/sudoers/def_data.c:504 msgid "Log when a command is allowed by sudoers" msgstr "命令被 sudoers 允许时的日志" -#: plugins/sudoers/def_data.c:506 +#: plugins/sudoers/def_data.c:508 msgid "Log when a command is denied by sudoers" msgstr "命令被 sudoers 拒绝时的日志" -#: plugins/sudoers/def_data.c:510 +#: plugins/sudoers/def_data.c:512 msgid "Sudo log server(s) to connect to with optional port" msgstr "" -#: plugins/sudoers/def_data.c:514 +#: plugins/sudoers/def_data.c:516 #, c-format msgid "Sudo log server timeout in seconds: %u" -msgstr "" +msgstr "Sudo 日志服务器超时秒数:%u" -#: plugins/sudoers/def_data.c:518 +#: plugins/sudoers/def_data.c:520 msgid "Enable SO_KEEPALIVE socket option on the socket connected to the logserver" msgstr "" -#: plugins/sudoers/def_data.c:522 +#: plugins/sudoers/def_data.c:524 #, fuzzy, c-format #| msgid "Path to the sudo-specific environment file: %s" msgid "Path to the audit server's CA bundle file: %s" msgstr "sudo 特定环境文件的路径:%s" -#: plugins/sudoers/def_data.c:526 -#, fuzzy, c-format -#| msgid "Path to the sudo-specific environment file: %s" +#: plugins/sudoers/def_data.c:528 +#, c-format msgid "Path to the sudoers certificate file: %s" -msgstr "sudo 特定环境文件的路径:%s" +msgstr "到 sudoers 证书文件的路径:%s" -#: plugins/sudoers/def_data.c:530 -#, fuzzy, c-format -#| msgid "Path to the sudo-specific environment file: %s" +#: plugins/sudoers/def_data.c:532 +#, c-format msgid "Path to the sudoers private key file: %s" -msgstr "sudo 特定环境文件的路径:%s" +msgstr "到 sudoers 私钥文件的路径:%s" -#: plugins/sudoers/def_data.c:534 +#: plugins/sudoers/def_data.c:536 msgid "Verify that the log server's certificate is valid" -msgstr "" +msgstr "验证日志服务器证书有效性" -#: plugins/sudoers/def_data.c:538 +#: plugins/sudoers/def_data.c:540 msgid "Allow the use of unknown runas user and/or group ID" msgstr "" -#: plugins/sudoers/def_data.c:542 +#: plugins/sudoers/def_data.c:544 msgid "Only permit running commands as a user with a valid shell" msgstr "" -#: plugins/sudoers/def_data.c:546 +#: plugins/sudoers/def_data.c:548 msgid "Set the pam remote user to the user running sudo" msgstr "" -#: plugins/sudoers/def_data.c:550 +#: plugins/sudoers/def_data.c:552 msgid "Set the pam remote host to the local host name" msgstr "" -#: plugins/sudoers/defaults.c:183 +#: plugins/sudoers/def_data.c:556 +#, fuzzy, c-format +#| msgid "File descriptors >= %d will be closed before executing a command" +msgid "Working directory to change to before executing the command: %s" +msgstr ">= %d 的文件描述符将会在执行命令前关闭" + +#: plugins/sudoers/def_data.c:560 +#, fuzzy, c-format +#| msgid "File descriptors >= %d will be closed before executing a command" +msgid "Root directory to change to before executing the command: %s" +msgstr ">= %d 的文件描述符将会在执行命令前关闭" + +#: plugins/sudoers/defaults.c:184 #, c-format -msgid "%s:%d unknown defaults entry \"%s\"" -msgstr "%s:%d 未知的默认条目“%s”" +msgid "%s:%d: unknown defaults entry \"%s\"" +msgstr "%s:%d:未知的默认条目“%s”" -#: plugins/sudoers/defaults.c:186 +#: plugins/sudoers/defaults.c:187 #, c-format msgid "%s: unknown defaults entry \"%s\"" msgstr "%s:未知的默认条目“%s”" -#: plugins/sudoers/defaults.c:229 -#, c-format -msgid "%s:%d no value specified for \"%s\"" +#: plugins/sudoers/defaults.c:233 +#, fuzzy, c-format +#| msgid "%s:%d no value specified for \"%s\"" +msgid "%s:%d: no value specified for \"%s\"" msgstr "%s:%d 没有给“%s”指定值" -#: plugins/sudoers/defaults.c:232 +#: plugins/sudoers/defaults.c:236 #, c-format msgid "%s: no value specified for \"%s\"" msgstr "%s:没有给“%s”指定值" -#: plugins/sudoers/defaults.c:252 -#, c-format -msgid "%s:%d values for \"%s\" must start with a '/'" -msgstr "%s:%d “%s”的值必须以“/”开头" - -#: plugins/sudoers/defaults.c:255 -#, c-format -msgid "%s: values for \"%s\" must start with a '/'" -msgstr "%s:“%s”的值必须以“/”开头" - -#: plugins/sudoers/defaults.c:277 -#, c-format -msgid "%s:%d option \"%s\" does not take a value" +#: plugins/sudoers/defaults.c:274 +#, fuzzy, c-format +#| msgid "%s:%d option \"%s\" does not take a value" +msgid "%s:%d: option \"%s\" does not take a value" msgstr "%s:%d “%s”选项不带值" -#: plugins/sudoers/defaults.c:280 +#: plugins/sudoers/defaults.c:277 #, c-format msgid "%s: option \"%s\" does not take a value" msgstr "%s:“%s”选项不带值" -#: plugins/sudoers/defaults.c:305 -#, c-format -msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" +#: plugins/sudoers/defaults.c:302 +#, fuzzy, c-format +#| msgid "%s:%d invalid Defaults type 0x%x for option \"%s\"" +msgid "%s:%d: invalid Defaults type 0x%x for option \"%s\"" msgstr "%1$s:%2$d 选项“%4$s”的默认类型 0x%3$x 无效" -#: plugins/sudoers/defaults.c:308 +#: plugins/sudoers/defaults.c:305 #, c-format msgid "%s: invalid Defaults type 0x%x for option \"%s\"" msgstr "%1$s:选项“%3$s”的默认类型 0x%2$x 无效" -#: plugins/sudoers/defaults.c:318 -#, c-format -msgid "%s:%d value \"%s\" is invalid for option \"%s\"" +#: plugins/sudoers/defaults.c:315 +#, fuzzy, c-format +#| msgid "%s:%d value \"%s\" is invalid for option \"%s\"" +msgid "%s:%d: value \"%s\" is invalid for option \"%s\"" msgstr "%1$s:%2$d 值“%3$s”对选项“%4$s”无效" -#: plugins/sudoers/defaults.c:321 +#: plugins/sudoers/defaults.c:318 #, c-format msgid "%s: value \"%s\" is invalid for option \"%s\"" msgstr "%s:值“%s”对选项“%s”无效" -#: plugins/sudoers/env.c:404 +#: plugins/sudoers/defaults.c:1025 +#, fuzzy, c-format +#| msgid "%s:%d values for \"%s\" must start with a '/'" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:%d “%s”的值必须以“/”开头" + +#: plugins/sudoers/defaults.c:1029 +#, fuzzy, c-format +#| msgid "%s: values for \"%s\" must start with a '/'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" +msgstr "%s:“%s”的值必须以“/”开头" + +#: plugins/sudoers/defaults.c:1040 +#, fuzzy, c-format +#| msgid "%s:%d values for \"%s\" must start with a '/'" +msgid "%s:%d: values for \"%s\" must start with a '/'" +msgstr "%s:%d “%s”的值必须以“/”开头" + +#: plugins/sudoers/defaults.c:1044 +#, c-format +msgid "%s: values for \"%s\" must start with a '/'" +msgstr "%s:“%s”的值必须以“/”开头" + +#: plugins/sudoers/env.c:405 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv:envp 损坏,长度不符" -#: plugins/sudoers/env.c:1131 +#: plugins/sudoers/env.c:1133 msgid "unable to rebuild the environment" msgstr "无法重建环境" -#: plugins/sudoers/env.c:1205 +#: plugins/sudoers/env.c:1207 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "对不起,您无权设置以下环境变量:%s" -#: plugins/sudoers/file.c:104 +#: plugins/sudoers/file.c:107 #, c-format msgid "parse error in %s near line %d" msgstr "%s 中第 %d 行附近有解析错误" -#: plugins/sudoers/file.c:107 +#: plugins/sudoers/file.c:110 #, c-format msgid "parse error in %s" msgstr "%s 中出现解析错误" @@ -1965,90 +2004,88 @@ msgstr "无法解析网络掩码“%s”" msgid "Local IP address and netmask pairs:\n" msgstr "本地 IP 地址和网络掩码对:\n" -#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:393 -#: plugins/sudoers/sudoers.c:394 plugins/sudoers/sudoers.c:1274 -#: plugins/sudoers/testsudoers.c:416 +#: plugins/sudoers/iolog.c:142 plugins/sudoers/sudoers.c:448 +#: plugins/sudoers/sudoers.c:449 plugins/sudoers/sudoers.c:1374 +#: plugins/sudoers/testsudoers.c:410 #, c-format msgid "unknown group: %s" msgstr "未知组:%s" -#: plugins/sudoers/iolog.c:517 plugins/sudoers/iolog.c:807 -#: plugins/sudoers/iolog.c:959 plugins/sudoers/iolog.c:966 -#: plugins/sudoers/iolog.c:1087 plugins/sudoers/iolog.c:1094 -#: plugins/sudoers/iolog.c:1193 plugins/sudoers/iolog.c:1200 +#: plugins/sudoers/iolog.c:527 plugins/sudoers/iolog.c:817 +#: plugins/sudoers/iolog.c:969 plugins/sudoers/iolog.c:976 +#: plugins/sudoers/iolog.c:1097 plugins/sudoers/iolog.c:1104 +#: plugins/sudoers/iolog.c:1203 plugins/sudoers/iolog.c:1210 #, c-format msgid "unable to write to I/O log file: %s" msgstr "无法写入 I/O 日志文件:%s" -#: plugins/sudoers/iolog.c:566 -#, fuzzy -#| msgid "unable to open log file: %s" +#: plugins/sudoers/iolog.c:576 msgid "unable to update sequence file" -msgstr "无法打开日志文件:%s" +msgstr "无法更新序列文件" -#: plugins/sudoers/iolog.c:605 +#: plugins/sudoers/iolog.c:615 #, c-format msgid "unable to create %s/%s" msgstr "无法创建 %s/%s" -#: plugins/sudoers/iolog.c:631 +#: plugins/sudoers/iolog.c:641 msgid "unable to connect to log server" msgstr "无法连接到日志服务器" -#: plugins/sudoers/iolog.c:851 +#: plugins/sudoers/iolog.c:861 #, c-format msgid "%s: internal error, I/O log file for event %d not open" msgstr "%s:内部错误,事件 %d 的 I/O 日志文件未打开" -#: plugins/sudoers/iolog.c:944 plugins/sudoers/iolog.c:1072 -#: plugins/sudoers/iolog.c:1177 plugins/sudoers/timestamp.c:855 -#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:492 -#: plugins/sudoers/visudo.c:498 +#: plugins/sudoers/iolog.c:954 plugins/sudoers/iolog.c:1082 +#: plugins/sudoers/iolog.c:1187 plugins/sudoers/timestamp.c:855 +#: plugins/sudoers/timestamp.c:947 plugins/sudoers/visudo.c:493 +#: plugins/sudoers/visudo.c:499 msgid "unable to read the clock" msgstr "无法读取时钟" -#: plugins/sudoers/iolog.c:1169 plugins/sudoers/iolog_client.c:977 +#: plugins/sudoers/iolog.c:1179 plugins/sudoers/iolog_client.c:993 #, c-format msgid "%s: internal error, invalid signal %d" msgstr "%s:内部错误,信号 %d 无效" -#: plugins/sudoers/iolog_client.c:113 plugins/sudoers/iolog_client.c:392 -#: plugins/sudoers/iolog_client.c:1200 plugins/sudoers/iolog_client.c:1775 +#: plugins/sudoers/iolog_client.c:112 plugins/sudoers/iolog_client.c:391 +#: plugins/sudoers/iolog_client.c:1216 plugins/sudoers/iolog_client.c:1791 msgid "error in event loop" msgstr "事件循环中出错" -#: plugins/sudoers/iolog_client.c:194 +#: plugins/sudoers/iolog_client.c:193 #, c-format msgid "Creation of new SSL_CTX object failed: %s" -msgstr "" +msgstr "创建新的 SSL_CTX 对象失败:%s" -#: plugins/sudoers/iolog_client.c:346 plugins/sudoers/iolog_client.c:351 +#: plugins/sudoers/iolog_client.c:345 plugins/sudoers/iolog_client.c:350 #, c-format msgid "TLS connection to %s:%s failed: %s" -msgstr "" +msgstr "到 %s:%s 的 TLS 连接失败:%s" -#: plugins/sudoers/iolog_client.c:496 +#: plugins/sudoers/iolog_client.c:495 msgid "TLS initialization was unsuccessful" msgstr "TLS 初始化不成功" -#: plugins/sudoers/iolog_client.c:505 +#: plugins/sudoers/iolog_client.c:504 msgid "TLS handshake was unsuccessful" msgstr "TLS 握手不成功" -#: plugins/sudoers/iolog_client.c:767 plugins/sudoers/iolog_client.c:959 +#: plugins/sudoers/iolog_client.c:769 plugins/sudoers/iolog_client.c:975 msgid "unable to get time of day" msgstr "无法获取时间" -#: plugins/sudoers/iolog_client.c:986 +#: plugins/sudoers/iolog_client.c:1002 #, c-format msgid "%s: internal error, invalid exit status %d" msgstr "%s:内部错误,无效的退出状态 %d" -#: plugins/sudoers/iolog_client.c:1523 +#: plugins/sudoers/iolog_client.c:1539 msgid "lost connection to log server" msgstr "丢失了到日志服务器的连接" -#: plugins/sudoers/iolog_client.c:1600 +#: plugins/sudoers/iolog_client.c:1616 msgid "missing write buffer" msgstr "" @@ -2071,18 +2108,19 @@ msgstr "要使用 SSL,您必须在 %s 中设置 TLS_CERT" msgid "unable to initialize LDAP: %s" msgstr "无法初始化 LDAP:%s" -#: plugins/sudoers/ldap.c:1694 +#: plugins/sudoers/ldap.c:1695 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "指定了 start_tls,但 LDAP 库不支持 ldap_start_tls_s() 或 ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:1831 plugins/sudoers/parse_ldif.c:744 +#: plugins/sudoers/ldap.c:1832 plugins/sudoers/parse_ldif.c:744 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "无效的 sudoOrder 属性:%s" #: plugins/sudoers/ldap_conf.c:200 -msgid "sudo_ldap_conf_add_ports: port too large" -msgstr "sudo_ldap_conf_add_ports:端口太大" +#, c-format +msgid "%s: port too large" +msgstr "%s:端口过大" #: plugins/sudoers/ldap_conf.c:260 #, c-format @@ -2093,7 +2131,7 @@ msgstr "不支持的 LDAP URI 类型:%s" msgid "unable to mix ldap and ldaps URIs" msgstr "无法混合 ldap 和 ldaps URI" -#: plugins/sudoers/ldap_util.c:548 plugins/sudoers/ldap_util.c:550 +#: plugins/sudoers/ldap_util.c:554 plugins/sudoers/ldap_util.c:556 #, c-format msgid "unable to convert sudoOption: %s%s%s" msgstr "无法转换 sudoOption: %s%s%s" @@ -2102,66 +2140,66 @@ msgstr "无法转换 sudoOption: %s%s%s" msgid "unable to open audit system" msgstr "无法打开审核系统" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:101 msgid "unable to send audit message" msgstr "无法发送审核消息" -#: plugins/sudoers/logging.c:167 +#: plugins/sudoers/logging.c:166 #, c-format msgid "unable to open log file: %s" msgstr "无法打开日志文件:%s" -#: plugins/sudoers/logging.c:175 +#: plugins/sudoers/logging.c:174 #, c-format msgid "unable to lock log file: %s" msgstr "无法锁定日志文件:%s" -#: plugins/sudoers/logging.c:208 +#: plugins/sudoers/logging.c:207 #, c-format msgid "unable to write log file: %s" msgstr "无法写入日志文件: %s" -#: plugins/sudoers/logging.c:241 +#: plugins/sudoers/logging.c:240 msgid "user NOT in sudoers" msgstr "用户不在 sudoers 中" -#: plugins/sudoers/logging.c:243 +#: plugins/sudoers/logging.c:242 msgid "user NOT authorized on host" msgstr "用户未获得此主机上的授权" -#: plugins/sudoers/logging.c:245 +#: plugins/sudoers/logging.c:244 msgid "command not allowed" msgstr "命令禁止使用" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:287 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s 不在 sudoers 文件中。此事将被报告。\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:290 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s 无权在 %s 上运行 sudo。此事将被报告。\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:294 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "对不起,用户 %s 不能在 %s 上运行 sudo。\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:297 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "对不起,用户 %1$s 无权以 %5$s%6$s%7$s 的身份在 %8$s 上执行 %2$s%3$s%4$s。\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:512 -#: plugins/sudoers/sudoers.c:514 plugins/sudoers/sudoers.c:516 -#: plugins/sudoers/sudoers.c:518 plugins/sudoers/sudoers.c:665 -#: plugins/sudoers/sudoers.c:667 +#: plugins/sudoers/logging.c:334 plugins/sudoers/sudoers.c:587 +#: plugins/sudoers/sudoers.c:589 plugins/sudoers/sudoers.c:591 +#: plugins/sudoers/sudoers.c:593 plugins/sudoers/sudoers.c:742 +#: plugins/sudoers/sudoers.c:744 #, c-format msgid "%s: command not found" msgstr "%s:找不到命令" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:508 +#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:583 #, c-format msgid "" "ignoring \"%s\" found in '.'\n" @@ -2170,36 +2208,36 @@ msgstr "" "忽略在“.”中找到的“%s”\n" "请使用“sudo ./%s”,如果这是您想运行的“%s”。" -#: plugins/sudoers/logging.c:354 +#: plugins/sudoers/logging.c:353 msgid "authentication failure" msgstr "认证失败" -#: plugins/sudoers/logging.c:380 +#: plugins/sudoers/logging.c:379 msgid "a password is required" msgstr "需要密码" -#: plugins/sudoers/logging.c:450 +#: plugins/sudoers/logging.c:449 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u 次错误密码尝试" -#: plugins/sudoers/logging.c:714 +#: plugins/sudoers/logging.c:713 #, c-format msgid "unable to dup stdin: %m" msgstr "无法 dup stdin:%m" -#: plugins/sudoers/logging.c:751 +#: plugins/sudoers/logging.c:750 #, c-format msgid "unable to execute %s: %m" msgstr "无法执行 %s:%m" -#: plugins/sudoers/logging.c:792 plugins/sudoers/logging.c:848 +#: plugins/sudoers/logging.c:791 plugins/sudoers/logging.c:847 #, c-format msgid "unable to fork: %m" msgstr "无法执行 fork:%m" -#: plugins/sudoers/logging.c:838 +#: plugins/sudoers/logging.c:837 #, c-format msgid "unable to open pipe: %m" msgstr "无法打开管道:%m" @@ -2209,7 +2247,7 @@ msgstr "无法打开管道:%m" msgid "digest for %s (%s) is not in %s form" msgstr "%s(%s) 的摘要不是 %s 形式" -#: plugins/sudoers/parse.c:442 +#: plugins/sudoers/parse.c:518 #, c-format msgid "" "\n" @@ -2218,8 +2256,7 @@ msgstr "" "\n" "LDAP 角色:%s\n" -#: plugins/sudoers/parse.c:445 -#, c-format +#: plugins/sudoers/parse.c:521 msgid "" "\n" "Sudoers entry:\n" @@ -2227,42 +2264,38 @@ msgstr "" "\n" "Sudoers 条目:\n" -#: plugins/sudoers/parse.c:447 -#, c-format +#: plugins/sudoers/parse.c:523 msgid " RunAsUsers: " msgstr " RunAs 用户:" -#: plugins/sudoers/parse.c:462 -#, c-format +#: plugins/sudoers/parse.c:538 msgid " RunAsGroups: " msgstr " RunAs 组:" -#: plugins/sudoers/parse.c:472 -#, c-format +#: plugins/sudoers/parse.c:548 msgid " Options: " msgstr " 选项:" -#: plugins/sudoers/parse.c:522 -#, c-format +#: plugins/sudoers/parse.c:602 msgid " Commands:\n" msgstr " 命令:\n" -#: plugins/sudoers/parse.c:713 +#: plugins/sudoers/parse.c:793 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "匹配 %2$s 上 %1$s 的默认条目:\n" -#: plugins/sudoers/parse.c:731 +#: plugins/sudoers/parse.c:811 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "%s Runas 和命令特定的默认值:\n" -#: plugins/sudoers/parse.c:749 +#: plugins/sudoers/parse.c:829 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "用户 %s 可以在 %s 上运行以下命令:\n" -#: plugins/sudoers/parse.c:764 +#: plugins/sudoers/parse.c:844 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "用户 %s 无权在 %s 上运行 sudo。\n" @@ -2277,48 +2310,58 @@ msgstr "将忽略不完整的 sudoRole:cn:%s" msgid "invalid LDIF attribute: %s" msgstr "无效的 LDIF 属性:%s" -#: plugins/sudoers/policy.c:77 plugins/sudoers/policy.c:102 +#: plugins/sudoers/policy.c:78 plugins/sudoers/policy.c:102 #, c-format msgid "invalid %.*s set by sudo front-end" msgstr "sudo 前端设置了无效的 %.*s" -#: plugins/sudoers/policy.c:281 plugins/sudoers/testsudoers.c:272 +#: plugins/sudoers/policy.c:305 plugins/sudoers/testsudoers.c:272 msgid "unable to parse network address list" msgstr "无法解析网络地址列表" -#: plugins/sudoers/policy.c:426 +#: plugins/sudoers/policy.c:450 msgid "user name not set by sudo front-end" msgstr "用户名未通过 sudo 前端设置" -#: plugins/sudoers/policy.c:430 +#: plugins/sudoers/policy.c:454 msgid "user-ID not set by sudo front-end" msgstr "用户 ID 未通过 sudo 前端设置" -#: plugins/sudoers/policy.c:434 +#: plugins/sudoers/policy.c:458 msgid "group-ID not set by sudo front-end" msgstr "组 ID 未通过 sudo 前端设置" -#: plugins/sudoers/policy.c:438 +#: plugins/sudoers/policy.c:462 msgid "host name not set by sudo front-end" msgstr "主机名未通过 sudo 前端设置" -#: plugins/sudoers/policy.c:896 plugins/sudoers/visudo.c:230 -#: plugins/sudoers/visudo.c:861 +#: plugins/sudoers/policy.c:638 +#, c-format +msgid "invalid working directory: %s" +msgstr "无效的工作目录:%s" + +#: plugins/sudoers/policy.c:806 +#, c-format +msgid "invalid chroot directory: %s" +msgstr "无法的 chroot 目录:%s" + +#: plugins/sudoers/policy.c:942 plugins/sudoers/visudo.c:231 +#: plugins/sudoers/visudo.c:860 #, c-format msgid "unable to execute %s" msgstr "无法执行 %s" -#: plugins/sudoers/policy.c:1060 +#: plugins/sudoers/policy.c:1106 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers 策略插件版本 %s\n" -#: plugins/sudoers/policy.c:1062 +#: plugins/sudoers/policy.c:1108 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers 文件语法版本 %d\n" -#: plugins/sudoers/policy.c:1066 +#: plugins/sudoers/policy.c:1112 #, c-format msgid "" "\n" @@ -2327,86 +2370,86 @@ msgstr "" "\n" "Sudoers 路径:%s\n" -#: plugins/sudoers/policy.c:1069 +#: plugins/sudoers/policy.c:1115 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch 路径:%s\n" -#: plugins/sudoers/policy.c:1071 +#: plugins/sudoers/policy.c:1117 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf 路径:%s\n" -#: plugins/sudoers/policy.c:1072 +#: plugins/sudoers/policy.c:1118 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret 路径:%s\n" -#: plugins/sudoers/policy.c:1105 +#: plugins/sudoers/policy.c:1151 #, c-format msgid "unable to register hook of type %d (version %d.%d)" msgstr "无法注册类型为 %d 的钩子(hook)(版本 %d.%d)" -#: plugins/sudoers/pwutil.c:214 plugins/sudoers/pwutil.c:232 +#: plugins/sudoers/pwutil.c:217 plugins/sudoers/pwutil.c:235 #, c-format msgid "unable to cache uid %u" msgstr "无法缓存用户 ID %u" -#: plugins/sudoers/pwutil.c:226 +#: plugins/sudoers/pwutil.c:229 #, c-format msgid "unable to cache uid %u, already exists" msgstr "无法缓存用户 ID %u,已存在" -#: plugins/sudoers/pwutil.c:286 plugins/sudoers/pwutil.c:304 -#: plugins/sudoers/pwutil.c:367 plugins/sudoers/pwutil.c:412 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:307 +#: plugins/sudoers/pwutil.c:370 plugins/sudoers/pwutil.c:415 #, c-format msgid "unable to cache user %s" msgstr "无法缓存用户 %s" -#: plugins/sudoers/pwutil.c:299 +#: plugins/sudoers/pwutil.c:302 #, c-format msgid "unable to cache user %s, already exists" msgstr "无法缓存用户 %s,已存在" -#: plugins/sudoers/pwutil.c:531 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:534 plugins/sudoers/pwutil.c:552 #, c-format msgid "unable to cache gid %u" msgstr "无法缓存组 ID %u" -#: plugins/sudoers/pwutil.c:543 +#: plugins/sudoers/pwutil.c:546 #, c-format msgid "unable to cache gid %u, already exists" msgstr "无法缓存组 ID %u,已存在" -#: plugins/sudoers/pwutil.c:596 plugins/sudoers/pwutil.c:614 -#: plugins/sudoers/pwutil.c:662 plugins/sudoers/pwutil.c:704 +#: plugins/sudoers/pwutil.c:599 plugins/sudoers/pwutil.c:617 +#: plugins/sudoers/pwutil.c:665 plugins/sudoers/pwutil.c:707 #, c-format msgid "unable to cache group %s" msgstr "无法缓存组 %s" -#: plugins/sudoers/pwutil.c:609 +#: plugins/sudoers/pwutil.c:612 #, c-format msgid "unable to cache group %s, already exists" msgstr "无法缓存组 %s,已存在" -#: plugins/sudoers/pwutil.c:831 plugins/sudoers/pwutil.c:883 -#: plugins/sudoers/pwutil.c:933 plugins/sudoers/pwutil.c:986 +#: plugins/sudoers/pwutil.c:834 plugins/sudoers/pwutil.c:885 +#: plugins/sudoers/pwutil.c:935 plugins/sudoers/pwutil.c:987 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "无法缓存组列表 %s,已存在" -#: plugins/sudoers/pwutil.c:837 plugins/sudoers/pwutil.c:888 -#: plugins/sudoers/pwutil.c:939 plugins/sudoers/pwutil.c:991 +#: plugins/sudoers/pwutil.c:840 plugins/sudoers/pwutil.c:890 +#: plugins/sudoers/pwutil.c:941 plugins/sudoers/pwutil.c:992 #, c-format msgid "unable to cache group list for %s" msgstr "无法缓存组列表 %s" -#: plugins/sudoers/pwutil.c:877 +#: plugins/sudoers/pwutil.c:879 #, c-format msgid "unable to parse groups for %s" msgstr "无法对 %s 解析组" -#: plugins/sudoers/pwutil.c:980 +#: plugins/sudoers/pwutil.c:981 #, c-format msgid "unable to parse gids for %s" msgstr "无法解析 %s 的组 ID" @@ -2470,245 +2513,268 @@ msgstr "截断的审核路径 user_cmnd:%s" msgid "truncated audit path argv[0]: %s" msgstr "截断的审核路径 argv[0]:%s" -#: plugins/sudoers/sssd.c:573 +#: plugins/sudoers/sssd.c:574 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "无法初始化 SSS 资源。您的计算机上安装 SSSD 了吗?" -#: plugins/sudoers/sssd.c:581 plugins/sudoers/sssd.c:590 -#: plugins/sudoers/sssd.c:599 plugins/sudoers/sssd.c:608 -#: plugins/sudoers/sssd.c:617 +#: plugins/sudoers/sssd.c:582 plugins/sudoers/sssd.c:591 +#: plugins/sudoers/sssd.c:600 plugins/sudoers/sssd.c:609 +#: plugins/sudoers/sssd.c:618 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "无法在 %s 中找到符号“%s”" -#: plugins/sudoers/sudoers.c:217 plugins/sudoers/sudoers.c:943 +#: plugins/sudoers/sudoers.c:218 plugins/sudoers/sudoers.c:1043 msgid "problem with defaults entries" msgstr "默认条目有问题" -#: plugins/sudoers/sudoers.c:221 +#: plugins/sudoers/sudoers.c:222 msgid "no valid sudoers sources found, quitting" msgstr "没有找到有效的 sudoers 资源,退出" +#: plugins/sudoers/sudoers.c:295 +#, c-format +msgid "user not allowed to change root directory to %s" +msgstr "用户不允许将根目录设置为 %s" + #: plugins/sudoers/sudoers.c:297 +#, fuzzy, c-format +#| msgid "you are not permitted to use the -C option" +msgid "you are not permitted to use the -R option with %s" +msgstr "您无权使用 -C 选项" + +#: plugins/sudoers/sudoers.c:321 +#, fuzzy, c-format +#| msgid "sorry, you are not allowed set a command timeout" +msgid "user not allowed to change directory to %s" +msgstr "抱歉,您无权设置超时时间" + +#: plugins/sudoers/sudoers.c:322 +#, fuzzy, c-format +#| msgid "you are not permitted to use the -C option" +msgid "you are not permitted to use the -D option with %s" +msgstr "您无权使用 -C 选项" + +#: plugins/sudoers/sudoers.c:353 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers 指定 root 不允许执行 sudo" -#: plugins/sudoers/sudoers.c:357 +#: plugins/sudoers/sudoers.c:413 msgid "user not allowed to override closefrom limit" msgstr "" -#: plugins/sudoers/sudoers.c:358 +#: plugins/sudoers/sudoers.c:414 msgid "you are not permitted to use the -C option" msgstr "您无权使用 -C 选项" -#: plugins/sudoers/sudoers.c:420 +#: plugins/sudoers/sudoers.c:475 #, c-format msgid "timestamp owner (%s): No such user" msgstr "时间戳所有者(%s):无此用户" -#: plugins/sudoers/sudoers.c:435 +#: plugins/sudoers/sudoers.c:490 msgid "no tty" msgstr "无终端" -#: plugins/sudoers/sudoers.c:436 +#: plugins/sudoers/sudoers.c:491 msgid "sorry, you must have a tty to run sudo" msgstr "抱歉,您必须拥有一个终端来执行 sudo" -#: plugins/sudoers/sudoers.c:442 plugins/sudoers/sudoers.c:444 +#: plugins/sudoers/sudoers.c:497 plugins/sudoers/sudoers.c:499 #, fuzzy, c-format #| msgid "invalid speed factor: %s" msgid "invalid shell for user %s: %s" msgstr "无法的速度系数:%s" -#: plugins/sudoers/sudoers.c:507 +#: plugins/sudoers/sudoers.c:582 msgid "command in current directory" msgstr "当前目录中的命令" -#: plugins/sudoers/sudoers.c:525 +#: plugins/sudoers/sudoers.c:600 #, fuzzy #| msgid "sorry, you are not allowed set a command timeout" msgid "user not allowed to set a command timeout" msgstr "抱歉,您无权设置超时时间" -#: plugins/sudoers/sudoers.c:526 +#: plugins/sudoers/sudoers.c:602 msgid "sorry, you are not allowed set a command timeout" msgstr "抱歉,您无权设置超时时间" -#: plugins/sudoers/sudoers.c:534 +#: plugins/sudoers/sudoers.c:610 #, fuzzy #| msgid "sorry, you are not allowed to preserve the environment" msgid "user not allowed to preserve the environment" msgstr "抱歉,您无权保留环境" -#: plugins/sudoers/sudoers.c:535 +#: plugins/sudoers/sudoers.c:612 msgid "sorry, you are not allowed to preserve the environment" msgstr "抱歉,您无权保留环境" -#: plugins/sudoers/sudoers.c:878 +#: plugins/sudoers/sudoers.c:978 msgid "command too long" msgstr "命令过长" -#: plugins/sudoers/sudoers.c:936 +#: plugins/sudoers/sudoers.c:1036 msgid "sudoedit doesn't need to be run via sudo" msgstr "sudoedit 无需经由 sudo 运行" -#: plugins/sudoers/sudoers.c:990 plugins/sudoers/sudoreplay.c:1548 +#: plugins/sudoers/sudoers.c:1090 plugins/sudoers/sudoreplay.c:1546 #: plugins/sudoers/tsdump.c:138 #, c-format msgid "unable to read %s" msgstr "无法读取 %s" -#: plugins/sudoers/sudoers.c:1015 plugins/sudoers/visudo.c:431 -#: plugins/sudoers/visudo.c:727 +#: plugins/sudoers/sudoers.c:1115 plugins/sudoers/visudo.c:432 +#: plugins/sudoers/visudo.c:726 #, c-format msgid "unable to stat %s" msgstr "无法 stat %s" -#: plugins/sudoers/sudoers.c:1019 plugins/sudoers/visudo.c:1037 +#: plugins/sudoers/sudoers.c:1119 plugins/sudoers/visudo.c:1018 #, c-format msgid "%s is not a regular file" msgstr "%s 不是常规文件" -#: plugins/sudoers/sudoers.c:1023 plugins/sudoers/timestamp.c:252 toke.l:1060 +#: plugins/sudoers/sudoers.c:1123 plugins/sudoers/timestamp.c:252 toke.l:1121 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s 属于用户 ID %u,应为 %u" -#: plugins/sudoers/sudoers.c:1027 toke.l:1065 +#: plugins/sudoers/sudoers.c:1127 toke.l:1126 #, c-format msgid "%s is world writable" msgstr "%s 可被任何人写" -#: plugins/sudoers/sudoers.c:1031 toke.l:1068 +#: plugins/sudoers/sudoers.c:1131 toke.l:1129 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s 属于组 ID %u,应为 %u" -#: plugins/sudoers/sudoers.c:1064 +#: plugins/sudoers/sudoers.c:1164 #, c-format msgid "only root can use \"-c %s\"" msgstr "只有 root 才能使用“-c %s”" -#: plugins/sudoers/sudoers.c:1083 +#: plugins/sudoers/sudoers.c:1183 #, c-format msgid "unknown login class: %s" msgstr "未知的登录类别:%s" -#: plugins/sudoers/sudoers.c:1168 plugins/sudoers/sudoers.c:1183 +#: plugins/sudoers/sudoers.c:1268 plugins/sudoers/sudoers.c:1283 #, c-format msgid "unable to resolve host %s" msgstr "无法解析主机:%s" -#: plugins/sudoers/sudoreplay.c:258 +#: plugins/sudoers/sudoreplay.c:256 #, c-format msgid "invalid filter option: %s" msgstr "无效的过滤器选项:%s" -#: plugins/sudoers/sudoreplay.c:274 +#: plugins/sudoers/sudoreplay.c:272 #, c-format msgid "invalid max wait: %s" msgstr "无效的最大等待:%s" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:295 #, c-format msgid "invalid speed factor: %s" msgstr "无法的速度系数:%s" -#: plugins/sudoers/sudoreplay.c:333 +#: plugins/sudoers/sudoreplay.c:331 #, fuzzy, c-format #| msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgid "%s/%.2s/%.2s/%.2s: %s" msgstr "%s/%.2s/%.2s/%.2s/时序:%s" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:336 #, c-format msgid "%s/timing: %s" msgstr "%s/时序:%s" -#: plugins/sudoers/sudoreplay.c:342 +#: plugins/sudoers/sudoreplay.c:340 #, c-format msgid "%s/%s: %s" msgstr "%s/%s:%s" -#: plugins/sudoers/sudoreplay.c:366 +#: plugins/sudoers/sudoreplay.c:364 #, c-format msgid "Replaying sudo session: %s" msgstr "回放 sudo 会话:%s" -#: plugins/sudoers/sudoreplay.c:628 +#: plugins/sudoers/sudoreplay.c:626 msgid "unable to set tty to raw mode" msgstr "无法将终端设为原始模式" -#: plugins/sudoers/sudoreplay.c:679 +#: plugins/sudoers/sudoreplay.c:677 msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "警告:您的终端尺寸太小,不能正常地回放日志。\n" -#: plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:678 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "日志的几何尺寸为 %dx%d,您终端的几何尺寸为 %dx%d。" -#: plugins/sudoers/sudoreplay.c:708 +#: plugins/sudoers/sudoreplay.c:706 msgid "Replay finished, press any key to restore the terminal." msgstr "回放完成,请按任意键返回终端。" -#: plugins/sudoers/sudoreplay.c:1198 plugins/sudoers/sudoreplay.c:1228 +#: plugins/sudoers/sudoreplay.c:1196 plugins/sudoers/sudoreplay.c:1226 #, c-format msgid "ambiguous expression \"%s\"" msgstr "有歧义的表达式“%s”" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1248 msgid "unmatched ')' in expression" msgstr "表达式中的“)”不匹配" -#: plugins/sudoers/sudoreplay.c:1254 +#: plugins/sudoers/sudoreplay.c:1252 #, c-format msgid "unknown search term \"%s\"" msgstr "未知的搜索词“%s”" -#: plugins/sudoers/sudoreplay.c:1269 +#: plugins/sudoers/sudoreplay.c:1267 #, c-format msgid "%s requires an argument" msgstr "%s 需要参数" -#: plugins/sudoers/sudoreplay.c:1272 plugins/sudoers/sudoreplay.c:1524 +#: plugins/sudoers/sudoreplay.c:1270 plugins/sudoers/sudoreplay.c:1522 #, c-format msgid "invalid regular expression: %s" msgstr "无效的正则表达式:%s" -#: plugins/sudoers/sudoreplay.c:1277 +#: plugins/sudoers/sudoreplay.c:1275 #, c-format msgid "could not parse date \"%s\"" msgstr "无法解析日期“%s”" -#: plugins/sudoers/sudoreplay.c:1286 +#: plugins/sudoers/sudoreplay.c:1284 msgid "unmatched '(' in expression" msgstr "表达式中的“(”不匹配" -#: plugins/sudoers/sudoreplay.c:1288 +#: plugins/sudoers/sudoreplay.c:1286 msgid "illegal trailing \"or\"" msgstr "非法的结尾字符“or”" -#: plugins/sudoers/sudoreplay.c:1290 +#: plugins/sudoers/sudoreplay.c:1288 msgid "illegal trailing \"!\"" msgstr "非法的结尾字符“!”" -#: plugins/sudoers/sudoreplay.c:1348 +#: plugins/sudoers/sudoreplay.c:1346 #, c-format msgid "unknown search type %d" msgstr "未知的搜索类型 %d" -#: plugins/sudoers/sudoreplay.c:1615 +#: plugins/sudoers/sudoreplay.c:1613 #, c-format msgid "usage: %s [-hnRS] [-d dir] [-m num] [-s num] ID\n" msgstr "用法:%s [-hnRS] [-d 目录] [-m 数值] [-s 数值] ID\n" -#: plugins/sudoers/sudoreplay.c:1618 +#: plugins/sudoers/sudoreplay.c:1616 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "用法:%s [-h] [-d 目录] -l [搜索表达式]\n" -#: plugins/sudoers/sudoreplay.c:1627 +#: plugins/sudoers/sudoreplay.c:1625 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -2717,7 +2783,7 @@ msgstr "" "%s - 回放 sudo 会话记录\n" "\n" -#: plugins/sudoers/sudoreplay.c:1629 +#: plugins/sudoers/sudoreplay.c:1627 msgid "" "\n" "Options:\n" @@ -2745,11 +2811,11 @@ msgstr "" " -s, --speed=数值 加速或减慢输出\n" " -V, --version 显示版本信息并退出" -#: plugins/sudoers/testsudoers.c:354 +#: plugins/sudoers/testsudoers.c:348 msgid "\thost unmatched" msgstr "\t主机不匹配" -#: plugins/sudoers/testsudoers.c:357 +#: plugins/sudoers/testsudoers.c:351 msgid "" "\n" "Command allowed" @@ -2757,7 +2823,7 @@ msgstr "" "\n" "命令允许" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command denied" @@ -2765,7 +2831,7 @@ msgstr "" "\n" "命令被拒" -#: plugins/sudoers/testsudoers.c:358 +#: plugins/sudoers/testsudoers.c:352 msgid "" "\n" "Command unmatched" @@ -2810,89 +2876,89 @@ msgstr "不应当带路径调用 sudoedit" msgid "the -x option will be removed in a future release" msgstr "未来版本中 -x 选项会移除" -#: plugins/sudoers/visudo.c:227 +#: plugins/sudoers/visudo.c:228 msgid "please consider using the cvtsudoers utility instead" msgstr "请考虑换用 cvtsudoers 工具" -#: plugins/sudoers/visudo.c:278 plugins/sudoers/visudo.c:660 +#: plugins/sudoers/visudo.c:279 plugins/sudoers/visudo.c:659 #, c-format msgid "press return to edit %s: " msgstr "按回车键编辑 %s:" -#: plugins/sudoers/visudo.c:339 +#: plugins/sudoers/visudo.c:340 #, c-format msgid "specified editor (%s) doesn't exist" msgstr "指定的编辑器(%s)不存在" -#: plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:342 #, c-format msgid "no editor found (editor path = %s)" msgstr "未找到编辑器(编辑器路径 = %s)" -#: plugins/sudoers/visudo.c:451 plugins/sudoers/visudo.c:459 +#: plugins/sudoers/visudo.c:452 plugins/sudoers/visudo.c:460 msgid "write error" msgstr "写错误" -#: plugins/sudoers/visudo.c:505 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "无法 stat 临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:512 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "零长度的临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:518 +#: plugins/sudoers/visudo.c:519 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "编辑器(%s)失败,%s 未更改" -#: plugins/sudoers/visudo.c:540 +#: plugins/sudoers/visudo.c:541 #, c-format msgid "%s unchanged" msgstr "%s 未更改" -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/visudo.c:598 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "无法重新打开临时文件(%s),%s 未更改。" -#: plugins/sudoers/visudo.c:611 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "unable to parse temporary file (%s), unknown error" msgstr "无法解析临时文件(%s),未知错误" -#: plugins/sudoers/visudo.c:649 +#: plugins/sudoers/visudo.c:648 #, c-format msgid "internal error, unable to find %s in list!" msgstr "内部错误,在列表中找不到 %s!" -#: plugins/sudoers/visudo.c:729 plugins/sudoers/visudo.c:738 +#: plugins/sudoers/visudo.c:728 plugins/sudoers/visudo.c:737 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "无法将 %s 的 (uid, gid) 设为 (%u, %u)" -#: plugins/sudoers/visudo.c:761 +#: plugins/sudoers/visudo.c:760 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s 和 %s 不在同一个文件系统,使用 mv 进行重命名" -#: plugins/sudoers/visudo.c:775 +#: plugins/sudoers/visudo.c:774 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "命令失败:“%s %s %s”,%s 未更改" -#: plugins/sudoers/visudo.c:785 +#: plugins/sudoers/visudo.c:784 #, c-format msgid "error renaming %s, %s unchanged" msgstr "重命名 %s 出错,%s 未更改" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:805 msgid "What now? " msgstr "现在做什么?" -#: plugins/sudoers/visudo.c:820 +#: plugins/sudoers/visudo.c:819 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -2904,66 +2970,70 @@ msgstr "" " 退出,不保存对 sudoers 文件的更改(x)\n" " 退出并将更改保存到 sudoers 文件(危险!)(Q)\n" -#: plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:865 #, c-format msgid "unable to run %s" msgstr "无法运行 %s" -#: plugins/sudoers/visudo.c:896 +#: plugins/sudoers/visudo.c:895 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s:错误的所有者(uid, gid),应为 (%u, %u)\n" -#: plugins/sudoers/visudo.c:903 +#: plugins/sudoers/visudo.c:902 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s:权限不正确,模式应该是 0%o\n" -#: plugins/sudoers/visudo.c:960 plugins/sudoers/visudo.c:967 +#: plugins/sudoers/visudo.c:951 plugins/sudoers/visudo.c:958 #, c-format msgid "%s: parsed OK\n" msgstr "%s:解析正确\n" -#: plugins/sudoers/visudo.c:986 +#: plugins/sudoers/visudo.c:977 #, c-format msgid "%s busy, try again later" msgstr "%s 忙,请稍后重试" -#: plugins/sudoers/visudo.c:989 +#: plugins/sudoers/visudo.c:980 #, c-format msgid "unable to lock %s" msgstr "无法锁定 %s" -#: plugins/sudoers/visudo.c:990 +#: plugins/sudoers/visudo.c:981 msgid "Edit anyway? [y/N]" msgstr "仍然编辑?[y/N]" -#: plugins/sudoers/visudo.c:1083 -#, c-format -msgid "Error: %s:%d cycle in %s \"%s\"" +#: plugins/sudoers/visudo.c:1089 +#, fuzzy, c-format +#| msgid "Error: %s:%d cycle in %s \"%s\"" +msgid "Error: %s:%d: cycle in %s \"%s\"" msgstr "错误:%s:%d 在 %s “%s”中循环" -#: plugins/sudoers/visudo.c:1084 -#, c-format -msgid "Warning: %s:%d cycle in %s \"%s\"" +#: plugins/sudoers/visudo.c:1090 +#, fuzzy, c-format +#| msgid "Warning: %s:%d cycle in %s \"%s\"" +msgid "Warning: %s:%d: cycle in %s \"%s\"" msgstr "警告:%s:%d 在 %s “%s”中循环" -#: plugins/sudoers/visudo.c:1088 -#, c-format -msgid "Error: %s:%d %s \"%s\" referenced but not defined" +#: plugins/sudoers/visudo.c:1094 +#, fuzzy, c-format +#| msgid "Error: %s:%d %s \"%s\" referenced but not defined" +msgid "Error: %s:%d: %s \"%s\" referenced but not defined" msgstr "错误:%s:%d 引用了 %s “%s”但尚未定义" -#: plugins/sudoers/visudo.c:1089 -#, c-format -msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +#: plugins/sudoers/visudo.c:1095 +#, fuzzy, c-format +#| msgid "Warning: %s:%d %s \"%s\" referenced but not defined" +msgid "Warning: %s:%d: %s \"%s\" referenced but not defined" msgstr "警告:%s:%d 引用了 %s “%s”但尚未定义" -#: plugins/sudoers/visudo.c:1180 +#: plugins/sudoers/visudo.c:1186 #, c-format -msgid "Warning: %s:%d unused %s \"%s\"" -msgstr "警告:%s:%d 未使用的 %s “%s”" +msgid "Warning: %s:%d: unused %s \"%s\"" +msgstr "警告:%s:%d:未使用的 %s“%s”" -#: plugins/sudoers/visudo.c:1295 +#: plugins/sudoers/visudo.c:1301 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -2972,7 +3042,7 @@ msgstr "" "%s - 安全地编辑 sudoers 文件\n" "\n" -#: plugins/sudoers/visudo.c:1297 +#: plugins/sudoers/visudo.c:1303 msgid "" "\n" "Options:\n" @@ -2992,10 +3062,13 @@ msgstr "" " -s, --strict 严格语法检查\n" " -V, --version 显示版本信息并退出\n" -#: toke.l:1032 +#: toke.l:1093 msgid "too many levels of includes" msgstr "include 嵌套层数过多" +#~ msgid "sudo_ldap_conf_add_ports: port too large" +#~ msgstr "sudo_ldap_conf_add_ports:端口太大" + #~ msgid "No user or host" #~ msgstr "无用户或主机" diff --git a/plugins/sudoers/po/zh_TW.mo b/plugins/sudoers/po/zh_TW.mo index cbe1505d43329f4a80790c0ea6c69668cd3b779b..b1a11b6eca28d58dc6aacaaf5902f43def01dc0b 100644 GIT binary patch delta 91 zcmbPmj(Ng4<_%|*nHU%*pHuDwQk&ycwlOjWZ5CCtW@buc+#IBNj*)3C<7Or8O-zi5 so3HBr5S`51$-Vi8vjh{E@!K`eh0$noR+l%srGlY>m9gRGJzXI&0DIaV&Hw-a delta 87 zcmbPmj(Ng4<_%|*nbtB+KBwHrl*qU_PGuV-Bg1AVcz q3SZUzAY`kQe|7OdPoY diff --git a/plugins/sudoers/po/zh_TW.po b/plugins/sudoers/po/zh_TW.po index a1acfbc327..0d4860fa10 100644 --- a/plugins/sudoers/po/zh_TW.po +++ b/plugins/sudoers/po/zh_TW.po @@ -6,10 +6,10 @@ # Yi-Jyun Pan , 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.9.3b1\n" +"Project-Id-Version: sudoers 1.9.3b2\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-09-16 01:14+0800\n" +"POT-Creation-Date: 2020-09-14 06:53-0600\n" +"PO-Revision-Date: 2020-09-19 10:31+0800\n" "Last-Translator: Yi-Jyun Pan \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" @@ -1909,12 +1909,12 @@ msgstr "%s:值「%s」對選項「%s」無效" #: plugins/sudoers/defaults.c:1025 #, c-format -msgid "%s:%d: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s:%d: values for \"%s\" must start with a '/', '~', or '*'" msgstr "%s:%d: \"%s\" 的值開頭必須是 '/'、'~' 或 '*'" #: plugins/sudoers/defaults.c:1029 #, c-format -msgid "%s: values for \"%s\" must start with a '/', '*', or '*'" +msgid "%s: values for \"%s\" must start with a '/', '~', or '*'" msgstr "%s: \"%s\" 的值開頭必須是 '/'、'~' 或 '*'" #: plugins/sudoers/defaults.c:1040 diff --git a/po/eo.mo b/po/eo.mo index 3610355e6725d7f28e479ea76707d0d5cc5d9d2d..1d959b2b5595bfb8782a73465abf87bd713ffa3f 100644 GIT binary patch delta 1484 zcmXZcTS!z<6vpwT8D)sw)HEHP@kZY7ns>WsYGx3q7(J8;sfCCYR)#}J#1Iy}q(Nwg zAoWm@3Oz&!34uX^MMY2q83keX6g~F;I0uIL?KS6|z1G@$pZPiwv@#L&Bw~X<$IL47 z&7$xO#^Nwm;RJ5MFRp8NiP#Fv;$RTVa14v_EoR`RLbEh1Mh_mx6dZD$!Xo0uLi3xK zfg*l0pKB{75?{w8e1zG!j8`y-Y;`z{$+(E*wl!1(NhMAp)tF9v8Z+@W>i(Cgd4HDp zokU@~oeFc%$AuQx0n8%4gBAD+OEHA6JgmY4*oX1>4AuDuOu!(PCl!5|i}kn}FQQf| z;AfzU=CA`lAs?$OcP6}m2Z={f3BREdL{d!@R--0vMRj-$$!)V(iNBGLWfCav=8HwN zX{<*7X9gYy9yXlqwQ|&%=tZr>IO>6U)O~+Z1xN6-7fVt19mQC@jC^d&^&{>ej;?Wj z&qZxjAJ&uKrWmNgRa6J*d(3uX8>-WO)C6~NAI{<~{Ddd@A zHMWY{N-vY>dNbyd--Z|@@WW&D;u0#sA5`L){mxS7p^vy86R`)CU<7r@o?{dKz#1&9 zHQSEoQ4Ix9XJHCs@HNJf-@Y@@UIufd<1hx5pcuok9km5rs6#W39AH~S6&lP5RDulD z7Sv$`cAyFyKox!;Q*pt){tNx;P#d8MqER;%pq8iwlkqAl@k3O{?=c?NH#jSnjEZYf zjdWrP4x*NP61BohsQcDXg@re={<=`w=yceQdhjM{CFW573(KeiHt;GaEio%7YI%4|p+yxEy))?G$F=J!IGH z4XTicW@pPvQHhRW8V=w#oJ1v@Ma{E_Dr}wiuv2-8Ya8+>W&upX`I!e{J-&_kx!%0| cvb>_1*zB~B(9Z6&=lW0dE(B&8@<%=Y0X)&MS^xk5 delta 1480 zcmXZcTS!z<6vpu_Wl2O?jfOen%y>)lHcpO{mr8BAc?%VzhbSq#U?P-?;mbin!lIWl z3d|KTBB+;)gfM%G9@YAPoC61cd!5T(Ywf+q`LVdUvAC#ft(9kt zsSFyEjOQ^GE!>0mFcH5xE@D6N61uT(r!nO?jHUPvHQ$;NV{$Qw9z2d&*zY)wA>vqx zv5b$w5;wSvhr6;F)A1^1;A1SrSscJ+Jb)HiGcktbHjAhRykWbL3fw__4)gIQ>iw6f zdFR8HohV_KU11*jdC=t8jRnNFu@YZn8R}0ll;c6{#58<{>ii>maT&AG!!iXhf*Y|H zwNir?164GMr|>g!nX(Fd!XB(6zJ*Ho4V7RM)g)sDYT{;8hgXoCCW^c97jl^#0>x+e z!{V6<+>6#11|9|}Y&hF$!dQeIsFfH&eK3uB?+>crM85W62=(4kOvTH{WriI;;Z|Z- zm3==SwN;&Xi2P=pfht@;b&y?c%r@=)KEIA!3e6LlbD1z>RJDM1{2PM_o!38g8IPSU?&bEKYeo=HNkyk zx6E5qA&HIlmW5E?9m8Dg#?3g2N*G1W6GIjD&&NQO`;XYRU@7q+X5jSHqxBvBgyN7d Z7$^?}r&0@ZSI75U>g~EP)eyYn`421*wRQji diff --git a/po/eo.po b/po/eo.po index a44d3ba2d6..8cee4f93e7 100644 --- a/po/eo.po +++ b/po/eo.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" "POT-Creation-Date: 2020-09-12 08:28-0600\n" -"PO-Revision-Date: 2020-09-15 20:02-0400\n" +"PO-Revision-Date: 2020-09-20 12:15-0400\n" "Last-Translator: Keith Bowes \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -178,7 +178,7 @@ msgstr "%s estas skribebla de la tuta grupo" #: src/copy_file.c:91 #, c-format msgid "%s: truncate %s to zero bytes? (y/n) [n] " -msgstr "%s: ĉu trunki %s ĝis nul bajto? (y/n) [n]" +msgstr "%s: ĉu distranĉi %s ĝis nul bajto? (y/n) [n]" #: src/copy_file.c:95 #, c-format diff --git a/po/fi.mo b/po/fi.mo index ea52b6e66ed0dc017718ac0c47a9575ed587827b..a403607742a8101d5c66c589a042463b198544f1 100644 GIT binary patch delta 4764 zcma*pd303e9metBL`VS%OV|@2H$d0|gb*MQ)I^ab$fAH+z}QZb0kX}I$xI+13>Hv| z0u_+52}o&W)!HZ+n<6Gu8mPt6+EPx-X>EIo2ecI7$Z6}b-zWFdL;FvAPoDX__s(73 z_xHYY;p~3jtyg@pONlLBG`1$vlN86BCHTyawAE3w-*+%;gMYwOyov*{T}LziESr!1 zn2()t5e~;S*d32y4?Kr`@nh6^35jO>#jFpX{WvfRlW;DM#we-}N3a#vA$_w3%)us1 z#}=K;y5evggp<7eN~Ev07V~ktxBo|M$Nmjm$@A?ly3>UNt5H4QfmwJKHR3O^H>Pru zDwK!nXaQ2ia zYd{Bog=zRX_Q77%muFZW>H&|TN*(ds;CaBa0oCE(;!xDdvB5ZuhDtXF@55E7ku;#@ z_7dvBEg7~RoQ^s^9TPB$S`({~Q|$=O!1r)8cI9R~)288goR7NSp=9c>2Y%8t!OFgK3h-~JBrM< z{Swu|D=``>X*ar~2j!qvZ5VaIDpVy7p%&+ds0YS#kvcjGGqC{g!;MJQ?Ps1JBSo?n zOuVKh71e=p=wNIn4XSQcs0VIDo?*vu3SL0nxGzgri>(kfq9w>z_5!jV?M>u|V()u? zggWnYbg%;x-VQTSQP%QH!_|wKjI59#Dr4{uy=OcuvxNdZQ|rhXZ-O71Pj#>yho}zI3Bfz>XBR8 z1*A{bhPRQXU>vH#PsV6yM5{gbp)NRyWAHjsElX$kG;NOO22=+dJwHNS=cC^Bn1yrk z8ant;w%G$%j;iQusHu)M(a?oAy#oVys!Bf#RpOPXMYb2U2AaJ6&pdmMbw@SGVN=z(eXyCcX&-LMk# z@etAnyMgL?7WM6d#mM@zrKszVBB$7CR3%zdCRJ)29~wXmHHAA+6*`46t?o}~Xym;f zbVoE5SvM9&mF^(+!{1>l#!YZ5)DJbXhp`tfLfv=+szS$6_rHNGFYCu|un3>PIe2m+ z_3ud|iIt-pWn&sXj(u=B>V|t!rET(#Uq(&Q-ILunV>ZrUe+KG-dr&{mbErkwlQQc5 zQ&88HqAIdApZaU=U-!Pain^ft6t^Q2(P6(FHNy3%U&moosV|_WAc>VLr=g~9B|2D# zgYY8u#}@QT9ZW}6d|r%(O1%z;;Jc^`K1D6Q?$g{i+-zjf_7tjvr%*Szjyf-Ox_h4j zQ0JZTyybo0pEBt=1*oZwt)nrF#tBppKfzq={IJ`R*{JVVpe{U$D&0j?NpGSS zTbD=p_W>uNIz-hMaz{$FFK9np%^>eM{z#nP7C-saL6 zOlpaytC48?8mTADf_b{Em2{O@f% z2X>NFLe-l$y%#8>EhKx1wl_!<$t3&$n%}D1QQIqII5|xAkXRxgOp$FR-z6nP+ufuq zDJK<#mt^yAIvusOCcDXxNF`Z7zDaIxOT5Orct80zIY3U4bwnHMAl5whJ=keOUM6K^ z3%PUK#Lgn`fELpa@Axu-w%#Gy_LE|=o@9}eWHY&QYw7L0g$FhNPttguXw~{j0a-!n zh_)0LJAv07I&-XY^aChDRX6ySdWCz(rrW0NP z|K0}B`U9|ZX^McO=_(6nGPj!gVL&UoJcqt zEb>PJPFj@{2{}sx;gC~U6A4u1Iszdkbo&Oo1807Au>OgpL zxFn*h(yD3`li%(bmsPm=+>rb>V~1vrbVg+549~3XGqk|x8(F(@*sZt>ji$^WDf5?9 zMg0C?Sx7?)hRVy?aU%ZeXf*gAV_KX!##dMojYj-VX*3!xS?DhdRB&y`2?T?Ipi>sA zpb-i>RnZU~iTL%U-`p!AHI2vqzYA(#9nrS6Q`)#c5{NYJZ`>brYRXH>O2Va~=6m|N Mu?AQ-Zd2EP0mQITcmMzZ delta 4328 zcmYk-e{@fE9LMqZceK`;{jk~m*!WIHer&U0V{0>FGb>6XBP22`VVQ0H@KsSEGHd;i zh^3W;`i6*Bt(`h`Na*O~4E19HJHNvZ7U5rW5>~p=P?N*&C-S$4jvdu0oCdI^@rq`528S zF#}V1EG}U)@J{rhuGfUR@oDUX(cDxW%Iie^b)bv`nfMy^$3v*n-o!Yh;vgJ=vrv`V zfEs&0>iml>Vl1^ zCpw2YnBK*CqIswbtwmMJkBpxEjOyS8R3#I<&VBMwld%eQ{xTm8m0|~K*&IjRFpTc2 zr`ec>(=Zq7kSf|y*Yn83TPSzYkn})xU~D-$(T`KTK{iF$x~ONPHmFlx_ zW(Z5)5>b<-A0O&*3F^cO)Dx{hbz~Fj#(R-JJHm(N$lvJ2p4?TXABn2qLR7`pqkg{! zb^RYOQtSUL4VC0N(kb)uD?RCORB0!mW^W~GZfr!|pb@=z26f>umWHm=4JnG{qgKmo zKJ>d&BH>1Y<9I8Sge5n$5 zK@GuB)FiG#4Z&tq$B&^p(25=?XVhJZ}Qm;V`Q4^}N7m-seB$fK>2?p@3dOR9cs-?)vv3jJs)`S}KGpHeH z%~jJe5q0BY%*QGW$3_gngBXm*umDe>e%GCHXedh3sJ}{E#Q~Lm72bvKVFX@Ay>Np0 zRTXwbO`cj*skfs_c^K94E3UD;z4)p1$ALHl^?uoadSM-K4f3(4o@Ba?L;bJ<_hAE0 z!0D97i;XxGPoXMz8}(;2EC=NDs1kpTs^p)jxfGM>40R4_-&g83RwLE1J*ZOs zj=E7g-B-^m@LsG(4Z$VM#WP-2O1KT%<3SvUzoMQjcd#=QRj7`yL0#`FEW~Tb zsaBBZbo@EgoZF4*J{kvTbU+&t__L0v3q638$W~!TJd9eVXHk`jV|-W;mWO)sd8o;_ z0U2&OuN)u|yn;s!*ls--Sj!jRb5$UHBJNi9&}tHz+`rt`eu=b}Yf@;m%x` zgSyUgR0p!>-IkO}@FP8@!47 z;eJ#_PNT-Y^$6$qVAT0#sE)jjUTj1?;3?FqxQ-OjdKXfEmaNTTpyXSqu{(lZ3>)c` zJQ=&Qe?O{&i%=!shAMRn>cTNa&iO-7ldlYWU<1-u`ySQ7IG#?wAMT@}6BnQ^v;$e% z_ABbdgu5M!P~TT$ADxF9+ZNP?qDDC#%)`O#m!jrM1E$~)sNbo~s$4RvqP`I{G}&e% z!(?kw9Xf>?^Z0w5$y1EI*{?>8;b!FBWZz&kUUQAQmkG&!5~^Y|P#sw5x(~H#&LBhN zv!pSseGaJnbIDgklcj+?Kwc*=5N)qI*jxB6sUfcsbzGg(ww$aadP;4Z90Dsz%|}Q# z@-W$_^z4*|kW%Na$2hkT}zDw0cHB6pF`$&;jrd`5PY`GkcXScuPI6d6YR zOYZ6SJBCE(!qOAjo478k& z(eNlKagR-L)qj;Q-F6c8C7-Aa>qtM+j=V^;HIZlhEs?W>{PUxGc|L0QPq4pD{GO;* z>E+XEzez3(9hjWf-Xjh>#`H{&KfC{}xA;qQYGVHdFciid diff --git a/po/fi.po b/po/fi.po index e0060b05de..cdb132febe 100644 --- a/po/fi.po +++ b/po/fi.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-08-14 19:05+0300\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 23:01+0300\n" "Last-Translator: Lauri Nurmi \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -18,7 +18,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: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4.1\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -53,17 +53,17 @@ msgstr "rekisterin palautus epäonnistui" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -86,20 +86,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "muistin varaaminen epäonnistui" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "%s: avaaminen epäonnistui" @@ -177,12 +177,22 @@ msgstr "%s on yleiskirjoitettava" msgid "%s is group writable" msgstr "%s on ryhmäkirjoitettava" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: katkaistaanko %s nollaan tavuun? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "jätetään ylikirjoittamatta %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "tiedostosta %s lukeminen epäonnistui" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "tiedostoon %s kirjoittaminen epäonnistui" @@ -265,7 +275,7 @@ msgid "unable to set controlling tty" msgstr "ohjaavan tty:n asettaminen epäonnistui" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "putken luominen epäonnistui" @@ -274,7 +284,7 @@ msgid "unable to receive message from parent" msgstr "viestin vastaanotto vanhemmalta epäonnistui" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "fork-kutsu epäonnistui" @@ -282,7 +292,7 @@ msgstr "fork-kutsu epäonnistui" msgid "unable to restore tty label" msgstr "tty-nimiön palauttaminen epäonnistui" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "%s: suorittaminen epäonnistui" @@ -333,7 +343,7 @@ msgstr "viestin lähettäminen prosessien valvomiseksi epäonnistui" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "virhe tiedostossa %s, rivillä %d alustettaessa lisäosaa ”%s”" @@ -380,67 +390,67 @@ msgstr "löydettiin yhteensopimaton lisäosan pääversio %d (odotettiin %d) koh msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ohitetaan käytäntölisäosa ”%s” tiedostossa %s, rivillä %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "vain yksi käytäntölisäosa voidaan määritellä" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "tuntematon lisäosatyyppi %d löytyi kohteesta %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "käytäntölisäosa %s ei sisällä check_policy-metodia" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "sisäinen virhe, %s-ylivuoto" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "virheellinen ympäristömuuttujan nimi: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argumentin valitsimelle -C on oltava vähintään 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "valitsimia -i ja -s ei voi käyttää yhdessä" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "valitsimia -i ja -E ei voi käyttää yhdessä" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "valitsin -E ei kelpaa muokkaustilassa" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "ympäristömuuttujia ei voi määritellä muokkaustilassa" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "valitsinta -U voi käyttää vain valitsimen -l kanssa" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "valitsimia -A ja -S ei voi käyttää yhdessä" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ei ole tuettu tällä alustalla" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Vain yhtä valitsimista -e, -h, -i, -K, -l, -s, -v tai -V voidaan käyttää" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -449,7 +459,7 @@ msgstr "" "%s - muokkaa tiedostoja toisena käyttäjänä\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -458,8 +468,7 @@ msgstr "" "%s - suorita komentoja toisena käyttäjänä\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -467,124 +476,132 @@ msgstr "" "\n" "Valitsimet:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "käytä apuohjelmaa salasanakyselyyn" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "käytä määriteltyä BSD-todennustyyppiä" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "suorita komento taustalla" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "soita kelloa kehotteissa" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "sulje kaikki tiedostokahvat >= num" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "suorita komento määritellyllä BSD-kirjautumisluokalla" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "muuta työhakemisto ennen komennon suorittamista" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "säilytä käyttäjäympäristö komentoa suoritettaessa" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "säilytä tietyt ympäristömuuttujat" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "muokkaa tiedostoja komennon suorittamisen sijasta" # tämä viittaa runas_group-määritelyyn -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "suorita komento määriteltynä ryhmänimenä tai -ID:nä" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "aseta HOME-muuttuja osoittamaan kohdekäyttäjän kotihakemistoon" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "näytä opasteviesti ja poistu" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "suorita komento etäkoneella (jos lisäosa tukee)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "suorita kirjautumiskuori kohdekäyttäjänä; voidaan myös antaa komento" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "poista aikaleimatiedosto kokonaan" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "mitätöi aikaleimatiedosto" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "luettele käyttäjän käyttöoikeudet tai tarkasta tietty komento; kahdesti käyttämällä pidempi muoto" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "ei-vuorovaikutteinen tila, ei kehotteita" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "säilytä ryhmävektori kohteen vektorin asettamisen sijasta" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "käytä annettua salasanakehotetta" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "muuta juurihakemisto ennen komennon suorittamista" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "luo SELinux-turvakonteksti määritellyllä roolilla" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "lue salasana vakiosyötteestä" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "suorita kuori kohdekäyttäjänä; voidaan myös antaa komento" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "luo SELinux-turvakonteksti määritellyllä roolilla" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "päätä komento määrätyn aikarajan jälkeen" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "näytä luettelotilassa käyttäjän oikeudet" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "suorita komento (tai muokkaa tiedostoa) määriteltynä käyttäjänimenä tai -ID:nä" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "näytä versiotiedot ja poistu" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "päivitä käyttäjän aikaleima suorittamatta komentoa" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "lopeta komentoriviargumenttien käsittely" @@ -689,16 +706,16 @@ msgstr "exec-kontekstin asetus arvoon %s epäonnistui" msgid "unable to set key creation context to %s" msgstr "avaimenluontikontekstin asetus arvoon %s epäonnistui" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "vaatii vähintään yhden argumentin" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "virheellinen tiedostokahvanumero: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "yritys ajaa %s kirjautumiskuorena epäonnistui" @@ -751,126 +768,126 @@ msgstr "setproject-kutsu ”%s”-hankkeelle epäonnistui" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "varoitus, ”%s”-hankkeen resurssivalvontaosoitus epäonnistui" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo-versio %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Asetusvalitsimet: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "vakava virhe, lisäosien lataaminen epäonnistui" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "lisäosa ei palauttanut suoritettavaa komentoa" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "odottamaton sudo-tila 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "sinua ei ole olemassa %s-tietokannassa" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "tty:n päätteleminen epäonnistui" # ensimmäinen parametri on path -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "polun %s omistajan on oltava uid %d ja setuid-bitin on oltava asetettu" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "vallitseva käyttäjä-id ei ole %d, sijaitseeko %s ”nosuid”-valintaa käyttävällä tiedostojärjestelmällä, vai onko tämä NFS-tiedostojärjestelmä ilman root-käyttöoikeuksia?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "vallitseva käyttäjä-id ei ole %d, onko sudo asennettu setuid root -käyttöoikeuksilla?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "täydentävien ryhmä-ID:iden asettaminen epäonnistui" # tämän ymmärrän niin, että käyttöjärjestelmäydin luo tiedoston ja antaa tälle tavallaan tilapäisen effective gid-tunnisteen, joka vaihdetaan suorittamisen yhteydessä prosessin omistajan suoritettavaksi ryhmätunnisteeksi. -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "vallitsevan ryhmä-ID:n asettaminen runas-ryhmä-ID:ksi %u epäonnistui" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "ryhmä-ID:n asettaminen runas-ryhmä-ID:ksi %u epäonnistui" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "lapsiprosessin odottamaton päättymisehto: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "käytäntölisäosan alustaminen epäonnistui" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "käytäntölisäosalta %s puuttuu ”check_policy”-metodi" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "käytäntö hylkäsi komennon" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "käytäntölisäosan virhe" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "käytäntölisäosa %s ei tue käyttöoikeuksien luettelua" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "käytäntölisäosa %s ei tue valitsinta -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "käytäntölisäosa %s ei tue valitsimia -k/-K" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "virhe alustettaessa siirräntälisäosaa %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "audit-lisäosan %s alustaminen epäonnistui" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "hyväksyntälisäosan %s alustaminen epäonnistui" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "hyväksyjä hylkäsi komennon" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "hyväksyntälisäosan virhe" @@ -908,7 +925,7 @@ msgstr "%s jätetty muuttamattomaksi" msgid "%s unchanged" msgstr "%s muuttamaton" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "muokkausistunnon sisältö jätetty kohteeseen %s" @@ -921,33 +938,33 @@ msgstr "sesh: sisäinen virhe: polkujen pariton määrä" msgid "sesh: unable to create temporary files" msgstr "sesh: väliaikaistiedostojen luominen epäonnistui" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: signaali tappoi" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: tuntematon virhe %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "väliaikaistiedostojen kopioiminen takaisin niiden alkuperäiseen sijaintiin epäonnistui" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "joidenkin väliaikaistiedostojen kopioiminen takaisin niiden alkuperäiseen sijaintiin epäonnistui" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "käyttäjä-ID:n vaihtaminen rootiksi (%u) epäonnistui" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "lisäosavirhe: puuttuu sudoedit-tiedostoluettelo" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "kellon lukeminen epäonnistui" @@ -963,25 +980,25 @@ msgstr "salasanaa ei annettu" msgid "unable to read password" msgstr "salasanan lukeminen epäonnistui" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "salasanan lukemiseksi vaaditaan pääte; käytä joko valitsinta -S vakiosyötteen lukemiseksi tai aseta salasanakyselin" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "salasanakyselin on määrittelemättä, yritä asettaa SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "ryhmä-ID:n asettaminen arvoon %u epäonnistui" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "käyttäjä-ID:n asettaminen arvoon %u epäonnistui" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "salasanakyselimen %s suorittaminen epäonnistui" diff --git a/po/fr.mo b/po/fr.mo index 3ebfc1ed499592d2f98ec1a120e3fa51c14f7dfa..083e81d53c9cb50152c2509a5f146cdfc8eef85b 100644 GIT binary patch delta 4739 zcmajgdvH|c9merr07F0sA#x9p6G99DLT*4Hf06_zUqJVCe1tPE;HX9P4vepQq zf>bUo$VISN35E&{px}j)AQn`pGiY(9I&B#$7N(*yW1$!OeR2*n*gx7cdG_@Y$CWL$C)vh(oao)rWeF!^245tPuj@p0O>mUO2xC!R$0`~}Rz_faGM9(!X77ioqH zQ5~I$8c_`n!>yQvAEWO7+B1#b^`br!H`K1jjL^V)~n(Bz>bDq0B8&Mtp17@Nwj`qhv6f||y@lLEojieE^wx6RK zzJ+0{;Q^@g6R|y3q4q>Aa;eqhBs_sbu?r8QO}h_^a1QEudy<%cHT*kHu$*=s2V#5X zSsg1t)dQH1>u@lhLQV1an1y)^e+c?fGqxGEH};~g{}eUl@vNg}b|`9T1HGAlhr&~w z;LmpRp$p$b_4q4P!*R*(locY+vLLEst5FX;j2hWR9Ek%RcSavYJ!b=I#`YqsZD&y( zycDINDeX#k)KCFx*M?Cy)S_l$4{CFMjA}5Jo7B-En1eI%PF#!3x}Em?5}71x#lmZ8 zQcxYZ109T(P+-=r64l^ZqzyZSCRe2WgIGHsgryD?qwe+30i*(THj8c+?qk6MZ^P&4v(WH8o)t*()dLQU-y z)Fxhp+8bL?4ID-XFQA?q%SC!lZ`8~cVn5oq*%Wl+8f3rOtEirzLiUqgK|LUWji8S9 zL(NDL@@$)mnu+DepKb8YA4RSCMbr$npjVpV?x-agfl=+^Fa<5ai^!jS#D_ZYFI10H zxrjd480>%{Pu)C%`dZY8K0s~GE1t>x$_%AG5%v8FtdB9P!?x5*vzUK9z{dhqqeGa|h1AQMd^i zlbu6#EG|lGnwl)sNGBtMvBfw6UqP17uA)Ye%zPH25A}eTP}iSCF0t#l1GDqp*Y_jT z`JThv`%6&wZ9rDZqHj{*9=nKoQ1Wnht?&0->bVQmk<+LdxrTZ`dV#xlrXY{7mB?3i z)T>{^any5}2F=K0sOz>N_ebp$3feR+*$B*<xYDJt_h;-KWBgYB13Dp0M+GOMDl{&l(H4{y!890m09lD44*NBTKFnhKf zHG;QL7hFPS$x?Yr8kQlmZ>vz(y^9WB#U$)}uRFpV)cIMcy%I(Je(c2({5|UJ>0iwJ z_oPr$?B1{u)$>DM{V%A7TeE|@V_$~67EB7KCRFFP=M;_v)CJtU^0G+ zUGUm?=3gUCVBXU4UewxGpgQ(4_Q6K4egOwiZ$bBU-5|_BKWg)>L3Q8+rlL)Bf6)4( z?i-C7ND#HetD+RNCPz>``x@1ejtoajGaS`G1hv_=<3K!%>R1fJRJ||i`Ug-;v>LPV zBxd1tR0sP%;LeC2b$@gng-i+uQ9VA7dQfW?N;5DT)q#gm4Lyz8e1}kLeg^fROGuwA zezMzvS;)4qEyx>g=P?(Pr?}54L0*igMJXim#WBybIF0%jI0#2gbzj4v=RRba?Hknh zBTJbD)GO73tRNv$O>{g#S~Zv44_*#i?bW;L{eO*0Jef}Xq!;N#+L0T_gB1Fc2BPI^ zB03%>ZxNQ;_7NRbL^H9HtRgzJ`E)!_eoX4gQ)B||H&3gBbBK#!=%Hjv?!8KPS7%aqexkQlQkrd{D!P2Hy^inl{c_X>pzRaexhCKBQwcza+v5ycCmNx zgjfC*-tLt}CYeHFiFWS zIZFfKkW;oK5~v*I^jne@%y1qG&U707mN+2BKhGDO8*n1?0!}y-ia4{&!vTLJ6kg(# z1?GgpoUIB5%Y$&0 zOghrBMPAwZGXsm;4A0EXc5?Cx@)}YyceToNM-d7xstSZPil!aT(xy6w5%Na@k;=v$ zKN!jJoJBFC-JXS=1$4Tpt|AbQgcyty_W8?$0mrx47i4(pftsc|e^rF1F7VwLRKOe6 l`me_K>iNH}YZ#ojrAw*1SE+HF9`V<%{{d)mO5^|l delta 4320 zcmYk-3v`cl9LMqRf3#-pYBqBjf0vQVHrv>L4Qq*M7gRJ&Bhm${%*s&oRH!7DW|5>) zx(K6x%A{26)Tz@IhjMT_>68*j=jh_3dVikh>GC`KJg?vL{QuAMyFUM&+!WaHa=|^!!EU$`FUHp~5szUnJcI2pm5T!~15Irbryo?JMB9WjEdd6DM;UJ1{UBf?1!5$1rPb2M*3orNoFP3 z9(6tiJA#i-our9gXBL6|Lc~sD``nbTvF2b^R8M#pS5AUyJ-%3x_dy4D&FH zVetsN881f%^}Ic(hEHIBOrlYBsHhY3uM5>&2;piRh@YXR_5#)+3opSzI2|=pPovg8 zjQajD)Ks@)dNOecYDudxh|5q*y9M>Vk5L^xo5uXB;W$3kR23ti*`274J%)PVZq$fQ z;ZV%!>W!!d^`JGVnF=GTXJ4T@cm_3-X+f`@BGhJ_i~9Z&hl-|RE9$j5jA}53?yIMR zF&n31AvPkjX#0InBZIeSTG5j9Ms?sa4C1xOWZFDbgN?{7whK$qIZ8zj?!%7JCYy#D z(LKnYt>VBwvNw?pZ~J_|M}6-+1~G*#uh%PtTB>4HgY!`Xcn)dG4xrlk4S7=?i(`lI z>RUI|X36EC9#^8iI2$#hrKpaqM>V_?`Llf-v`2o&AoihEO?@e92J28WwhncFGwS)D zV}joQpQva`{zN)uLGIE>N12&4fpLG6uaQ4Q?IApVGYa15`8p3@VV6e~u(Ei*Xi zz6NCb*fvzhKf|uHZ@*B{15#*3J9MX0^9#=qWzTJuw=8H(aVO>tM$ z5)4Ca;<>0L*nsNzK~x7?apI`QeW>sZE5mr4?YkI zxH(|fgwdQ&@Ca%^TaiB4J}k%9{7NzFb``3l^RWoucBtq9f1z&ZMfcRh z@f@DPWmt-t%(Je~Lp`7gb>A6ewk>Cc3U}p|GuRwLA9yJ4B`Pa{(?$0go_Qqsn&{mI$xCga_2QY~32AeIwLCAH- z!c;nN;b*ME793fyxLjtVTAb9rcYZ@?OUw$n4p8REO&EI^2b7IF(kk6jjKrwh%Rw zdvG$I#fexk%-b`sVJhdxG1sAT-oKE|)5nU%~wA_4cZ_4fb)Jp=a5U)4l}U{HL|0afdQsV9nL~MXDn*O%TXP81=Y?0)aHx0%3E@$ z6BRuuggnb8pgOP-Sx);7c{44Gh3Ci5s!=uJ^+Pe!`6hJyHL=LV|V-BWL`=2O>O|CE0%539*Uaxa-m=8+J&h-8yjiT1n7 zJs$3FrK+2V2D+2*6Y7@k9QA@yygA@KbIUf4S!6CLB=w}6yhG-bGV(TggUlkM$w2Y| zNhHHbm@Fj!l#8jOqSApR zxHa!E25u*n{^}Ur)yYWQV3huj}Nk}xA8JS(Yh;ML@Fk>S|R u&55mYYNs}QkWtbml#!Dg9FSiyAlxzY`PSi+IW>Xsp@D1KgclZ`X#Y2H|HS$L diff --git a/po/fr.po b/po/fr.po index 5316cfe935..b7e6ca410b 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,10 +6,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-23 08:05+0200\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-20 13:35+0200\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -52,17 +52,17 @@ msgstr "impossible de rétablir le registre" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -85,20 +85,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "impossible d'allouer la mémoire" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "impossible d'ouvrir %s" @@ -175,12 +175,22 @@ msgstr "%s peut être écrit par tout le monde" msgid "%s is group writable" msgstr "%s peut être écrit par le groupe" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, 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:95 +#, c-format +msgid "not overwriting %s" +msgstr "n'écrase pas %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "impossible de lire depuis %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "impossible d'écrire dans %s" @@ -261,7 +271,7 @@ msgid "unable to set controlling tty" msgstr "impossible de choisir le tty de contrôle" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "impossible de créer le tube" @@ -270,7 +280,7 @@ msgid "unable to receive message from parent" msgstr "impossible de recevoir un message du parent" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "erreur de fork" @@ -278,7 +288,7 @@ msgstr "erreur de fork" msgid "unable to restore tty label" msgstr "impossible de rétablir l'étiquette du tty" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "impossible d'exécuter %s" @@ -329,7 +339,7 @@ msgstr "impossible d'envoyer le message au processus de monitoring" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "erreur dans %s, ligne %d lors du chargement du greffon « %s »" @@ -374,67 +384,67 @@ msgstr "greffon à la version majeure %d incompatible (%d attendu) trouvé dans 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:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "un seul greffon de règles peut être spécifié" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "type de greffon %d inconnu dans %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "le greffon de règles %s ne contient pas de méthode check_policy" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "erreur interne, débordement %s" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "nom de variable d'environnement invalide: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "l'argument à -C doit être un nombre plus grand ou égal à 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 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:536 +#: src/parse_args.c:557 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:546 +#: src/parse_args.c:567 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:548 +#: src/parse_args.c:570 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:557 +#: src/parse_args.c:580 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:561 +#: src/parse_args.c:584 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:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit n'est pas pris en charge sur cette plate-forme" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Seule une des options -e, -h, -i, -K, -l, -s, -v ou -V peut être spécifiée" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -443,7 +453,7 @@ msgstr "" "%s – édite les fichiers en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -452,8 +462,7 @@ msgstr "" "%s – exécute une commande en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -461,123 +470,131 @@ msgstr "" "\n" "Options:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "utiliser un programme adjoint pour demander le mot de passe" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "utiliser le type d'authentification BSD spécifié" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "exécuter la commande en arrière-plan" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "émettre un signal sonore lors d'une demande" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "fermer tous les descripteurs de fichiers >= n°" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "exécuter la commande avec la classe de login BSD" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +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:800 msgid "preserve user environment when running command" msgstr "préserver l'environnement de l'utilisateur en exécutant la commande" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "préserver les variables d'environnement spécifiques" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "éditer les fichiers au lieu d'exécuter une commande" -#: src/parse_args.c:780 +#: src/parse_args.c:806 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:782 +#: src/parse_args.c:808 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:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "afficher le message d'aide et terminer" -#: src/parse_args.c:786 +#: src/parse_args.c:812 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:788 +#: src/parse_args.c:814 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:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "supprime complètement le fichier d'horodatage" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "invalide le fichier d'horodatage" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "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:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "mode non interactif, aucune invite utilisée" -#: src/parse_args.c:798 +#: src/parse_args.c:824 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:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "utiliser l'invite de mot de passe spécifié" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "changer le répertoire racine avant d'exécuter la commande" + +#: src/parse_args.c:831 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:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "lire le mot de passe depuis l'entrée standard" -#: src/parse_args.c:808 +#: src/parse_args.c:836 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:811 +#: src/parse_args.c:839 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:814 +#: src/parse_args.c:842 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:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "en mode liste, afficher les privilèges de l'utilisateur" -#: src/parse_args.c:818 +#: src/parse_args.c:846 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:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "afficher les informations de version et terminer" -#: src/parse_args.c:822 +#: src/parse_args.c:850 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:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "arrêter de traiter les arguments en ligne de commande" @@ -682,16 +699,16 @@ 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:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "exige au moins un argument" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "numéro de descripteur de fichier invalide: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "impossible d'exécuter %s comme un shell de login" @@ -744,124 +761,124 @@ msgstr "setproject a échoué pour le projet « %s »" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "attention, l'assignement du contrôle de ressources a échoue pour le projet « %s »" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo version %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Options de configuration : %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "erreur fatale, impossible de charger les greffons" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "le greffon n'a pas retourné une commande à exécuter" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "mode sudo 0x%x inattendu" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "vous n'existez pas dans la base de données %s" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "impossible de déterminer le tty" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s doit être la propriété du uid %d et avoir le bit setuid mis" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "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:914 +#: src/sudo.c:922 #, 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:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "impossible d'attribuer les ID de groupe supplémentaires" -#: src/sudo.c:937 +#: src/sudo.c:945 #, 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:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "impossible de changer le gid à runas gid %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "condition de fin de l'enfant inconnue: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "impossible d'initialiser le greffon de règles" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, 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:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "commande rejetée par la politique" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "erreur du greffon de politique" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, 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:1256 +#: src/sudo.c:1264 #, 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:1294 +#: src/sudo.c:1302 #, 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:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "erreur à l'initialisation du greffon E/S %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "erreur à l'initialisation du greffon d'audit %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "erreur à l'initialisation du greffon d'approbation %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "commande rejetée par l'approbateur" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "erreur du greffon d'approbation" @@ -898,7 +915,7 @@ msgstr "%s laissé tel quel" msgid "%s unchanged" msgstr "%s non modifié" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "contenu de la session d'édition laissé dans %s" @@ -911,33 +928,33 @@ 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:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: tué par un signal" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: erreur %d inconnue" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 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:897 +#: src/sudo_edit.c:899 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:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "impossible de changer le uid en root (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "erreur de greffon : liste de fichiers manquantes pour sudoedit" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "impossible de lire l'horloge" @@ -953,25 +970,25 @@ msgstr "aucun mot de passe fourni" msgid "unable to read password" msgstr "impossible de lire le mot de passe" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "un terminal est requis pour lire le mot de passe; utilisez soit l'option -S pour lire depuis l'entrée standard ou configurez un outil askpass de demande de mot de passe" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "pas de programme askpass spécifié, essayez avec SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "impossible de changer le gid en %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "impossible de changer le uid en %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "impossible d'exécuter %s"

09ijI2ZL|CF&2N73bhS)Ijc{AN?iX0E&@G*;-tH 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 diff --git a/po/it.po b/po/it.po index 8902c113c7..8424e5c187 100644 --- a/po/it.po +++ b/po/it.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo-1.9.1b1\n" +"Project-Id-Version: sudo-1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-05 10:24-0600\n" -"PO-Revision-Date: 2020-06-24 09:35+0200\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-07-29 12:57+0200\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" @@ -60,8 +60,8 @@ msgstr "impossibile ripristinare il registro" #: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 #: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 #: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:767 src/sudo_edit.c:851 src/sudo_edit.c:971 -#: src/sudo_edit.c:991 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 +#: src/sudo_edit.c:994 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -91,8 +91,8 @@ msgstr "%s: %s" #: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 #: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 #: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:767 src/sudo_edit.c:851 -#: src/sudo_edit.c:971 src/sudo_edit.c:991 +#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:974 src/sudo_edit.c:994 msgid "unable to allocate memory" msgstr "impossibile allocare memoria" @@ -269,7 +269,7 @@ msgid "unable to receive message from parent" msgstr "impossibile ricevere il messaggio dal genitore" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:732 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:308 msgid "unable to fork" msgstr "impossibile eseguire fork" @@ -402,28 +402,28 @@ msgid "the argument to -C must be a number greater than or equal to 3" msgstr "l'argomento di -C deve essere un numero maggiore o uguale a 3" #: src/parse_args.c:532 -msgid "you may not specify both the `-i' and `-s' options" -msgstr "non è possibile specificare entrambe le opzioni \"-i\" e \"-s\"" +msgid "you may not specify both the -i and -s options" +msgstr "non è possibile specificare entrambe le opzioni -i e -s" #: src/parse_args.c:536 -msgid "you may not specify both the `-i' and `-E' options" -msgstr "non è possibile specificare entrambe le opzioni \"-i\" ed \"-E\"" +msgid "you may not specify both the -i and -E options" +msgstr "non è possibile specificare entrambe le opzioni -i ed -E" #: src/parse_args.c:546 -msgid "the `-E' option is not valid in edit mode" -msgstr "l'opzione \"-E\" non è valida in modalità di modifica" +msgid "the -E option is not valid in edit mode" +msgstr "l'opzione -E non è valida in modalità di modifica" #: src/parse_args.c:548 msgid "you may not specify environment variables in edit mode" msgstr "non è possibile specificare variabili d'ambiente in modalità di modifica" #: src/parse_args.c:557 -msgid "the `-U' option may only be used with the `-l' option" -msgstr "l'opzione \"-U\" può essere usata solo con l'opzione \"-l\"" +msgid "the -U option may only be used with the -l option" +msgstr "l'opzione -U può essere usata solo con l'opzione -l" #: src/parse_args.c:561 -msgid "the `-A' and `-S' options may not be used together" -msgstr "non è possibile usare assieme le opzioni \"-A\" e \"-S\"" +msgid "the -A and -S options may not be used together" +msgstr "non è possibile usare assieme le opzioni -A e -S" #: src/parse_args.c:654 msgid "sudoedit is not supported on this platform" @@ -718,27 +718,27 @@ msgstr "il task chiamante è definitivo" msgid "could not join project \"%s\"" msgstr "impossibile unirsi al progetto \"%s\"" -#: src/solaris.c:87 +#: src/solaris.c:89 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "non esiste alcun pool di risorse per il progetto \"%s\" che accetti binding predefiniti" -#: src/solaris.c:91 +#: src/solaris.c:93 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "il pool di risorse specificato non esiste per il progetto \"%s\"" -#: src/solaris.c:95 +#: src/solaris.c:97 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "impossibile unirsi al pool di risorse predefinito per il progetto \"%s\"" -#: src/solaris.c:101 +#: src/solaris.c:104 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject per il progetto \"%s\" non riuscita" -#: src/solaris.c:103 +#: src/solaris.c:106 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "attenzione, assegnazione della risorsa di controllo per il progetto \"%s\" non riuscita" @@ -815,8 +815,8 @@ msgstr "impossibile inizializzare il plugin delle politiche" #: src/sudo.c:1158 #, c-format -msgid "policy plugin %s is missing the `check_policy' method" -msgstr "il plugin di politica %s non include un metodo \"check_policy\"" +msgid "policy plugin %s is missing the \"check_policy\" method" +msgstr "il plugin di politica %s non include il metodo \"check_policy\"" #: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 msgid "command rejected by policy" @@ -892,51 +892,51 @@ msgstr "%s: la modifica di file in una directory con accesso in scrittura non è msgid "%s left unmodified" msgstr "%s lasciato non modificato" -#: src/sudo_edit.c:680 src/sudo_edit.c:868 +#: src/sudo_edit.c:680 src/sudo_edit.c:871 #, c-format msgid "%s unchanged" msgstr "%s non modificato" -#: src/sudo_edit.c:703 src/sudo_edit.c:904 +#: src/sudo_edit.c:706 src/sudo_edit.c:907 #, c-format msgid "contents of edit session left in %s" msgstr "contenuto della sessione di modifica lasciato in %s" -#: src/sudo_edit.c:811 +#: src/sudo_edit.c:814 msgid "sesh: internal error: odd number of paths" msgstr "sesh: errore interno: strano numero numero di percorsi" -#: src/sudo_edit.c:813 +#: src/sudo_edit.c:816 msgid "sesh: unable to create temporary files" msgstr "sesh: impossibile creare file temporanei" -#: src/sudo_edit.c:815 src/sudo_edit.c:897 +#: src/sudo_edit.c:818 src/sudo_edit.c:900 msgid "sesh: killed by a signal" msgstr "sesh: ucciso da un segnale" -#: src/sudo_edit.c:817 src/sudo_edit.c:900 +#: src/sudo_edit.c:820 src/sudo_edit.c:903 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: errore %d sconosciuto" -#: src/sudo_edit.c:891 +#: src/sudo_edit.c:894 msgid "unable to copy temporary files back to their original location" msgstr "impossibile copiare i file temporanei nella loro posizione originale" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:897 msgid "unable to copy some of the temporary files back to their original location" msgstr "impossibile copiare alcuni dei file temporanei nella loro posizione originale" -#: src/sudo_edit.c:938 +#: src/sudo_edit.c:941 #, c-format msgid "unable to change uid to root (%u)" msgstr "impossibile modificare lo uid a root (%u)" -#: src/sudo_edit.c:955 +#: src/sudo_edit.c:958 msgid "plugin error: missing file list for sudoedit" msgstr "errore di plugin: elenco file mancante per sudoedit" -#: src/sudo_edit.c:1006 src/sudo_edit.c:1019 +#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 msgid "unable to read the clock" msgstr "impossibile leggere l'orologio" diff --git a/po/ja.mo b/po/ja.mo index dc65656452a83a8eabf95f0afda126b923775f81..8cc72c7c6e5c1c0c6135569f57fd3a6660b5132e 100644 GIT binary patch delta 4786 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 Z`)qWZoDPgHNM%_>O_9lhja^4}F%-(Ua$ diff --git a/po/ja.po b/po/ja.po index 6e2ce04b56..92fbd8fdc2 100644 --- a/po/ja.po +++ b/po/ja.po @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-18 01:01+0900\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 21:10+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.2.1\n" -"X-Poedit-Basepath: sudo-1.9.2rc1\n" +"X-Poedit-Basepath: sudo-1.9.3b1\n" "X-Poedit-SearchPath-0: .\n" #: lib/util/aix.c:89 lib/util/aix.c:169 @@ -54,17 +54,17 @@ msgstr "レジストリーを復元できません" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -87,20 +87,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "メモリ割り当てを行えませんでした" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "%s を開けません" @@ -177,12 +177,22 @@ msgstr "%s は誰でも書き込み可能です" msgid "%s is group writable" msgstr "%s はグループのメンバーによる書き込みが可能です" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: %s をゼロバイトに切り詰めますか? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "%s を上書きしません" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "%s から読み込むことができません" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "%s へ書き込むことができません" @@ -263,7 +273,7 @@ msgid "unable to set controlling tty" msgstr "tty の制御設定ができません" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "パイプを作成できません" @@ -272,7 +282,7 @@ msgid "unable to receive message from parent" msgstr "親からのメッセージを受け取ることができません" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "fork できません" @@ -280,7 +290,7 @@ msgstr "fork できません" msgid "unable to restore tty label" msgstr "tty ラベルを復旧できません" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "%s を実行できません" @@ -331,7 +341,7 @@ msgstr "監視プロセスへメッセージを送ることができません" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "%s, %d 行目 プラグイン \"%s\" をロード中にエラーが発生しました" @@ -376,67 +386,67 @@ msgstr "互換性の無いポリシーメジャーバージョン %d (予期 msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ポリシープラグイン \"%s\" を無視します。%s の %d 行目" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "1つのポリシープラグインのみ指定できます" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "不明なプラグインタイプ %d が %s で見つかりました" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "内部エラー、 %s がオーバーフローしました" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "無効な環境変数名です: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C の引数は 3 以上の数値でなければいけません" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "-i と -s オプションを同時に指定することはできません" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "-i と -E オプションを同時に指定することはできません" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "-E オプションは編集モードでは無効です" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "編集モードでは環境変数を指定できません" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "-U オプションを使うには -l オプションも必要です" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "-A と -S オプションは同時に指定できません" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit はこのプラットフォームではサポートされていません" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "-e, -h, -i, -K, -l, -s, -v または -V のうち一つのみ指定できます" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -445,7 +455,7 @@ msgstr "" "%s - 別のユーザーとしてファイルを編集します\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -454,8 +464,7 @@ msgstr "" "%s - 別のユーザーとしてコマンドを実行します\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -463,123 +472,131 @@ msgstr "" "\n" "オプション:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "パスワード要求のために補助プログラムを使用する" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "指定した BSD 認証タイプを使用する" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "コマンドをバックグラウンドで実行する" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "プロンプトと同時にベルを鳴らす" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "num 以上のすべてのファイル記述子を閉じる" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "指定した BSD ログインクラスでコマンドを実行する" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "コマンド実行前に作業ディレクトリを変更する" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "コマンドを実行する時にユーザーの環境変数を維持する" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "指定の環境変数を維持する" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "コマンドを実行するのではなくファイルを編集する" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "指定したグループ名またはグループIDでコマンドを実行する" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "HOME 変数を変更先となるユーザーのホームディレクトリに設定する" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "このヘルプを表示して終了する" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "host でコマンドを実行する(プラグインがサポートしている場合)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "変更先のユーザーとしてログインシェルを実行する; コマンドを指定することもできます" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "タイムスタンプファイルを完全に削除する" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "無効なタイムスタンプファイルです" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "ユーザーの権限を一覧表示するまたは指定したコマンドについて確認する ;長い表示にするには2回指定すること" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "非対話モードで実行し、ユーザーに入力を求めない" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "グループベクトルを保護する (変更先のユーザーのものに設定しない)" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "指定したパスワードプロンプトを使用する" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "コマンド実行前にルートディレクトリを変更する" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "指定した役割で SELinux セキュリティーコンテキストを作成する" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "標準入力からパスワードを読み込む" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "変更先のユーザーとしてシェルを実行する; コマンドを指定することもできます" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "指定したタイプで SELinux セキュリティーコンテキストを作成する" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "指定した制限時間でコマンドの実行を中止する" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "リストモードで、ユーザーの権限を表示する" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "指定したユーザー名またはユーザーIDでコマンドを実行する (またはファイルを編集する)" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "バージョン情報を表示して終了する" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "コマンドを実行せずにユーザーのタイムスタンプを更新する" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "コマンドライン引数の処理を終了する" @@ -684,16 +701,16 @@ msgstr "実行コンテキストを %s に設定できません" msgid "unable to set key creation context to %s" msgstr "キー作成コンテキストを %s へ設定できません" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "最低でも一つ以上おの引数が必要です" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "無効なファイル記述子の番号: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s をログインシェルとして実行できません" @@ -746,124 +763,124 @@ msgstr "プロジェクト\"%s\" への setproject に失敗しました" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "警告、プロジェクト \"%s\" への資源制御割り当てに失敗しました" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo バージョン %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "configure オプション: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "致命的エラー、プラグインをロードできません" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "プラグインが実行するべきコマンドを返しませんでした" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "予期しない sudo のモード 0x%x です" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "あなたは %s データベースに存在しません" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "tty を特定できません" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s は所有者が uid %d である必要があり、かつ setuid が設定されている必要があります" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "実効 uid が %d ではありません、%s は 'nosuid' が設定されたファイルシステムにあるか、root 権限のないNFSファイルシステムにあるのでは?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "実効 uid が %d ではありません、sudo は setuid root を設定してインストールされていますか?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "追加のグループIDを設定できません" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "実行時のグループID (gid) %u を実効グループIDに設定できません" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "実行時のグループID (gid) %u をグループIDに設定できません" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "予期しない子プロセスの終了コードです: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "ポリシープラグインを初期化できません" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "ポリシーによりコマンドが拒否されました" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "ポリシープラグインエラー" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "ポリシープラグイン %s は権限の一覧表示をサポートしていません" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "ポリシープラグイン %s は -v オプションをサポートしません" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "ポリシープラグイン %s は -k/-K オプションをサポートしません" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "I/O プラグイン %s を初期化中にエラーが発生しました" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "認証プラグイン %s を初期化中にエラーが発生しました" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "承認プラグイン %s を初期化中にエラーが発生しました" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "承認者によりコマンドが拒否されました" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "承認プラグイン エラー" @@ -900,7 +917,7 @@ msgstr "%s を修正しないままにします" msgid "%s unchanged" msgstr "%s を変更しません" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "編集セッションの内容が %s 内に残っています" @@ -913,33 +930,33 @@ msgstr "sesh: 内部エラー: パスの数がおかしいです" msgid "sesh: unable to create temporary files" msgstr "sesh: 一時ファイルを作成することができません" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: シグナルにより kill されました" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: 不明なエラー %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "一時ファイルを元の場所に戻すことができません" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "一時ファイルのいくつかを元の場所に戻すことができません" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "ユーザーID (uid) を root (%u) に変更できません" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "プラグインエラー: sudoedit 用のファイル一覧がありません" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "時刻を読み込むことができません" @@ -955,25 +972,25 @@ msgstr "パスワードが与えられませんでした" msgid "unable to read password" msgstr "パスワードを読み込むことができません" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "パスワードを読み取るために端末が必要です。 -S オプションを利用して標準入力から読み取るか、askpass ヘルパーを使うよう設定してください" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "パスワードを尋ねる (askpass) プログラムが指定されていません。 SUDO_ASKPASS を設定し、やり直してください" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "グループIDを %u に設定できません" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "ユーザーIDを %u に設定できません" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "%s を実行できません" diff --git a/po/pl.mo b/po/pl.mo index 5c9533c752b80eafd6f76fa26526742394598922..63d3e534b3b968cd957fa56cb7447c6647226a80 100644 GIT binary patch delta 4736 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 delta 4321 zcmYk;e{_yz9LMqRhM5@~W;V_hTz;z#e!BBQT1G{V)Nea0*6aId;Xh zsP}5IwVBtBQR&8mGuR#jd76qbs4fXdK6avZ>YEq1^Q*dIgMI%Z-F_a&$at-+pH ziwp1!reOi2Rl933k^XHb6$WFc(SsMUJBGJ2>w>AscdY=`!Aw+2SGjI?ecSakYQUE< z0i#)m-Z&KFumm%)2ECfeX)0R7-%%ZRqIGqggL-}+w!qb>wXZ?`te#6gHef3DWm+_0 zMK~C}sP>McI{p#ku??MSKv^BgzaC8IK^ktr6g-YfZ4=g^FQ(%Sct0vrTTpB7L%rXC zN_7P3NyI^@C7q5QT!mWNU8wgyLJjnC4Ea~bE%{Wb%0)i2xu}7yLp699HKPl7BPPc> zGn$2JXd^09K4kUmOVj`_p)wicar((ZZN_=1_g8qSC>6U=$L2Ju!%&8=kq*QpEW}K# zM6zg~xn4vjZz1%eCFzM8KsI`C0+LLdkLs`z`HCIF;pqLEiW-h%$7qvHL(OOr@@Lgt z*hh8{+3@zM>kp{+{y`5$vgLKW(ojp4i|TM8Y69DkuIzJEKUa{G>a~{a5RSfeMs1e< zTr}bW)QhF48LdPOv|%)_@d(;=wTPDJhAa@5{<7S+LF^x!#E!=W4vwbKnrishnCOEDLHuL9XVwg)xv z;}}c-_8S#75J@i@X(B2kdB{gL36+UusJ*h$eO`}R^9!g91@oa&9E)0ln^Bv19%>0* zKn?s0)BqZBhqOY9bonv26I1@ zmy>ZcY5+@76RkzYU>_xtf2HOM4{pXt7E&oMKo6E7e^$+flVtCsGW0#F!9b3TW}JfA zI3AU`r%?lV1%q%O>ewDc4fqdKzx|TPzeY5Q*0knDn1c&243A(q9>;3@7WLkIrllFI zMlDgD>seGLn)BrsacYZiB zQ5{c4_MNRmrTk-52Un5pU8?YNjcyDojV$)F#m7#X?UewHg!amr3 zq?58-*Ey&LwxT+&M-BKgs)OiJ?hhMkuN0x4SEDlbA!5O5!cE@w^D~%!)FPtq0+1wPa*CjRF)9s#5&>?;x2*&_{&_buetT>3E^fW{oBj# zQ?2_0ZvA--BkGCP#9?AL!M^gBX=iWVhiEz%|%5& zjc@yF&Ofz}Q!gf7B($D$i2cMp#Qj7lq4KJO|6H$d>q0+h2Z;(|J)z%=Yh^r@&BQZW zf0dO)FcGO63O`g<>90AL+uV9nY)0HfY$TcxjR=)8!lMf1O=1nPKsS^kVgjKJtfJqB zq5fJ$Mp%gVZmPBZTW4<$pdLePa-XH*bm9(TF;Pg&C(?-KL=v%=NF-DiIoPePJ5duo zK=6y^FI~9mAX1zha18uq57)lLJR*~Lir`1Ujt~op5yV@>>%?q=^Xosbk6|k!hwu?g ziEE`7l@ekXv5mN$h$p5JFR1@zR8-m!1O2uCFD\n" "Language-Team: Polish \n" "Language: pl\n" @@ -49,17 +49,17 @@ msgstr "nie udało się odtworzyć rejestru" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -82,20 +82,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "nie udało się przydzielić pamięci" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" @@ -172,12 +172,22 @@ msgstr "%s jest zapisywalny dla świata" msgid "%s is group writable" msgstr "%s jest zapisywalny dla grupy" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, 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:95 +#, c-format +msgid "not overwriting %s" +msgstr "bez nadpisywania %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "nie można czytać z %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "nie można pisać do %s" @@ -258,7 +268,7 @@ msgid "unable to set controlling tty" msgstr "nie udało się ustawić sterującego tty" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "nie udało się utworzyć potoku" @@ -267,7 +277,7 @@ msgid "unable to receive message from parent" msgstr "nie udało się odebrać komunikatu od rodzica" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "nie udało się wykonać fork" @@ -275,7 +285,7 @@ msgstr "nie udało się wykonać fork" msgid "unable to restore tty label" msgstr "nie udało się przywrócić etykiety tty" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "nie udało się wykonać %s" @@ -326,7 +336,7 @@ msgstr "nie udało się wysłać komunikatu do procesu monitorującego" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "błąd w %s, w linii %d podczas wczytywania wtyczki \"%s\"" @@ -371,67 +381,67 @@ msgstr "niezgodna główna wersja polityki %d (zamiast oczekiwanej %d) napotkana msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "zignorowano wtyczkę polityki \"%s\" w %s, w linii %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "może być podana tylko jedna wtyczka polityki" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "nieznany typ wtyczki %d napotkany w %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "wtyczka polityki %s nie zawiera metody check_policy" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "błąd wewnętrzny, przepełnienie %s" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "błędna nazwa zmiennej środowiskowej: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argument opcji -C musi być większy lub równy 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 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:536 +#: src/parse_args.c:557 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:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "opcja -E nie jest poprawna w trybie edycji" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "w trybie edycji nie można przekazywać zmiennych środowiskowych" -#: src/parse_args.c:557 +#: src/parse_args.c:580 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:561 +#: src/parse_args.c:584 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:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit nie jest obsługiwane na tej platformie" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Można podać tylko jedną z opcji -e, -h, -i, -K, -l, -s, -v lub -V" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -440,7 +450,7 @@ msgstr "" "%s - modyfikowanie plików jako inny użytkownik\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -449,8 +459,7 @@ msgstr "" "%s - wykonywanie poleceń jako inny użytkownik\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -458,123 +467,131 @@ msgstr "" "\n" "Opcje:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "użycie programu pomocniczego do pytań o hasło" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "użycie podanego rodzaju uwierzytelnienia BSD" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "uruchomienie polecenia w tle" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "dzwonek przy zapytaniu" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "zamknięcie wszystkich deskryptorów >= fd" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "uruchomienie polecenia z podaną klasą logowania BSD" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "zmiana katalogu roboczego przed uruchomieniem polecenia" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "zachowanie środowiska użytkownika przy uruchamianiu polecenia" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "zachowanie określonych zmiennych środowiskowych" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "modyfikowanie plików zamiast uruchomienia polecenia" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "wywołanie polecenia jako określona grupa lub ID" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "ustawienie zmiennej HOME na katalog domowy użytkownika docelowego" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "wyświetlenie opisu i zakończenie" -#: src/parse_args.c:786 +#: src/parse_args.c:812 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:788 +#: src/parse_args.c:814 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:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "całkowite usunięcie pliku znacznika czasu" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "unieważnienie pliku znacznika czasu" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "wypisanie uprawnień użytkownika lub sprawdzenie określonego polecenia; dwukrotne użycie to dłuższy format" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "tryb nieinteraktywny, bez pytań" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "zachowanie wektora grup zamiast ustawiania docelowych" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "użycie podanego pytania o hasło" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "zmiana katalogu głównego przed uruchomieniem polecenia" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podaną rolą" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "odczyt hasła ze standardowego wejścia" -#: src/parse_args.c:808 +#: src/parse_args.c:836 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:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podanym typem" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "zakończenie polecenia po zadanym limicie czasu" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "w trybie listy - wyświetlenie uprawnień użytkownika" -#: src/parse_args.c:818 +#: src/parse_args.c:846 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:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "wyświetlenie informacji o wersji i zakończenie" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "uaktualnienie znacznika czasu użytkownika bez uruchamiania polecenia" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "zakończenie przetwarzania argumentów linii poleceń" @@ -679,16 +696,16 @@ 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:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "wymagany jest przynajmniej jeden argument" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "błędny numer deskryptora pliku: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "nie udało się uruchomić %s jako powłoki logowania" @@ -741,124 +758,124 @@ msgstr "setproject dla projektu \"%s\" nie powiodło się" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "uwaga: przypisanie kontroli zasobów dla projektu \"%s\" nie powiodło się" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo wersja %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Opcje konfiguracji: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "błąd krytyczny, nie udało się załadować wtyczek" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "wtyczka nie zwróciła polecenia do wykonania" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "nieoczekiwany tryb sudo 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "nie istniejesz w bazie danych %s" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "nie udało się określić tty" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s musi mieć uid %d jako właściciela oraz ustawiony bit setuid" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "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:914 +#: src/sudo.c:922 #, 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:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "nie udało się ustawić ID dodatkowych grup" -#: src/sudo.c:937 +#: src/sudo.c:945 #, 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:943 +#: src/sudo.c:951 #, 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:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "nieoczekiwane zakończenie procesu potomnego: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "nie udało się zainicjować wtyczki polityki" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "wtyczka polityki %s nie zawiera metody \"check_policy\"" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "polecenie odrzucone przez politykę" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "błąd wtyczki polityki" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "wtyczka polityki %s nie obsługuje wypisywania uprawnień" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "wtyczka polityki %s nie obsługuje opcji -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, 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:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "błąd inicjalizacji wtyczki we/wy %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "błąd inicjowania wtyczki audytu %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "błąd inicjowania wtyczki zgody %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "polecenie odrzucone przez wtyczkę zgody" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "błąd wtyczki zgody" @@ -895,7 +912,7 @@ msgstr "pozostawiono bez zmian: %s" msgid "%s unchanged" msgstr "nie zmieniono: %s" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "zawartość sesji edycji pozostawiono w %s" @@ -908,33 +925,33 @@ 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:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: zabito sygnałem" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: nieznany błąd %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 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:897 +#: src/sudo_edit.c:899 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:941 +#: src/sudo_edit.c:943 #, 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:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "błąd wtyczki: brak listy plików dla sudoedit" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "nie udało się odczytać zegara" @@ -950,25 +967,25 @@ msgstr "nie podano hasła" msgid "unable to read password" msgstr "nie udało się odczytać hasła" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "do odczytu hasła wymagany jest terminal; należy użyć opcji -S, aby czytać ze standardowego wejścia, lub skonfigurować program pytający o hasło" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "nie podano programu pytającego o hasło, proszę spróbować ustawić SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "nie udało się ustawić gid-a na %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "nie udało się ustawić uid-a na %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "nie udało się uruchomić %s" diff --git a/po/pt.mo b/po/pt.mo index 91010c12aad2e5dec1a01b2b04783d53da03ffd1..e499d9633d9072abf90f486f8fbdfc098ee8493b 100644 GIT binary patch delta 4744 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\n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -52,17 +52,17 @@ msgstr "impossível restaurar o registo" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -85,20 +85,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "impossível alocar memória" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "impossível abrir %s" @@ -175,12 +175,22 @@ msgstr "%s é escrito universalmente" msgid "%s is group writable" msgstr "%s é escrito pelo grupo" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: truncar %s para zero bytes? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "não sobrescrever %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "impossível ler de %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "impossível escrever em %s" @@ -261,7 +271,7 @@ msgid "unable to set controlling tty" msgstr "impossível definir tty de controlo" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "impossível criar túnel" @@ -270,7 +280,7 @@ msgid "unable to receive message from parent" msgstr "impossível receber mensagem de pai" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "impossível bifurcar" @@ -278,7 +288,7 @@ msgstr "impossível bifurcar" msgid "unable to restore tty label" msgstr "impossível restaurar rótulo tty" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "impossível executar %s" @@ -329,7 +339,7 @@ msgstr "impossível enviar mensagem para monitorizar processo" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "erro em %s, linha %d ao carregar a extensão \"%s\"" @@ -374,67 +384,67 @@ msgstr "versão principal de extensão %d incompatível (esperada %d) encontrada msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "a ignorar extensão de política \"%s\" em %s, linha %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "só pode especificar um tipo de extensão de política" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "tipo de extensão %d desconhecida encontrada em %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "extensão de política %s não inclui um método check_policy" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "erro interno, transporte %s" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "nome de variável de ambiente inválido: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "o argumento para -C tem de ser um número maior ou igual a 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "não pode especificar ambas as opções \"-i\" e \"-s\"" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "não pode especificar ambas as opções \"-i\" e \"-E\"" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "a opção \"-E\" não é válida em modo de edição" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "não pode especificar variáveis de ambiente em modo de edição" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "a opção \"-U\" só pode ser usada com a opção \"-l\"" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "não pode especificar ambas as opções \"-A\" e \"-S\"" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit não é suportado nesta plataforma" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Só uma das opções -e, -h, -i, -K, -l, -s, -v ou -V pode ser especificada" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -443,7 +453,7 @@ msgstr "" "%s - edita ficheiros como outro utilizador\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -452,8 +462,7 @@ msgstr "" "%s - executa um comando como outro utilizador\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -461,123 +470,131 @@ msgstr "" "\n" "Opções:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "usa um programa de ajuda para pedir a senha" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "usa um tipo de autenticação BSD especificado" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "executa o comando em 2º plano" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "tocar campainha ao pedir" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "fecha todos os descritores de ficheiros >= num" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "executa o comando com a classe de sessão BSD especificada" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "alterar a pasta de trabalho antes de executar o comando" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "preserva o ambiente de utilizador ao executar o comando" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "preserva variáveis de ambiente específicas" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "edita ficheiros em vez de executar um comando" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "executa o comando como nome de grupo ou ID especificados" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "define a variável HOME para a pasta home do utilizador alvo" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "mostra a ajuda e sai" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "executa o comando no anfitrião (se suportado pela extensão)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "executa a shell de sessão como utilizador alvo; também pode especificar um comando" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "remove completamente o ficheiro de datação" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "invalida o ficheiro de datação" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "lista privilégios do utilizador ou verifica um comando específico; use duas vezes para formato mais longo" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "modo não-interactivo, não usa prompts" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "preserva vector de grupo em vez de o definir para o do alvo" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "usa o pedido de senha especificado" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "alterar a pasta raiz antes de executar o comando" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "cria contexto de segurnaça SELinux com o papel especificado" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "lê a senha da entrada padrão" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "executa a shell como utilizador alvo; também pode especificar um comando" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "cria contexto de segurnaça SELinux com o tipo especificado" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "termina o comando após o tempo limite especificado" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "em modo Lista, mostra os privilégios do utilizador" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "executa o comando (ou edita o ficheiro) como nome ou ID de utilizador especificados" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "mostra informação da versão e sai" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "actualiza datação do utilizador sem executar um comando" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "pára o processamento de argumentos da linha de comandos" @@ -682,16 +699,16 @@ msgstr "impossível definir contexto exec para %s" msgid "unable to set key creation context to %s" msgstr "impossível definir contexto de criação de chave para %s" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "requer pelo menos um argumento" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "número de descritor de ficheiro inválido: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "impossível executar %s como shell de sessão" @@ -744,124 +761,124 @@ msgstr "falha setproject para o projecto \"%s\"" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "aviso: falha na atribuição de controlo de recursos para o projecto \"%s\"" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo versão %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Opções de configuração: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "erro fatal, impossível carregar extensões" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "a extensão não devolveu um comando a executar" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "modo sudo 0x%x inesperado" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "utilizador não existente na base de dados %s" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "impossível determinar tty" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s tem ser propriedade de uid %d e ter o bit setuid definido" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "a uid efectiva não é %d, é %s num sistema de ficheiros com a opção 'nosuid' definida ou um sistema de ficheiros NFS sem privilégios root?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "a uid efectiva não é %d, tem sudo instalado com setuid root?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "impossível definir IDs de grupo suplementares" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "impossível definir gid efectiva para gid runas %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "impossível definir gid para gid runas %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "condição de terminação de filho inesperada: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "impossível inicializar a extensão de política" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "a extensão de política %s tem o método \"check_policy\" em falta" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "cpmando rejeitado pela política" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "erro da extensão de política" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "a extensão de política %s não suporta privilégios de listagem" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "a extensão de política %s não suporta a opção -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "a extensão de política %s não suporta as opções -k/-K" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "erro ao inicializar a extensão E/S %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "erro ao inicializar a extensão de auditoria %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "erro ao inicializar a extensão de aprovação %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "comando rejeitado pelo aprovador" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "erro da extensão de aprovação" @@ -898,7 +915,7 @@ msgstr "%s deixado sem alterações" msgid "%s unchanged" msgstr "%s não alterado" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "conteúdo da sessão de edição deixados em %s" @@ -911,33 +928,33 @@ msgstr "sesh: erro interno: número de caminhos ímpar" msgid "sesh: unable to create temporary files" msgstr "sesh: impossível criar ficheiros temporários" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: morto por um sinal" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: erro %d desconhecido" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "impossível copiar ficheiros temporários de volta à localização original" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "impossível copiar alguns ficheiros temporários de volta à localização original" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "impossível alterar uid para root (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "erro de extensão: lista de ficheiros para sudoedit em falta" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "impossível ler o relógio" @@ -953,25 +970,25 @@ msgstr "não foi fornecida uma senha" msgid "unable to read password" msgstr "impossível ler senha" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "é necessário um terminal para ler a senha; use a opção -S para ler da entrada padrão ou configure um ajudante de pedido de senha (askpass)" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "sem programa askpass especificado, tente definir SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "impossível definir gid para %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "impossível definir uid para %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "impossível executar %s" diff --git a/po/pt_BR.mo b/po/pt_BR.mo index b2f57dd03221423df63937944fdb48a28f71ac69..bf5a1870279a7bb04cf8bdfe6a634a8f3cd968bb 100644 GIT binary patch delta 4787 zcmajh3vg7`9mny1c*KYhAOS*%z$GD&00{|!0D*=ek2D}b3ECi~?Iu|u2)ki-LjaM* zLeMHN1s}Y%Uv_NgAt&G*8wx#1#>Gzj=X_?MAy_4U5&b@md z=lsvP3wxiByRauNdMT;Rlg4(6+)irZ%{s)H?QgH6X20uX)(+ptKKK{R!o<#I{Mm3m z`e7M%!8**tM(mDD&*;wlBFGTukk6;;Y_V)jPiR}LkSMYpmO?SF-U=^z8Td)A%LXG%3_QF1# zqzaXwIywtAqQy7@w_zGyKwbZdXC}St$^Hz~KpU_>Zo>z7zP(OkIF_WiH(rdn>~BOm zY0c>1dzgvWFdchRU!Gwls0ZAODs{wjo#!6UW>klNi#e#1qXRIPhDtXBi*Y4tB+aO~ zy@YyjTZXL%4@4a=#|~JJS`#agQ*A#^#gkZw-MAUgv?(|aXQS@7FOB-^!N1@D(`ldM zAnZV$)v+Sfz8{C<6F3x4qe^@o2V()lABNSaifu-%jRUCje~l`6BJ-%q7NVxs-;4S? zG#=&vf3}AYo%jZ-$A3jVIH9*&vJ&K87C?1u4eEwXsF8huU&BF;ThV!_`)op0>;N*` zb{^Hi52G|x(iFO*2Nj`KZ3uP2N>nBGp%&)_)C1$WNF5!9`8W%UaXnIXJL7o;DU!8e z;x#pWP#qYB4o0WZpz0PzJ#anp3_FCA@K>lCXRvg&*s4$?T8w;Uk0a~R4k9m#z2o_N z)Opv?!A?wgBIcu}sswpn)E3du2(}}gwX>)PeTrHW37o}mhNU5gECu9KC&!BD)Lp|Uv)KvT#Rgr%pgRvegb&Yfk zsyaLml`6 z)#D6Kq7OC!J7UmN7msFtJ!(X6qZa2?&))pX6tZ8A`o0lAi8I@ax3RxK{+z3dU&cJf!MYiEFVD$7Awv zxAc{$`z*t5xDRz*^cW5G=!$nj>Iio+mZC=BN3HTz-u`o*ub~$0Wn^&n1yX&>AL;H_ zA;q+(@ay;{>h0;wJg6gu$nuI>4GoQW1L_7xu_InZjYxIVs?EW9co&YtBbbKQaXO~4 z5}6IFLv?5ucE?{L#k8wP(JYhSXZmV0u~_f_CK|foIpkiJLVc;8RUk#NNAY%SM%~~t zaxd%3e5ixdQ0GOl7am3p=snbRZA;uWl#ZIRDOiC)EQ-=NPD7>n61lf!jCDIwh4-?* z1GU)xj=J&qJKT|lQ6pP}s>Cs540aK*iKt1??cl>P}!2ZXmk)`sEvWo3))Y^FvwRV~?6R)Bw z)$LCAya}lLEkq4;LzIR_c-%YT8mb~0Q{1_#Ks|6BmS7X=wfY=2l0hsCO_QMZK09Ofz#LpFQMk{GgJ?YD%@4<^L!Td z{bf|g`b}p6<4n?uG?E}`Alkl5+O)LX57x4+@%B^n{{M)bL^6YDb!tJWBkjqJ?LHcs zh8WTO9w*wqO@2n04f`?CR!^pq)#MSPO>?g8ak7l;Cl8Z5d49{g=-_Oktu@hm`oG&a z4s0b_pv*$cR?Mg7eJ**HXnUEQBKd?Dq2=F^&8Y1KqUm~(>?F}7KA0kViabwhiMHEF zH!`0rAezh3WFXOYE7?JQP8O0m?dhH)#Kd&uv$aE4>?+Kw$3j0pr_vH?|bc~o;P@m#y&EStn&`u;VB*<(U*wEV+#h;}m>;T`)1-b1>RNu-Ks%O-oI$;O@Hrh0^z3$riGWloNge z{3Np6d(D@jH>ZekT+RMx2`3 zkiR+-3@vf0{Ii20j@AbPwShTKb#TD~U!cZrx}YH#x?f-YziVPCUH%oH6yWZ`MgCAj zs5YXjGQ+W?v{yQ}DyZ6cc2HTnkvaK8oxH-Lp+jQnIlbbXc9l7${(wK^qccTLX(Z$e zgy(C=Dab7tk((E*%1v%P;Jd=kngKT8_6$?8|9lH;g(LYrO%P$u~2Q$3HfT5 zI=%qaaccaIf3d&1KH>{;4ntQ|l>YZ~%cLVDo%uAs9hSnq^`RUv=4 dI^<`-bj*Bp{(vv+)GyfhereZO)u_^xe*-q%R676w delta 4361 zcmYk-dr(#79>($CmO?^qihws@dqqet8w?B)(Fg)cOU)p&6MD!*%_J1>i^@teEj7~2 zG&Q4(rM1H{ElUs6fA70C$Di{( zztiWO>TyY{adeP=q%_>DtIuq9l&+esj5CYG7VM9Y;ZWR*-SIRI!SmP?dvP%bGqD%m zioLN32jW`P=i0G{nPVT)7{rB6?1Npnnvcn-F-*b;tVPCV^;n4W@N(RRiTH)*IbjVPt}9F(z}~ zfSS;wn1=1R1Us<+YZ$HWyB4$P-*(YpFm@9Ccn$|+T$0%U%tyX!HK-2eqDs2jv(58e z&y%PD|A3j;n{~**a!khtEXK{~XeK9VXbpctb)3T8)p056`V5T5HK?`UjQm*#FXQnv z=3_R~;udy0UWE?oeuq&Ve~rU1o=!EOlD^bm7iMvx05{@r`~+3nOIe3(yb`a#nW#!_ zMXh}h_4(7NQum}hSy+Tx(pl)o)u^R?8TGl3Py_uTnfj~a7~WN>%8>W05jC)Ns2d(c z&FCzS!rWAMMt7lZvR1dr zgh$`{qc%$(FB)+T>Vxx9Gg^fj$aYl6Zz6woj2G>ZU(k=~^s3TVqAIumRk1Co@9#t1 z|0u@k`Tv%NO7bT%DD(3z&Gc$iX>UgD-X_%E*oNxhAo}qe)QzKfG<2UqNKvc|^|aLU zqVKIowvWAn8u%xeO8@pF4c#D-UNq7yR7EO~w`>Zk5-U)9Ws`Tk1GVO7Q5A~dO_ewm zwFF~Pn|L8=33j3e{yAy@VVpP`aXJm|VO1E5^F8m!BF-<0;hd${@<2rL7K7|5O_Dxu6@j;yB!earhhR zhEcifWK2bMxEUFf?MIdJ8}ws$?k;nY$=XD$!h2B_ID(q!?^ujQ4nJR7f+fg4vZs*h zSqHAh3s{QHET~G{fx6Mxr~xNYe|;|tHK56;_a8uQy4O$x{uDLi^WJ$(fqUJ_q@fR9 ziww%@kt*31@BCw=2o^TN>>9iR^^`0}b+iN74t5kZ<3CW}A9kg?m!_g7GzYagH(@=# zg;(kMAIidM&1d5zT!~cEI#C0P8|nVWm!fv{BBT%7jVj?+$c-$Gol4VYA(ON=WbAed z`(ffJ_xpLsC7X%E^!z_dLmxbbDpfb`s+nYR zgc`_RoQxMxd#a+uz3)cs#rbb#_nHi`x-ip)l zzgUggJX6|qD^WLo1GRJ~a3DsPxdRMf3g>mGO0GZ+baxr`SI1|#P>z41*0_ulnzj_R z2M(hK`V$VpKI}wQYz*>%*i_U&)}aP+2sPs`Q62j#-0ObS0LG#wHm8F6Yi2vSpfx*+ z+C0&f?h=%uN>z{g+!Lr9cA#eZC2D|4Rqp#$sDU)0mZ}Xi@PAl>(bu|9(>T;bnjIQi zyEfEJ&LGQc3D>zD+=P1k9zs>-0IGBsP&XLJ&Qgb!n1+i{pWBY9_yuO+&!~Z>jdv?E z1@*qOkcMu!5m`3-0JAandUrF9#&ph?VJ5brHsf*B=gwk0rrhBE*UUvNT{&uiYfziG z-Sd0z{k#dGfjPFAhK~=ZoO8*4h)Uc>ZXr*Ql|;t|7ke6?BWuYlRi4( z*zOYgjZkwo8AR&H0X_foX-pw65d8pMJZ|+4EL{GzAq(AxR zQR1D%cy>X4=j?H^l{gu^=+JI`H`H=B#)Gu$$+Luq!tN$}$-l`=5=C^p?}V+(mwzyCT`kqDBg6OOT@HPmunZuHt+@iH=+Y$BJEFrs4t@vFh{ z7I~B`(Fw=xq?%|0>qsKyq1O7s*hps@&Gyi#`|ypRt)Hc*yleS5i%ccWM8AQHNCD|a z0_0Vq2TjLv7n|U@3pLRopJSDg7e}t ze6J?_8Xk=9x37CxZo~BT?`Kv-7GwtU{eeJXUQV!YR*G-H$jIu<^13_g8fqKoHWd0N r&unO{t)1-;WaVV#WKOGVtPKQfvg5;o8*, 2013-2020. +# msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 11:30-0300\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 06:42-0300\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Virtaal 1.0.0-beta1\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"X-Generator: Gtranslator 3.38.0\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: lib/util/aix.c:89 lib/util/aix.c:169 @@ -52,17 +53,17 @@ msgstr "não foi possível restaurar registro" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -85,20 +86,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "não foi possível alocar memória" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "não foi possível abrir %s" @@ -175,12 +176,22 @@ msgstr "%s é gravável globalmente" msgid "%s is group writable" msgstr "%s é gravável pelo grupo" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: truncar %s para zero bytes? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "não vou sobrescrever %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "não foi possível ler de %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "não foi possível gravar em %s" @@ -261,7 +272,7 @@ msgid "unable to set controlling tty" msgstr "não foi possível definir tty de controle" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "não foi possível criar um encadeamento (pipe)" @@ -270,7 +281,7 @@ msgid "unable to receive message from parent" msgstr "não foi possível receber mensagem de pai" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "não foi possível fazer fork" @@ -278,7 +289,7 @@ msgstr "não foi possível fazer fork" msgid "unable to restore tty label" msgstr "não foi possível restaurar rótulo de tty" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "não foi possível executar %s" @@ -329,7 +340,7 @@ msgstr "não foi possível enviar mensagem para monitorar processo" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "erro em %s, linha %d ao carregar plug-in \"%s\"" @@ -374,67 +385,67 @@ msgstr "versão maior %d do plug-in incompatível (esperava %d) localizada em %s msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ignorando plug-in de política \"%s\" em %s, linha %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "apenas um plug-in de política pode ser especificado" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "tipo de plug-in %d desconhecido localizado em %s" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "plug-in de política %s não inclui um método de check_policy" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "erro interno, estouro de pilha de %s" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "nome de variável de ambiente inválida: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "o argumento do -C deve ser um número maior ou igual a 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "você não pode especificar as opções -i e -s ao mesmo tempo" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "você não pode especificar as opções -i e -E ao mesmo tempo" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "a opção -E não é válida no modo de edição" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "você não pode especificar variáveis de ambiente no modo de edição" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "a opção -U pode ser usada apenas com a opção -l" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "as opções -A e -S não podem ser usadas ao mesmo tempo" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "não há suporte a sudoedit nesta plataforma" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Apenas uma das opções -e, -h, -i, -K, -l, -s, -v ou -V pode ser especificada" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -443,7 +454,7 @@ msgstr "" "%s - edita arquivos como outro usuário\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -453,8 +464,7 @@ msgstr "" "\n" # Deixei minúsculo para seguir o padrão das demais linhas do "sudo -h" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -462,123 +472,131 @@ msgstr "" "\n" "opções:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "usa um programa auxiliar para pedir senha" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "usa o tipo de autenticação BSD especificado" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "executa um comando em plano de fundo" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "toca campainha ao solicitar senha" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "fecha todos os descritores, de arquivos, >= num" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "executa um comando com uma classe de login BSD especificada" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "altera o diretório de trabalho antes de executar o comando" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "preserva um ambiente de usuário ao executar um comando" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "preserva variáveis de ambiente específicas" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "edita arquivos em vez de executar um comando" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "executa um comando como o ID ou nome de grupo especificado" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "define a variável HOME para a pasta pessoal do usuário alvo" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "exibe uma mensagem de ajuda e sai" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "executa o comando na máquina (se houver suporte pelo plug-in)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "executa um shell de login como usuário alvo; um comando também pode ser especificado" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "remove arquivo de marca de tempo completamente" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "invalida arquivo de marca de tempo" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "lista os privilégios do usuário ou verifica um comando específico; use duas vezes para um formato maior" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "modo não interativo, não pergunta para o usuário" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "preserva vetor de grupos ao invés de definir para o do alvo" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "usa a senha especificada" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "altera o diretório raiz antes de executar o comando" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "cria um contexto de segurança SELinux com o papel especificado" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "lê a senha da entrada padrão" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "executa o shell como o usuário alvo; um comando também pode ser especificado" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "cria um contexto de segurança SELinux com o tipo especificado" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "termina o comando após o tempo limite especificado" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "no modo lista, exibe os privilégios por usuário" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "executa um comando (ou edita um arquivo) como o nome ou ID do usuário especificado" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "exibe as informações de versão e sai" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "atualiza a marca de tempo do usuário sem executar um comando" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "interrompe processamento de argumentos de linha de comando" @@ -683,16 +701,16 @@ msgstr "não foi possível definir contexto de exec de %s" msgid "unable to set key creation context to %s" msgstr "não foi possível definir contexto de criação de chave para %s" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "requer ao menos um argumento" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "número de descritor de arquivos inválido: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "não foi possível executar %s como shell de login" @@ -745,124 +763,124 @@ msgstr "setproject falhou para o projeto \"%s\"" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "aviso, atribuição de controle de recursos falhou para o projeto \"%s\"" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo versão %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Opções de configuração: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "erro fatal, não foi possível carregar os plug-ins" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "o plug-in não retornou um comando para ser executado" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "modo de sudo inesperado 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "você não existe no banco de dados %s" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "não foi possível determinar o tty" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s deve ter como dono o uid %d e tem definido o bit setuid" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "uid efetivo não é %d, é %s em um sistema de arquivos com a opção \"nosuid\" defina ou um sistema de arquivos NFS sem privilégios de root?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "uid efetivo não é %d, sudo está instalado em uma raiz com setuid?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "não foi possível definir IDs de grupo suplementares" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "não foi possível definir gid efetivo para executar como gid %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "não foi possível definir gid para executar como gid %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "condição inesperada de término de filho: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "não foi possível inicializar plug-in de política" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "plug-in de política %s é sem o método \"check_policy\"" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "comando rejeitado pela política" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "erro de plug-in de política" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "plug-in de política %s não tem suporte a listagem de privilégios" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "plug-in de política %s não tem suporte à opção -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "plug-in de política %s não tem suporte às opções -k/-K" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "erro ao inicializar o plug-in de E/S %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "erro ao inicializar o plug-in de auditoria %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "erro ao inicializar o plug-in de aprovação %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "comando rejeitado pelo aprovador" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "erro no plug-in de aprovação" @@ -899,7 +917,7 @@ msgstr "%s não foi modificado" msgid "%s unchanged" msgstr "%s sem alteração" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "conteúdo da sessão de edição deixado em %s" @@ -912,33 +930,33 @@ msgstr "sesh: erro interno: número ímpar de caminhos" msgid "sesh: unable to create temporary files" msgstr "sesh: não foi possível criar arquivos temporários" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: morto por um sinal" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: erro desconhecido: %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "não foi possível copiar arquivos temporários de volta para sua localização original" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "não foi possível copiar alguns dos arquivos temporários de volta para sua localização original" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "não foi possível alterar uid de root (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "erro no plug-in: faltando lista de arquivo para sudoedit" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "não foi possível ler o relógio" @@ -954,25 +972,25 @@ msgstr "nenhuma senha foi fornecida" msgid "unable to read password" msgstr "não foi possível ler a senha" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "um terminal é necessário para ler a senha; use a opção -S para ler a entrada padrão ou configure um auxiliar de askpass" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "nenhum programa de askpass especificado, tente definir SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "não foi possível definir gid para %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "não foi possível definir uid para %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "não foi possível executar %s" diff --git a/po/sr.mo b/po/sr.mo index f5391f4724048bd2262d956d4af240859c55ae00..5ce35e0af66bae647f46c48ab191749904a0a9a9 100644 GIT binary patch delta 3909 zcmYk;d303e9merr0tUj8V2TKmkefgP0S2=GfdG=wgdhl%f|h_l7P3JWvtooWvQ;Qx zg)wDOM6_ZnAcQdx2?=d2r#=2PQ)=Oq7XN5HmD5Ezwo1<_w%=#&(Dprf=JVb=cka91 z3kQP{XM+*mTXFq6jB=I4ll&;N0TE_3Lv+?`_b{_TxCfK)Wt@N)@Im|-Q}GTC$B~>& zM-Ps~wKxhl;aEI?x~>c3%of^*RK{`Q_xK1#a&|f*U< zox!F^ubMoX=yu7E`sTN&EAL=3COBr#(0CnKv|tgJ?x#9*^ok9y+)ZM`IhR!4BlNb{QAqE!2(En5c)a3N@gusJT1D z$HUlzn!{^hKSf=4Z>-mCXao})!-;I1hVxMkZb6OUO{6XR2-VPCWEw3d#a+}S0Pl-FOIlR5u!j%#O`R{%ivu`k@cUU?-~Q z0c3mFm#E*5pcQp=3bHZnapWsojhcy_sJ(JDeEur3&&K5RrEejB5*+^H-=mfd!uZhQ)BF^GDa=1z5&s0jbXaU1eytxWG6 zJcZs_RBltzl&4I0pYzq2&#@0%@CMGsCD}Y;_+r?vP*YqygGUyRp+@#G-bK$$vt~@q z;az~Q;Cj4{tb)y+#r!`(rHXIAgZFKm8kO9r8@oC(QYWN0fDJL?Djd;vUrG`p0!&Z-4Q8V!&uENpmAoh>7 zqDJ&K>P8U@+$C9#B^>*ZLE1lXB~GPvE$M#L06sv?Xxu`xdR&6KpSO=n29=S_UnMR? z_4qvQ$5_^9D;`6QD4qq@%v7LeWFPW?*zZs`9!zWM_-0fCzrlD+=VEniG3q`ik@mdy zITih2CBxR#`LP(I7^aRZQ6ss8>>K+W*^f4fFEg1or*6Zt8Eui_q&J1v~S7G(@flf4BmQi62>qsnV5sT^sE*&!o!%0H<1Uz z;#cz$!y?p(-$e~b>&Sk!X{h5(sE(XQny_o=)zo-+W;CL9R7ZM|<+iU-n<{^;Svl@N zt=(;$f?4a_B`QVTrwf?`d!X3u=+nr9V8@YtYkxp>Xc9YCzppJ}{`JMHoS2P&MBON< z)LqjCWMA1KWKi}AK8kr|t_{fkwG-&Yzo4ePW){fbD4GVB^1;3g= zWm$#0CeL9z$H#FFCa^`dB&)-o#%DObhq+i+#iNK?rh4*oGKRcOm|Z(Ub`zCDF7`V9 zh#Vk?)ob-c>#g!VvY$Mn1IimNp=nfA?+R@m24I&-3(?HHL$n9(7q&*Iyw7JEIYAbX zv1B-51w)T}3feZZiRke-MT&_=t56>^Sf zVN{r+&;zXcdt@}x943+fFS+4^n6QzkHTVHJuJxT5{vro|8m=ee3uFU1Nwhti$OXdU zTQwO%RL;1B{$I5xTo)rr5Al(g2``BM7M@{yjl2@tUsU#zfn)?xnMXQ8HTOf?Ol1Ix zCUePA@&M^aR9cCn3Z<94L^kVy!o~}|Cq1Df_y1Ofs(ZsHL@DVCALro=l0c4y&rQdT zWDR+q@K{(I(cT|SGRS$Nhfrm!OXz*8>S?0(E|K{}#hc7We5mSv=vAZAN%TpV3ZGjSb~gSjR3GoYlF~WoCa;n#@(|fa zR6Zcv{Vl^bMEXCAI~pC6Tvk^alEz;I=?_z)$sDpeN85xa_Z8 zd@>^LN}w0|-k1 delta 3893 zcmYk;4OG?j9mnx6%1}%Q@BuN%3j#L_3J@kJ3Zx{pd_u5^3Kvm=KvB?{h+G&Z+G3{X)XxPEgFz>J8!Vekc5=kV55oY7U%+^j+tJ&i*W)pBHCgX0r3r}DyUcq$yHBQFy zG-hEEPQ#^`fREx#>_T1Fk8x(@HcTazhM(bd{0n{_qxe)~ScKzo1u{0P!ns(B_uw&{ zikIeT16oxD@jShm_3STr}k49k?2G!|lkmb_^fF5md*KEYK7zL#kP1KO5%dKD>c0jM4gQ$+OXo>rhM9i|Xh&>IOr|!LgsCR^+$H zSZo|$(o8c@OIw24ifYsVo<#M30$unHs^7n&`tjbz8D%vr6Lnly@S-oa??V2pgJqtt z>v10b8NFKiOx9%%*5M-T!|iwji*OYmHsE2$&rnOyB? z`ZjLB>&R}{A{rmYE%Vs_ZP_nz9lH5( zSdG0{gV(Vaic?UR{ajuaRJM?7JE=PzJaZn!z`MxADc1O%d|D34%AA#gH$9zFkW zI}I63Pb2pt=fnn)^JjlT9sqOmEp1H|vijDEOxi9Ym)Jy>k$YG*9>kZi8%rueD|rd^ z6#O084ZFKi?d*RG6%MW)$5ebDAHn}3=fzg73O)CSQ5_DUmUbQ&X@#Cb7R@4=b~;uf z+iSZ}{k?%6{16MUjAdfZ){Qyb->y>8Qbn*ndd`=lX7~ga;|THq*k{P#t#D0f#s^R{ z`VDeEZ5sQh_f@EY>_@t`GpLn`;Stee4wI;M@ zrKpaMAd6tXM-8;d6MBlek#lNqq6QSr3Dx(PquRY#h(AH~6TY7H*Pd3a5B-3&Ba^Yq zcps+Lg{(jhtnEfGUO_GSvJD(0>_feu%;?!Q^WYpjgQfTh-i5jKp)Fa5U*>&xJ-yAR zq9dw3S>U)IxA6W37UPNr{>{hPWIwq`W{?wv#j_uhuMm~Pq=OtF-z6%~k_SkJ-cY_u z_L4g^8XoYQs^weTt|QSgCP-A@w9t0aZo zT1uQZ(T-zq0XamT)BfJ$d@v7Rcj_+OLmngjM5m#Z3=%fi8p%YW@=}Q4jz8(tMFJTn z`gQP;3UagXY}z-;(cmuvm8ZyfGL@(-Bwr8KLN7Z1D&t5bDJD8GpCe<5%65_*teL%r zBc$DVUyph?^?ayIBW0@SL|jmXQb$e)YoP~CPwk!LnA4^+euPvLeUHZ=_&ns}Z6t>b z5Isw85S{s3%MW<7nVcnyoe#V-sU$gXM7dKxg;`_=DI(7he*A;~8(fJGlXK(@`4U-1 z@<=aQ3S&;Ut3WBKyd0 zqB5Pt1Z!r`<8rczR5@)P$N7%I-qLxK?KJdZE}24}cG^Ujzc=QwG0|ylb6sr>Ev?&J zJ6apJ`9F?378&iSYuH%VRI{a}xv_4i+y880=@A_LT%Hm2O{SatbZYZvVdIsBqsvT0+#uO1^>KmIk`p>3SMbJs( z%})4kVn+I{Ep2K^@-<{^7@M^|*B8hrn~THrhv4+UP~bujQ6IXBwl c3Y-ppe}p~;>8;0CTQk)cC=d7VshSo2KYV@wK>z>% diff --git a/po/sr.po b/po/sr.po index 55ebae0e21..ae06debd9d 100644 --- a/po/sr.po +++ b/po/sr.po @@ -3,10 +3,10 @@ # Мирослав Николић , 2011—2020. msgid "" msgstr "" -"Project-Id-Version: sudo-1.9.0b4\n" +"Project-Id-Version: sudo-1.9.2rc1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-03-12 17:39-0600\n" -"PO-Revision-Date: 2020-04-02 18:29+0200\n" +"POT-Creation-Date: 2020-06-24 05:35-0600\n" +"PO-Revision-Date: 2020-08-04 11:50+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -17,408 +17,422 @@ msgstr "" "X-Generator: Virtaal 0.7.1\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -#: lib/util/aix.c:92 lib/util/aix.c:172 +#: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" msgstr "не могу да отворим корисничку базу података" -#: lib/util/aix.c:227 +#: lib/util/aix.c:224 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "не могу да се пребацим на регистар „%s“ за %s" -#: lib/util/aix.c:252 +#: lib/util/aix.c:249 msgid "unable to restore registry" msgstr "не могу да повратим регистар" -#: lib/util/aix.c:275 lib/util/gidlist.c:71 lib/util/gidlist.c:81 -#: lib/util/json.c:66 lib/util/json.c:192 lib/util/sudo_conf.c:191 -#: lib/util/sudo_conf.c:277 lib/util/sudo_conf.c:354 lib/util/sudo_conf.c:580 -#: src/conversation.c:86 src/exec_common.c:114 src/exec_common.c:130 -#: src/exec_common.c:139 src/exec_monitor.c:211 src/exec_monitor.c:460 -#: 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:218 src/exec_nopty.c:227 -#: src/exec_nopty.c:234 src/exec_nopty.c:241 src/exec_nopty.c:248 -#: src/exec_nopty.c:255 src/exec_nopty.c:262 src/exec_nopty.c:269 -#: src/exec_nopty.c:276 src/exec_nopty.c:283 src/exec_nopty.c:290 -#: src/exec_nopty.c:297 src/exec_nopty.c:305 src/exec_nopty.c:479 -#: src/exec_pty.c:822 src/exec_pty.c:831 src/exec_pty.c:888 -#: src/exec_pty.c:1038 src/exec_pty.c:1206 src/exec_pty.c:1215 -#: src/exec_pty.c:1222 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:1286 src/exec_pty.c:1709 src/load_plugins.c:59 -#: src/load_plugins.c:72 src/load_plugins.c:170 src/load_plugins.c:195 -#: src/load_plugins.c:230 src/load_plugins.c:470 src/load_plugins.c:476 -#: src/load_plugins.c:491 src/load_plugins.c:497 src/parse_args.c:186 -#: src/parse_args.c:207 src/parse_args.c:282 src/parse_args.c:584 -#: src/parse_args.c:606 src/parse_args.c:631 src/preserve_fds.c:54 -#: src/preserve_fds.c:139 src/selinux.c:91 src/selinux.c:361 src/selinux.c:474 -#: src/selinux.c:483 src/sesh.c:117 src/sudo.c:625 src/sudo.c:685 -#: src/sudo.c:695 src/sudo.c:716 src/sudo.c:735 src/sudo.c:744 src/sudo.c:753 -#: src/sudo.c:770 src/sudo.c:811 src/sudo.c:821 src/sudo.c:847 src/sudo.c:1037 -#: src/sudo.c:1059 src/sudo.c:1355 src/sudo.c:1528 src/sudo.c:1722 -#: src/sudo.c:2066 src/sudo_edit.c:270 src/sudo_edit.c:775 src/sudo_edit.c:872 -#: src/sudo_edit.c:986 src/sudo_edit.c:1006 +#: 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:462 src/load_plugins.c:468 +#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 +#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 +#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 +#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 +#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 +#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 +#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 +#: src/sudo_edit.c:994 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/aix.c:275 lib/util/gidlist.c:71 lib/util/json.c:67 -#: lib/util/json.c:193 lib/util/sudo_conf.c:192 lib/util/sudo_conf.c:277 -#: lib/util/sudo_conf.c:354 lib/util/sudo_conf.c:580 src/conversation.c:87 -#: src/exec_common.c:114 src/exec_common.c:131 src/exec_common.c:140 -#: src/exec_monitor.c:460 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:218 -#: src/exec_nopty.c:227 src/exec_nopty.c:234 src/exec_nopty.c:241 -#: src/exec_nopty.c:248 src/exec_nopty.c:255 src/exec_nopty.c:262 -#: src/exec_nopty.c:269 src/exec_nopty.c:276 src/exec_nopty.c:283 -#: src/exec_nopty.c:290 src/exec_nopty.c:297 src/exec_nopty.c:305 -#: src/exec_pty.c:822 src/exec_pty.c:831 src/exec_pty.c:888 -#: src/exec_pty.c:1206 src/exec_pty.c:1215 src/exec_pty.c:1222 -#: 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:1286 -#: src/exec_pty.c:1709 src/load_plugins.c:170 src/load_plugins.c:195 -#: src/load_plugins.c:230 src/load_plugins.c:470 src/load_plugins.c:476 -#: src/load_plugins.c:491 src/load_plugins.c:497 src/parse_args.c:186 -#: src/parse_args.c:208 src/parse_args.c:282 src/parse_args.c:584 -#: src/parse_args.c:606 src/parse_args.c:631 src/preserve_fds.c:54 -#: src/preserve_fds.c:139 src/selinux.c:91 src/selinux.c:361 src/selinux.c:474 -#: src/selinux.c:483 src/sesh.c:117 src/sudo.c:239 src/sudo.c:625 -#: src/sudo.c:847 src/sudo.c:1037 src/sudo.c:1059 src/sudo.c:1355 -#: src/sudo.c:1528 src/sudo.c:1722 src/sudo.c:2066 src/sudo_edit.c:270 -#: src/sudo_edit.c:775 src/sudo_edit.c:872 src/sudo_edit.c:986 -#: src/sudo_edit.c:1006 +#: 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:462 src/load_plugins.c:468 +#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 +#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 +#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 +#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 +#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 +#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:974 src/sudo_edit.c:994 msgid "unable to allocate memory" msgstr "не могу да доделим меморију" -#: lib/util/mkdir_parents.c:79 lib/util/sudo_conf.c:619 src/selinux.c:235 -#: src/selinux.c:265 src/sudo.c:368 +#: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 +#: src/selinux.c:264 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "не могу да отворим %s" -#: lib/util/mkdir_parents.c:94 +#: lib/util/mkdir_parents.c:84 #, c-format msgid "unable to mkdir %s" msgstr "не могу да направим директоријум „%s“" -#: lib/util/mkdir_parents.c:103 lib/util/sudo_conf.c:596 +#: lib/util/mkdir_parents.c:93 lib/util/sudo_conf.c:591 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: lib/util/mkdir_parents.c:108 +#: lib/util/mkdir_parents.c:98 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "„%s“ постоји али није директоријум (0%o)" -#: lib/util/strsignal.c:55 +#: lib/util/strsignal.c:50 msgid "Unknown signal" msgstr "Непознати сигнал" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:56 lib/util/strtonum.c:161 -#: lib/util/strtonum.c:200 +#: lib/util/strtoid.c:87 lib/util/strtomode.c:52 lib/util/strtonum.c:148 +#: lib/util/strtonum.c:187 msgid "invalid value" msgstr "неисправна вредност" -#: lib/util/strtomode.c:62 lib/util/strtonum.c:173 +#: lib/util/strtomode.c:58 lib/util/strtonum.c:160 msgid "value too large" msgstr "вредност је превелика" -#: lib/util/strtomode.c:62 lib/util/strtonum.c:167 +#: lib/util/strtomode.c:58 lib/util/strtonum.c:154 msgid "value too small" msgstr "вредност је премала" -#: lib/util/sudo_conf.c:210 +#: lib/util/sudo_conf.c:205 #, c-format msgid "invalid Path value \"%s\" in %s, line %u" msgstr "неисправна вредност путање „%s“ у „%s“, %u. ред" -#: lib/util/sudo_conf.c:376 lib/util/sudo_conf.c:392 lib/util/sudo_conf.c:445 +#: lib/util/sudo_conf.c:371 lib/util/sudo_conf.c:387 lib/util/sudo_conf.c:440 #, c-format msgid "invalid value for %s \"%s\" in %s, line %u" msgstr "неисправна вредност за %s „%s“ у „%s“, %u. ред" -#: lib/util/sudo_conf.c:413 +#: lib/util/sudo_conf.c:408 #, c-format msgid "unsupported group source \"%s\" in %s, line %u" msgstr "неподржани извор групе „%s“ у „%s“, %u. ред" -#: lib/util/sudo_conf.c:429 +#: lib/util/sudo_conf.c:424 #, c-format msgid "invalid max groups \"%s\" in %s, line %u" msgstr "неисправне највеће групе „%s“ у „%s“, %u. ред" -#: lib/util/sudo_conf.c:599 +#: lib/util/sudo_conf.c:594 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: lib/util/sudo_conf.c:602 +#: lib/util/sudo_conf.c:597 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: lib/util/sudo_conf.c:606 +#: lib/util/sudo_conf.c:601 #, c-format msgid "%s is world writable" msgstr "%s је светски уписив" -#: lib/util/sudo_conf.c:609 +#: lib/util/sudo_conf.c:604 #, c-format msgid "%s is group writable" msgstr "%s је групно уписив" -#: src/exec.c:135 +#: src/copy_file.c:118 +#, c-format +msgid "unable to read from %s" +msgstr "не могу да читам из „%s“" + +#: src/copy_file.c:122 src/sudo_edit.c:695 +#, c-format +msgid "unable to write to %s" +msgstr "не могу да упишем у %s" + +#: src/exec.c:128 #, c-format msgid "unknown login class %s" msgstr "непозната класа пријаве %s" -#: src/exec.c:147 +#: src/exec.c:140 msgid "unable to set user context" msgstr "не могу да подесим кориснички контекст" -#: src/exec.c:163 +#: src/exec.c:156 msgid "unable to set process priority" msgstr "не могу да подесим приоритет процеса" -#: src/exec.c:177 +#: src/exec.c:170 #, c-format msgid "unable to change root to %s" msgstr "не могу да променим администратора на %s" -#: src/exec.c:190 src/exec.c:196 src/exec.c:203 +#: src/exec.c:183 src/exec.c:189 src/exec.c:196 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не могу да се пребацим у покрени_као уид (%u, %u)" -#: src/exec.c:221 +#: src/exec.c:214 #, c-format msgid "unable to change directory to %s" msgstr "не могу да променим директоријум у %s" -#: src/exec.c:304 src/exec_monitor.c:569 src/exec_monitor.c:571 -#: src/exec_nopty.c:537 src/exec_pty.c:566 src/exec_pty.c:1373 -#: src/exec_pty.c:1375 src/signal.c:150 src/signal.c:164 +#: src/exec.c:218 +#, c-format +msgid "starting from %s" +msgstr "почевши од „%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 #, c-format msgid "unable to set handler for signal %d" msgstr "не могу да подесим руковаоца за сигнал „%d“" -#: src/exec_common.c:173 +#: src/exec_common.c:165 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "не могу да уклоним PRIV_PROC_EXEC из PRIV_LIMIT" -#: src/exec_monitor.c:365 +#: src/exec_monitor.c:360 msgid "error reading from socketpair" msgstr "грешка у читању из пара прикључка" -#: src/exec_monitor.c:382 +#: src/exec_monitor.c:377 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "неочекивана врста одговора на повратном каналу: %d" -#: src/exec_monitor.c:468 src/exec_monitor.c:476 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_monitor.c:533 src/exec_nopty.c:220 src/exec_nopty.c:229 -#: 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:307 src/exec_pty.c:688 -#: src/exec_pty.c:693 src/exec_pty.c:790 src/exec_pty.c:797 src/exec_pty.c:894 -#: src/exec_pty.c:1208 src/exec_pty.c:1217 src/exec_pty.c:1224 -#: src/exec_pty.c:1231 src/exec_pty.c:1238 src/exec_pty.c:1245 -#: src/exec_pty.c:1252 src/exec_pty.c:1259 src/exec_pty.c:1266 -#: src/exec_pty.c:1273 src/exec_pty.c:1280 src/exec_pty.c:1662 -#: src/exec_pty.c:1672 src/exec_pty.c:1717 src/exec_pty.c:1724 -#: src/exec_pty.c:1751 +#: 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 "не могу да додам догађај у ред" -#: src/exec_monitor.c:587 +#: src/exec_monitor.c:582 msgid "unable to set controlling tty" msgstr "не могу да подесим контролисање tty" -#: src/exec_monitor.c:595 src/exec_nopty.c:364 src/exec_pty.c:1452 -#: src/exec_pty.c:1473 src/exec_pty.c:1493 src/tgetpass.c:311 +#: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 msgid "unable to create pipe" msgstr "не могу да направим спојку" -#: src/exec_monitor.c:603 +#: src/exec_monitor.c:598 msgid "unable to receive message from parent" msgstr "не могу да примим поруку од родитеља" -#: src/exec_monitor.c:617 src/exec_nopty.c:393 src/exec_pty.c:1531 -#: src/tgetpass.c:315 +#: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 +#: src/sudo_edit.c:735 src/tgetpass.c:308 msgid "unable to fork" msgstr "не могу да поделим" -#: src/exec_monitor.c:621 src/exec_monitor.c:720 src/exec_nopty.c:447 +#: src/exec_monitor.c:616 src/exec_monitor.c:715 src/exec_nopty.c:441 msgid "unable to restore tty label" msgstr "не могу да повратим tty натпис" -#: src/exec_monitor.c:637 src/sesh.c:127 src/sudo.c:1114 +#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим %s" -#: src/exec_nopty.c:358 src/exec_pty.c:1382 +#: src/exec_nopty.c:352 src/exec_pty.c:1395 msgid "policy plugin failed session initialization" msgstr "није успело покретање сесије прикључка политике" -#: src/exec_nopty.c:435 src/exec_pty.c:1617 +#: src/exec_nopty.c:429 src/exec_pty.c:1632 msgid "error in event loop" msgstr "грешка у петљи догађаја" -#: src/exec_nopty.c:545 src/exec_pty.c:601 src/signal.c:112 +#: 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 "не могу да повратим руковаоца за сигнал „%d“" -#: src/exec_pty.c:157 +#: src/exec_pty.c:152 msgid "unable to allocate pty" msgstr "не могу да доделим pty" -#: src/exec_pty.c:221 src/exec_pty.c:260 src/exec_pty.c:299 src/exec_pty.c:349 -#: src/exec_pty.c:399 +#: 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 "грешка У/И прикључка" -#: src/exec_pty.c:224 src/exec_pty.c:263 src/exec_pty.c:302 src/exec_pty.c:352 -#: src/exec_pty.c:402 +#: 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 "наредбу је одбацио У/И прикључак" -#: src/exec_pty.c:449 +#: src/exec_pty.c:444 msgid "error logging suspend" msgstr "грешка обуставе писања дневника" -#: src/exec_pty.c:482 +#: src/exec_pty.c:477 msgid "error changing window size" msgstr "грешка промене величине прозора" -#: src/exec_pty.c:1362 +#: src/exec_pty.c:1375 msgid "unable to create sockets" msgstr "не могу да направим утичнице" -#: src/exec_pty.c:1574 +#: src/exec_pty.c:1587 msgid "unable to send message to monitor process" msgstr "не могу да пошаљем поруку процесу праћења" -#: src/load_plugins.c:57 src/load_plugins.c:70 src/load_plugins.c:92 -#: src/load_plugins.c:122 src/load_plugins.c:136 src/load_plugins.c:142 -#: src/load_plugins.c:293 src/load_plugins.c:301 src/load_plugins.c:308 -#: src/load_plugins.c:348 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 +#: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 +#: src/load_plugins.c:353 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "грешка у „%s“, %d. ред приликом учитавања прикључка „%s“" -#: src/load_plugins.c:94 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:138 +#: src/load_plugins.c:131 #, c-format msgid "%s must be owned by uid %d" msgstr "%s мора бити у власништву уида %d" -#: src/load_plugins.c:144 +#: src/load_plugins.c:137 #, c-format msgid "%s must be only be writable by owner" msgstr "%s мора бити уписив само од стране власника" -#: src/load_plugins.c:254 src/load_plugins.c:321 +#: src/load_plugins.c:247 src/load_plugins.c:322 #, c-format msgid "ignoring duplicate plugin \"%s\" in %s, line %d" msgstr "занемарујем удвостручени „%s“ прикључак у %s, %d. ред" -#: src/load_plugins.c:295 +#: src/load_plugins.c:289 #, c-format msgid "unable to load %s: %s" msgstr "не могу да учитам %s: %s" -#: src/load_plugins.c:303 +#: src/load_plugins.c:299 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "не могу да пронађем симбол „%s“ у %s" -#: src/load_plugins.c:310 +#: src/load_plugins.c:309 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "пронађено је несагласно главно издање прикључка %d (очекивано је %d) у „%s“" -#: src/load_plugins.c:324 +#: src/load_plugins.c:327 #, c-format msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "занемарујем прикључак сигурности „%s“ у %s, %d. ред" -#: src/load_plugins.c:326 +#: src/load_plugins.c:329 msgid "only a single policy plugin may be specified" msgstr "може бити наведен само један прикључак сигурности" -#: src/load_plugins.c:350 +#: src/load_plugins.c:355 #, c-format msgid "unknown plugin type %d found in %s" msgstr "нађох непознату врсту прикључка %d у „%s“" -#: src/load_plugins.c:511 +#: src/load_plugins.c:541 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "прикључак сигурности %s не садржи метод провере_сигурности" -#: src/net_ifs.c:183 src/net_ifs.c:200 src/net_ifs.c:345 src/sudo.c:478 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 #, c-format msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење функције „%s“" -#: src/parse_args.c:228 +#: src/parse_args.c:218 #, c-format msgid "invalid environment variable name: %s" msgstr "неисправан назив променљиве окружења: %s" -#: src/parse_args.c:329 +#: src/parse_args.c:319 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргумент уз -C мора бити број већи или једнак 3" -#: src/parse_args.c:524 -msgid "you may not specify both the `-i' and `-s' options" +#: src/parse_args.c:532 +msgid "you may not specify both the -i and -s options" msgstr "не можете да наведете обе опције „-i“ и „-s“" -#: src/parse_args.c:528 -msgid "you may not specify both the `-i' and `-E' options" +#: src/parse_args.c:536 +msgid "you may not specify both the -i and -E options" msgstr "не можете да наведете обе опције „-i“ и „-E“" -#: src/parse_args.c:538 -msgid "the `-E' option is not valid in edit mode" +#: src/parse_args.c:546 +msgid "the -E option is not valid in edit mode" msgstr "опција „-E“ није исправна у режиму уређивања" -#: src/parse_args.c:540 +#: src/parse_args.c:548 msgid "you may not specify environment variables in edit mode" msgstr "не можете да одредите променљиве окружења у режиму уређивања" -#: src/parse_args.c:548 -msgid "the `-U' option may only be used with the `-l' option" +#: src/parse_args.c:557 +msgid "the -U option may only be used with the -l option" msgstr "опција „-U“ може бити коришћена само са опцијом „-l“" -#: src/parse_args.c:552 -msgid "the `-A' and `-S' options may not be used together" +#: src/parse_args.c:561 +msgid "the -A and -S options may not be used together" msgstr "опције „-A“ и „-S“ не могу бити коришћене заједно" -#: src/parse_args.c:645 +#: src/parse_args.c:654 msgid "sudoedit is not supported on this platform" msgstr "„sudoedit“ није подржано на овој платформи" -#: src/parse_args.c:726 +#: src/parse_args.c:735 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:740 +#: src/parse_args.c:749 #, c-format msgid "" "%s - edit files as another user\n" @@ -427,7 +441,7 @@ msgstr "" "%s — уредите датотеке као други корисник\n" "\n" -#: src/parse_args.c:742 +#: src/parse_args.c:751 #, c-format msgid "" "%s - execute a command as another user\n" @@ -436,7 +450,7 @@ msgstr "" "%s — извршите наредбу као други корисник\n" "\n" -#: src/parse_args.c:747 +#: src/parse_args.c:756 #, c-format msgid "" "\n" @@ -445,544 +459,539 @@ msgstr "" "\n" "Опције:\n" -#: src/parse_args.c:749 +#: src/parse_args.c:758 msgid "use a helper program for password prompting" msgstr "користи програм испомоћи за упит лозинке" -#: src/parse_args.c:752 +#: src/parse_args.c:761 msgid "use specified BSD authentication type" msgstr "користи наведену врсту БСД потврде идентитета" -#: src/parse_args.c:755 +#: src/parse_args.c:764 msgid "run command in the background" msgstr "покреће наредбу у позадини" -#: src/parse_args.c:757 +#: src/parse_args.c:766 msgid "ring bell when prompting" msgstr "звони приликом постављања упита" -#: src/parse_args.c:759 +#: src/parse_args.c:768 msgid "close all file descriptors >= num" msgstr "затвара све описнике датотеке >= fd" -#: src/parse_args.c:762 +#: src/parse_args.c:771 msgid "run command with the specified BSD login class" msgstr "покреће наредбу са наведеним разредом БСД пријаве" -#: src/parse_args.c:765 +#: src/parse_args.c:774 msgid "preserve user environment when running command" msgstr "чува корисничко окружење приликом покретања наредбе" -#: src/parse_args.c:767 +#: src/parse_args.c:776 msgid "preserve specific environment variables" msgstr "чува нарочите променљиве окружења" -#: src/parse_args.c:769 +#: src/parse_args.c:778 msgid "edit files instead of running a command" msgstr "уређује датотеке уместо да изврши наредбу" -#: src/parse_args.c:771 +#: src/parse_args.c:780 msgid "run command as the specified group name or ID" msgstr "извршава наредбу као наведени назив групе или ИБ" -#: src/parse_args.c:773 +#: src/parse_args.c:782 msgid "set HOME variable to target user's home dir" msgstr "подешава променљиву ЛИЧНО у циљну корисничку личну фасциклу" -#: src/parse_args.c:775 +#: src/parse_args.c:784 msgid "display help message and exit" msgstr "приказује поруку помоћи и излази" -#: src/parse_args.c:777 +#: src/parse_args.c:786 msgid "run command on host (if supported by plugin)" msgstr "покреће наредбу на домаћину (ако је подржано прикључком)" -#: src/parse_args.c:779 +#: src/parse_args.c:788 msgid "run login shell as the target user; a command may also be specified" msgstr "покреће љуску пријаве као крајњи корисник; наредба може такође бити наведена" -#: src/parse_args.c:781 +#: src/parse_args.c:790 msgid "remove timestamp file completely" msgstr "потпуно уклања датотеку записа датума и времена" -#: src/parse_args.c:783 +#: src/parse_args.c:792 msgid "invalidate timestamp file" msgstr "чини неисправном датотеку датума и времена" -#: src/parse_args.c:785 +#: src/parse_args.c:794 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "исписује привилегије корисника или проверава посебну наредбу; користи се двапута за дуже записе" -#: src/parse_args.c:787 +#: src/parse_args.c:796 msgid "non-interactive mode, no prompts are used" msgstr "немеђудејствени режим, не користи упите" -#: src/parse_args.c:789 +#: src/parse_args.c:798 msgid "preserve group vector instead of setting to target's" msgstr "чува вектор групе уместо да подеси на циљеве" -#: src/parse_args.c:791 +#: src/parse_args.c:800 msgid "use the specified password prompt" msgstr "користи упит наведене лозинке" -#: src/parse_args.c:794 +#: src/parse_args.c:803 msgid "create SELinux security context with specified role" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:797 +#: src/parse_args.c:806 msgid "read password from standard input" msgstr "чита лозинку са стандардног улаза" -#: src/parse_args.c:799 +#: src/parse_args.c:808 msgid "run shell as the target user; a command may also be specified" msgstr "покреће љуску као крајњи корисник; наредба такође може бити наведена" -#: src/parse_args.c:802 +#: src/parse_args.c:811 msgid "create SELinux security context with specified type" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:805 +#: src/parse_args.c:814 msgid "terminate command after the specified time limit" msgstr "окончава наредбу након наведеног временског ограничења" -#: src/parse_args.c:807 +#: src/parse_args.c:816 msgid "in list mode, display privileges for user" msgstr "у режиму списка, приказује привилегије за корисника" -#: src/parse_args.c:809 +#: src/parse_args.c:818 msgid "run command (or edit file) as specified user name or ID" msgstr "покреће наредбу (или уређује датотеку) као наведени корисник" -#: src/parse_args.c:811 +#: src/parse_args.c:820 msgid "display version information and exit" msgstr "приказује податке о издању и излази" -#: src/parse_args.c:813 +#: src/parse_args.c:822 msgid "update user's timestamp without running a command" msgstr "освежава кориснички запис датума и времена без покретања наредбе" -#: src/parse_args.c:815 +#: src/parse_args.c:824 msgid "stop processing command line arguments" msgstr "зауставља обрађивање аргумената линије наредби" -#: src/selinux.c:85 +#: src/selinux.c:84 msgid "unable to open audit system" msgstr "не могу да отворим аудит систем" -#: src/selinux.c:95 +#: src/selinux.c:94 msgid "unable to send audit message" msgstr "не могу да пошаљем аудит поруку" -#: src/selinux.c:129 +#: src/selinux.c:128 #, c-format msgid "unable to fgetfilecon %s" msgstr "не могу да добавим контекст отворене датотеке %s" -#: src/selinux.c:134 +#: src/selinux.c:133 #, c-format msgid "%s changed labels" msgstr "%s измењена натписа" -#: src/selinux.c:142 +#: src/selinux.c:141 #, c-format msgid "unable to restore context for %s" msgstr "не могу да повратим контекст за %s" -#: src/selinux.c:190 +#: src/selinux.c:189 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "не могу да отворим %s, није тту за поновно натписивање" -#: src/selinux.c:194 src/selinux.c:239 src/selinux.c:269 +#: src/selinux.c:193 src/selinux.c:238 src/selinux.c:268 #, c-format msgid "%s is not a character device, not relabeling tty" msgstr "„%s“ није знаковни уређај, није конзола за поновно натписивање" -#: src/selinux.c:203 +#: src/selinux.c:202 msgid "unable to get current tty context, not relabeling tty" msgstr "не могу да добавим текући тту контекст, није тту за поновно натписивање" -#: src/selinux.c:210 +#: src/selinux.c:209 msgid "unknown security class \"chr_file\", not relabeling tty" msgstr "непознат разред безбедности „chr_file“, није тту за поновно натписивање" -#: src/selinux.c:215 +#: src/selinux.c:214 msgid "unable to get new tty context, not relabeling tty" msgstr "не могу да добавим нови тту контекст, није тту за поновно натписивање" -#: src/selinux.c:224 +#: src/selinux.c:223 msgid "unable to set new tty context" msgstr "не могу да подесим нови тту контекст" -#: src/selinux.c:322 +#: src/selinux.c:321 #, c-format msgid "you must specify a role for type %s" msgstr "морате да наведете улогу за врсту %s" -#: src/selinux.c:328 +#: src/selinux.c:327 #, c-format msgid "unable to get default type for role %s" msgstr "не могу да добавим основну врсту за улогу %s" -#: src/selinux.c:340 +#: src/selinux.c:339 msgid "failed to get new context" msgstr "нисам успео да добавим нови контекст" -#: src/selinux.c:349 +#: src/selinux.c:348 #, c-format msgid "failed to set new role %s" msgstr "нисам успео да подесим нову улогу %s" -#: src/selinux.c:353 +#: src/selinux.c:352 #, c-format msgid "failed to set new type %s" msgstr "нисам успео да подесим нову врсту %s" -#: src/selinux.c:365 +#: src/selinux.c:364 #, c-format msgid "%s is not a valid context" msgstr "%s није исправан контекст" -#: src/selinux.c:397 +#: src/selinux.c:396 msgid "failed to get old context" msgstr "нисам успео да добавим стари контекст" -#: src/selinux.c:403 +#: src/selinux.c:402 msgid "unable to determine enforcing mode." msgstr "не могу да одредим режим присиљавања." -#: src/selinux.c:420 +#: src/selinux.c:419 #, c-format msgid "unable to set tty context to %s" msgstr "не могу да подесим тту контекст на %s" -#: src/selinux.c:452 +#: src/selinux.c:440 #, c-format msgid "unable to set exec context to %s" msgstr "не могу да подесим извршни контекст за %s" -#: src/selinux.c:459 +#: src/selinux.c:447 #, c-format msgid "unable to set key creation context to %s" msgstr "не могу да подесим контекст стварања кључа за %s" -#: src/sesh.c:79 +#: src/sesh.c:78 msgid "requires at least one argument" msgstr "захтева барем један аргумент" -#: src/sesh.c:108 +#: src/sesh.c:107 #, c-format msgid "invalid file descriptor number: %s" msgstr "неисправан број описника датотеке: %s" -#: src/sesh.c:122 +#: src/sesh.c:121 #, c-format msgid "unable to run %s as a login shell" msgstr "не могу да покренем „%s“ као шкољку пријављивања" -#: src/signal.c:90 +#: src/signal.c:79 #, c-format msgid "unable to save handler for signal %d" msgstr "не могу да сачувам руковаоца за сигнал „%d“" -#: src/solaris.c:83 +#: src/solaris.c:72 msgid "resource control limit has been reached" msgstr "ограничење контроле ресурса је достигнуто" -#: src/solaris.c:86 +#: src/solaris.c:75 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "корисник „%s“ није члан пројекта „%s“" -#: src/solaris.c:90 +#: src/solaris.c:79 msgid "the invoking task is final" msgstr "задатак призивања је завршни" -#: src/solaris.c:93 +#: src/solaris.c:82 #, c-format msgid "could not join project \"%s\"" msgstr "не могу да приступим пројекту „%s“" -#: src/solaris.c:98 +#: src/solaris.c:89 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "не постоји депо извора који прихвата основне пречице за пројекат „%s“" -#: src/solaris.c:102 +#: src/solaris.c:93 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "наведени депо извора не постоји за пројекат „%s“" -#: src/solaris.c:106 +#: src/solaris.c:97 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "не могу да се повежем са основним депоом извора за пројекат „%s“" -#: src/solaris.c:112 +#: src/solaris.c:104 #, c-format msgid "setproject failed for project \"%s\"" msgstr "подешавање пројекта није успело за пројекат „%s“" -#: src/solaris.c:114 +#: src/solaris.c:106 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "упозорење, није успело додељивање контроле ресурса за пројекат „%s“" -#: src/sudo.c:224 +#: src/sudo.c:219 #, c-format msgid "Sudo version %s\n" msgstr "Судо издање %s\n" -#: src/sudo.c:226 +#: src/sudo.c:221 #, c-format msgid "Configure options: %s\n" msgstr "Опције подешавања: %s\n" -#: src/sudo.c:235 +#: src/sudo.c:230 msgid "fatal error, unable to load plugins" msgstr "кобна грешка, не могу да учитам прикључке" -#: src/sudo.c:280 +#: src/sudo.c:275 msgid "plugin did not return a command to execute" msgstr "прикључак није вратио наредбу за извршавање" -#: src/sudo.c:311 +#: src/sudo.c:310 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "неочекивани судо режим 0x%x" -#: src/sudo.c:544 +#: src/sudo.c:543 #, c-format msgid "you do not exist in the %s database" msgstr "не постојите у „%s“ бази података" -#: src/sudo.c:601 +#: src/sudo.c:600 msgid "unable to determine tty" msgstr "не могу да одредим конзолу" -#: src/sudo.c:893 +#: src/sudo.c:905 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s мора бити власништвo уида %d и треба да има подешен бит „setuid“" -#: src/sudo.c:896 +#: src/sudo.c:908 #, 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:902 +#: src/sudo.c:914 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "стварни уид није %d, већ сетуид администратор инсталиран судоом?" -#: src/sudo.c:918 +#: src/sudo.c:930 msgid "unable to set supplementary group IDs" msgstr "не могу да подесим додатне ИБ-ове групе" -#: src/sudo.c:925 +#: src/sudo.c:937 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не могу да подесим ефективан гид да се покрене_као гид %u" -#: src/sudo.c:931 +#: src/sudo.c:943 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не могу да подесим гид да се покрене као гид %u" -#: src/sudo.c:978 +#: src/sudo.c:986 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочекивани услов завршетка потпроцеса: %d" -#: src/sudo.c:1087 +#: src/sudo.c:1095 msgid "unable to initialize policy plugin" msgstr "не могу да започнем прикључак сигурности" -#: src/sudo.c:1148 +#: src/sudo.c:1158 #, c-format -msgid "policy plugin %s is missing the `check_policy' method" +msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "прикључак сигурности %s не садржи метод „check_policy“" -#: src/sudo.c:1163 src/sudo.c:1216 src/sudo.c:1260 +#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 msgid "command rejected by policy" msgstr "наредба је одбачена политиком" -#: src/sudo.c:1168 src/sudo.c:1221 src/sudo.c:1265 +#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 msgid "policy plugin error" msgstr "грешка прикључка политике" -#: src/sudo.c:1202 +#: src/sudo.c:1212 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "прикључак сигурности %s не подржава привилегије исписивања" -#: src/sudo.c:1246 +#: src/sudo.c:1256 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "прикључак сигурности %s не подржава опцију -v" -#: src/sudo.c:1284 +#: src/sudo.c:1294 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "прикључак сигурности %s не подржава опције -k/-K" -#: src/sudo.c:1413 +#: src/sudo.c:1423 #, c-format msgid "error initializing I/O plugin %s" msgstr "грешка приликом покретања У/И прикључка %s" -#: src/sudo.c:1567 +#: src/sudo.c:1577 #, c-format msgid "error initializing audit plugin %s" msgstr "грешка покретања аудит прикључка „%s“" -#: src/sudo.c:1745 +#: src/sudo.c:1755 #, c-format msgid "error initializing approval plugin %s" msgstr "грешка покретања прикључка одобравања „%s“" -#: src/sudo.c:1821 +#: src/sudo.c:1831 msgid "command rejected by approver" msgstr "наредбу је одбацио одобравач" -#: src/sudo.c:1830 +#: src/sudo.c:1840 msgid "approval plugin error" msgstr "грешка прикључка одобравања" -#: src/sudo_edit.c:233 +#: src/sudo_edit.c:226 msgid "no writable temporary directory found" msgstr "нисам нашао уписиви привремени директоријум" -#: src/sudo_edit.c:358 +#: src/sudo_edit.c:351 msgid "unable to restore current working directory" msgstr "не могу да повратим текући радни директоријум" -#: src/sudo_edit.c:575 src/sudo_edit.c:688 +#: src/sudo_edit.c:566 src/sudo_edit.c:666 #, c-format msgid "%s: not a regular file" msgstr "%s: није обична датотека" -#: src/sudo_edit.c:582 +#: src/sudo_edit.c:573 #, c-format msgid "%s: editing symbolic links is not permitted" msgstr "%s: уређивање симболичких веза није допуштено" -#: src/sudo_edit.c:585 +#: src/sudo_edit.c:576 #, c-format msgid "%s: editing files in a writable directory is not permitted" msgstr "%s: уређивање датотека у уписивом директоријуму није допуштено" -#: src/sudo_edit.c:618 src/sudo_edit.c:728 -#, c-format -msgid "%s: short write" -msgstr "%s: кратак упис" - -#: src/sudo_edit.c:689 +#: src/sudo_edit.c:667 #, c-format msgid "%s left unmodified" msgstr "%s је остао неизмењен" -#: src/sudo_edit.c:702 src/sudo_edit.c:889 +#: src/sudo_edit.c:680 src/sudo_edit.c:871 #, c-format msgid "%s unchanged" msgstr "%s је непромењен" -#: src/sudo_edit.c:717 src/sudo_edit.c:739 -#, c-format -msgid "unable to write to %s" -msgstr "не могу да упишем у %s" - -#: src/sudo_edit.c:718 src/sudo_edit.c:737 src/sudo_edit.c:740 -#: src/sudo_edit.c:914 src/sudo_edit.c:918 +#: src/sudo_edit.c:706 src/sudo_edit.c:907 #, c-format msgid "contents of edit session left in %s" msgstr "садржај сесије уређивања је остао у %s" -#: src/sudo_edit.c:736 -msgid "unable to read temporary file" -msgstr "не могу да прочитам привремену датотеку" - -#: src/sudo_edit.c:819 +#: src/sudo_edit.c:814 msgid "sesh: internal error: odd number of paths" msgstr "sesh: унутрашња грешка: непарн број путања" -#: src/sudo_edit.c:821 +#: src/sudo_edit.c:816 msgid "sesh: unable to create temporary files" msgstr "sesh: не могу да направим привремене датотеке" -#: src/sudo_edit.c:823 src/sudo_edit.c:921 +#: src/sudo_edit.c:818 src/sudo_edit.c:900 +msgid "sesh: killed by a signal" +msgstr "sesh: убијено сигналом" + +#: src/sudo_edit.c:820 src/sudo_edit.c:903 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: непозната грешка „%d“" -#: src/sudo_edit.c:913 +#: src/sudo_edit.c:894 msgid "unable to copy temporary files back to their original location" msgstr "не могу да умножим привремене датотеке назад на њихова првобитна места" -#: src/sudo_edit.c:917 +#: src/sudo_edit.c:897 msgid "unable to copy some of the temporary files back to their original location" msgstr "не могу да умножим неке од привремених датотека назад на њихова првобитна места" -#: src/sudo_edit.c:962 +#: src/sudo_edit.c:941 #, c-format msgid "unable to change uid to root (%u)" msgstr "не могу да променим уид у администратора (%u)" -#: src/sudo_edit.c:979 +#: src/sudo_edit.c:958 msgid "plugin error: missing file list for sudoedit" msgstr "грешка прикључка: недостаје датотеа списка за уређивање судоа" -#: src/sudo_edit.c:1020 src/sudo_edit.c:1033 +#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 msgid "unable to read the clock" msgstr "не могу да прочитам сат" -#: src/tgetpass.c:102 +#: src/tgetpass.c:95 msgid "timed out reading password" msgstr "истече време при читању лозинке" -#: src/tgetpass.c:105 +#: src/tgetpass.c:98 msgid "no password was provided" msgstr "лозинка није достављена" -#: src/tgetpass.c:108 +#: src/tgetpass.c:101 msgid "unable to read password" msgstr "не могу да прочитам лозинку" -#: src/tgetpass.c:147 +#: src/tgetpass.c:140 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "терминал је потребан за читање лозинке; или користите опцију „-S“ да читате из стандардног улаза или подесите помоћника тражиоца пролаза" -#: src/tgetpass.c:157 +#: src/tgetpass.c:150 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "није наведен програм за пропуштање, покушајте да подесите SUDO_ASKPASS" -#: src/tgetpass.c:332 +#: src/tgetpass.c:325 #, c-format msgid "unable to set gid to %u" msgstr "не могу да подесим гид у %u" -#: src/tgetpass.c:336 +#: src/tgetpass.c:329 #, c-format msgid "unable to set uid to %u" msgstr "не могу да подесим уид у %u" -#: src/tgetpass.c:341 +#: src/tgetpass.c:334 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" -#: src/utmp.c:295 +#: src/utmp.c:287 msgid "unable to save stdin" msgstr "не могу да сачувам стандардни улаз" -#: src/utmp.c:297 +#: src/utmp.c:289 msgid "unable to dup2 stdin" msgstr "не могу да дуп2 стандардни улаз" -#: src/utmp.c:300 +#: src/utmp.c:292 msgid "unable to restore stdin" msgstr "не могу да повратим стандардни улаз" +#~ msgid "%s: short write" +#~ msgstr "%s: кратак упис" + +#~ msgid "unable to read temporary file" +#~ msgstr "не могу да прочитам привремену датотеку" + #~ msgid "ignoring duplicate policy plugin \"%s\" in %s, line %d" #~ msgstr "занемарујем удвостручен прикључак сигурности „%s“ у %s, %d. ред" diff --git a/po/tr.mo b/po/tr.mo index bf321a853f102dffbe220e993ae4e7736d1fc6e2..ed5368bd038e4344a1dfbc513ed11f18eb60c294 100644 GIT binary patch delta 4807 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 diff --git a/po/tr.po b/po/tr.po index e195c91fb2..9a5d8c3fd9 100644 --- a/po/tr.po +++ b/po/tr.po @@ -4,18 +4,18 @@ # Mehmet Kececi , 2016, 2017, 2018, 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 17:09+0300\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 14:10+0300\n" "Last-Translator: Mehmet Kececi \n" -"Language-Team: Turkish \n" +"Language-Team: Turkish \n" "Language: tr\n" "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 2.4\n" +"X-Generator: Poedit 2.4.1\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: lib/util/aix.c:89 lib/util/aix.c:169 @@ -51,17 +51,17 @@ msgstr "kayıt geri yüklenemiyor" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -84,20 +84,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "bellek ayırma başarısız" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "%s açılamıyor" @@ -174,12 +174,22 @@ msgstr "%s genel yazılabilir" msgid "%s is group writable" msgstr "%s grup yazılabilir" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: %s sıfır bayta indirilsin mi? (e/h) [h] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "%s üzerine yazılmıyor" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "%s öğesinden okunamıyor" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "%s dosyasına yazılamıyor" @@ -260,7 +270,7 @@ msgid "unable to set controlling tty" msgstr "tty denetleme ayarlaması başarısız" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "iletişim tüneli oluşturulamıyor" @@ -269,7 +279,7 @@ msgid "unable to receive message from parent" msgstr "ebeveynden mesaj alamıyor" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "çatallanamıyor" @@ -277,7 +287,7 @@ msgstr "çatallanamıyor" msgid "unable to restore tty label" msgstr "tty etiketi geri yüklenemiyor" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "%s çalıştırılamıyor" @@ -328,7 +338,7 @@ msgstr "süreci izlemek için mesaj gönderilemiyor" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "\"%s\" eklentisi yüklenirken satır %d, %s içerisinde hata" @@ -373,67 +383,67 @@ msgstr "uyumsuz temel ilke sürümü %d bulundu (beklenen %d) %s içerisinde" msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "\"%s\" ilke eklentisi ihmal ediliyor, %s içinde, satır %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "sadece tek ilke eklentisi belirtilebilir" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "bilinmeyen eklenti türü %d %s içinde bulundu" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "%s ilke eklentisi, bir check_policy yöntemi içermiyor" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "dahili hata, %s taşması" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "geçersiz çevre değişken adı: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C argümanı 3 veya daha büyük bir sayı olmalıdır" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "-i ve -s seçeneklerini aynı anda belirtemezsiniz" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "-i ve -E seçeneklerini aynı anda belirtemezsiniz" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "düzenleme kipinde -E seçeneği geçerli değil" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "düzenleme kipinde ortam değişkenlerini belirtemezsiniz" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "-U seçeneği sadece -l seçeneği ile kullanılabilir" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "-A ve -S seçenekleri birlikte kullanılamaz" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "sudoedit bu platformda desteklenmiyor" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "-e, -h, -i, -K, -l, -s, -v veya -V seçeneklerinden sadece biri belirtilebilir" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -442,7 +452,7 @@ msgstr "" "%s - dosyaları farklı kullanıcı olarak düzenle\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -451,8 +461,7 @@ msgstr "" "%s - bir komutu farklı kullanıcı olarak çalıştır\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -460,123 +469,131 @@ msgstr "" "\n" "Seçenekler:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "parola sorgulaması için bir yardımcı program kullan" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "belirtilen BSD kimlik doğrulama türünü kullan" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "arkaalanda komutu çalıştır" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "istendiğinde zili çal" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr ">= sayı olan tüm dosya tanımlayıcılarını kapat" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "komutu belirtilen BSD oturum sınıfı ile çalıştır" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "komutu çalıştırmadan önce çalışma dizinini değiştirin" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "komut çalıştırılırken kullanıcı ortamını koru" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "özel çevre değişkenlerini koru" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "komut çalıştırmak yerine dosyaları düzenleyiniz" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "grup adı veya ID olarak tanımlanan komutu çalıştır" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "kullanıcının HOME değişkenini ana dizinini hedefleyecek şekilde ayarlama" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "yardım mesajını görüntüle ve çık" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "komutunuzu hostta çalıştırın (eğer plugin tarafından destekleniyorsa)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "oturum kabuğunu hedef kullanıcı olarak çalıştır; bir komut da belirtilebilir" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "zaman damgası dosyasını kalıcı olarak kaldır" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "zaman damgası dosyasının geçerliliğini kaldır" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "kullanıcı yetkilerini listele veya özel bir komut denetle; daha uzun biçim için iki kez kullanın" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "etkileşimsiz kip, sorgu yapılmaz" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "hedefe atamak yerine grup vektörünü koru" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "belirtilen parola sorgusunu kullan" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "komutu çalıştırmadan önce kök dizini değiştirin" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "belirtilen rolle SELinux güvenlik bağlamı oluşturma" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "standart girdiden şifreyi okuyun" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "kabuğu hedef kullanıcı olarak çalıştır; bir komut da belirtilebilir" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "belirtilen türde SELinux güvenlik bağlamı oluşturma" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "belirtilen süre sonunda komutu sonlandır" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "liste modunda, kullanıcıların ayrıcalıklarını görüntüle" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "belirtilen kullanıcı adı veya ID ile komutu çalıştırın (veya dosyayı düzenleyin)" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "sürüm bilgisini göster ve çık" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "kullanıcı zaman damgasını bir komut çalıştırmadan güncelle" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "komut satırı argümanlarını işlemeyi durdur" @@ -681,16 +698,16 @@ msgstr "%s için exec bağlamı ayarlanamıyor" msgid "unable to set key creation context to %s" msgstr "%s için anahtar oluşturma bağlamı ayarlanamıyor" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "en az bir argüman gerektirir" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "geçersiz dosya tanımlayıcı sayısı: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "bir oturum açma kabuğu gibi %s çalıştırılamıyor" @@ -743,124 +760,124 @@ msgstr "\"%s\" projesi için setproject başarısız" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "uyarı, \"%s\" projesi için kaynak denetim ataması başarısız" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo sürüm %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Yapılandırma seçenekleri: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "ölümcül hata, eklentiler yüklenemiyor" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "eklenti çalıştırmak için bir komut döndürmedi" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "beklenmeyen 0x%x sudo kipi" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "sen %s veritabanında yoksun" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "tty belirlenemiyor" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s, %d kullanıcı kimliği tarafından sahiplenmeli ve setuid biti ayarlanmış olmalı" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "etkin kullanıcı kimliği %d değil, %s 'nosuid' seçeneği ayarlanmış bir dosya sisteminde veya yetkisiz haklara sahip bir NFS dosya sisteminde mi?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "etkin kullanıcı kimliği %d değil, sudo setuid root ile mi yüklendi?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "ek grup kimlikleri ayarlanamıyor" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "etkin grup kimliği, runas gid %u olarak ayarlanamıyor" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "grup kimliği, runas gid %u olarak ayarlanamıyor" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "beklenmeyen alt sonlandırma şartı: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "ilke eklentisi başlatılamıyor" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "%s ilke eklentisi, bir \"check_policy\" yöntemi içermiyor" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "komut politika tarafından reddedildi" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "politika eklentisi hatası" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "%s ilke eklentisi listeleme yetkilerini desteklemiyor" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "%s ilke eklentisi -v seçeneğini desteklemiyor" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "%s ilke eklentisi -k/-K seçeneklerini desteklemiyor" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "başlatma hatası G/Ç eklentisi %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "başlatma hatası I/O eklentisi %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "onay eklentisini %s başlatma hatası" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "onaylayan tarafından komut reddedildi" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "onay eklentisi hatası" @@ -897,7 +914,7 @@ msgstr "%s düzenlenmemiş olarak bırakıldı" msgid "%s unchanged" msgstr "%s değiştirilmemiş" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "düzenleme oturumu içerikleri %s içinde bırakıldı" @@ -910,33 +927,33 @@ msgstr "sesh: iç hata: yolların tek sayısı" msgid "sesh: unable to create temporary files" msgstr "sesh: geçici dosyalar oluşturulamıyor" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: bir sinyal tarafından ortadan kaldırıldı" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: bilinmeyen hata %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "geçici dosyalar onların özgün konumlarına kopyalanamıyor" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "bazı geçici dosyalar onların özgün konumlarına kopyalanamıyor" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "kullanıcı kimliği yetkili (%u) olarak değiştirilemiyor" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "eklenti hatası: sudoedit için eksik dosya listesi" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "saat okunamıyor" @@ -952,25 +969,25 @@ msgstr "şifre sağlanmadı" msgid "unable to read password" msgstr "parola okunamıyor" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "şifreyi okumak için bir terminal gereklidir; ya standart girdiden okumak için -S seçeneğini kullanın ya da bir askpass yardımcısı yapılandırın" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "askpass programı belirtilmemiş, SUDO_ASKPASS ayarlamayı deneyin" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "grup kimliği %u olarak ayarlanamıyor" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "kullanıcı kimliği %u olarak ayarlanamıyor" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "%s çalıştırılamıyor" diff --git a/po/uk.mo b/po/uk.mo index b1df883c6c2d770a7516d1adc9fb3c7036b9be3a..71a0076e8661fd80a793ca3b4cb95e7614b5584b 100644 GIT binary patch delta 4806 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 SK2#Rk#^Y-=6rtgXDgOaaslp-v delta 4321 zcmY+{3s6>N9>?)Nm}smbpdiY{SJSu&UeFgpQoMkmmStw5B@!uxR!ZJjv{wyLGR+%i zW~pgeVr0GQu3EWj%sRWZYp`uQF=kskwOgA^(}b?mUcSF`j8ja=NV9OP$NsnjQ}6^v;bpuPzsFt}$Hk$T zfpIto``~iC1-GKUcO0Y50`?m!1G#Vs`(h|p{g{aA!*uM5Wk}zw5_54ersENe#Xotr zBYm;3o@T|^8+BfW5m<$*aSg`MzJ<~qjVun6Fc&owC8!Q9L#OAM!})QH$19kH;W4hG zF_H5s)PS~NG9JeoyoA|ULT`27t(Zysc7zI@u{QK!I}XCg-ev>PkNnn3Pz^ken$k_4 zhdj@EwxK%wBW7S9)*%fiVk%bQXxxJVjiil=*6=E-;Uw;^h9{t|S73MCj9U9W$e%TH zn2MLtk3$$1x3Kv*9s{WRokunNHyn&TX;dA`k7xdMVF4GiaTkuji>RsX%sLFg+i)a4 zf|{wlsI?EGzJD1t)xDUWOw2qiOCe+e4p}zMas-r(9GXH8gf=@M7g~(^N1l6%^ zs2iR^jpz#Aj>G%8BU*&I(QedC1(DUWPf;EG9yODRKDV8G)Mi|P`hIal4< zHQ0^rtEZ!I7?$H`Y(Qqw{@~e;4BocCj^;Y?&Qts2!}1M(Al2Pa|RGb*}q zDmzA->|xZ1o<#oaIS%Y2JB@63YxVpq>U;l0AI7rf^>}5YmZ}id;7Zg04j@h0$EbF$ zAx~<+BG@53`qm${S+Y2&$0evQE=7%KBdQ}WqZ&Si{8=jp?U8?=4^wGXQ$GncgUe7e z_7dv%CsFtR2qX3Ue@8`A@-L)Q=HpiyX#r|#XQ6iQa@5|~k80oy`tV!Sjl1z^=sp9H zNwGrI(^APnzuS&%AA1Yc@r&4x_N{}8ZV*c=>S-owMv9S-Y&L2pYEgS-w|Bi6wdPk) zGt`w2HO2iP~We|G57^;zybV7Gtr1$@f?QXZ?Otn@GdOi<-!Imf{~h{bSwt#ZD~Z`p2k|CUI9eALn5cYLoS% z*M*piy5Ab?z~A9oJ^#(jdlDClm>*451wMp-$JKZ@zgEXuumm$`We%>#yYVZm!yI~} zy>tfWV|uas`8L$6{V(_gMo)6@TZd!y{CAnmGs*|Ws2?6fKC^hbODAnU-hqda{bSeg zG^TTLFMf^rxc*Le2`-?fJa;OuS=@~KaWdF?>&Rx;(e$AzJUSt^ct1H zIE7Z(e^!k=kru=)_$BgZOSrp6`~hylg{+6ZcO8de8okmUxF6H-Ao}t5n2ceJCJQq$ z7ayF>{IgN*MJ_DEHq=y4yPrn|_aU=wQ4CKF%t7673+jfyMh&1H^Km>IBOPl|138Ln z@Ec@1SyHLlWB3rVZ>_a7;PxbDt~)h%A`2QP=V@jBWk2SA=}4>KJ5Mn$6B1r`6*j!_BW zf*!5M$@?UU93m{gJx?|emFHY+AHGJml3k>Ls4=hrj?2k5(n#hKEsM$$@}^V!|3f&Z zchJ7Q?p@c8WpjY?pZssh_f8@_L-BU9lk6pd zG!80y9?v>8_g}pA)GNuWq?kNGP7wB~u~nS^H3NG?2TC%jcWUk-4o;KpWCyv2+$egN zyhL8m`m1atT}iA?DC0grW`0JIncZ zKEb-l zsvaR4=qXZ2R0fa)r{>Lpo?4Z+$PluEj3&>LDdbmVC7Dd#BflVv$(>{bsUuNj0tu3* z$c>UhrHV9>17rpnOv=bBYQL6>N>4J%sr~oRo$AlYt>h*WMplu{WF1lILn57;dzcE3 zkrMA(sb?OZ^Xh|eDEXzPVGqe7G2|Jda-OUWUW%*?4KD7P7V>t?^{`;~gp*O7hF6tu ozmQQJo}Dqw?;AEUcepzCQMF}bY0SLnH+W-In diff --git a/po/uk.po b/po/uk.po index 1fc4a39b85..c761b9a0b6 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. msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 15:26+0300\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-14 11:44+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -51,17 +51,17 @@ msgstr "не вдалося відновити регістр" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s: %s" @@ -84,20 +84,20 @@ msgstr "%s: %s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "не вдалося отримати потрібний об’єм пам’яті" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" @@ -174,12 +174,22 @@ msgstr "Запис до «%s» можливий для довільного ко msgid "%s is group writable" msgstr "Запис до «%s» може здійснювати будь-який користувач з групи" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s: обрізати %s до нуля байтів? (y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "не перезаписуємо %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "не вдалося виконати читання з %s" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" @@ -260,7 +270,7 @@ msgid "unable to set controlling tty" msgstr "не вдалося встановити tty для керування" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "не вдалося створити канал" @@ -269,7 +279,7 @@ msgid "unable to receive message from parent" msgstr "не вдалося отримати повідомлення від батьківського процесу" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "не вдалося створити відгалуження" @@ -277,7 +287,7 @@ msgstr "не вдалося створити відгалуження" msgid "unable to restore tty label" msgstr "не вдалося відновити позначку tty" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" @@ -328,7 +338,7 @@ msgstr "не вдалося надіслати повідомлення до п #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "помилка у %s, рядок %d під час спроби завантаження додатка «%s»" @@ -373,67 +383,67 @@ msgstr "несумісна основна версія додатка, %d, (ма msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "ігноруємо додаток правил, «%s», у %s, рядок %d" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "можна визначати лише один додаток обробки правил" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "у %2$s виявлено невідомий тип додатка, %1$d" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "до додатка правил %s не включено метод check_policy" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "внутрішня помилка, переповнення %s" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "некоректна назва змінної середовища: %s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргументом параметра -C mмає бути число не менше за 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "не можна одночасно вказувати параметри -i і -s" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "не можна одночасно вказувати параметри -i і -E" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "не можна використовувати -E у режимі редагування" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "не можна вказувати змінні середовища у режимі редагування" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "параметр -U можна використовувати лише разом з параметром -l" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "параметри -A і -S не можна використовувати одночасно" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "підтримки sudoedit для цієї платформи не передбачено" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Можна використовувати лише такі параметри: -e, -h, -i, -K, -l, -s, -v та -V" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -442,7 +452,7 @@ msgstr "" "%s — редагувати файли від імені іншого користувача\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -451,8 +461,7 @@ msgstr "" "%s — виконати команду від імені іншого користувача\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -460,123 +469,131 @@ msgstr "" "\n" "Параметри:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "використовувати допоміжну програму для запитів щодо пароля" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "використовувати вказаний тип розпізнавання BSD" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "виконати команду у фоновому режимі" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "звук дзвінка під час запиту" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "закрити всі дескриптори файлів >= num" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "виконати команду з вказаним класом доступу BSD" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "змінити робочий каталог перед виконанням команди" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "зберегти середовище користувача на час виконання команди" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "зберегти вказані змінні середовища" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "редагувати файли замість виконання команди" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "виконати команду від імені групи користувачів, вказаної за назвою або ідентифікатором" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "встановити для змінної HOME значення домашнього каталогу вказаного користувача." -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "показати довідкове повідомлення і завершити роботу" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "виконати команду на комп’ютері (якщо підтримується додатком)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "запустити оболонку для входу до системи від імені вказаного користувача; слід вказати команду запуску" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "повністю вилучити файл часової позначки" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "позбавити чинності файл часової позначки" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "показати список прав доступу користувача або перевірити певну команду; подвоєння параметра призводить до виведення додаткових даних" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "неінтерактивний режим, не просити користувача відповідати на питання" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "зберегти вектор групи, не встановлювати вектор вказаного користувача" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "використовувати вказаний інструмент отримання паролів" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "змінити кореневий каталог перед виконанням команди" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "створити контекст захисту SELinux з вказаною роллю" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "прочитати пароль зі стандартного джерела вхідних даних" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "виконати командну оболонку від імені вказаного користувача; слід також вказати команду" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "створити контекст захисту SELinux вказаного типу" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "перервати виконання команди щойно буде перевищено вказане обмеження за часом" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "у режимі списку, показати права доступу користувача" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "виконати команду (або редагувати файл) від імені користувача, вказаного за іменем або ідентифікатором" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "показати дані щодо версії і завершити роботу" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "оновити штамп часу користувача без виконання команди" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "зупинити обробку аргументів командного рядка" @@ -681,16 +698,16 @@ msgstr "не вдалося встановити контекст виконан msgid "unable to set key creation context to %s" msgstr "не вдалося встановити контекст ключа створення у значення %s" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "потребує принаймні одного аргументу" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "некоректний номер дескриптора файла: %s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s не можна працювати як оболонка для входу" @@ -743,124 +760,124 @@ msgstr "помилка під час виконання setproject для про msgid "warning, resource control assignment failed for project \"%s\"" msgstr "попередження, помилка призначення керування ресурсами проекту «%s»" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Версія sudo %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "Параметри налаштування: %s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "критична помилка, не вдалося завантажити додатки" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "додатком не повернуто команди, яку слід виконати" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "неочікуваний режим sudo 0x%x" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "вас немає у базі даних %s" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "не вдалося визначити tty" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s має належати користувачеві з uid %d, крім того, має бути встановлено біт setuid" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "поточним uid не є %d. Можливо %s зберігається у файловій системі зі встановленим параметром «nosuid» або у файловій системі NFS без прав доступу root?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "поточним uid не є %d, sudo встановлено з ідентифікатором користувача root?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "не вдалося встановити ідентифікатори додаткових груп" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не вдалося встановити ефективний ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не вдалося встановити ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочікувана умова переривання дочірнього процесу: %d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "не вдалося ініціалізувати додаток правил" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "до додатка правил %s не включено метод check_policy" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "у виконанні команди відмовлено згідно правил" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "помилка у додатку правил" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "у додатку правил %s не передбачено підтримки побудови списку прав доступу" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "у додатку правил %s не передбачено підтримки параметра -v" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "у додатку правил %s не передбачено підтримки параметрів -k/-K" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "помилка під час спроби ініціалізації додатка введення/виведення даних %s" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "помилка під час спроби ініціалізації додатка аудиту %s" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "помилка під час спроби ініціалізації додатка підтвердження %s" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "у виконанні команди відмовлено засобом підтвердження" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "помилка у додатку підтвердження" @@ -897,7 +914,7 @@ msgstr "%s залишено без змін" msgid "%s unchanged" msgstr "%s не змінено" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "дані сеансу редагування залишилися у %s" @@ -910,33 +927,33 @@ msgstr "sesh: внутрішня помилка: непарна кількіст msgid "sesh: unable to create temporary files" msgstr "sesh: не вдалося створити тимчасові файли" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh: завершено надсиланням сигналу" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: невідома помилка %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "не вдалося скопіювати тимчасові файли назад до початкового місця зберігання" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "не вдалося скопіювати деякі з тимчасових файлів назад до початкового місця зберігання" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "не вдалося змінити значення uid на значення root (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "помилка додатка: не вистачає списку файлів для sudoedit" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "не вдалося прочитати час на годиннику" @@ -952,25 +969,25 @@ msgstr "пароль не надано" msgid "unable to read password" msgstr "не вдалося прочитати пароль" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "у терміналі слід прочитати пароль; або скористайтеся параметром -S, щоб виконати читання зі стандартного джерела даних, або налаштуйте допоміжний засіб askpass" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "не вказано програми askpass, спробуйте встановити значення змінної SUDO_ASKPASS" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "не вдалося встановити gid у значення %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "не вдалося встановити uid у значення %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "не вдалося виконати %s" diff --git a/po/zh_TW.mo b/po/zh_TW.mo index eb2f124c89171edfa0080c8b425f722065670a31..8b87f901f6ded3b20cbb68514e4c5d96b3b46f8f 100644 GIT binary patch delta 4765 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 diff --git a/po/zh_TW.po b/po/zh_TW.po index 0771a3fdcb..d57d2fbcca 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -5,10 +5,10 @@ # Yi-Jyun Pan , 2019, 2020. msgid "" msgstr "" -"Project-Id-Version: sudo 1.9.2rc1\n" +"Project-Id-Version: sudo 1.9.3b1\n" "Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" -"POT-Creation-Date: 2020-06-24 05:35-0600\n" -"PO-Revision-Date: 2020-07-16 19:01+0800\n" +"POT-Creation-Date: 2020-09-12 08:28-0600\n" +"PO-Revision-Date: 2020-09-16 01:02+0800\n" "Last-Translator: Yi-Jyun Pan \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" @@ -17,7 +17,7 @@ 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-Generator: Poedit 2.3.1\n" +"X-Generator: Poedit 2.4\n" #: lib/util/aix.c:89 lib/util/aix.c:169 msgid "unable to open userdb" @@ -52,17 +52,17 @@ msgstr "無法還原登錄表" #: src/exec_pty.c:1276 src/exec_pty.c:1283 src/exec_pty.c:1290 #: src/exec_pty.c:1298 src/exec_pty.c:1740 src/load_plugins.c:52 #: src/load_plugins.c:65 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:197 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:202 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:624 src/sudo.c:693 src/sudo.c:703 src/sudo.c:724 src/sudo.c:743 -#: src/sudo.c:752 src/sudo.c:761 src/sudo.c:778 src/sudo.c:820 src/sudo.c:830 -#: src/sudo.c:859 src/sudo.c:1045 src/sudo.c:1067 src/sudo.c:1365 -#: src/sudo.c:1538 src/sudo.c:1732 src/sudo.c:2076 src/sudo_edit.c:263 -#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:974 -#: src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:632 src/sudo.c:701 src/sudo.c:711 src/sudo.c:732 src/sudo.c:751 +#: src/sudo.c:760 src/sudo.c:769 src/sudo.c:786 src/sudo.c:828 src/sudo.c:838 +#: src/sudo.c:867 src/sudo.c:1053 src/sudo.c:1075 src/sudo.c:1373 +#: src/sudo.c:1546 src/sudo.c:1740 src/sudo.c:2084 src/sudo_edit.c:263 +#: src/sudo_edit.c:770 src/sudo_edit.c:854 src/sudo_edit.c:976 +#: src/sudo_edit.c:996 #, c-format msgid "%s: %s" msgstr "%s:%s" @@ -85,20 +85,20 @@ msgstr "%s:%s" #: src/exec_pty.c:1262 src/exec_pty.c:1269 src/exec_pty.c:1276 #: src/exec_pty.c:1283 src/exec_pty.c:1290 src/exec_pty.c:1298 #: src/exec_pty.c:1740 src/load_plugins.c:163 src/load_plugins.c:188 -#: src/load_plugins.c:223 src/load_plugins.c:462 src/load_plugins.c:468 -#: src/parse_args.c:176 src/parse_args.c:198 src/parse_args.c:270 -#: src/parse_args.c:593 src/parse_args.c:615 src/parse_args.c:640 +#: src/load_plugins.c:223 src/load_plugins.c:463 src/load_plugins.c:469 +#: src/parse_args.c:181 src/parse_args.c:203 src/parse_args.c:275 +#: src/parse_args.c:616 src/parse_args.c:638 src/parse_args.c:663 #: src/preserve_fds.c:46 src/preserve_fds.c:131 src/selinux.c:90 -#: src/selinux.c:360 src/selinux.c:485 src/selinux.c:494 src/sesh.c:116 -#: src/sudo.c:234 src/sudo.c:624 src/sudo.c:859 src/sudo.c:1045 -#: src/sudo.c:1067 src/sudo.c:1365 src/sudo.c:1538 src/sudo.c:1732 -#: src/sudo.c:2076 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 -#: src/sudo_edit.c:974 src/sudo_edit.c:994 +#: src/selinux.c:360 src/selinux.c:489 src/selinux.c:498 src/sesh.c:115 +#: src/sudo.c:235 src/sudo.c:632 src/sudo.c:867 src/sudo.c:1053 +#: src/sudo.c:1075 src/sudo.c:1373 src/sudo.c:1546 src/sudo.c:1740 +#: src/sudo.c:2084 src/sudo_edit.c:263 src/sudo_edit.c:770 src/sudo_edit.c:854 +#: src/sudo_edit.c:976 src/sudo_edit.c:996 msgid "unable to allocate memory" msgstr "無法分配記憶體" #: lib/util/mkdir_parents.c:69 lib/util/sudo_conf.c:614 src/selinux.c:234 -#: src/selinux.c:264 src/sudo.c:367 +#: src/selinux.c:264 src/sudo.c:369 #, c-format msgid "unable to open %s" msgstr "無法開啟 %s" @@ -175,12 +175,22 @@ msgstr "%s 允許所有使用者寫入" msgid "%s is group writable" msgstr "%s 允許群組寫入" -#: src/copy_file.c:118 +#: src/copy_file.c:91 +#, c-format +msgid "%s: truncate %s to zero bytes? (y/n) [n] " +msgstr "%s:將 %s 截斷至 0 位元組?(y/n) [n] " + +#: src/copy_file.c:95 +#, c-format +msgid "not overwriting %s" +msgstr "不覆寫 %s" + +#: src/copy_file.c:117 #, c-format msgid "unable to read from %s" msgstr "無法從 %s 讀取" -#: src/copy_file.c:122 src/sudo_edit.c:695 +#: src/copy_file.c:134 src/sudo_edit.c:695 #, c-format msgid "unable to write to %s" msgstr "無法寫入「%s」" @@ -261,7 +271,7 @@ msgid "unable to set controlling tty" msgstr "無法設定控制終端" #: src/exec_monitor.c:590 src/exec_nopty.c:358 src/exec_pty.c:1465 -#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:304 +#: src/exec_pty.c:1486 src/exec_pty.c:1506 src/tgetpass.c:306 msgid "unable to create pipe" msgstr "無法建立管線" @@ -270,7 +280,7 @@ msgid "unable to receive message from parent" msgstr "無法自上層接收訊息" #: src/exec_monitor.c:612 src/exec_nopty.c:387 src/exec_pty.c:1544 -#: src/sudo_edit.c:735 src/tgetpass.c:308 +#: src/sudo_edit.c:735 src/tgetpass.c:310 msgid "unable to fork" msgstr "無法複製 (fork) 出新行程" @@ -278,7 +288,7 @@ msgstr "無法複製 (fork) 出新行程" msgid "unable to restore tty label" msgstr "無法還原終端標籤 (tty label)" -#: src/exec_monitor.c:632 src/sesh.c:126 src/sudo.c:1123 +#: src/exec_monitor.c:632 src/sesh.c:125 src/sudo.c:1131 #, c-format msgid "unable to execute %s" msgstr "無法執行 %s" @@ -329,7 +339,7 @@ msgstr "無法傳送訊息至監控程序" #: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 #: src/load_plugins.c:115 src/load_plugins.c:129 src/load_plugins.c:135 #: src/load_plugins.c:287 src/load_plugins.c:297 src/load_plugins.c:307 -#: src/load_plugins.c:353 +#: src/load_plugins.c:354 #, c-format msgid "error in %s, line %d while loading plugin \"%s\"" msgstr "載入「%3$s」外掛程式時,發現 %1$s 中的第 %2$d 行有錯誤" @@ -374,67 +384,67 @@ msgstr "在 %3$s 中發現不相容的外掛程式主版本號 %1$d(預期應 msgid "ignoring policy plugin \"%s\" in %s, line %d" msgstr "無視 %2$s 中第 %3$d 行的「%1$s」sudo 政策外掛程式" -#: src/load_plugins.c:329 +#: src/load_plugins.c:330 msgid "only a single policy plugin may be specified" msgstr "只能指定一個 Sudo 政策外掛程式" -#: src/load_plugins.c:355 +#: src/load_plugins.c:356 #, c-format msgid "unknown plugin type %d found in %s" msgstr "在 %2$s 發現未知的外掛程式類型 %1$d" -#: src/load_plugins.c:541 +#: src/load_plugins.c:552 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "%s 政策外掛程式未包含 check_policy 方法" -#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:477 +#: src/net_ifs.c:178 src/net_ifs.c:195 src/net_ifs.c:340 src/sudo.c:479 #, c-format msgid "internal error, %s overflow" msgstr "內部錯誤,%s 溢位" -#: src/parse_args.c:218 +#: src/parse_args.c:223 #, c-format msgid "invalid environment variable name: %s" msgstr "無效的環境變數名稱:%s" -#: src/parse_args.c:319 +#: src/parse_args.c:325 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "傳入 -C 的參數數字應該要等於或大於 3" -#: src/parse_args.c:532 +#: src/parse_args.c:552 msgid "you may not specify both the -i and -s options" msgstr "不能同時指定 -i 跟 -s 指令列選項" -#: src/parse_args.c:536 +#: src/parse_args.c:557 msgid "you may not specify both the -i and -E options" msgstr "不能同時指定 -i 跟 -E 指令列選項" -#: src/parse_args.c:546 +#: src/parse_args.c:567 msgid "the -E option is not valid in edit mode" msgstr "-E 指令列選項在編輯模式中無效" -#: src/parse_args.c:548 +#: src/parse_args.c:570 msgid "you may not specify environment variables in edit mode" msgstr "不能在編輯模式中指定環境變數" -#: src/parse_args.c:557 +#: src/parse_args.c:580 msgid "the -U option may only be used with the -l option" msgstr "-U 指令列選項只能跟 -l 選項一起使用" -#: src/parse_args.c:561 +#: src/parse_args.c:584 msgid "the -A and -S options may not be used together" msgstr "不能同時使用 -A 跟 -S 指令列選項" -#: src/parse_args.c:654 +#: src/parse_args.c:677 msgid "sudoedit is not supported on this platform" msgstr "此平台不支援 sudoedit" -#: src/parse_args.c:735 +#: src/parse_args.c:759 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "只能指定以下指令列選項之一:-e、-h、-i、-K、-l、-s、-v、-V" -#: src/parse_args.c:749 +#: src/parse_args.c:773 #, c-format msgid "" "%s - edit files as another user\n" @@ -443,7 +453,7 @@ msgstr "" "%s - 以另一個使用者的身份編輯檔案\n" "\n" -#: src/parse_args.c:751 +#: src/parse_args.c:775 #, c-format msgid "" "%s - execute a command as another user\n" @@ -452,8 +462,7 @@ msgstr "" "%s - 以另一個使用者的身份執行指令\n" "\n" -#: src/parse_args.c:756 -#, c-format +#: src/parse_args.c:780 msgid "" "\n" "Options:\n" @@ -461,123 +470,131 @@ msgstr "" "\n" "指令列選項:\n" -#: src/parse_args.c:758 +#: src/parse_args.c:782 msgid "use a helper program for password prompting" msgstr "使用助手程式詢問密碼" -#: src/parse_args.c:761 +#: src/parse_args.c:785 msgid "use specified BSD authentication type" msgstr "使用指定的 BSD 身份驗證類型" -#: src/parse_args.c:764 +#: src/parse_args.c:788 msgid "run command in the background" msgstr "在背景中執行指令" -#: src/parse_args.c:766 +#: src/parse_args.c:790 msgid "ring bell when prompting" msgstr "提示時響鈴" -#: src/parse_args.c:768 +#: src/parse_args.c:792 msgid "close all file descriptors >= num" msgstr "關閉所有 >= num 的檔案描述元" -#: src/parse_args.c:771 +#: src/parse_args.c:795 msgid "run command with the specified BSD login class" msgstr "以指定的 BSD 登入類型執行指令" -#: src/parse_args.c:774 +#: src/parse_args.c:798 +msgid "change the working directory before running command" +msgstr "執行命令前,先變更工作目錄" + +#: src/parse_args.c:800 msgid "preserve user environment when running command" msgstr "在執行指令時保留使用者的環境" -#: src/parse_args.c:776 +#: src/parse_args.c:802 msgid "preserve specific environment variables" msgstr "保留指定的環境變數" -#: src/parse_args.c:778 +#: src/parse_args.c:804 msgid "edit files instead of running a command" msgstr "編輯檔案而非執行指令" -#: src/parse_args.c:780 +#: src/parse_args.c:806 msgid "run command as the specified group name or ID" msgstr "以指定的群組名稱或 ID 執行指令" -#: src/parse_args.c:782 +#: src/parse_args.c:808 msgid "set HOME variable to target user's home dir" msgstr "設定 HOME 環境變數為目標使用者的家目錄" -#: src/parse_args.c:784 +#: src/parse_args.c:810 msgid "display help message and exit" msgstr "顯示說明訊息並退出" -#: src/parse_args.c:786 +#: src/parse_args.c:812 msgid "run command on host (if supported by plugin)" msgstr "在指定的主機上執行指令(若外掛程式支援)" -#: src/parse_args.c:788 +#: src/parse_args.c:814 msgid "run login shell as the target user; a command may also be specified" msgstr "以目標使用者的身份執行登入 shell;亦可同時指定一個指令" -#: src/parse_args.c:790 +#: src/parse_args.c:816 msgid "remove timestamp file completely" msgstr "完全地移除時間戳記檔案" -#: src/parse_args.c:792 +#: src/parse_args.c:818 msgid "invalidate timestamp file" msgstr "使時間戳檔案無效化" -#: src/parse_args.c:794 +#: src/parse_args.c:820 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "列出使用者的權限或是檢查特定的指令;指定兩次以用更長的格式輸出" -#: src/parse_args.c:796 +#: src/parse_args.c:822 msgid "non-interactive mode, no prompts are used" msgstr "非互動式模式,不使用任何提示文字" -#: src/parse_args.c:798 +#: src/parse_args.c:824 msgid "preserve group vector instead of setting to target's" msgstr "保留目前的群組集合而非設定為目標的群組集合" -#: src/parse_args.c:800 +#: src/parse_args.c:826 msgid "use the specified password prompt" msgstr "使用指定的密碼提示文字" -#: src/parse_args.c:803 +#: src/parse_args.c:828 +msgid "change the root directory before running command" +msgstr "執行命令前,先變更根目錄" + +#: src/parse_args.c:831 msgid "create SELinux security context with specified role" msgstr "使用指定的角色建立 SELinux 安全上下文" -#: src/parse_args.c:806 +#: src/parse_args.c:834 msgid "read password from standard input" msgstr "自標準輸入讀取密碼" -#: src/parse_args.c:808 +#: src/parse_args.c:836 msgid "run shell as the target user; a command may also be specified" msgstr "以目標使用者的身份執行 shell;一個指令亦可同時被指定" -#: src/parse_args.c:811 +#: src/parse_args.c:839 msgid "create SELinux security context with specified type" msgstr "使用指定的類型建立 SELinux 安全上下文" -#: src/parse_args.c:814 +#: src/parse_args.c:842 msgid "terminate command after the specified time limit" msgstr "在指定的時間限制過後中止指令" -#: src/parse_args.c:816 +#: src/parse_args.c:844 msgid "in list mode, display privileges for user" msgstr "在清單模式中顯示使用者的權限" -#: src/parse_args.c:818 +#: src/parse_args.c:846 msgid "run command (or edit file) as specified user name or ID" msgstr "以指定的使用者名稱或 ID 來執行指令(或編輯檔案)" -#: src/parse_args.c:820 +#: src/parse_args.c:848 msgid "display version information and exit" msgstr "顯示版本資訊並離開" -#: src/parse_args.c:822 +#: src/parse_args.c:850 msgid "update user's timestamp without running a command" msgstr "更新使用者時間戳記而不執行指令" -#: src/parse_args.c:824 +#: src/parse_args.c:852 msgid "stop processing command line arguments" msgstr "停止處理指令列引數" @@ -682,16 +699,16 @@ msgstr "無法設定執行上下文為 %s" msgid "unable to set key creation context to %s" msgstr "無法設定金鑰建立上下文為 %s" -#: src/sesh.c:78 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "至少需要至少一個指令列引數" -#: src/sesh.c:107 +#: src/sesh.c:106 #, c-format msgid "invalid file descriptor number: %s" msgstr "無效的檔案描述元:%s" -#: src/sesh.c:121 +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "無法以登入 shell 執行 %s" @@ -744,124 +761,124 @@ msgstr "對專案「%s」進行專案設定程序 (setproject) 失敗" msgid "warning, resource control assignment failed for project \"%s\"" msgstr "警告:對專案「%s」執行資源控制指派失敗" -#: src/sudo.c:219 +#: src/sudo.c:220 #, c-format msgid "Sudo version %s\n" msgstr "Sudo 版本 %s\n" -#: src/sudo.c:221 +#: src/sudo.c:222 #, c-format msgid "Configure options: %s\n" msgstr "設定選項:%s\n" -#: src/sudo.c:230 +#: src/sudo.c:231 msgid "fatal error, unable to load plugins" msgstr "致命錯誤:無法載入外掛程式" -#: src/sudo.c:275 +#: src/sudo.c:277 msgid "plugin did not return a command to execute" msgstr "外掛程式沒有回傳要執行的指令" -#: src/sudo.c:310 +#: src/sudo.c:312 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "未預期的 0x%x sudo 模式" -#: src/sudo.c:543 +#: src/sudo.c:546 #, c-format msgid "you do not exist in the %s database" msgstr "您不在 %s 資料庫中" -#: src/sudo.c:600 +#: src/sudo.c:603 msgid "unable to determine tty" msgstr "無法判斷終端機" -#: src/sudo.c:905 +#: src/sudo.c:913 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s 必須由使用者 ID 為 %d 的使用者所擁有,且必須設定 setuid 位元" -#: src/sudo.c:908 +#: src/sudo.c:916 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "有效的使用者 ID 不是 %d,請問「%s」是存在於設定「nosuid」掛載選項的檔案系統中,還是存在於沒有 root 權限的 NFS 檔案系統?" -#: src/sudo.c:914 +#: src/sudo.c:922 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" -msgstr "有效的使用者 ID 不是 %d,請檢查 sudo 是否安裝了 setuid root。" +msgstr "有效的使用者 ID 不是 %d,sudo 是否已經安裝 setuid root?" -#: src/sudo.c:930 +#: src/sudo.c:938 msgid "unable to set supplementary group IDs" msgstr "無法設定增補群組 ID" -#: src/sudo.c:937 +#: src/sudo.c:945 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "無法將有效群組 ID 設定為 runas 群組 ID %u" -#: src/sudo.c:943 +#: src/sudo.c:951 #, c-format msgid "unable to set gid to runas gid %u" msgstr "無法將群組 ID 設定為 runas 群組 ID %u" -#: src/sudo.c:986 +#: src/sudo.c:994 #, c-format msgid "unexpected child termination condition: %d" msgstr "未預期之子行程中止狀況:%d" -#: src/sudo.c:1095 +#: src/sudo.c:1103 msgid "unable to initialize policy plugin" msgstr "無法初始化 Sudo 政策外掛程式" -#: src/sudo.c:1158 +#: src/sudo.c:1166 #, c-format msgid "policy plugin %s is missing the \"check_policy\" method" msgstr "%s 政策外掛程式缺少 \"check_policy\" 方法" -#: src/sudo.c:1173 src/sudo.c:1226 src/sudo.c:1270 +#: src/sudo.c:1181 src/sudo.c:1234 src/sudo.c:1278 msgid "command rejected by policy" msgstr "命令被策略拒絕" -#: src/sudo.c:1178 src/sudo.c:1231 src/sudo.c:1275 +#: src/sudo.c:1186 src/sudo.c:1239 src/sudo.c:1283 msgid "policy plugin error" msgstr "策略外掛程式發生錯誤" -#: src/sudo.c:1212 +#: src/sudo.c:1220 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "%s 政策外掛程式不支援權限" -#: src/sudo.c:1256 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "%s 政策外掛程式不支援 -v 指令列選項" -#: src/sudo.c:1294 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "%s 政策外掛程式不支援 -k/-K 指令列選項" -#: src/sudo.c:1423 +#: src/sudo.c:1431 #, c-format msgid "error initializing I/O plugin %s" msgstr "初始化「%s」I/O 外掛程式時發生錯誤" -#: src/sudo.c:1577 +#: src/sudo.c:1585 #, c-format msgid "error initializing audit plugin %s" msgstr "初始化稽核外掛程式 %s 時發生錯誤" -#: src/sudo.c:1755 +#: src/sudo.c:1763 #, c-format msgid "error initializing approval plugin %s" msgstr "初始化核准外掛程式 %s 時發生錯誤" -#: src/sudo.c:1831 +#: src/sudo.c:1839 msgid "command rejected by approver" msgstr "命令被核准人拒絕" -#: src/sudo.c:1840 +#: src/sudo.c:1848 msgid "approval plugin error" msgstr "核准外掛程式發生錯誤" @@ -898,7 +915,7 @@ msgstr "%s 保持未變更狀態" msgid "%s unchanged" msgstr "%s 未變更" -#: src/sudo_edit.c:706 src/sudo_edit.c:907 +#: src/sudo_edit.c:706 src/sudo_edit.c:909 #, c-format msgid "contents of edit session left in %s" msgstr "編輯階段的內容被留在 %s" @@ -911,33 +928,33 @@ msgstr "sesh:內部錯誤:只有奇數個路徑" msgid "sesh: unable to create temporary files" msgstr "sesh:無法建立暫存檔案" -#: src/sudo_edit.c:818 src/sudo_edit.c:900 +#: src/sudo_edit.c:818 src/sudo_edit.c:902 msgid "sesh: killed by a signal" msgstr "sesh:被信號中止" -#: src/sudo_edit.c:820 src/sudo_edit.c:903 +#: src/sudo_edit.c:820 src/sudo_edit.c:905 #, c-format msgid "sesh: unknown error %d" msgstr "sesh:未知錯誤代碼 %d" -#: src/sudo_edit.c:894 +#: src/sudo_edit.c:895 msgid "unable to copy temporary files back to their original location" msgstr "無法將暫存檔複製回暫存檔的原始位置" -#: src/sudo_edit.c:897 +#: src/sudo_edit.c:899 msgid "unable to copy some of the temporary files back to their original location" msgstr "無法將部份的暫存檔複製回其原始位置" -#: src/sudo_edit.c:941 +#: src/sudo_edit.c:943 #, c-format msgid "unable to change uid to root (%u)" msgstr "無法將使用者 ID 變更為 root (%u)" -#: src/sudo_edit.c:958 +#: src/sudo_edit.c:960 msgid "plugin error: missing file list for sudoedit" msgstr "外掛程式錯誤:缺少可用於 sudoedit 的檔案清單" -#: src/sudo_edit.c:1009 src/sudo_edit.c:1022 +#: src/sudo_edit.c:1011 src/sudo_edit.c:1024 msgid "unable to read the clock" msgstr "無法讀取時間" @@ -953,25 +970,25 @@ msgstr "未提供密碼" msgid "unable to read password" msgstr "無法讀取密碼" -#: src/tgetpass.c:140 +#: src/tgetpass.c:141 msgid "a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper" msgstr "需要終端器才能讀取密碼;可以使用 -S 選項,從標準輸入讀取,或是設定 askpass 協助工具" -#: src/tgetpass.c:150 +#: src/tgetpass.c:152 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "沒有指定 askpass 程式,將嘗試設定 SUDO_ASKPASS 環境變數" -#: src/tgetpass.c:325 +#: src/tgetpass.c:327 #, c-format msgid "unable to set gid to %u" msgstr "無法將群組 ID 設定為 %u" -#: src/tgetpass.c:329 +#: src/tgetpass.c:331 #, c-format msgid "unable to set uid to %u" msgstr "無法將使用者 ID 設定為 %u" -#: src/tgetpass.c:334 +#: src/tgetpass.c:336 #, c-format msgid "unable to run %s" msgstr "無法執行 %s" From a0013032851edf5e311793e3ad29e2e51324dbd0 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Wed, 16 Sep 2020 19:13:17 -0600 Subject: [PATCH 107/113] Updated translations from translationproject.org --- po/zh_CN.mo | Bin 18575 -> 18947 bytes po/zh_CN.po | 257 ++++++++++++++++++++++++++++------------------------ 2 files changed, 137 insertions(+), 120 deletions(-) diff --git a/po/zh_CN.mo b/po/zh_CN.mo index f71ba3e3a061ad9a98e0450d8ba23ccab932077d..ddf19f1e14a7d54cb70b619aae29d2fe5f9d185a 100644 GIT binary patch delta 4718 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